summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2015-10-14 22:32:58 +0000
committerKarl Berry <karl@freefriends.org>2015-10-14 22:32:58 +0000
commit0346eca0b9378bffafb6b32579dd4542b71b57f5 (patch)
treef9a5b79922bd74de6945c98e47f9b1d3009da982
parent6028cf981b015fefcf1205f6cba193542627ddbf (diff)
l3 (14oct15)
git-svn-id: svn://tug.org/texlive/trunk@38642 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r--Master/texmf-dist/doc/latex/l3build/README.md2
-rw-r--r--Master/texmf-dist/doc/latex/l3build/l3build.pdfbin595583 -> 602851 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/README.md2
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3sort/l3sort.pdfbin377497 -> 377002 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3flag.pdfbin320319 -> 319824 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3regex.pdfbin456250 -> 455760 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdfbin448521 -> 448528 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdfbin380165 -> 380172 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-analysis.pdfbin352803 -> 352811 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-build.pdfbin385138 -> 384850 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdfbin395295 -> 395302 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdfbin397522 -> 397030 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdfbin291807 -> 291817 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/README.md2
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/expl3.pdfbin586689 -> 586212 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/interface3.pdfbin1496740 -> 1500889 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdfbin268234 -> 268241 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdfbin276800 -> 276808 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdfbin220220 -> 220227 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/source3.pdfbin4674312 -> 4674495 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3packages/README.md2
-rw-r--r--Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdfbin333870 -> 333344 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdfbin478402 -> 478208 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdfbin459801 -> 459315 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdfbin422874 -> 422389 bytes
-rw-r--r--Master/texmf-dist/source/latex/l3build/l3build.dtx72
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3str/l3flag.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/expl3.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx3
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx179
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3msg.dtx39
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3names.dtx42
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3prg.dtx111
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3tl.dtx28
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3token.dtx327
-rw-r--r--Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx10
-rw-r--r--Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx23
-rw-r--r--Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx10
-rw-r--r--Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx10
-rw-r--r--Master/texmf-dist/tex/latex/l3build/l3build.lua166
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3sort/l3sort.sty6
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3str/l3flag.sty6
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex-trace.sty6
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex.sty6
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3str/l3tl-build.sty6
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty6
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex329
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex4
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3.sty4
-rw-r--r--Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty10
-rw-r--r--Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty21
-rw-r--r--Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty10
-rw-r--r--Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty10
57 files changed, 857 insertions, 629 deletions
diff --git a/Master/texmf-dist/doc/latex/l3build/README.md b/Master/texmf-dist/doc/latex/l3build/README.md
index e2498b4921c..333e9c814ca 100644
--- a/Master/texmf-dist/doc/latex/l3build/README.md
+++ b/Master/texmf-dist/doc/latex/l3build/README.md
@@ -1,7 +1,7 @@
l3build: a testing and building system for LaTeX3
=================================================
-Release 2015/09/27 (r6111)
+Release 2015/10/14 (r6210)
Overview
--------
diff --git a/Master/texmf-dist/doc/latex/l3build/l3build.pdf b/Master/texmf-dist/doc/latex/l3build/l3build.pdf
index dd35d3d4dfc..797d2f5cdf8 100644
--- a/Master/texmf-dist/doc/latex/l3build/l3build.pdf
+++ b/Master/texmf-dist/doc/latex/l3build/l3build.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/README.md b/Master/texmf-dist/doc/latex/l3experimental/README.md
index 9b6941d761c..b37a9bd9e74 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/README.md
+++ b/Master/texmf-dist/doc/latex/l3experimental/README.md
@@ -1,7 +1,7 @@
Experimental LaTeX3 Concepts
============================
-Release 2015/09/27 (r6111)
+Release 2015/10/14 (r6210)
Overview
--------
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3sort/l3sort.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3sort/l3sort.pdf
index 31930b4ae12..907ec214e54 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/l3sort/l3sort.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/l3sort/l3sort.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3flag.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3flag.pdf
index b0079115df5..d34c5bd67d2 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3flag.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3flag.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3regex.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3regex.pdf
index 11e1d5ac2f9..aec8bbce79a 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3regex.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3regex.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf
index b486865c597..42aab8d0be7 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf
index 7fc1d9072ff..c3a878bbc85 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-analysis.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-analysis.pdf
index 12be17e905e..d84e0aea396 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-analysis.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-analysis.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-build.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-build.pdf
index 1d088cc0a77..dbbc87e41a4 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-build.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-build.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf b/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf
index 7b3ee0d55de..3e46af736f0 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf b/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf
index 46d7ca254a4..b0780904d68 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf b/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf
index ccad0b3bb5e..ec887a1de43 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/README.md b/Master/texmf-dist/doc/latex/l3kernel/README.md
index 171f9fc2733..5247e20adfd 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 2015/09/27 (r6111)
+Release 2015/10/14 (r6210)
Overview
--------
diff --git a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
index 441a55d24f0..78912dda8da 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 35d9ad58135..f4264231be7 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/l3docstrip.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
index 3775ae12357..f386c4c5516 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 ac1cb97920a..303119ff6dd 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/l3syntax-changes.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
index 234aded2a39..8ba3fe20514 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/source3.pdf b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
index f3e955613e1..88184d02e87 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/l3packages/README.md b/Master/texmf-dist/doc/latex/l3packages/README.md
index 3d20865dbb2..313b5b3a9bd 100644
--- a/Master/texmf-dist/doc/latex/l3packages/README.md
+++ b/Master/texmf-dist/doc/latex/l3packages/README.md
@@ -1,7 +1,7 @@
LaTeX3 High-Level Concepts
==========================
-Release 2015/09/27 (r6111)
+Release 2015/10/14 (r6210)
Overview
--------
diff --git a/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf b/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf
index 5fbaf3c6a55..175c06afec0 100644
--- a/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf
+++ b/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf b/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf
index e33e26e00c8..8f3ef609ef4 100644
--- a/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf
+++ b/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf b/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf
index 1e7301c134f..9a691203bcf 100644
--- a/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf
+++ b/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf b/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf
index f3461b730a6..a55faf9c102 100644
--- a/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf
+++ b/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf
Binary files differ
diff --git a/Master/texmf-dist/source/latex/l3build/l3build.dtx b/Master/texmf-dist/source/latex/l3build/l3build.dtx
index a91a228d8f0..e05215fd42f 100644
--- a/Master/texmf-dist/source/latex/l3build/l3build.dtx
+++ b/Master/texmf-dist/source/latex/l3build/l3build.dtx
@@ -39,8 +39,8 @@
\RequirePackage{expl3}
\def\ExplFileName{l3build}
\def\ExplFileDescription{L3 Regression test suite}
-\def\ExplFileDate{2015/09/24}
-\def\ExplFileVersion{6172}
+\def\ExplFileDate{2015/10/14}
+\def\ExplFileVersion{6210}
\documentclass[full]{l3doc}
\renewcommand\partname{Part}
\usepackage{multicol,needspace}
@@ -111,7 +111,9 @@
\luavarset{typesetsuppfiles}{\{~\}} {Files needed to support typesetting when \enquote{sandboxed}.}
\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{lvtext} {".lvt"} {Extension of test files.}
\luavarset{tlgext} {".tlg"} {Extension of test file output.}
\luavarset{lvtext} {".lve"} {Extension of auto-generating test file output.}
@@ -155,6 +157,7 @@
\luavarset{packtdszip} {false} {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{versionform} {""} {Nature of version strings for auto-replacement.}
}
\allluavars
\newcommand\luavartypeset{%
@@ -457,6 +460,16 @@
% A normalisation process is performed when checking to avoid common differences such as register allocation; full details are listed in section~\ref{sec:norm}.
% \end{buildcmd}
%
+% \begin{buildcmd}{setversion}
+% Modifies the content of files specified by |versionfiles| to allow
+% automatic updating of the file date and version. The latter are
+% specified using the |-d| and |-v| command line options and if not
+% given will default to the current date in ISO format (YYYY-MM-DD) and |-1|,
+% respectively. As detailed below, the standard set up has no search pattern
+% defined for this target and so no action will be taken \emph{unless}
+% a version type for substitution is set up (using \var{versionform} or
+% by defining a custom function).
+% \end{buildcmd}
%
% \begin{buildcmd}{unpack}
% This is an internal target that is normally not needed on user level.
@@ -921,6 +934,61 @@
% \label{fig:expect-ins}
% \end{figure}
%
+% \section{Release-focussed features}
+%
+% \subsection{Automatic version modification}
+%
+% As detailed above, the |setversion| target will automatically edit
+% source files to modify date and version. This behaviour is governed by
+% variable \luavar{versionform}. As standard, no automatic replacement
+% takes place, but setting \luavar{versionform} will allow this to happen,
+% with options
+% \begin{itemize}
+% \item |ProvidesPackage| Searches for lines using the \LaTeXe{}
+% \cs{ProvidesPackage}, \cs{ProvidesClass} and \cs{ProvidesFile}
+% identifiers (as a whole line).
+% \item |ProvidesExplPackage| Searches for lines using the \pkg{expl3}
+% \cs{ProvidesExplPackage}, \cs{ProvidesExplClass} and
+% \cs{ProvidesExplFile} identifiers (at the start of a line).
+% \item |filename| Searches for lines using |\def\filename|,
+% |\def\filedate|, \dots, formulation.
+% \item |ExplFileName| Searches for lines using |\def\ExplFileName|,
+% |\def\ExplFileDate|, \dots, formulation.
+% \end{itemize}
+%
+% For more complex cases, the programmer may directly define the
+% Lua function |setversion_update_line()|, which takes as arguments the line of the
+% source, the supplied date and the supplied version. It should return a
+% (possibly unmodified) line and may use one, both or neither of the
+% date and version to update the line. Typically, |setversion_update_line| should
+% match to the exact pattern used by the programmer in the source files.
+% For example, for code using macros for the date and version
+% a suitable function might read as shown in Figure~\ref{fig:update-line}.
+% \begin{figure}
+% \begin{lstlisting}[frame=single,language={[5.2]Lua},gobble = 6]
+% function setversion_update_line(line, date, version)
+% local i
+% -- No real regex so do it one type at a time
+% for _,i in pairs({"Class", "File", "Package"}) do
+% if string.match(
+% line,
+% "^\\Provides" .. i .. "{[a-zA-Z0-9%-]+}%[[^%]]*%]$"
+% ) then
+% line = string.gsub(line, "%[%d%d%d%d/%d%d/%d%d", "["
+% .. string.gsub(date, "%-", "/")
+% line = string.gsub(
+% line, "(%[%d%d%d%d/%d%d/%d%d) [^ ]*", "%1 " .. version
+% )
+% break
+% end
+% end
+% return line
+% end
+% \end{lstlisting}
+% \caption{Example \texttt{setversion_update_line} function.}
+% \label{fig:update-line}
+% \end{figure}
+%
% \subsection{Typesetting documentation}
%
% As part of the overall build process, \pkg{l3build} will create PDF
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx b/Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx
index 6710796c1ec..b44b9ed7d2a 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx
@@ -37,8 +37,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}[2015/09/27]
-%<package>\@ifpackagelater{expl3}{2015/09/27}
+\RequirePackage{expl3}[2015/10/14]
+%<package>\@ifpackagelater{expl3}{2015/10/14}
%<package> {}
%<package> {%
%<package> \PackageError{l3sort}{Support package l3kernel too old}
@@ -50,7 +50,7 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: l3sort.dtx 6111 2015-09-27 16:06:17Z joseph $
+\GetIdInfo$Id: l3sort.dtx 6210 2015-10-14 07:22:42Z joseph $
{L3 Experimental sorting functions}
%</driver|package>
%<*driver>
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3flag.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3flag.dtx
index 448c71792ef..2d1758df661 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3flag.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3flag.dtx
@@ -36,8 +36,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}[2015/09/27]
-%<package>\@ifpackagelater{expl3}{2015/09/27}
+\RequirePackage{expl3}[2015/10/14]
+%<package>\@ifpackagelater{expl3}{2015/10/14}
%<package> {}
%<package> {%
%<package> \PackageError{l3flag}{Support package l3kernel too old}
@@ -49,7 +49,7 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: l3flag.dtx 6111 2015-09-27 16:06:17Z joseph $
+\GetIdInfo$Id: l3flag.dtx 6210 2015-10-14 07:22:42Z joseph $
{L3 Experimental flags}
%</driver|package>
%<*driver>
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx
index bc192a5e21a..a80c510a834 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx
@@ -36,8 +36,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}[2015/09/27]
-%<package>\@ifpackagelater{expl3}{2015/09/27}
+\RequirePackage{expl3}[2015/10/14]
+%<package>\@ifpackagelater{expl3}{2015/10/14}
%<package> {}
%<package> {%
%<package> \PackageError{l3regex}{Support package l3kernel too old}
@@ -49,7 +49,7 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: l3regex.dtx 6111 2015-09-27 16:06:17Z joseph $
+\GetIdInfo$Id: l3regex.dtx 6210 2015-10-14 07:22:42Z joseph $
{L3 Experimental regular expressions}
%</driver|package>
%<*driver>
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx
index 0ef1f967d53..99a47783a06 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx
@@ -36,8 +36,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}[2015/07/28]
-%<package>\@ifpackagelater{expl3}{2015/07/28}
+\RequirePackage{expl3}[2015/10/14]
+%<package>\@ifpackagelater{expl3}{2015/10/14}
%<package> {}
%<package> {%
%<package> \PackageError{l3tl-build}{Support package l3kernel too old}
@@ -49,7 +49,7 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: l3tl-build.dtx 5700 2015-07-28 19:26:39Z joseph $
+\GetIdInfo$Id: l3tl-build.dtx 6210 2015-10-14 07:22:42Z joseph $
{L3 Experimental token list construction}
%</driver|package>
%<*driver>
diff --git a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx
index 8f8ee755232..7109c715ad8 100644
--- a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx
@@ -38,8 +38,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}[2015/09/27]
-%<package>\@ifpackagelater{expl3}{2015/09/27}
+\RequirePackage{expl3}[2015/10/14]
+%<package>\@ifpackagelater{expl3}{2015/10/14}
%<package> {}
%<package> {%
%<package> \PackageError{l3galley}{Support package l3kernel too old}
@@ -51,7 +51,7 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: l3galley.dtx 6111 2015-09-27 16:06:17Z joseph $
+\GetIdInfo$Id: l3galley.dtx 6210 2015-10-14 07:22:42Z joseph $
{L3 Experimental galley code}
%</driver|package>
%<*driver>
diff --git a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
index 753aeb0ec53..42ff1e3e4f4 100644
--- a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
@@ -36,8 +36,8 @@
%<*driver|generic|package>
\def\ExplFileName{expl3}
\def\ExplFileDescription{L3 programming layer}
-\def\ExplFileDate{2015/09/27}
-\def\ExplFileVersion{6111}
+\def\ExplFileDate{2015/10/14}
+\def\ExplFileVersion{6210}
%</driver|generic|package>
%<*driver>
\documentclass[full]{l3doc}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
index 29d0a01caa8..69556596190 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
@@ -145,7 +145,7 @@
% \end{macro}
% \end{macro}
% \end{macro}
-\GetIdInfo$Id: l3bootstrap.dtx 5983 2015-09-10 18:57:56Z joseph $
+\GetIdInfo$Id: l3bootstrap.dtx 6139 2015-09-30 14:02:38Z bruno $
{L3 Bootstrap code}
%</driver|package>
%<*driver>
@@ -609,6 +609,7 @@
\catcode 9 = 9\relax
\catcode 32 = 9\relax
\catcode 34 = 12\relax
+\catcode 38 = 4\relax
\catcode 58 = 11\relax
\catcode 94 = 7\relax
\catcode 95 = 11\relax
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
index 6c65d33db05..d9a3202c949 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
@@ -38,7 +38,7 @@
\documentclass[full]{l3doc}
%</driver>
%<*driver|package>
-\GetIdInfo$Id: l3candidates.dtx 6039 2015-09-23 12:41:26Z joseph $
+\GetIdInfo$Id: l3candidates.dtx 6208 2015-10-09 20:01:54Z joseph $
{L3 Experimental additions to l3kernel}
%</driver|package>
%<*driver>
@@ -576,6 +576,98 @@
%
% \section{Additions to \pkg{l3prg}}
%
+% Minimal (lazy) evaluation can be obtained using the functions
+% \cs{bool_all_p:n}, \cs{bool_and_p:nn}, \cs{bool_any_p:n}, or
+% \cs{bool_or_p:nn}, which only evaluate their boolean expression
+% arguments when they are needed to determine the resulting truth
+% value. For example, when evaluating the boolean expression
+% \begin{verbatim}
+% \bool_and_p:nn
+% {
+% \bool_any_p:n
+% {
+% { \int_compare_p:n { 2 = 3 } }
+% { \int_compare_p:n { 4 <= 4 } }
+% { \int_compare_p:n { 1 = \error } } % is skipped
+% }
+% }
+% { ! \int_compare_p:n { 2 = 4 } }
+% \end{verbatim}
+% the line marked with |is skipped| is not expanded because the result
+% of \cs{bool_any_p:n} is known once the second boolean expression is
+% found to be logically \texttt{true}. On the other hand, the last
+% line is expanded because its logical value is needed to determine the
+% result of \cs{bool_and_p:nn}.
+%
+% \begin{function}[EXP, added = 2015-09-28]{\bool_all_p:n}
+% \begin{syntax}
+% \cs{bool_all_p:n} \{ \Arg{boolexpr_1} \Arg{boolexpr_2} $\cdots$ \Arg{boolexpr_N} \}
+% \end{syntax}
+% Implements the \enquote{And} operation on the \meta{boolean
+% expressions}, hence is \texttt{true} if all of them are
+% \texttt{true} and \texttt{false} if any of them is \texttt{false}.
+% Contrarily to the infix operator |&&|, only the \meta{boolean
+% expressions} which are needed to determine the result of
+% \cs{bool_all_p:n} will be evaluated. See also \cs{bool_and_p:nn}
+% when there are only two \meta{boolean expressions}.
+% \end{function}
+%
+% \begin{function}[EXP, added = 2015-09-28]{\bool_and_p:nn}
+% \begin{syntax}
+% \cs{bool_and_p:nn} \Arg{boolexpr_1} \Arg{boolexpr_2}
+% \end{syntax}
+% Implements the \enquote{And} operation between two boolean
+% expressions, hence is \texttt{true} if both are \texttt{true}.
+% Contrarily to the infix operator |&&|, the \meta{boolexpr_2} will
+% only be evaluated if it is needed to determine the result of
+% \cs{bool_and_p:nn}. See also \cs{bool_all_p:n} when there are more
+% than two \meta{boolean expressions}.
+% \end{function}
+%
+% \begin{function}[EXP, added = 2015-09-28]{\bool_any_p:n}
+% \begin{syntax}
+% \cs{bool_any_p:n} \{ \Arg{boolexpr_1} \Arg{boolexpr_2} $\cdots$ \Arg{boolexpr_N} \}
+% \end{syntax}
+% Implements the \enquote{Or} operation on the \meta{boolean
+% expressions}, hence is \texttt{true} if any of them is
+% \texttt{true} and \texttt{false} if all of them are \texttt{false}.
+% Contrarily to the infix operator \verb"||", only the \meta{boolean
+% expressions} which are needed to determine the result of
+% \cs{bool_any_p:n} will be evaluated. See also \cs{bool_or_p:nn}
+% when there are only two \meta{boolean expressions}.
+% \end{function}
+%
+% \begin{function}[EXP, updated = 2012-07-08]{\bool_not_p:n}
+% \begin{syntax}
+% \cs{bool_not_p:n} \Arg{boolean expression}
+% \end{syntax}
+% Function version of |!(|\meta{boolean expression}|)| within a boolean
+% expression.
+% \end{function}
+%
+% \begin{function}[EXP, added = 2015-09-28]{\bool_or_p:nn}
+% \begin{syntax}
+% \cs{bool_or_p:nn} \Arg{boolexpr_1} \Arg{boolexpr_2}
+% \end{syntax}
+% Implements the \enquote{Or} operation between two boolean
+% expressions, hence is \texttt{true} if either one is \texttt{true}.
+% Contrarily to the infix operator \verb"||", the \meta{boolexpr_2}
+% will only be evaluated if it is needed to determine the result of
+% \cs{bool_or_p:nn}. See also \cs{bool_any_p:n} when there are more
+% than two \meta{boolean expressions}.
+% \end{function}
+%
+% \begin{function}[EXP, updated = 2012-07-08]{\bool_xor_p:nn}
+% \begin{syntax}
+% \cs{bool_xor_p:nn} \Arg{boolexpr_1} \Arg{boolexpr_2}
+% \end{syntax}
+% Implements an \enquote{exclusive or} operation between two boolean
+% expressions. There is no infix operation for this logical
+% operator.
+% \end{function}
+%
+
+%
% \begin{function}[added = 2014-08-22, updated = 2015-08-03]{\bool_log:N, \bool_log:c}
% \begin{syntax}
% \cs{bool_log:N} \meta{boolean}
@@ -1057,7 +1149,7 @@
% \end{itemize}
% and other values will raise an error.
%
-% The \meta{catcode} may be any one valid for the engine in use. Note
+% The \meta{charcode} may be any one valid for the engine in use. Note
% however that for \XeTeX{} releases prior to 0.99992 only the 8-bit
% range ($0$ to $255$) is accepted due to engine limitations.
% \end{function}
@@ -2484,6 +2576,86 @@
%<@@=bool>
% \end{macrocode}
%
+% \begin{macro}{\bool_all_p:n}
+% \begin{macro}[aux]{\@@_all_aux:n}
+% Go through the list of expressions, stopping whenever an expression
+% is \texttt{false}. If the end is reached without finding any
+% \texttt{false} expression, then the result is \texttt{true}.
+% \begin{macrocode}
+\cs_new:Npn \bool_all_p:n #1
+ { \@@_all_aux:n #1 \q_recursion_tail \q_recursion_stop }
+\cs_new:Npn \@@_all_aux:n #1
+ {
+ \quark_if_recursion_tail_stop_do:nn {#1} { \c_true_bool }
+ \bool_if:nF {#1}
+ { \use_i_delimit_by_q_recursion_stop:nw { \c_false_bool } }
+ \@@_all_aux:n
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bool_and_p:nn}
+% Only evaluate the second expression if the first is \texttt{true}.
+% \begin{macrocode}
+\cs_new:Npn \bool_and_p:nn #1#2
+ { \bool_if:nTF {#1} { \bool_if_p:n {#2} } { \c_false_bool } }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bool_any_p:n}
+% \begin{macro}[aux]{\@@_any_aux:n}
+% Go through the list of expressions, stopping whenever an expression
+% is \texttt{true}. If the end is reached without finding any
+% \texttt{true} expression, then the result is \texttt{false}.
+% \begin{macrocode}
+\cs_new:Npn \bool_any_p:n #1
+ { \@@_any_aux:n #1 \q_recursion_tail \q_recursion_stop }
+\cs_new:Npn \@@_any_aux:n #1
+ {
+ \quark_if_recursion_tail_stop_do:nn {#1} { \c_false_bool }
+ \bool_if:nT {#1}
+ { \use_i_delimit_by_q_recursion_stop:nw { \c_true_bool } }
+ \@@_any_aux:n
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bool_not_p:n}
+% \UnitTested
+% The Not variant just reverses the outcome of \cs{bool_if_p:n}. Can
+% be optimized but this is nice and simple and according to the
+% implementation plan. Not even particularly useful to have it when
+% the infix notation is easier to use.
+% \begin{macrocode}
+\cs_new:Npn \bool_not_p:n #1 { \bool_if_p:n { ! ( #1 ) } }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bool_or_p:nn}
+% Only evaluate the second expression if the first is \texttt{false}.
+% \begin{macrocode}
+\cs_new:Npn \bool_or_p:nn #1#2
+ { \bool_if:nTF {#1} { \c_true_bool } { \bool_if_p:n {#2} } }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\bool_xor_p:nn}
+% \UnitTested
+% Exclusive or. If the boolean expressions have same truth value,
+% return false, otherwise return true.
+% \begin{macrocode}
+\cs_new:Npn \bool_xor_p:nn #1#2
+ {
+ \int_compare:nNnTF { \bool_if_p:n {#1} } = { \bool_if_p:n {#2} }
+ \c_false_bool
+ \c_true_bool
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
% \begin{macro}{\bool_log:N, \bool_log:c, \bool_log:n}
% Redirect output of \cs{bool_show:N} to the log.
% \begin{macrocode}
@@ -4418,7 +4590,8 @@
\char_set_lccode:nn { 32 } {#1}
\exp_args:Nx \tex_lowercase:D
{
- \tl_const:cn { c_@@_ \__int_to_roman:w #1 _tl }
+ \tl_const:Nn
+ \exp_not:c { c_@@_ \__int_to_roman:w #1 _tl }
{ \exp_not:o \l_@@_tmp_tl }
}
}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
index 7ff417961b5..c4cce9a58aa 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
@@ -37,7 +37,7 @@
\documentclass[full]{l3doc}
%</driver>
%<*driver|package>
-\GetIdInfo$Id: l3msg.dtx 6037 2015-09-23 12:41:15Z joseph $
+\GetIdInfo$Id: l3msg.dtx 6113 2015-09-28 21:30:11Z bruno $
{L3 Messages}
%</driver|package>
%<*driver>
@@ -2005,31 +2005,30 @@
% (with category code $7$) and keep tokens until that space character,
% dropping everything else until \cs{q_stop}. The \cs{exp_end:} prevents
% losing braces around the user-inserted text if any, and stops the
-% expansion of \cs{exp:w}.
+% expansion of \cs{exp:w}. One group is used to keep the settings
+% for \tn{lowercase} local and the other one is used to prevent
+% |\LaTeX3~error:| from being equal to \cs{scan_stop:}.
% \begin{macrocode}
\group_begin:
-\char_set_catcode_math_superscript:N \^
-\char_set_lccode:nn { `^ } { `\ }
-\char_set_lccode:nn { `L } { `L }
-\char_set_lccode:nn { `T } { `T }
-\char_set_lccode:nn { `X } { `X }
-\tex_lowercase:D
+\cs_set_protected:Npn \@@_tmp:w #1#2
{
- \cs_new:Npx \@@_expandable_error:n #1
+ \group_end:
+ \cs_new:Npn \@@_expandable_error:n ##1
{
- \exp_not:n
- {
- \exp:w
- \exp_after:wN \exp_after:wN
- \exp_after:wN \@@_expandable_error:w
- \exp_after:wN \exp_after:wN
- \exp_after:wN \exp_end:
- }
- \exp_not:N \use:n { \exp_not:c { LaTeX3~error: } ^ #1 } ^
+ \exp:w
+ \exp_after:wN \exp_after:wN
+ \exp_after:wN \@@_expandable_error:w
+ \exp_after:wN \exp_after:wN
+ \exp_after:wN \exp_end:
+ \use:n { #2 #1 ##1 } #1
}
- \cs_new:Npn \@@_expandable_error:w #1 ^ #2 ^ { #1 }
+ \cs_new:Npn \@@_expandable_error:w ##1 #1 ##2 #1 {##1}
}
-\group_end:
+\group_begin:
+\char_set_catcode_math_superscript:N \^
+\char_set_lccode:nn { `^ } { `\ }
+\tex_lowercase:D
+ { \group_end: \exp_args:NNc \@@_tmp:w ^ } { LaTeX3~error: }
% \end{macrocode}
% \end{macro}
% \end{macro}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
index 6b3dafbc2b3..f7d7ed4e2ee 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
@@ -37,7 +37,7 @@
\documentclass[full]{l3doc}
%</driver>
%<*driver|package>
-\GetIdInfo$Id: l3names.dtx 6108 2015-09-27 08:58:42Z joseph $
+\GetIdInfo$Id: l3names.dtx 6209 2015-10-10 19:51:42Z joseph $
{L3 Namespace for primitives}
%</driver|package>
%<*driver>
@@ -611,11 +611,9 @@
\__kernel_primitive:NN \pdfoutput \pdftex_pdfoutput:D
\__kernel_primitive:NN \pdfpageattr \pdftex_pdfpageattr:D
\__kernel_primitive:NN \pdfpagebox \pdftex_pdfpagebox:D
- \__kernel_primitive:NN \pdfpageheight \pdftex_pdfpageheight:D
\__kernel_primitive:NN \pdfpageref \pdftex_pdfpageref:D
\__kernel_primitive:NN \pdfpageresources \pdftex_pdfpageresources:D
\__kernel_primitive:NN \pdfpagesattr \pdftex_pdfpagesattr:D
- \__kernel_primitive:NN \pdfpagewidth \pdftex_pdfpagewidth:D
\__kernel_primitive:NN \pdfrefobj \pdftex_pdfrefobj:D
\__kernel_primitive:NN \pdfrefxform \pdftex_pdfrefxform:D
\__kernel_primitive:NN \pdfrefximage \pdftex_pdfrefximage:D
@@ -639,6 +637,8 @@
% \end{macrocode}
% While these are not.
% \begin{macrocode}
+ \__kernel_primitive:NN \ifpdfabsdim \pdftex_ifabsdim:D
+ \__kernel_primitive:NN \ifpdfabsnum \pdftex_ifabsnum:D
\__kernel_primitive:NN \ifpdfprimitive \pdftex_ifprimitive:D
\__kernel_primitive:NN \pdfadjustspacing \pdftex_adjustspacing:D
\__kernel_primitive:NN \pdfcopyfont \pdftex_copyfont:D
@@ -657,6 +657,8 @@
\__kernel_primitive:NN \pdfmapline \pdftex_mapline:D
\__kernel_primitive:NN \pdfnoligatures \pdftex_noligatures:D
\__kernel_primitive:NN \pdfnormaldeviate \pdftex_normaldeviate:D
+ \__kernel_primitive:NN \pdfpageheight \pdftex_pageheight:D
+ \__kernel_primitive:NN \pdfpagewidth \pdftex_pagewidth:D
\__kernel_primitive:NN \pdfpkmode \pdftex_pkmode:D
\__kernel_primitive:NN \pdfpkresolution \pdftex_pkresolution:D
\__kernel_primitive:NN \pdfprimitive \pdftex_primitive:D
@@ -753,9 +755,7 @@
% \end{macrocode}
% Primitives from \LuaTeX{}, some of which have been ported back to
% \XeTeX{}. Notice that \tn{expanded} was intended for \pdfTeX{}~1.50 but
-% as that was not released we call this a \LuaTeX{} primitive. Primitives
-% which are aliases are covered only once, so for example \tn{pdfpageheight}
-% covers \tn{pageheight} as well.
+% as that was not released we call this a \LuaTeX{} primitive.
% \begin{macrocode}
\__kernel_primitive:NN \alignmark \luatex_alignmark:D
\__kernel_primitive:NN \aligntab \luatex_aligntab:D
@@ -771,6 +771,7 @@
\__kernel_primitive:NN \expanded \luatex_expanded:D
\__kernel_primitive:NN \fontid \luatex_fontid:D
\__kernel_primitive:NN \formatname \luatex_formatname:D
+ \__kernel_primitive:NN \hyphenationmin \luatex_hypenationmin:D
\__kernel_primitive:NN \gleaders \luatex_gleaders:D
\__kernel_primitive:NN \initcatcodetable \luatex_initcatcodetable:D
\__kernel_primitive:NN \latelua \luatex_latelua:D
@@ -1037,7 +1038,7 @@
% (depending on the format-building date). There are a few primitives
% that get the right names anyway so are missing here!
% \begin{macrocode}
-\etex_ifdefined:D \luatexcatcodetable
+\etex_ifdefined:D \luatexsuppressfontnotfounderror
\tex_let:D \luatex_alignmark:D \luatexalignmark
\tex_let:D \luatex_aligntab:D \luatexaligntab
\tex_let:D \luatex_attribute:D \luatexattribute
@@ -1079,10 +1080,6 @@
% \begin{macrocode}
\tex_let:D \luatex_bodydir:D \luatexbodydir
\tex_let:D \luatex_boxdir:D \luatexboxdir
- \tex_let:D \luatex_chardp:D \luatexchardp
- \tex_let:D \luatex_charht:D \luatexcharht
- \tex_let:D \luatex_charit:D \luatexcharit
- \tex_let:D \luatex_charwd:D \luatexcharwd
\tex_let:D \luatex_leftghost:D \luatexleftghost
\tex_let:D \luatex_localbrokenpenalty:D \luatexlocalbrokenpenalty
\tex_let:D \luatex_localinterlinepenalty:D \luatexlocalinterlinepenalty
@@ -1139,12 +1136,27 @@
\tex_fi:D
% \end{macrocode}
% Up to v0.80, \LuaTeX{} defines the \pdfTeX{} version data: rather
-% confusing.
+% confusing. Removing them means that \cs{pdftex_pdftexversion:D} is
+% a marker for \pdfTeX{} alone: useful in engine-dependent code later.
% \begin{macrocode}
\etex_ifdefined:D \luatex_luatexversion:D
- \tex_let:D \pdftex_pdftexbanner:D \tex_undefined:D
- \tex_let:D \pdftex_pdftexbanner:D \tex_undefined:D
- \tex_let:D \pdftex_pdftexversion:D \tex_undefined:D
+ \tex_let:D \pdftex_pdftexbanner:D \tex_undefined:D
+ \tex_let:D \pdftex_pdftexrevision:D \tex_undefined:D
+ \tex_let:D \pdftex_pdftexversion:D \tex_undefined:D
+\tex_fi:D
+% \end{macrocode}
+% From v0.81, \LuaTeX{} drops the |pdf| prefix in some cases.
+% \begin{macrocode}
+\etex_ifdefined:D \lastxpos
+ \tex_let:D \pdftex_lastxpos:D \lastxpos
+ \tex_let:D \pdftex_lastypos:D \lastypos
+ \tex_let:D \pdftex_normaldeviate:D \normaldeviate
+ \tex_let:D \pdftex_pageheight:D \pageheight
+ \tex_let:D \pdftex_pagewith:D \pagewidth
+ \tex_let:D \pdftex_randomseed:D \randomseed
+ \tex_let:D \pdftex_setrandomseed:D \setrandomseed
+ \tex_let:D \pdftex_savepos:D \savepos
+ \tex_let:D \pdftex_uniformdeviate:D \uniformdeviate
\tex_fi:D
% \end{macrocode}
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
index 9acff26f534..1fc47d225b9 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
@@ -37,7 +37,7 @@
\documentclass[full]{l3doc}
%</driver>
%<*driver|package>
-\GetIdInfo$Id: l3prg.dtx 5983 2015-09-10 18:57:56Z joseph $
+\GetIdInfo$Id: l3prg.dtx 6208 2015-10-09 20:01:54Z joseph $
{L3 Control structures}
%</driver|package>
%<*driver>
@@ -72,9 +72,7 @@
% performs a series of tests, possibly involving assignments and
% calling other functions that do not read further ahead in the input
% stream. After processing the input, a \emph{state} is returned. The
-% typical states returned are \meta{true} and \meta{false} but other
-% states are possible, say an \meta{error} state for erroneous
-% input, \emph{e.g.}, text as input in a function comparing integers.
+% states returned are \meta{true} and \meta{false}.
%
% \LaTeX3 has two forms of conditional flow processing based
% on these states. The first form is predicate functions that turn the
@@ -87,8 +85,12 @@
% input stream based on the result of the testing as in
% \cs{cs_if_free:NTF} which also takes one argument (the |N|) and then
% executes either \texttt{true} or \texttt{false} depending on the
-% result. Important to note here is that the arguments are executed
-% after exiting the underlying |\if...\fi:| structure.
+% result.
+%
+% \begin{texnote}
+% The arguments are executed after exiting the underlying
+% |\if...\fi:| structure.
+% \end{texnote}
%
% \section{Defining a set of conditional functions}
% \label{sec:l3prg:new-conditional-functions}
@@ -140,7 +142,7 @@
% which will supply either a logical \texttt{true} or logical
% \texttt{false}. This function is intended for use in cases where
% one or more logical tests are combined to lead to a final outcome.
-% This function will not work properly for \texttt{protected}
+% This function cannot be defined for \texttt{protected}
% conditionals.
% \item \cs{\meta{name}:\meta{arg spec}T} --- a function with one more
% argument than the original \meta{arg spec} demands. The \meta{true
@@ -192,7 +194,7 @@
% \begin{syntax}
% \cs{prg_new_eq_conditional:NNn} \cs{\meta{name_1}:\meta{arg spec_1}} \cs{\meta{name_2}:\meta{arg spec_2}} \Arg{conditions}
% \end{syntax}
-% These functions copies a family of conditionals. The \texttt{new} version
+% These functions copy a family of conditionals. The \texttt{new} version
% will check for existing definitions (\emph{cf.}~\cs{cs_new:Npn}) whereas
% the \texttt{set} version will not (\emph{cf.}~\cs{cs_set:Npn}). The
% conditionals copied are depended on the comma-separated list of
@@ -208,7 +210,7 @@
% These `return' functions define the logical state of a conditional statement.
% They appear within the code for a conditional
% function generated by \cs{prg_set_conditional:Npnn}, \emph{etc}, to indicate
-% when a true or false branch has been taken.
+% when a true or false branch should be taken.
% While they may appear multiple times each within the code of such conditionals,
% the execution of the conditional must result in the expansion of one of these
% two functions \emph{exactly once}.
@@ -357,22 +359,23 @@
% of predicate functions and boolean variables, return boolean
% \meta{true} or \meta{false}. It supports the logical operations And,
% Or and Not as the well-known infix operators |&&|, \verb"||" and |!|
-% with their usual precedences. In
+% with their usual precedences (namely, |&&| binds more tightly than
+% \verb"||"). In
% addition to this, parentheses can be used to isolate
% sub-expressions. For example,
% \begin{verbatim}
% \int_compare_p:n { 1 = 1 } &&
% (
% \int_compare_p:n { 2 = 3 } ||
-% \int_compare_p:n { 4 = 4 } ||
-% \int_compare_p:n { 1 = \error } % is skipped
+% \int_compare_p:n { 4 <= 4 } ||
+% \str_if_eq_p:nn { abc } { def }
% ) &&
-% ! ( \int_compare_p:n { 2 = 4 } )
+% ! \int_compare_p:n { 2 = 4 }
% \end{verbatim}
-% is a valid boolean expression. Note that minimal evaluation is
-% carried out whenever possible so that whenever a truth value cannot
-% be changed any more, the remaining tests within the current group
-% are skipped.
+% is a valid boolean expression.
+%
+% At present, the infix operators |&&| and \verb"||" perform lazy
+% evaluation as well, but this will change in a future release.
%
% \begin{function}[EXP, pTF, updated = 2012-07-08]{\bool_if:n}
% \begin{syntax}
@@ -384,45 +387,10 @@
% \meta{boolean expression} should consist of a series of predicates
% or boolean variables with the logical relationship between these
% defined using |&&| (\enquote{And}), \verb"||" (\enquote{Or}),
-% |!| (\enquote{Not}) and parentheses. Minimal evaluation is used
-% in the processing, so that once a result is defined there is
-% not further expansion of the tests. For example
-% \begin{verbatim}
-% \bool_if_p:n
-% {
-% \int_compare_p:nNn { 1 } = { 1 }
-% &&
-% (
-% \int_compare_p:nNn { 2 } = { 3 } ||
-% \int_compare_p:nNn { 4 } = { 4 } ||
-% \int_compare_p:nNn { 1 } = { \error } % is skipped
-% )
-% &&
-% ! \int_compare_p:nNn { 2 } = { 4 }
-% }
-% \end{verbatim}
-% will be \texttt{true} and will not evaluate
-% |\int_compare_p:nNn { 1 } = { \error }|. The logical Not applies to
+% |!| (\enquote{Not}) and parentheses. The logical Not applies to
% the next predicate or group.
% \end{function}
%
-% \begin{function}[EXP, updated = 2012-07-08]{\bool_not_p:n}
-% \begin{syntax}
-% \cs{bool_not_p:n} \Arg{boolean expression}
-% \end{syntax}
-% Function version of |!(|\meta{boolean expression}|)| within a boolean
-% expression.
-% \end{function}
-%
-% \begin{function}[EXP, updated = 2012-07-08]{\bool_xor_p:nn}
-% \begin{syntax}
-% \cs{bool_xor_p:nn} \Arg{boolexpr_1} \Arg{boolexpr_2}
-% \end{syntax}
-% Implements an \enquote{exclusive or} operation between two boolean
-% expressions. There is no infix operation for this logical
-% operator.
-% \end{function}
-%
% \section{Logical loops}
%
% Loops using either boolean expressions or stored boolean values.
@@ -568,17 +536,17 @@
%
% \begin{function}[EXP]{\if_predicate:w}
% \begin{syntax}
-% "\if_predicate:w" <predicate> <true code> "\else:" <false code> "\fi:"
+% \cs{if_predicate:w} \meta{predicate} \meta{true code} \cs{else:} \meta{false code} \cs{fi:}
% \end{syntax}
% This function takes a predicate function and
% branches according to the result. (In practice this function would also
-% accept a single boolean variable in place of the <predicate> but to make the
-% coding clearer this should be done through "\if_bool:N".)
+% accept a single boolean variable in place of the \meta{predicate} but to make the
+% coding clearer this should be done through \cs{if_bool:N}.)
% \end{function}
%
% \begin{function}[EXP]{\if_bool:N}
% \begin{syntax}
-% "\if_bool:N" <boolean> <true code> "\else:" <false code> "\fi:"
+% \cs{if_bool:N} \meta{boolean} \meta{true code} \cs{else:} \meta{false code} \cs{fi:}
% \end{syntax}
% This function takes a boolean variable and
% branches according to the result.
@@ -664,7 +632,7 @@
% \section{\pkg{l3prg} implementation}
%
% \TestFiles{m3prg001.lvt,m3prg002.lvt,m3prg003.lvt}
-%%
+%
% \begin{macrocode}
%<*initex|package>
% \end{macrocode}
@@ -1128,7 +1096,7 @@
% \begin{macro}[aux]+\@@_&_1:w+
% \begin{macro}[aux]+\@@_|_0:w+
% Two cases where we simply continue scanning. We must remove the
-% second "&" or \verb"|".
+% second |&| or \verb"|".
% \begin{macrocode}
\cs_new_nopar:cpn { @@_&_1:w } & { \@@_get_next:NN \use_i:nn }
\cs_new_nopar:cpn { @@_|_0:w } | { \@@_get_next:NN \use_i:nn }
@@ -1237,31 +1205,6 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\bool_not_p:n}
-% \UnitTested
-% The Not variant just reverses the outcome of \cs{bool_if_p:n}. Can
-% be optimized but this is nice and simple and according to the
-% implementation plan. Not even particularly useful to have it when
-% the infix notation is easier to use.
-% \begin{macrocode}
-\cs_new:Npn \bool_not_p:n #1 { \bool_if_p:n { ! ( #1 ) } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\bool_xor_p:nn}
-% \UnitTested
-% Exclusive or. If the boolean expressions have same truth value,
-% return false, otherwise return true.
-% \begin{macrocode}
-\cs_new:Npn \bool_xor_p:nn #1#2
- {
- \int_compare:nNnTF { \bool_if_p:n {#1} } = { \bool_if_p:n {#2} }
- \c_false_bool
- \c_true_bool
- }
-% \end{macrocode}
-% \end{macro}
-%
% \subsection{Logical loops}
%
% \begin{macro}{\bool_while_do:Nn, \bool_while_do:cn}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
index 5ffb9ffdf33..57bfe04f3d7 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
@@ -37,7 +37,7 @@
\documentclass[full]{l3doc}
%</driver>
%<*driver|package>
-\GetIdInfo$Id: l3tl.dtx 6037 2015-09-23 12:41:15Z joseph $
+\GetIdInfo$Id: l3tl.dtx 6121 2015-09-29 20:31:06Z bruno $
{L3 Token lists}
%</driver|package>
%<*driver>
@@ -1833,14 +1833,16 @@
% If on the one hand it is found within the \meta{token list}, then
% |##1| cannot contain the \meta{delimiter}~|#1| that we worked so
% hard to obtain, thus \cs{@@_replace_wrap:w} gets~|##1| as its own
-% argument~|##1|, and wraps it using \cs{exp_not:o} for consumption by
+% argument~|##1|, and protects it against
% the \texttt{x}-expanding assignment. It also finds \cs{exp_not:n}
% as~|##2| and does nothing to it, thus letting through \cs{exp_not:n}
-% \Arg{replacement} into the assignment. (Note that
+% \Arg{replacement} into the assignment. Note that
% \cs{@@_replace_next:w} and \cs{@@_replace_wrap:w} are always called
-% followed by \cs{prg_do_nothing:} to avoid losing braces when
-% grabbing delimited arguments, hence the use of \cs{exp_not:o} rather
-% than \cs{exp_not:n}.) Afterwards, \cs{@@_replace_next:w} is called
+% followed by two empty brace groups. These are safe because no
+% delimiter can match them. They prevent losing braces when grabbing
+% delimited arguments, but require the use of \cs{exp_not:o} and
+% \cs{use_none:nn}, rather than simply \cs{exp_not:n}.
+% Afterwards, \cs{@@_replace_next:w} is called
% to repeat the replacement, or \cs{@@_replace_wrap:w} if we only want
% a single replacement. In this second case, |##1| is the
% \meta{remaining tokens} in the \meta{token list} and |##2| is some
@@ -1850,9 +1852,9 @@
%
% If on the other hand the argument~|##1| of \cs{@@_replace_next:w} is
% delimited by the trailing \meta{pattern}~|#5|, then |##1| is
-% \enquote{\cs{prg_do_nothing:} \meta{token list} \meta{delimiter}
+% \enquote{\{ \} \{ \} \meta{token list} \meta{delimiter}
% \Arg{ending code}}, hence \cs{@@_replace_wrap:w} finds
-% \enquote{\cs{prg_do_nothing:} \meta{token list}} as |##1| and the
+% \enquote{\{ \} \{ \} \meta{token list}} as |##1| and the
% \meta{ending code} as~|##2|. It leaves the \meta{token list} into
% the assignment and unbraces the \meta{ending code} which removes
% what remains (essentially the \meta{delimiter} and
@@ -1861,25 +1863,27 @@
\cs_new_protected:Npn \@@_replace_auxii:nNNNnn #1#2#3#4#5#6
{
\group_align_safe_begin:
- \cs_set:Npn \@@_replace_wrap:w ##1 #1 ##2 { \exp_not:o {##1} ##2 }
+ \cs_set:Npn \@@_replace_wrap:w ##1 #1 ##2
+ { \exp_not:o { \use_none:nn ##1 } ##2 }
\cs_set:Npx \@@_replace_next:w ##1 #5
{
\exp_not:N \@@_replace_wrap:w ##1
\exp_not:n { #1 }
\exp_not:n { \exp_not:n {#6} }
- \exp_not:n { #2 \prg_do_nothing: }
+ \exp_not:n { #2 { } { } }
}
#3 #4
{
\exp_after:wN \@@_replace_next:w
- \exp_after:wN \prg_do_nothing: #4
+ \exp_after:wN { \exp_after:wN }
+ \exp_after:wN { \exp_after:wN }
+ #4
#1
{
\if_false: { \fi: }
\exp_after:wN \use_none:n \exp_after:wN { \if_false: } \fi:
}
#5
- \q_recursion_stop
}
\group_align_safe_end:
}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
index 9699b2492eb..0075c4abfeb 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
@@ -37,7 +37,7 @@
\documentclass[full]{l3doc}
%</driver>
%<*driver|package>
-\GetIdInfo$Id: l3token.dtx 6040 2015-09-23 12:41:32Z joseph $
+\GetIdInfo$Id: l3token.dtx 6114 2015-09-28 21:32:37Z bruno $
{L3 Experimental token manipulation}
%</driver|package>
%<*driver>
@@ -1668,240 +1668,143 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}[aux]
+% {
+% \@@_delimit_by_char":w,
+% \@@_delimit_by_count:w,
+% \@@_delimit_by_dimen:w,
+% \@@_delimit_by_macro:w,
+% \@@_delimit_by_muskip:w,
+% \@@_delimit_by_skip:w,
+% \@@_delimit_by_toks:w,
+% }
+% These auxiliary functions are used below to define some
+% conditionals which detect whether the \tn{meaning} of their
+% argument begins with a particular string. Each auxiliary takes an
+% argument delimited by a string, a second one delimited by
+% \cs{q_stop}, and returns the first one and its delimiter.
+% This result will eventually be compared to another string.
+% \begin{macrocode}
+\group_begin:
+\cs_set_protected:Npn \@@_tmp:w #1
+ {
+ \use:x
+ {
+ \cs_new:Npn \exp_not:c { @@_delimit_by_ #1 :w }
+ ####1 \tl_to_str:n {#1} ####2 \exp_not:N \q_stop
+ { ####1 \tl_to_str:n {#1} }
+ }
+ }
+\@@_tmp:w { char" }
+\@@_tmp:w { count }
+\@@_tmp:w { dimen }
+\@@_tmp:w { macro }
+\@@_tmp:w { muskip }
+\@@_tmp:w { skip }
+\@@_tmp:w { toks }
+\group_end:
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}[pTF]
% {
% \token_if_chardef:N, \token_if_mathchardef:N,
+% \token_if_long_macro:N,
+% \token_if_protected_macro:N, \token_if_protected_long_macro:N,
% \token_if_dim_register:N, \token_if_int_register:N,
% \token_if_muskip_register:N,
% \token_if_skip_register:N, \token_if_toks_register:N,
-% \token_if_long_macro:N,
-% \token_if_protected_macro:N, \token_if_protected_long_macro:N,
% }
-% \begin{macro}[aux]
-% {
-% \@@_if_chardef:w,
-% \@@_if_dim_register:w,
-% \@@_if_int_register:w,
-% \@@_if_muskip_register:w,
-% \@@_if_skip_register:w,
-% \@@_if_toks_register:w,
-% \@@_if_protected_macro:w,
-% \@@_if_long_macro:w,
-% }
-% Most of these functions have to check the meaning of the token in
-% question so we need to do some checkups on which characters are
-% output by \cs{token_to_meaning:N}. As usual, these characters have
-% catcode 12 so we must do some serious substitutions in the code
-% below\dots
+% Each of these conditionals tests whether its argument's
+% \tn{meaning} starts with a given string. This is essentially done
+% by having an auxiliary grab an argument delimited by the string and
+% testing whether the argument was empty. Of course, a copy of this
+% string must first be added to the end of the \tn{meaning} to avoid
+% a runaway argument in case it does not contain the string. Two
+% complications arise. First, the escape character is not fixed, and
+% cannot be included in the delimiter of the auxiliary function (this
+% function cannot be defined on the fly because tests must remain
+% expandable): instead the first argument of the auxiliary (plus the
+% delimiter to avoid complications with trailing spaces) is compared
+% using \cs{__str_if_eq_x_return:nn} to the result of applying
+% \cs{token_to_str:N} to a control sequence. Second, the
+% \tn{meaning} of primitives such as \tn{dimen} or \tn{dimendef}
+% starts in the same way as registers such as
+% \tn{dimen}\texttt{123}, so they must be tested for.
+%
+% Characters used as delimiters must have catcode~$12$
+% and are obtained through \cs{tl_to_str:n}. This requires doing all
+% definitions within \texttt{x}-expansion. The temporary function
+% \cs{@@_tmp:w} used to define each conditional receives three
+% arguments: the name of the conditional, the auxiliary's delimiter
+% (also used to name the auxiliary), and the string to which one
+% compares the auxiliary's result. Note that the \tn{meaning} of a
+% protected long macro starts with |\protected\long macro|, with no
+% space after |\protected| but a space after |\long|, hence the
+% mixture of \cs{token_to_str:N} and \cs{tl_to_str:n}.
+%
+% For the first five conditionals, \cs{cs_if_exist:cT} turns out to
+% be \texttt{false}, and the code boils down to a string comparison
+% between the result of the auxiliary on the \tn{meaning} of the
+% conditional's argument~|####1|, and~|#3|. Both are evaluated at
+% run-time, as this is important to get the correct escape character.
+%
+% The other five conditionals have additional code that compares the
+% argument~|####1| to two \TeX{} primitives which would wrongly be
+% recognized as registers otherwise. Despite using \TeX{}'s
+% primitive conditional construction, this does not break
+% when~|####1| is itself a conditional, because branches of the
+% conditionals are only skipped if |####1|~is one of the two
+% primitives that are tested for (which are not \TeX{} conditionals).
% \begin{macrocode}
\group_begin:
- \char_set_lccode:nn { `T } { `T }
- \char_set_lccode:nn { `F } { `F }
- \char_set_lccode:nn { `X } { `n }
- \char_set_lccode:nn { `Y } { `t }
- \char_set_lccode:nn { `Z } { `d }
- \tl_map_inline:nn { A C E G H I K L M O P R S U X Y Z R " }
- { \char_set_catcode:nn { `#1 } \c_twelve }
-% \end{macrocode}
-% We convert the token list to lower case and restore the catcode and
-% lowercase code changes.
-% \begin{macrocode}
-\tex_lowercase:D
+\cs_set_protected:Npn \@@_tmp:w #1#2#3
{
- \group_end:
-% \end{macrocode}
-% First up is checking if something has been defined with
-% \tn{chardef} or \tn{mathchardef}. This is easy since \TeX{}
-% thinks of such tokens as hexadecimal so it stores them as
-% |\char"|\meta{hex~number} or |\mathchar"|\meta{hex~number}.
-% Grab until the first occurrence of |char"|, and compare what
-% precedes with |\| or |\math|. In fact, the escape character
-% may not be a backslash, so we compare with the result of
-% converting some other control sequence to a string, namely
-% |\char| or |\mathchar| (the auxiliary adds the |char| back).
-% \begin{macrocode}
- \prg_new_conditional:Npnn \token_if_chardef:N #1 { p , T , F , TF }
- {
- \__str_if_eq_x_return:nn
- {
- \exp_after:wN \@@_if_chardef:w
- \token_to_meaning:N #1 CHAR" \q_stop
- }
- { \token_to_str:N \char }
- }
- \prg_new_conditional:Npnn \token_if_mathchardef:N #1 { p , T , F , TF }
+ \use:x
{
- \__str_if_eq_x_return:nn
+ \prg_new_conditional:Npnn \exp_not:c { token_if_ #1 :N } ####1
+ { p , T , F , TF }
{
- \exp_after:wN \@@_if_chardef:w
- \token_to_meaning:N #1 CHAR" \q_stop
- }
- { \token_to_str:N \mathchar }
- }
- \cs_new:Npn \@@_if_chardef:w #1 CHAR" #2 \q_stop { #1 CHAR }
-% \end{macrocode}
-% Dim registers are a bit more difficult since their \tn{meaning}
-% has the form \tn{dimen}\meta{number}, and we must take care of the
-% two primitives \tn{dimen} and \tn{dimendef}.
-% \begin{macrocode}
- \prg_new_conditional:Npnn \token_if_dim_register:N #1 { p , T , F , TF }
- {
- \if_meaning:w \tex_dimen:D #1
- \prg_return_false:
- \else:
- \if_meaning:w \tex_dimendef:D #1
- \prg_return_false:
- \else:
- \__str_if_eq_x_return:nn
- {
- \exp_after:wN \@@_if_dim_register:w
- \token_to_meaning:N #1 ZIMEX \q_stop
- }
- { \token_to_str:N \ }
- \fi:
- \fi:
- }
- \cs_new:Npn \@@_if_dim_register:w #1 ZIMEX #2 \q_stop { #1 ~ }
-% \end{macrocode}
-% Integer registers are one step harder since constants are implemented
-% differently from variables, and we also have to take care of the
-% primitives \tn{count} and \tn{countdef}.
-% \begin{macrocode}
- \prg_new_conditional:Npnn \token_if_int_register:N #1 { p , T , F , TF }
- {
- % \token_if_chardef:NTF #1 { \prg_return_true: }
- % {
- % \token_if_mathchardef:NTF #1 { \prg_return_true: }
- % {
- \if_meaning:w \tex_count:D #1
- \prg_return_false:
- \else:
- \if_meaning:w \tex_countdef:D #1
- \prg_return_false:
- \else:
- \__str_if_eq_x_return:nn
- {
- \exp_after:wN \@@_if_int_register:w
- \token_to_meaning:N #1 COUXY \q_stop
- }
- { \token_to_str:N \ }
- \fi:
- \fi:
- % }
- % }
- }
- \cs_new:Npn \@@_if_int_register:w #1 COUXY #2 \q_stop { #1 ~ }
-% \end{macrocode}
-% Muskip registers are done the same way as the dimension registers.
-% \begin{macrocode}
- \prg_new_conditional:Npnn \token_if_muskip_register:N #1
- { p , T , F , TF }
- {
- \if_meaning:w \tex_muskip:D #1
- \prg_return_false:
- \else:
- \if_meaning:w \tex_muskipdef:D #1
- \prg_return_false:
- \else:
- \__str_if_eq_x_return:nn
+ \cs_if_exist:cT { tex_ #2 :D }
{
- \exp_after:wN \@@_if_muskip_register:w
- \token_to_meaning:N #1 MUSKIP \q_stop
+ \exp_not:N \if_meaning:w ####1 \exp_not:c { tex_ #2 :D }
+ \exp_not:N \prg_return_false:
+ \exp_not:N \else:
+ \exp_not:N \if_meaning:w ####1 \exp_not:c { tex_ #2 def:D }
+ \exp_not:N \prg_return_false:
+ \exp_not:N \else:
}
- { \token_to_str:N \ }
- \fi:
- \fi:
- }
- \cs_new:Npn \@@_if_muskip_register:w #1 MUSKIP #2 \q_stop { #1 ~ }
-% \end{macrocode}
-% Skip registers.
-% \begin{macrocode}
- \prg_new_conditional:Npnn \token_if_skip_register:N #1
- { p , T , F , TF }
- {
- \if_meaning:w \tex_skip:D #1
- \prg_return_false:
- \else:
- \if_meaning:w \tex_skipdef:D #1
- \prg_return_false:
- \else:
- \__str_if_eq_x_return:nn
+ \exp_not:N \__str_if_eq_x_return:nn
{
- \exp_after:wN \@@_if_skip_register:w
- \token_to_meaning:N #1 SKIP \q_stop
+ \exp_not:N \exp_after:wN
+ \exp_not:c { @@_delimit_by_ #2 :w }
+ \exp_not:N \token_to_meaning:N ####1
+ ? \tl_to_str:n {#2} \exp_not:N \q_stop
}
- { \token_to_str:N \ }
- \fi:
- \fi:
- }
- \cs_new:Npn \@@_if_skip_register:w #1 SKIP #2 \q_stop { #1 ~ }
-% \end{macrocode}
-% Toks registers.
-% \begin{macrocode}
- \prg_new_conditional:Npnn \token_if_toks_register:N #1
- { p , T , F , TF }
- {
- \if_meaning:w \tex_toks:D #1
- \prg_return_false:
- \else:
- \if_meaning:w \tex_toksdef:D #1
- \prg_return_false:
- \else:
- \__str_if_eq_x_return:nn
+ { \exp_not:n {#3} }
+ \cs_if_exist:cT { tex_ #2 :D }
{
- \exp_after:wN \@@_if_toks_register:w
- \token_to_meaning:N #1 YOKS \q_stop
+ \exp_not:N \fi:
+ \exp_not:N \fi:
}
- { \token_to_str:N \ }
- \fi:
- \fi:
- }
- \cs_new:Npn \@@_if_toks_register:w #1 YOKS #2 \q_stop { #1 ~ }
-% \end{macrocode}
-% Protected macros.
-% \begin{macrocode}
- \prg_new_conditional:Npnn \token_if_protected_macro:N #1
- { p , T , F , TF }
- {
- \__str_if_eq_x_return:nn
- {
- \exp_after:wN \@@_if_protected_macro:w
- \token_to_meaning:N #1 PROYECYEZ~MACRO \q_stop
}
- { \token_to_str:N \ }
}
- \cs_new:Npn \@@_if_protected_macro:w
- #1 PROYECYEZ~MACRO #2 \q_stop { #1 ~ }
-% \end{macrocode}
-% Long macros and protected long macros share an auxiliary.
-% \begin{macrocode}
- \prg_new_conditional:Npnn \token_if_long_macro:N #1 { p , T , F , TF }
- {
- \__str_if_eq_x_return:nn
- {
- \exp_after:wN \@@_if_long_macro:w
- \token_to_meaning:N #1 LOXG~MACRO \q_stop
- }
- { \token_to_str:N \ }
- }
- \prg_new_conditional:Npnn \token_if_protected_long_macro:N #1
- { p , T , F , TF }
- {
- \__str_if_eq_x_return:nn
- {
- \exp_after:wN \@@_if_long_macro:w
- \token_to_meaning:N #1 LOXG~MACRO \q_stop
- }
- { \token_to_str:N \protected \token_to_str:N \ }
- }
- \cs_new:Npn \@@_if_long_macro:w #1 LOXG~MACRO #2 \q_stop { #1 ~ }
-% \end{macrocode}
-% Finally the \cs{tex_lowercase:D} ends!
-% \begin{macrocode}
}
+\@@_tmp:w { chardef } { char" } { \token_to_str:N \char" }
+\@@_tmp:w { mathchardef } { char" } { \token_to_str:N \mathchar" }
+\@@_tmp:w { long_macro } { macro } { \tl_to_str:n { \long } macro }
+\@@_tmp:w { protected_macro } { macro }
+ { \tl_to_str:n { \protected } macro }
+\@@_tmp:w { protected_long_macro } { macro }
+ { \token_to_str:N \protected \tl_to_str:n { \long } macro }
+\@@_tmp:w { dim_register } { dimen } { \token_to_str:N \dimen }
+\@@_tmp:w { int_register } { count } { \token_to_str:N \count }
+\@@_tmp:w { muskip_register } { muskip } { \token_to_str:N \muskip }
+\@@_tmp:w { skip_register } { skip } { \token_to_str:N \skip }
+\@@_tmp:w { toks_register } { toks } { \token_to_str:N \toks }
+\group_end:
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
% \begin{macro}[pTF]{\token_if_primitive:N}
% \begin{macro}[aux]{\@@_if_primitive:NNw,
diff --git a/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx b/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx
index dfca5c3513f..564453aa23b 100644
--- a/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx
+++ b/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx
@@ -37,8 +37,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}[2015/09/27]
-%<package>\@ifpackagelater{expl3}{2015/09/27}
+\RequirePackage{expl3}[2015/10/14]
+%<package>\@ifpackagelater{expl3}{2015/10/14}
%<package> {}
%<package> {%
%<package> \PackageError{l3keys2e}{Support package l3kernel too old}
@@ -50,8 +50,10 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: l3keys2e.dtx 6111 2015-09-27 16:06:17Z joseph $
- {LaTeX2e option processing using LaTeX3 keys}
+\def\ExplFileName{l3keys2e}
+\def\ExplFileDescription{LaTeX2e option processing using LaTeX3 keys}
+\def\ExplFileDate{2015/10/14}
+\def\ExplFileVersion{6210}
%</driver|package>
%<*driver>
\documentclass[full]{l3doc}
diff --git a/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx b/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx
index 7a1f982e844..084b7537288 100644
--- a/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx
+++ b/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx
@@ -1,7 +1,7 @@
% \iffalse meta-comment
%
%% File: xfrac.dtx Copyright (C) 2004, 2008-2010 Morten Hoegholm
-%% (C) 2011,2012,2014 The LaTeX3 Project
+%% (C) 2011,2012,2014,2015 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
@@ -36,9 +36,26 @@
%%
%
%<*driver|package>
+% The version of expl3 required is tested as early as possible, as
+% some really old versions do not define \ProvidesExplPackage.
+\RequirePackage{expl3}[2015/10/14]
+%<package>\@ifpackagelater{expl3}{2015/10/14}
+%<package> {}
+%<package> {%
+%<package> \PackageError{xfrac}{Support package l3kernel too old}
+%<package> {%
+%<package> Please install an up to date version of l3kernel\MessageBreak
+%<package> using your TeX package manager or from CTAN.\MessageBreak
+%<package> \MessageBreak
+%<package> Loading xfrac will abort!%
+%<package> }%
+%<package> \endinput
+%<package> }
\RequirePackage{amstext,graphicx,l3keys2e,textcomp,xparse,xtemplate}
-\GetIdInfo$Id: xfrac.dtx 4728 2014-05-04 13:25:37Z joseph $
- {L3 Experimental split-level fractions}
+\def\ExplFileName{xfrac}
+\def\ExplFileDescription{L3 Experimental split-level fractions}
+\def\ExplFileDate{2015/10/14}
+\def\ExplFileVersion{6210}
%</driver|package>
%<*driver>
\documentclass[full]{l3doc}
diff --git a/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx b/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx
index d2c106fc0d3..eb1446b199d 100644
--- a/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx
+++ b/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx
@@ -41,8 +41,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}[2015/09/27]
-%<package>\@ifpackagelater{expl3}{2015/09/27}
+\RequirePackage{expl3}[2015/10/14]
+%<package>\@ifpackagelater{expl3}{2015/10/14}
%<package> {}
%<package> {%
%<package> \PackageError{xparse}{Support package l3kernel too old}
@@ -54,8 +54,10 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: xparse.dtx 6111 2015-09-27 16:06:17Z joseph $
- {L3 Experimental document command parser}
+\def\ExplFileName{xparse}
+\def\ExplFileDescription{L3 Experimental document command parser}
+\def\ExplFileDate{2015/10/14}
+\def\ExplFileVersion{6210}
%</driver|package>
%<*driver>
\documentclass[full]{l3doc}
diff --git a/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx b/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx
index 31cc098fd97..2d831ef719a 100644
--- a/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx
+++ b/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx
@@ -41,8 +41,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}[2015/09/27]
-%<package>\@ifpackagelater{expl3}{2015/09/27}
+\RequirePackage{expl3}[2015/10/14]
+%<package>\@ifpackagelater{expl3}{2015/10/14}
%<package> {}
%<package> {%
%<package> \PackageError{xtemplate}{Support package l3kernel too old}
@@ -54,8 +54,10 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: xtemplate.dtx 6111 2015-09-27 16:06:17Z joseph $
- {L3 Experimental prototype document functions}
+\def\ExplFileName{xtemplate}
+\def\ExplFileDescription{L3 Experimental prototype document functions}
+\def\ExplFileDate{2015/10/14}
+\def\ExplFileVersion{6210}
%</driver|package>
%<*driver>
\documentclass[full]{l3doc}
diff --git a/Master/texmf-dist/tex/latex/l3build/l3build.lua b/Master/texmf-dist/tex/latex/l3build/l3build.lua
index d1abc997109..7238c9a2167 100644
--- a/Master/texmf-dist/tex/latex/l3build/l3build.lua
+++ b/Master/texmf-dist/tex/latex/l3build/l3build.lua
@@ -98,6 +98,7 @@ typesetfiles = typesetfiles or {"*.dtx"}
typesetsuppfiles = typesetsuppfiles or { }
unpackfiles = unpackfiles or {"*.ins"}
unpacksuppfiles = unpacksuppfiles or { }
+versionfiles = versionfiles or {"*.dtx"}
-- Roots which should be unpacked to support unpacking/testing/typesetting
checkdeps = checkdeps or { }
@@ -151,8 +152,10 @@ checkruns = checkruns or 1
packtdszip = packtdszip or false -- Not actually needed but clearer
scriptname = scriptname or "build.lua" -- Script used in each directory
typesetcmds = typesetcmds or ""
+versionform = versionform or ""
-- Extensions for various file types: used to abstract out stuff a bit
+bakext = bakext or ".bak"
logext = logext or ".log"
lveext = lveext or ".lve"
lvtext = lvtext or ".lvt"
@@ -167,25 +170,31 @@ function argparse()
local files = { }
local long_options =
{
- engine = "engine",
- ["halt-on-error"] = "halt" ,
- ["halt-on-failure"] = "halt" ,
- help = "help" ,
- quiet = "quiet"
+ date = "date" ,
+ engine = "engine" ,
+ ["halt-on-error"] = "halt" ,
+ ["halt-on-failure"] = "halt" ,
+ help = "help" ,
+ quiet = "quiet" ,
+ version = "version"
}
local short_options =
{
- e = "engine",
- h = "help" ,
- H = "halt" ,
- q = "quiet"
+ d = "date" ,
+ e = "engine" ,
+ h = "help" ,
+ H = "halt" ,
+ q = "quiet" ,
+ v = "version"
}
local option_args =
{
+ date = true ,
engine = true ,
halt = false,
help = false,
- quiet = false
+ quiet = false,
+ version = true
}
-- arg[1] is a special case: must be a command or "-h"/"--help"
-- Deal with this by assuming help and storing only apparently-valid
@@ -290,10 +299,12 @@ end
userargs = argparse()
+optdate = userargs["date"]
optengines = userargs["engine"]
opthalt = userargs["halt"]
opthelp = userargs["help"]
optquiet = userargs["quiet"]
+optversion = userargs["version"]
-- Convert a file glob into a pattern for use by e.g. string.gub
-- Based on https://github.com/davidm/lua-glob-pattern
@@ -575,15 +586,25 @@ function allmodules(target)
.. "\" for module "
.. i
)
+ local date = ""
+ if optdate then
+ date = " --date=" .. optdate[1]
+ end
local engines = ""
if optengines then
engines = " --engine=" .. table.concat(optengines, ",")
end
+ local version = ""
+ if optversion then
+ version = " --version=" .. optversion[1]
+ end
local errorlevel = run(
i,
"texlua " .. scriptname .. " " .. target
.. (opthalt and " -H" or "")
+ .. date
.. engines
+ .. version
)
if errorlevel ~= 0 then
return errorlevel
@@ -1307,10 +1328,13 @@ help = help or function()
if module ~= "" and testfiledir ~= "" then
print(" save Saves test validation log")
end
+ print(" setversion Update version information in sources")
print("")
print("Valid options are:")
+ print(" --date|-d Sets the date to insert into sources")
print(" --engine|-e Sets the engine to use for running test")
print(" --halt-on-error|-H Stops running tests after the first failure")
+ print(" --version|-v Sets the version to insert into sources")
print("")
end
@@ -1643,6 +1667,120 @@ function save(names)
end
end
+-- Provide some standard search-and-replace functions
+if versionform ~= "" and not setversion_update_line then
+ if versionform == "ProvidesPackage" then
+ function setversion_update_line(line, date, version)
+ local i
+ -- No real regex so do it one type at a time
+ for _,i in pairs({"Class", "File", "Package"}) do
+ if string.match(
+ line,
+ "^\\Provides" .. i .. "{[a-zA-Z0-9%-]+}%[[^%]]*%]$"
+ ) then
+ line = string.gsub(line, "%[%d%d%d%d/%d%d/%d%d", "["
+ .. string.gsub(date, "%-", "/"))
+ line = string.gsub(
+ line, "(%[%d%d%d%d/%d%d/%d%d) [^ ]*", "%1 " .. version
+ )
+ break
+ end
+ end
+ return line
+ end
+ elseif versionform == "ProvidesExplPackage" then
+ function setversion_update_line(line, date, version)
+ local i
+ -- No real regex so do it one type at a time
+ for _,i in pairs({"Class", "File", "Package"}) do
+ if string.match(
+ line,
+ "^\\ProvidesExpl" .. i .. " *{[a-zA-Z0-9%-]+}"
+ ) then
+ line = string.gsub(
+ line,
+ "{%d%d%d%d/%d%d/%d%d}( *){[^}]*}",
+ "{" .. string.gsub(date, "%-", "/") .. "}%1{" .. version .. "}"
+ )
+ break
+ end
+ end
+ return line
+ end
+ elseif versionform == "filename" then
+ function setversion_update_line(line, date, version)
+ if string.match(line, "^\\def\\filedate{%d%d%d%d/%d%d/%d%d}$") then
+ line = "\\def\\filedate{" .. string.gsub(date, "%-", "/") .. "}"
+ end
+ if string.match(line, "^\\def\\fileversion{[^}]+}$") then
+ line = "\\def\\fileversion{" .. version .. "}"
+ end
+ return line
+ end
+ elseif versionform == "ExplFileName" then
+ function setversion_update_line(line, date, version)
+ if string.match(line, "^\\def\\ExplFileDate{%d%d%d%d/%d%d/%d%d}$") then
+ line = "\\def\\ExplFileDate{" .. string.gsub(date, "%-", "/") .. "}"
+ end
+ if string.match(line, "^\\def\\ExplFileVersion{[^}]+}$") then
+ line = "\\def\\ExplFileVersion{" .. version .. "}"
+ end
+ return line
+ end
+ end
+end
+
+-- Used to actually carry out search-and-replace
+setversion_update_line = setversion_update_line or function(line, date, version)
+ return line
+end
+
+function setversion()
+ local function rewrite(file, date, version)
+ local changed = false
+ local lines = ""
+ for line in io.lines(file) do
+ local newline = setversion_update_line(line, date, version)
+ if newline ~= line then
+ line = newline
+ changed = true
+ end
+ lines = lines .. line .. os_newline
+ end
+ if changed then
+ -- Avoid adding/removing end-of-file newline
+ local f = io.open(file, "rb")
+ local content = f:read("*all")
+ io.close(f)
+ if not string.match(content, os_newline .. "$") then
+ string.gsub(lines, os_newline .. "$", "")
+ end
+ -- Write the new file
+ ren(".", file, file .. bakext)
+ local f = io.open(file, "w")
+ io.output(f)
+ io.write(lines)
+ io.close(f)
+ rm(".", file .. bakext)
+ end
+ end
+ local date = os.date("%Y-%m-%d")
+ if optdate then
+ date = optdate[1] or date
+ end
+ local version = -1
+ if optversion then
+ version = optversion[1] or version
+ end
+ local i, j
+ for _,i in pairs(versionfiles) do
+ for _,j in pairs(filelist(".", i)) do
+ rewrite(j, date, version)
+ end
+ end
+ return 0
+end
+
-- Unpack the package files using an 'isolated' system: this requires
-- a copy of the 'basic' DocStrip program, which is used then removed
function unpack()
@@ -1748,6 +1886,12 @@ function stdmain(target, files)
errorlevel = ctan()
elseif target == "install" then
errorlevel = allmodules("install")
+ elseif target == "setversion" then
+ errorlevel = allmodules("setversion")
+ -- Deal with any files in the bundle dir itself
+ if errorlevel == 0 then
+ errorlevel = setversion()
+ end
elseif target == "unpack" then
errorlevel = allmodules("bundleunpack")
elseif target == "version" then
@@ -1781,6 +1925,8 @@ function stdmain(target, files)
else
help()
end
+ elseif target == "setversion" then
+ errorlevel = setversion()
elseif target == "unpack" then
errorlevel = unpack()
elseif target == "version" then
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3sort/l3sort.sty b/Master/texmf-dist/tex/latex/l3experimental/l3sort/l3sort.sty
index 8ac2f9772c1..4c1629d90e0 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3sort/l3sort.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/l3sort/l3sort.sty
@@ -46,8 +46,8 @@
%%
%% -----------------------------------------------------------------------
%%
-\RequirePackage{expl3}[2015/09/27]
-\@ifpackagelater{expl3}{2015/09/27}
+\RequirePackage{expl3}[2015/10/14]
+\@ifpackagelater{expl3}{2015/10/14}
{}
{%
\PackageError{l3sort}{Support package l3kernel too old}
@@ -59,7 +59,7 @@
}%
\endinput
}
-\GetIdInfo$Id: l3sort.dtx 6111 2015-09-27 16:06:17Z joseph $
+\GetIdInfo$Id: l3sort.dtx 6210 2015-10-14 07:22:42Z joseph $
{L3 Experimental sorting functions}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3flag.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3flag.sty
index d861dc4236e..0e296bf1b1b 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3flag.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3flag.sty
@@ -45,8 +45,8 @@
%% prior consultation with the LaTeX3 Project.
%%
%% -----------------------------------------------------------------------
-\RequirePackage{expl3}[2015/09/27]
-\@ifpackagelater{expl3}{2015/09/27}
+\RequirePackage{expl3}[2015/10/14]
+\@ifpackagelater{expl3}{2015/10/14}
{}
{%
\PackageError{l3flag}{Support package l3kernel too old}
@@ -58,7 +58,7 @@
}%
\endinput
}
-\GetIdInfo$Id: l3flag.dtx 6111 2015-09-27 16:06:17Z joseph $
+\GetIdInfo$Id: l3flag.dtx 6210 2015-10-14 07:22:42Z joseph $
{L3 Experimental flags}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex-trace.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex-trace.sty
index d03d173ca60..df11537977c 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex-trace.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex-trace.sty
@@ -45,8 +45,8 @@
%% prior consultation with the LaTeX3 Project.
%%
%% -----------------------------------------------------------------------
-\RequirePackage{expl3}[2015/09/27]
-\@ifpackagelater{expl3}{2015/09/27}
+\RequirePackage{expl3}[2015/10/14]
+\@ifpackagelater{expl3}{2015/10/14}
{}
{%
\PackageError{l3regex}{Support package l3kernel too old}
@@ -58,7 +58,7 @@
}%
\endinput
}
-\GetIdInfo$Id: l3regex.dtx 6111 2015-09-27 16:06:17Z joseph $
+\GetIdInfo$Id: l3regex.dtx 6210 2015-10-14 07:22:42Z joseph $
{L3 Experimental regular expressions}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex.sty
index 7d20125136d..b307ce19193 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex.sty
@@ -45,8 +45,8 @@
%% prior consultation with the LaTeX3 Project.
%%
%% -----------------------------------------------------------------------
-\RequirePackage{expl3}[2015/09/27]
-\@ifpackagelater{expl3}{2015/09/27}
+\RequirePackage{expl3}[2015/10/14]
+\@ifpackagelater{expl3}{2015/10/14}
{}
{%
\PackageError{l3regex}{Support package l3kernel too old}
@@ -58,7 +58,7 @@
}%
\endinput
}
-\GetIdInfo$Id: l3regex.dtx 6111 2015-09-27 16:06:17Z joseph $
+\GetIdInfo$Id: l3regex.dtx 6210 2015-10-14 07:22:42Z joseph $
{L3 Experimental regular expressions}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3tl-build.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3tl-build.sty
index e138c303f62..94d64c2e4d9 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3tl-build.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3tl-build.sty
@@ -45,8 +45,8 @@
%% prior consultation with the LaTeX3 Project.
%%
%% -----------------------------------------------------------------------
-\RequirePackage{expl3}[2015/07/28]
-\@ifpackagelater{expl3}{2015/07/28}
+\RequirePackage{expl3}[2015/10/14]
+\@ifpackagelater{expl3}{2015/10/14}
{}
{%
\PackageError{l3tl-build}{Support package l3kernel too old}
@@ -58,7 +58,7 @@
}%
\endinput
}
-\GetIdInfo$Id: l3tl-build.dtx 5700 2015-07-28 19:26:39Z joseph $
+\GetIdInfo$Id: l3tl-build.dtx 6210 2015-10-14 07:22:42Z joseph $
{L3 Experimental token list construction}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty b/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty
index 7048acfca86..0f49b08630b 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty
@@ -47,8 +47,8 @@
%%
%% -----------------------------------------------------------------------
%%
-\RequirePackage{expl3}[2015/09/27]
-\@ifpackagelater{expl3}{2015/09/27}
+\RequirePackage{expl3}[2015/10/14]
+\@ifpackagelater{expl3}{2015/10/14}
{}
{%
\PackageError{l3galley}{Support package l3kernel too old}
@@ -60,7 +60,7 @@
}%
\endinput
}
-\GetIdInfo$Id: l3galley.dtx 6111 2015-09-27 16:06:17Z joseph $
+\GetIdInfo$Id: l3galley.dtx 6210 2015-10-14 07:22:42Z joseph $
{L3 Experimental galley code}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
index 6a392563581..4eb591e374d 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
+++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
@@ -82,8 +82,8 @@
%% -----------------------------------------------------------------------
\def\ExplFileName{expl3}
\def\ExplFileDescription{L3 programming layer}
-\def\ExplFileDate{2015/09/27}
-\def\ExplFileVersion{6111}
+\def\ExplFileDate{2015/10/14}
+\def\ExplFileVersion{6210}
\begingroup
\def\next{\endgroup}
\expandafter\ifx\csname PackageError\endcsname\relax
@@ -242,7 +242,7 @@
}
}
\endgroup
-\GetIdInfo$Id: l3bootstrap.dtx 5983 2015-09-10 18:57:56Z joseph $
+\GetIdInfo$Id: l3bootstrap.dtx 6139 2015-09-30 14:02:38Z bruno $
{L3 Bootstrap code}
\begingroup
\expandafter\ifx\csname directlua\endcsname\relax
@@ -417,6 +417,7 @@
\catcode 9 = 9\relax
\catcode 32 = 9\relax
\catcode 34 = 12\relax
+\catcode 38 = 4\relax
\catcode 58 = 11\relax
\catcode 94 = 7\relax
\catcode 95 = 11\relax
@@ -489,7 +490,7 @@
%% prior consultation with the LaTeX3 Project.
%%
%% -----------------------------------------------------------------------
-\GetIdInfo$Id: l3names.dtx 6108 2015-09-27 08:58:42Z joseph $
+\GetIdInfo$Id: l3names.dtx 6209 2015-10-10 19:51:42Z joseph $
{L3 Namespace for primitives}
\let \tex_global:D \global
\let \tex_let:D \let
@@ -932,11 +933,9 @@
\__kernel_primitive:NN \pdfoutput \pdftex_pdfoutput:D
\__kernel_primitive:NN \pdfpageattr \pdftex_pdfpageattr:D
\__kernel_primitive:NN \pdfpagebox \pdftex_pdfpagebox:D
- \__kernel_primitive:NN \pdfpageheight \pdftex_pdfpageheight:D
\__kernel_primitive:NN \pdfpageref \pdftex_pdfpageref:D
\__kernel_primitive:NN \pdfpageresources \pdftex_pdfpageresources:D
\__kernel_primitive:NN \pdfpagesattr \pdftex_pdfpagesattr:D
- \__kernel_primitive:NN \pdfpagewidth \pdftex_pdfpagewidth:D
\__kernel_primitive:NN \pdfrefobj \pdftex_pdfrefobj:D
\__kernel_primitive:NN \pdfrefxform \pdftex_pdfrefxform:D
\__kernel_primitive:NN \pdfrefximage \pdftex_pdfrefximage:D
@@ -957,6 +956,8 @@
\__kernel_primitive:NN \pdfxformresources \pdftex_pdfxformresources:D
\__kernel_primitive:NN \pdfximage \pdftex_pdfximage:D
\__kernel_primitive:NN \pdfximagebbox \pdftex_pdfximagebbox:D
+ \__kernel_primitive:NN \ifpdfabsdim \pdftex_ifabsdim:D
+ \__kernel_primitive:NN \ifpdfabsnum \pdftex_ifabsnum:D
\__kernel_primitive:NN \ifpdfprimitive \pdftex_ifprimitive:D
\__kernel_primitive:NN \pdfadjustspacing \pdftex_adjustspacing:D
\__kernel_primitive:NN \pdfcopyfont \pdftex_copyfont:D
@@ -975,6 +976,8 @@
\__kernel_primitive:NN \pdfmapline \pdftex_mapline:D
\__kernel_primitive:NN \pdfnoligatures \pdftex_noligatures:D
\__kernel_primitive:NN \pdfnormaldeviate \pdftex_normaldeviate:D
+ \__kernel_primitive:NN \pdfpageheight \pdftex_pageheight:D
+ \__kernel_primitive:NN \pdfpagewidth \pdftex_pagewidth:D
\__kernel_primitive:NN \pdfpkmode \pdftex_pkmode:D
\__kernel_primitive:NN \pdfpkresolution \pdftex_pkresolution:D
\__kernel_primitive:NN \pdfprimitive \pdftex_primitive:D
@@ -1064,6 +1067,7 @@
\__kernel_primitive:NN \expanded \luatex_expanded:D
\__kernel_primitive:NN \fontid \luatex_fontid:D
\__kernel_primitive:NN \formatname \luatex_formatname:D
+ \__kernel_primitive:NN \hyphenationmin \luatex_hypenationmin:D
\__kernel_primitive:NN \gleaders \luatex_gleaders:D
\__kernel_primitive:NN \initcatcodetable \luatex_initcatcodetable:D
\__kernel_primitive:NN \latelua \luatex_latelua:D
@@ -1289,7 +1293,7 @@
\tex_let:D \tex_italiccorrection:D \@@italiccorr
\tex_let:D \tex_underline:D \@@underline
\tex_fi:D
-\etex_ifdefined:D \luatexcatcodetable
+\etex_ifdefined:D \luatexsuppressfontnotfounderror
\tex_let:D \luatex_alignmark:D \luatexalignmark
\tex_let:D \luatex_aligntab:D \luatexaligntab
\tex_let:D \luatex_attribute:D \luatexattribute
@@ -1328,10 +1332,6 @@
\tex_let:D \xetex_suppressfontnotfounderror:D \luatexsuppressfontnotfounderror
\tex_let:D \luatex_bodydir:D \luatexbodydir
\tex_let:D \luatex_boxdir:D \luatexboxdir
- \tex_let:D \luatex_chardp:D \luatexchardp
- \tex_let:D \luatex_charht:D \luatexcharht
- \tex_let:D \luatex_charit:D \luatexcharit
- \tex_let:D \luatex_charwd:D \luatexcharwd
\tex_let:D \luatex_leftghost:D \luatexleftghost
\tex_let:D \luatex_localbrokenpenalty:D \luatexlocalbrokenpenalty
\tex_let:D \luatex_localinterlinepenalty:D \luatexlocalinterlinepenalty
@@ -1374,9 +1374,20 @@
\tex_let:D \utex_mathcodenum:D \XeTeXmathcodenum
\tex_fi:D
\etex_ifdefined:D \luatex_luatexversion:D
- \tex_let:D \pdftex_pdftexbanner:D \tex_undefined:D
- \tex_let:D \pdftex_pdftexbanner:D \tex_undefined:D
- \tex_let:D \pdftex_pdftexversion:D \tex_undefined:D
+ \tex_let:D \pdftex_pdftexbanner:D \tex_undefined:D
+ \tex_let:D \pdftex_pdftexrevision:D \tex_undefined:D
+ \tex_let:D \pdftex_pdftexversion:D \tex_undefined:D
+\tex_fi:D
+\etex_ifdefined:D \lastxpos
+ \tex_let:D \pdftex_lastxpos:D \lastxpos
+ \tex_let:D \pdftex_lastypos:D \lastypos
+ \tex_let:D \pdftex_normaldeviate:D \normaldeviate
+ \tex_let:D \pdftex_pageheight:D \pageheight
+ \tex_let:D \pdftex_pagewith:D \pagewidth
+ \tex_let:D \pdftex_randomseed:D \randomseed
+ \tex_let:D \pdftex_setrandomseed:D \setrandomseed
+ \tex_let:D \pdftex_savepos:D \savepos
+ \tex_let:D \pdftex_uniformdeviate:D \uniformdeviate
\tex_fi:D
\etex_ifdefined:D \normalend
\tex_let:D \tex_end:D \normalend
@@ -2679,7 +2690,7 @@
%% prior consultation with the LaTeX3 Project.
%%
%% -----------------------------------------------------------------------
-\GetIdInfo$Id: l3tl.dtx 6037 2015-09-23 12:41:15Z joseph $
+\GetIdInfo$Id: l3tl.dtx 6121 2015-09-29 20:31:06Z bruno $
{L3 Token lists}
\cs_new_protected:Npn \tl_new:N #1
{
@@ -3001,25 +3012,27 @@
\cs_new_protected:Npn \__tl_replace_auxii:nNNNnn #1#2#3#4#5#6
{
\group_align_safe_begin:
- \cs_set:Npn \__tl_replace_wrap:w ##1 #1 ##2 { \exp_not:o {##1} ##2 }
+ \cs_set:Npn \__tl_replace_wrap:w ##1 #1 ##2
+ { \exp_not:o { \use_none:nn ##1 } ##2 }
\cs_set:Npx \__tl_replace_next:w ##1 #5
{
\exp_not:N \__tl_replace_wrap:w ##1
\exp_not:n { #1 }
\exp_not:n { \exp_not:n {#6} }
- \exp_not:n { #2 \prg_do_nothing: }
+ \exp_not:n { #2 { } { } }
}
#3 #4
{
\exp_after:wN \__tl_replace_next:w
- \exp_after:wN \prg_do_nothing: #4
+ \exp_after:wN { \exp_after:wN }
+ \exp_after:wN { \exp_after:wN }
+ #4
#1
{
\if_false: { \fi: }
\exp_after:wN \use_none:n \exp_after:wN { \if_false: } \fi:
}
#5
- \q_recursion_stop
}
\group_align_safe_end:
}
@@ -5633,9 +5646,8 @@
%% prior consultation with the LaTeX3 Project.
%%
%% -----------------------------------------------------------------------
-\GetIdInfo$Id: l3prg.dtx 5983 2015-09-10 18:57:56Z joseph $
+\GetIdInfo$Id: l3prg.dtx 6208 2015-10-09 20:01:54Z joseph $
{L3 Control structures}
-%%
\cs_new_eq:NN \if_bool:N \tex_ifodd:D
\cs_new_eq:NN \if_predicate:w \tex_ifodd:D
\cs_new_protected:Npn \bool_new:N #1 { \cs_new_eq:NN #1 \c_false_bool }
@@ -5821,13 +5833,6 @@
{ % (
\__bool_eval_skip_to_end_auxi:Nw #1#3 )
}
-\cs_new:Npn \bool_not_p:n #1 { \bool_if_p:n { ! ( #1 ) } }
-\cs_new:Npn \bool_xor_p:nn #1#2
- {
- \int_compare:nNnTF { \bool_if_p:n {#1} } = { \bool_if_p:n {#2} }
- \c_false_bool
- \c_true_bool
- }
\cs_new:Npn \bool_while_do:Nn #1#2
{ \bool_if:NT #1 { #2 \bool_while_do:Nn #1 {#2} } }
\cs_new:Npn \bool_until_do:Nn #1#2
@@ -6531,7 +6536,7 @@
%% prior consultation with the LaTeX3 Project.
%%
%% -----------------------------------------------------------------------
-\GetIdInfo$Id: l3token.dtx 6040 2015-09-23 12:41:32Z joseph $
+\GetIdInfo$Id: l3token.dtx 6114 2015-09-28 21:32:37Z bruno $
{L3 Experimental token manipulation}
\group_begin:
\tex_catcode:D `@ = \c_eleven
@@ -6859,167 +6864,69 @@
\fi:
}
\group_begin:
- \char_set_lccode:nn { `T } { `T }
- \char_set_lccode:nn { `F } { `F }
- \char_set_lccode:nn { `X } { `n }
- \char_set_lccode:nn { `Y } { `t }
- \char_set_lccode:nn { `Z } { `d }
- \tl_map_inline:nn { A C E G H I K L M O P R S U X Y Z R " }
- { \char_set_catcode:nn { `#1 } \c_twelve }
-\tex_lowercase:D
+\cs_set_protected:Npn \__token_tmp:w #1
{
- \group_end:
- \prg_new_conditional:Npnn \token_if_chardef:N #1 { p , T , F , TF }
+ \use:x
{
- \__str_if_eq_x_return:nn
- {
- \exp_after:wN \__token_if_chardef:w
- \token_to_meaning:N #1 CHAR" \q_stop
- }
- { \token_to_str:N \char }
+ \cs_new:Npn \exp_not:c { __token_delimit_by_ #1 :w }
+ ####1 \tl_to_str:n {#1} ####2 \exp_not:N \q_stop
+ { ####1 \tl_to_str:n {#1} }
}
- \prg_new_conditional:Npnn \token_if_mathchardef:N #1 { p , T , F , TF }
+ }
+\__token_tmp:w { char" }
+\__token_tmp:w { count }
+\__token_tmp:w { dimen }
+\__token_tmp:w { macro }
+\__token_tmp:w { muskip }
+\__token_tmp:w { skip }
+\__token_tmp:w { toks }
+\group_end:
+\group_begin:
+\cs_set_protected:Npn \__token_tmp:w #1#2#3
+ {
+ \use:x
{
- \__str_if_eq_x_return:nn
+ \prg_new_conditional:Npnn \exp_not:c { token_if_ #1 :N } ####1
+ { p , T , F , TF }
{
- \exp_after:wN \__token_if_chardef:w
- \token_to_meaning:N #1 CHAR" \q_stop
- }
- { \token_to_str:N \mathchar }
- }
- \cs_new:Npn \__token_if_chardef:w #1 CHAR" #2 \q_stop { #1 CHAR }
- \prg_new_conditional:Npnn \token_if_dim_register:N #1 { p , T , F , TF }
- {
- \if_meaning:w \tex_dimen:D #1
- \prg_return_false:
- \else:
- \if_meaning:w \tex_dimendef:D #1
- \prg_return_false:
- \else:
- \__str_if_eq_x_return:nn
- {
- \exp_after:wN \__token_if_dim_register:w
- \token_to_meaning:N #1 ZIMEX \q_stop
- }
- { \token_to_str:N \ }
- \fi:
- \fi:
- }
- \cs_new:Npn \__token_if_dim_register:w #1 ZIMEX #2 \q_stop { #1 ~ }
- \prg_new_conditional:Npnn \token_if_int_register:N #1 { p , T , F , TF }
- {
- % \token_if_chardef:NTF #1 { \prg_return_true: }
- % {
- % \token_if_mathchardef:NTF #1 { \prg_return_true: }
- % {
- \if_meaning:w \tex_count:D #1
- \prg_return_false:
- \else:
- \if_meaning:w \tex_countdef:D #1
- \prg_return_false:
- \else:
- \__str_if_eq_x_return:nn
+ \cs_if_exist:cT { tex_ #2 :D }
{
- \exp_after:wN \__token_if_int_register:w
- \token_to_meaning:N #1 COUXY \q_stop
+ \exp_not:N \if_meaning:w ####1 \exp_not:c { tex_ #2 :D }
+ \exp_not:N \prg_return_false:
+ \exp_not:N \else:
+ \exp_not:N \if_meaning:w ####1 \exp_not:c { tex_ #2 def:D }
+ \exp_not:N \prg_return_false:
+ \exp_not:N \else:
}
- { \token_to_str:N \ }
- \fi:
- \fi:
- % }
- % }
- }
- \cs_new:Npn \__token_if_int_register:w #1 COUXY #2 \q_stop { #1 ~ }
- \prg_new_conditional:Npnn \token_if_muskip_register:N #1
- { p , T , F , TF }
- {
- \if_meaning:w \tex_muskip:D #1
- \prg_return_false:
- \else:
- \if_meaning:w \tex_muskipdef:D #1
- \prg_return_false:
- \else:
- \__str_if_eq_x_return:nn
+ \exp_not:N \__str_if_eq_x_return:nn
{
- \exp_after:wN \__token_if_muskip_register:w
- \token_to_meaning:N #1 MUSKIP \q_stop
+ \exp_not:N \exp_after:wN
+ \exp_not:c { __token_delimit_by_ #2 :w }
+ \exp_not:N \token_to_meaning:N ####1
+ ? \tl_to_str:n {#2} \exp_not:N \q_stop
}
- { \token_to_str:N \ }
- \fi:
- \fi:
- }
- \cs_new:Npn \__token_if_muskip_register:w #1 MUSKIP #2 \q_stop { #1 ~ }
- \prg_new_conditional:Npnn \token_if_skip_register:N #1
- { p , T , F , TF }
- {
- \if_meaning:w \tex_skip:D #1
- \prg_return_false:
- \else:
- \if_meaning:w \tex_skipdef:D #1
- \prg_return_false:
- \else:
- \__str_if_eq_x_return:nn
+ { \exp_not:n {#3} }
+ \cs_if_exist:cT { tex_ #2 :D }
{
- \exp_after:wN \__token_if_skip_register:w
- \token_to_meaning:N #1 SKIP \q_stop
+ \exp_not:N \fi:
+ \exp_not:N \fi:
}
- { \token_to_str:N \ }
- \fi:
- \fi:
- }
- \cs_new:Npn \__token_if_skip_register:w #1 SKIP #2 \q_stop { #1 ~ }
- \prg_new_conditional:Npnn \token_if_toks_register:N #1
- { p , T , F , TF }
- {
- \if_meaning:w \tex_toks:D #1
- \prg_return_false:
- \else:
- \if_meaning:w \tex_toksdef:D #1
- \prg_return_false:
- \else:
- \__str_if_eq_x_return:nn
- {
- \exp_after:wN \__token_if_toks_register:w
- \token_to_meaning:N #1 YOKS \q_stop
- }
- { \token_to_str:N \ }
- \fi:
- \fi:
- }
- \cs_new:Npn \__token_if_toks_register:w #1 YOKS #2 \q_stop { #1 ~ }
- \prg_new_conditional:Npnn \token_if_protected_macro:N #1
- { p , T , F , TF }
- {
- \__str_if_eq_x_return:nn
- {
- \exp_after:wN \__token_if_protected_macro:w
- \token_to_meaning:N #1 PROYECYEZ~MACRO \q_stop
}
- { \token_to_str:N \ }
}
- \cs_new:Npn \__token_if_protected_macro:w
- #1 PROYECYEZ~MACRO #2 \q_stop { #1 ~ }
- \prg_new_conditional:Npnn \token_if_long_macro:N #1 { p , T , F , TF }
- {
- \__str_if_eq_x_return:nn
- {
- \exp_after:wN \__token_if_long_macro:w
- \token_to_meaning:N #1 LOXG~MACRO \q_stop
- }
- { \token_to_str:N \ }
- }
- \prg_new_conditional:Npnn \token_if_protected_long_macro:N #1
- { p , T , F , TF }
- {
- \__str_if_eq_x_return:nn
- {
- \exp_after:wN \__token_if_long_macro:w
- \token_to_meaning:N #1 LOXG~MACRO \q_stop
- }
- { \token_to_str:N \protected \token_to_str:N \ }
- }
- \cs_new:Npn \__token_if_long_macro:w #1 LOXG~MACRO #2 \q_stop { #1 ~ }
}
+\__token_tmp:w { chardef } { char" } { \token_to_str:N \char" }
+\__token_tmp:w { mathchardef } { char" } { \token_to_str:N \mathchar" }
+\__token_tmp:w { long_macro } { macro } { \tl_to_str:n { \long } macro }
+\__token_tmp:w { protected_macro } { macro }
+ { \tl_to_str:n { \protected } macro }
+\__token_tmp:w { protected_long_macro } { macro }
+ { \token_to_str:N \protected \tl_to_str:n { \long } macro }
+\__token_tmp:w { dim_register } { dimen } { \token_to_str:N \dimen }
+\__token_tmp:w { int_register } { count } { \token_to_str:N \count }
+\__token_tmp:w { muskip_register } { muskip } { \token_to_str:N \muskip }
+\__token_tmp:w { skip_register } { skip } { \token_to_str:N \skip }
+\__token_tmp:w { toks_register } { toks } { \token_to_str:N \toks }
+\group_end:
\tex_chardef:D \c__token_A_int = `A ~ %
\use:x
{
@@ -7623,7 +7530,7 @@
%% prior consultation with the LaTeX3 Project.
%%
%% -----------------------------------------------------------------------
-\GetIdInfo$Id: l3msg.dtx 6037 2015-09-23 12:41:15Z joseph $
+\GetIdInfo$Id: l3msg.dtx 6113 2015-09-28 21:30:11Z bruno $
{L3 Messages}
\tl_new:N \l__msg_internal_tl
\tl_const:Nn \c__msg_text_prefix_tl { msg~text~>~ }
@@ -8279,28 +8186,25 @@
\tl_if_empty:nTF {#2} { open } { in~use: }
}
\group_begin:
-\char_set_catcode_math_superscript:N \^
-\char_set_lccode:nn { `^ } { `\ }
-\char_set_lccode:nn { `L } { `L }
-\char_set_lccode:nn { `T } { `T }
-\char_set_lccode:nn { `X } { `X }
-\tex_lowercase:D
+\cs_set_protected:Npn \__msg_tmp:w #1#2
{
- \cs_new:Npx \__msg_expandable_error:n #1
+ \group_end:
+ \cs_new:Npn \__msg_expandable_error:n ##1
{
- \exp_not:n
- {
- \exp:w
- \exp_after:wN \exp_after:wN
- \exp_after:wN \__msg_expandable_error:w
- \exp_after:wN \exp_after:wN
- \exp_after:wN \exp_end:
- }
- \exp_not:N \use:n { \exp_not:c { LaTeX3~error: } ^ #1 } ^
+ \exp:w
+ \exp_after:wN \exp_after:wN
+ \exp_after:wN \__msg_expandable_error:w
+ \exp_after:wN \exp_after:wN
+ \exp_after:wN \exp_end:
+ \use:n { #2 #1 ##1 } #1
}
- \cs_new:Npn \__msg_expandable_error:w #1 ^ #2 ^ { #1 }
+ \cs_new:Npn \__msg_expandable_error:w ##1 #1 ##2 #1 {##1}
}
-\group_end:
+\group_begin:
+\char_set_catcode_math_superscript:N \^
+\char_set_lccode:nn { `^ } { `\ }
+\tex_lowercase:D
+ { \group_end: \exp_args:NNc \__msg_tmp:w ^ } { LaTeX3~error: }
\cs_new:Npn \__msg_kernel_expandable_error:nnnnnn #1#2#3#4#5#6
{
\exp_args:Nf \__msg_expandable_error:n
@@ -17023,8 +16927,9 @@
%%
%% -----------------------------------------------------------------------
%%
-\GetIdInfo$Id: l3candidates.dtx 6039 2015-09-23 12:41:26Z joseph $
+\GetIdInfo$Id: l3candidates.dtx 6208 2015-10-09 20:01:54Z joseph $
{L3 Experimental additions to l3kernel}
+
\cs_new_protected_nopar:Npn \cs_log:N
{ \__msg_log_next: \cs_show:N }
\cs_new_protected_nopar:Npn \cs_log:c
@@ -17755,6 +17660,35 @@
\exp_after:wN \use_none_delimit_by_q_stop:w
\use:n { \::error ! ~ #2 : ~ #1 } \q_stop
}
+\cs_new:Npn \bool_all_p:n #1
+ { \__bool_all_aux:n #1 \q_recursion_tail \q_recursion_stop }
+\cs_new:Npn \__bool_all_aux:n #1
+ {
+ \quark_if_recursion_tail_stop_do:nn {#1} { \c_true_bool }
+ \bool_if:nF {#1}
+ { \use_i_delimit_by_q_recursion_stop:nw { \c_false_bool } }
+ \__bool_all_aux:n
+ }
+\cs_new:Npn \bool_and_p:nn #1#2
+ { \bool_if:nTF {#1} { \bool_if_p:n {#2} } { \c_false_bool } }
+\cs_new:Npn \bool_any_p:n #1
+ { \__bool_any_aux:n #1 \q_recursion_tail \q_recursion_stop }
+\cs_new:Npn \__bool_any_aux:n #1
+ {
+ \quark_if_recursion_tail_stop_do:nn {#1} { \c_false_bool }
+ \bool_if:nT {#1}
+ { \use_i_delimit_by_q_recursion_stop:nw { \c_true_bool } }
+ \__bool_any_aux:n
+ }
+\cs_new:Npn \bool_not_p:n #1 { \bool_if_p:n { ! ( #1 ) } }
+\cs_new:Npn \bool_or_p:nn #1#2
+ { \bool_if:nTF {#1} { \c_true_bool } { \bool_if_p:n {#2} } }
+\cs_new:Npn \bool_xor_p:nn #1#2
+ {
+ \int_compare:nNnTF { \bool_if_p:n {#1} } = { \bool_if_p:n {#2} }
+ \c_false_bool
+ \c_true_bool
+ }
\cs_new_protected_nopar:Npn \bool_log:N
{ \__msg_log_next: \bool_show:N }
\cs_new_protected_nopar:Npn \bool_log:n
@@ -18960,7 +18894,8 @@
\char_set_lccode:nn { 32 } {#1}
\exp_args:Nx \tex_lowercase:D
{
- \tl_const:cn { c__char_ \__int_to_roman:w #1 _tl }
+ \tl_const:Nn
+ \exp_not:c { c__char_ \__int_to_roman:w #1 _tl }
{ \exp_not:o \l__char_tmp_tl }
}
}
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
index 8941b300707..13f9a8da9ea 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
+++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
@@ -47,8 +47,8 @@
%% -----------------------------------------------------------------------
\def\ExplFileName{expl3}
\def\ExplFileDescription{L3 programming layer}
-\def\ExplFileDate{2015/09/27}
-\def\ExplFileVersion{6111}
+\def\ExplFileDate{2015/10/14}
+\def\ExplFileVersion{6210}
\let\ExplLoaderFileVersion\ExplFileVersion
\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 b0bdf9bc21c..ac51131c577 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
@@ -47,8 +47,8 @@
%% -----------------------------------------------------------------------
\def\ExplFileName{expl3}
\def\ExplFileDescription{L3 programming layer}
-\def\ExplFileDate{2015/09/27}
-\def\ExplFileVersion{6111}
+\def\ExplFileDate{2015/10/14}
+\def\ExplFileVersion{6210}
\let\ExplLoaderFileVersion\ExplFileVersion
\ProvidesPackage{\ExplFileName}
[%
diff --git a/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty b/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty
index d53c1b29014..2fede3199bf 100644
--- a/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty
+++ b/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty
@@ -46,8 +46,8 @@
%%
%% -----------------------------------------------------------------------
%%
-\RequirePackage{expl3}[2015/09/27]
-\@ifpackagelater{expl3}{2015/09/27}
+\RequirePackage{expl3}[2015/10/14]
+\@ifpackagelater{expl3}{2015/10/14}
{}
{%
\PackageError{l3keys2e}{Support package l3kernel too old}
@@ -59,8 +59,10 @@
}%
\endinput
}
-\GetIdInfo$Id: l3keys2e.dtx 6111 2015-09-27 16:06:17Z joseph $
- {LaTeX2e option processing using LaTeX3 keys}
+\def\ExplFileName{l3keys2e}
+\def\ExplFileDescription{LaTeX2e option processing using LaTeX3 keys}
+\def\ExplFileDate{2015/10/14}
+\def\ExplFileVersion{6210}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
\cs_generate_variant:Nn \clist_put_right:Nn { Nv }
diff --git a/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty b/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty
index 320805da81a..202d3a764e6 100644
--- a/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty
+++ b/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty
@@ -14,7 +14,7 @@
%% Do not distribute a modified version of this file.
%%
%% File: xfrac.dtx Copyright (C) 2004, 2008-2010 Morten Hoegholm
-%% (C) 2011,2012,2014 The LaTeX3 Project
+%% (C) 2011,2012,2014,2015 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
@@ -47,9 +47,24 @@
%%
%% -----------------------------------------------------------------------
%%
+\RequirePackage{expl3}[2015/10/14]
+\@ifpackagelater{expl3}{2015/10/14}
+ {}
+ {%
+ \PackageError{xfrac}{Support package l3kernel too old}
+ {%
+ Please install an up to date version of l3kernel\MessageBreak
+ using your TeX package manager or from CTAN.\MessageBreak
+ \MessageBreak
+ Loading xfrac will abort!%
+ }%
+ \endinput
+ }
\RequirePackage{amstext,graphicx,l3keys2e,textcomp,xparse,xtemplate}
-\GetIdInfo$Id: xfrac.dtx 4728 2014-05-04 13:25:37Z joseph $
- {L3 Experimental split-level fractions}
+\def\ExplFileName{xfrac}
+\def\ExplFileDescription{L3 Experimental split-level fractions}
+\def\ExplFileDate{2015/10/14}
+\def\ExplFileVersion{6210}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
\keys_define:nn { xfrac }
diff --git a/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty b/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty
index c16f725c5f8..170f182d2cd 100644
--- a/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty
+++ b/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty
@@ -50,8 +50,8 @@
%%
%% -----------------------------------------------------------------------
%%
-\RequirePackage{expl3}[2015/09/27]
-\@ifpackagelater{expl3}{2015/09/27}
+\RequirePackage{expl3}[2015/10/14]
+\@ifpackagelater{expl3}{2015/10/14}
{}
{%
\PackageError{xparse}{Support package l3kernel too old}
@@ -63,8 +63,10 @@
}%
\endinput
}
-\GetIdInfo$Id: xparse.dtx 6111 2015-09-27 16:06:17Z joseph $
- {L3 Experimental document command parser}
+\def\ExplFileName{xparse}
+\def\ExplFileDescription{L3 Experimental document command parser}
+\def\ExplFileDate{2015/10/14}
+\def\ExplFileVersion{6210}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
\tl_const:Nx \c__xparse_no_value_tl
diff --git a/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty b/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty
index 2008933ab74..42a205af782 100644
--- a/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty
+++ b/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty
@@ -50,8 +50,8 @@
%%
%% -----------------------------------------------------------------------
%%
-\RequirePackage{expl3}[2015/09/27]
-\@ifpackagelater{expl3}{2015/09/27}
+\RequirePackage{expl3}[2015/10/14]
+\@ifpackagelater{expl3}{2015/10/14}
{}
{%
\PackageError{xtemplate}{Support package l3kernel too old}
@@ -63,8 +63,10 @@
}%
\endinput
}
-\GetIdInfo$Id: xtemplate.dtx 6111 2015-09-27 16:06:17Z joseph $
- {L3 Experimental prototype document functions}
+\def\ExplFileName{xtemplate}
+\def\ExplFileDescription{L3 Experimental prototype document functions}
+\def\ExplFileDate{2015/10/14}
+\def\ExplFileVersion{6210}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
\tl_const:Nn \c__xtemplate_code_root_tl { template~code~>~ }