summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2013-07-28 21:53:53 +0000
committerKarl Berry <karl@freefriends.org>2013-07-28 21:53:53 +0000
commit476ef285597d50560f829ffd64532d75d937d06a (patch)
tree5c652f3fb3c6e7458bb762f660a005e2f77c3f80 /Master
parent9cad0f5f2f5f3df83a79cca1d848bf3a5feef241 (diff)
latex3 (28jul13)
git-svn-id: svn://tug.org/texlive/trunk@31299 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3dt/l3dt.pdfbin550374 -> 550367 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3sort/l3sort.pdfbin556258 -> 557262 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3flag.pdfbin390100 -> 390095 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3regex.pdfbin981442 -> 982431 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdfbin781940 -> 781932 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdfbin568590 -> 568869 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3str.pdfbin621683 -> 622988 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-analysis.pdfbin521029 -> 521023 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-build.pdfbin468393 -> 468386 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdfbin490259 -> 490253 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdfbin681144 -> 681136 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdfbin575685 -> 575678 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/expl3.pdfbin674929 -> 675499 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/interface3.pdfbin1273451 -> 1279096 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/interface3.tex89
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdfbin393848 -> 449468 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdfbin273226 -> 273218 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex242
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdfbin220222 -> 220216 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex110
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/source3.pdfbin3883722 -> 3822437 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/source3.tex106
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/source3body.tex448
-rw-r--r--Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdfbin473513 -> 474079 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdfbin633954 -> 633950 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdfbin796742 -> 450835 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdfbin722110 -> 401547 bytes
-rw-r--r--Master/texmf-dist/makeindex/l3kernel/l3doc.ist72
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx15
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx13
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx31
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3str/l3str.dtx47
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/expl3.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3.ins93
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3basics.dtx233
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx30
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3box.dtx15
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx115
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3clist.dtx99
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3expan.dtx18
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3file.dtx79
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3format.ins92
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3int.dtx167
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3keys.dtx480
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx16
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3msg.dtx143
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3prg.dtx204
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3prop.dtx348
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3quark.dtx19
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3seq.dtx327
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3skip.dtx122
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3tl.dtx232
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3token.dtx219
-rw-r--r--Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx6
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3sort/l3sort.sty6
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex-trace.sty13
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex.sty13
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty22
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3str/l3str.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3.sty4
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3basics.sty49
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3bootstrap.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3box.sty4
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3candidates.sty73
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3clist.sty4
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3doc.cls49
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3expan.sty8
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3file.sty6
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3int.sty32
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3keys.sty202
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3luatex.sty4
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3msg.sty4
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3prg.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3prop.sty141
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3quark.sty4
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3seq.sty169
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3skip.sty30
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3tl.sty30
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3token.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty6
-rw-r--r--Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty6
-rw-r--r--Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty6
84 files changed, 2784 insertions, 2355 deletions
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3dt/l3dt.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3dt/l3dt.pdf
index 3786ba4a39f..1606a2e8e1b 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/l3dt/l3dt.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/l3dt/l3dt.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3sort/l3sort.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3sort/l3sort.pdf
index 7a6d9e63dd4..1fdc37d6cca 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 e7709c5a019..0cce470817f 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 d3f9ce01af2..a022b8dec10 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 8600e9f5833..4cd3ed7d4b6 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 03945affdc6..579e06d3109 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/l3str.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str.pdf
index 06cb8f92a62..030c446ca60 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str.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 32e7a69e2a4..c18e7a37ec9 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 43d2b9dbe0e..7b86a2913aa 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 aff1a3dfd68..468ea65934a 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 8e47ec4cf68..18fb5306fff 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 5459361e7be..6a1548fe9a8 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/expl3.pdf b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
index 901a2238a13..f9a4f534745 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 e8d01c41b85..c8e7d9d1a84 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/interface3.tex b/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
new file mode 100644
index 00000000000..4c0a2761e92
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
@@ -0,0 +1,89 @@
+% \iffalse meta-comment
+%
+%% File: interfaces3.tex Copyright (C) 1990-2011 The LaTeX3 Project
+%%
+%% It may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this
+%% license or (at your option) any later version. The latest version
+%% of this license is in the file
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This file is part of the "l3kernel bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%%
+%% The released version of this bundle is available from CTAN.
+%%
+%% -----------------------------------------------------------------------
+%%
+%% The development version of the bundle can be found at
+%%
+%% http://www.latex-project.org/svnroot/experimental/trunk/
+%%
+%% for those people who are interested.
+%%
+%%%%%%%%%%%
+%% NOTE: %%
+%%%%%%%%%%%
+%%
+%% Snapshots taken from the repository represent work in progress and may
+%% not work or may contain conflicting material! We therefore ask
+%% people _not_ to put them into distributions, archives, etc. without
+%% prior consultation with the LaTeX3 Project.
+%%
+%% -----------------------------------------------------------------------
+%
+% \fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This document will typeset the LaTeX3 interface descriptions a single
+% document. This will produce quite a large file (more than 170 pages
+% currently).
+%
+% There is also a full version of the sources (source3.tex) which additionally
+% also typesets the command implementations.
+%
+% Do not forget to generate the index (as explained on the terminal output
+% near the end of the run)!
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\documentclass{l3doc}
+\listfiles
+
+\begin{document}
+
+\title{The \LaTeX3 Interfaces}
+\author{%
+ The \LaTeX3 Project\thanks
+ {%
+ E-mail:
+ \href{mailto:latex-team@latex-project.org}
+ {latex-team@latex-project.org}%
+ }%
+}
+
+\pagenumbering{roman}
+\maketitle
+
+%
+% First load all modules and typeset the documentation parts
+%
+
+\input{source3body} % all the individual modules
+
+\clearpage
+
+\begingroup
+ \def\endash{--}
+ \catcode`\-\active
+ \def-{\futurelet\temp\indexdash}
+ \def\indexdash{\ifx\temp-\endash\fi}
+ \DelayPrintIndex
+\endgroup
+
+\end{document}
+
+
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
index 0ad6b8c2265..f676112c7dd 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 6d788a41a6c..251d90daf1d 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
new file mode 100644
index 00000000000..6a3a9d122e6
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
@@ -0,0 +1,242 @@
+\iffalse meta-comment
+
+File l3styleguide.tex Copyright (C) 2011,2012 The LaTeX3 Project
+
+It may be distributed and/or modified under the conditions of the
+LaTeX Project Public License (LPPL), either version 1.3c of this
+license or (at your option) any later version. The latest version
+of this license is in the file
+
+ http://www.latex-project.org/lppl.txt
+
+This file is part of the "l3kernel bundle" (The Work in LPPL)
+and all files in that bundle must be distributed together.
+
+The released version of this bundle is available from CTAN.
+
+\fi
+
+\documentclass{l3doc}
+\usepackage{svn-multi}
+
+\svnid{$Id: l3styleguide.tex 2772 2011-09-07 15:07:41Z joseph $}
+\def\filedate{\svnfileyear/\svnfilemonth/\svnfileday}
+
+\title{%
+ The \LaTeX3 kernel: style guide for code authors%
+ \thanks
+ {%
+ This file describes v\svnfilerev,
+ last revised \filedate.
+ }%
+}
+\author{%
+ The \LaTeX3 Project\thanks
+ {%
+ E-mail:
+ \href{mailto:latex-team@latex-project.org}%
+ {latex-team@latex-project.org}%
+ }%
+}
+\date{Released \filedate}
+
+\begin{document}
+
+\maketitle
+
+\tableofcontents
+
+\section{Introduction}
+
+This document is intended as a style guide for authors of code and
+documentation for the \LaTeX3 kernel. It covers both aspects of coding
+style and the formatting of the sources. The aim of providing these
+guidelines is help ensure consistency of the code and sources from
+different authors. Experience suggests that in the long-term this helps
+with maintenance. There will of course be places where there are
+exceptions to these guidelines: common sense should always be
+applied!
+
+\section{Documentation style}
+
+\LaTeX3 source and documentation should be written using the document
+class \cls{l3doc} in \file{dtx} format. This class provides a number
+of logical mark up elements, which should be used where possible.
+In the main, this is standard \LaTeX{} practice, but there are a
+few points to highlight:
+\begin{itemize}
+ \item
+ Where possible, use \cs{cs} to mark up control sequences
+ rather than using a verbatim environment.
+ \item
+ Arguments which are given in braces should be marked using
+ \cs{Arg} when code-level functions are discussed, but using
+ \cs{marg} for document functions.
+ \item
+ The names \TeX{}, \LaTeX{}, \emph{etc}.\ use the normal logical mark
+ up followed by an empty group (|{}|), with the exception of |\LaTeX3|,
+ where the number should follow directly.
+ \item
+ Where in line verbatim text is used, it should be marked up
+ using the \verb=|...|= construct (\emph{i.e.}~vertical bars delimit
+ the verbatim text).
+ \item In line quotes should be marked up using the \cs{enquote}
+ function.
+ \item
+ Where numbers in the source have a mathematical meaning,
+ they should be included in math mode. Such in-line math mode
+ material should be marked up using |$...$| and \emph{not}
+ |\(...\)|.
+\end{itemize}
+
+Line length in the source files should to be under $80$
+characters where possible, as this helps keep everything on the screen
+when editing files. In the \file{dtx} format, documentation lines start
+with a \texttt{\%}, which is usually followed by a space to leave a
+\enquote{comment margin} at the start of each line.
+
+As with code indenting (see later), nested environments and arguments
+should be indented by (at least) two spaces to make the nature of the nesting
+clear. Thus for example a typical arrangement for the \env{function}
+environment might be
+\begin{verbatim*}
+\begin{function}{\seq_gclear:N, \seq_gclear:c}
+ \begin{syntax}
+ \cs{seq_gclear:N} \meta{sequence}
+ \end{syntax}
+ Clears all entries from the \meta{sequence} globally.
+\end{function}
+\end{verbatim*}
+The \enquote{outer} \verb*|% \begin{function}| should have the customary
+space after the |%| character at the start of the line.
+
+In general, a single \env{function} or \env{macro} environment should be
+used for a group of closely-related functions, for example argument
+specification variants. In such cases, a comma-separated list should be
+used, as shown in the preceding example.
+
+\section{Format of the code itself}
+
+The requirement for less than $80$ characters per line applies to the code
+itself as well as the surrounding documentation. A number of the general
+style principals for \LaTeX3 code apply: these are described in the following
+paragraph and an example is then given.
+
+With the exception of simple runs of parameter (|{#1}|, |#1#2|,
+\emph{etc.}), everything should divided up using spaces to make the code
+more readable. In general, these will be single spaces, but in some
+places it makes more sense to align parts of the code to emphasise
+similarity. (Tabs should not be used for introducing white space.)
+
+Each conceptually-separate step in a function should be on a separate
+line, to make the meaning clearer. Hence the \texttt{false} branch
+in the example uses two lines for the two auxiliary function uses.
+
+Within the definition, a two-space indent should be used to show each
+\enquote{level} of code. Thus in the example \cs{tl_if_empty:nTF} is
+indented by two spaces, but the two branches are indented by four
+spaces. Within the \texttt{false} branch, the need for multiple lines
+means that an additional two-space indent should be used to show that
+these lines are all part of the brace group.
+
+The result of these lay-out conventions is code which will in general
+look like the example:
+\begin{verbatim*}
+\cs_new:Npn \module_foo:nn #1#2
+ {
+ \tl_if_empty:nTF {#1}
+ { \module_foo_aux:n { X #2 } }
+ {
+ \module_foo_aux:nn {#1} {#2}
+ \module_foo_aux:n {#1#2}
+ }
+ }
+\end{verbatim*}
+
+\section{Code conventions}
+
+All code-level functions should be \enquote{long} if they accept any
+arguments, even if it seems \enquote{very unlikely} that a \cs{par} token
+will be passed. Thus \cs{cs_new_nopar:Npn} and so forth should only be used
+to create functions which accept no arguments at all.
+
+The expandability of each function should be well-defined. Functions which
+cannot be fully expanded must be \texttt{protected}. This means that expandable
+functions must themselves only contain expandable material. Functions which
+use any non-expandable material must be defined using \cs{cs_new_protected:Npn}
+or similar.
+
+When using \cs{cs_generate_variant:Nn}, group related variants together
+to make the pattern clearer. A common example is variants of a function
+which has an \texttt{N}-type first argument:
+\begin{verbatim}
+ \cs_generate_variant:Nn \foo:Nn { NV , No }
+ \cs_generate_variant:Nn \foo:Nn { c , cV , co }
+\end{verbatim}
+
+There are cases where omitting braces from \texttt{o}-type arguments
+is desirable for performance reasons. This should only be done if the
+argument is a single token, thus for example
+\begin{verbatim}
+ \tl_set:No \l_some_tl \l_some_other_tl
+\end{verbatim}
+remains clear and can be used where appropriate.
+
+\section{Private and internal functions}
+
+Private functions (those starting \cs{__}) should not be used between modules.
+The only exception is where a \enquote{family} of modules share some
+\enquote{internal} methods: this happens most obviously in the kernel itself.
+Any internal functions or variables \emph{must} be documented in the same way
+as public ones.
+
+The \pkg{l3docstrip} method should be used for internal functions in a module.
+This requires a line
+\begin{quote}
+ \ttfamily
+ \%<@@=\meta{module}>
+\end{quote}
+at the start of the source (\texttt{.dtx}) file, with internal functions
+then written in the form
+\begin{verbatim}
+ \cs_new_protected:Npn \@@_function:nn #1#2
+ ...
+\end{verbatim}
+
+\section{Auxiliary functions}
+
+In general, the team encourage the use of descriptive names in \LaTeX3 code.
+Thus many helper functions will have names which describe briefly what they do,
+rather than simply indicating that they are auxiliary to some higher-level
+function. However, there are places where one or more \texttt{aux} functions
+are required. Where possible, these should be differentiated by signature
+\begin{verbatim}
+ \cs_new_protected:Npn \@@_function:nn #1#2
+ {
+ ...
+ }
+ \cs_new_protected:Npn \@@_function_aux:nn #1#2
+ {
+ ...
+ }
+ \cs_new_protected:Npn \@@_function_aux:w #1#2 \q_stop
+ {
+ ...
+ }
+\end{verbatim}
+Where more than one auxiliary shares the same signature, the recommended naming
+scheme is \texttt{auxi}, \texttt{auxii} and so on.
+\begin{verbatim}
+ \cs_new_protected:Npn \@@_function_auxi:nn #1#2
+ {
+ ...
+ }
+ \cs_new_protected:Npn \@@_function_auxii:nn #1#2
+ {
+ ...
+ }
+\end{verbatim}
+The use of \texttt{aux_i}, \texttt{aux_ii}, \emph{etc.}\ is discouraged as this
+conflicts with the convention used by \cs{use_i:nn} and related functions.
+
+\end{document}
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
index bc5f88b549b..6fc10de6915 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
new file mode 100644
index 00000000000..4dfc70e0e97
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
@@ -0,0 +1,110 @@
+\iffalse meta-comment
+
+File l3syntax-changes.tex Copyright (C) 2011-2012 The LaTeX3 Project
+
+It may be distributed and/or modified under the conditions of the
+LaTeX Project Public License (LPPL), either version 1.3c of this
+license or (at your option) any later version. The latest version
+of this license is in the file
+
+ http://www.latex-project.org/lppl.txt
+
+This file is part of the "l3kernel bundle" (The Work in LPPL)
+and all files in that bundle must be distributed together.
+
+The released version of this bundle is available from CTAN.
+
+\fi
+
+\documentclass{l3doc}
+
+\usepackage{svn-multi}
+
+\svnid{$Id: l3syntax-changes.tex 4048 2012-08-02 09:49:10Z joseph $}
+\def\filedate{\svnfileyear/\svnfilemonth/\svnfileday}
+
+\title{%
+ Syntax changes in \LaTeX3 functions
+ \thanks
+ {%
+ This file describes v\svnfilerev,
+ last revised \filedate.
+ }%
+}
+\author{%
+ The \LaTeX3 Project\thanks
+ {%
+ E-mail:
+ \href{mailto:latex-team@latex-project.org}%
+ {latex-team@latex-project.org}%
+ }%
+}
+\date{Released \filedate}
+
+\newcommand{\TF}{\textit{(TF)}}
+
+\begin{document}
+
+\maketitle
+
+This file lists functions whose syntax has changed after August 2011,
+with an approximate date.
+
+\section{August 2011}
+
+\begin{itemize}
+ \item \cs{tl_if_single:n\TF} recognized any non-zero number of
+ explicit spaces as \meta{true}, and did not ignore trailing spaces.
+ Now it is \meta{true} for
+ \[
+ \meta{optional spaces}
+ \meta{normal token or brace group}
+ \meta{optional spaces}.
+ \]
+ \item \cs{tl_reverse:n} stripped outer braces and lost unprotected spaces.
+ Now it keeps spaces, leaves unbraced single tokens unbraced, and
+ braced groups braced.
+ \item \cs{tl_trim_spaces:n} only removed one leading and trailing space.
+ Now removes recursively. Also, on the left it used to strip implicit
+ and explicit spaces with any character code. Now it strips only explicit
+ space characters $(32,10)$.
+\end{itemize}
+
+\section{September 2011}
+
+\begin{itemize}
+\item clist functions which receive an \texttt{n}-type comma list argument
+ now trim spaces from each item in the argument.
+\end{itemize}
+
+\section{June 2012}
+
+\begin{itemize}
+ \item Access to list functions now indexes from~$1$, not from~$0$.
+ This applies to multiple choices in the \pkg{l3keys} module and
+ the \cs{clist_item:Nn}, \cs{seq_item:Nn} and \cs{tl_item:Nn}
+ functions.
+ \item \cs{tl_trim_spaces:n} now requires a variable number of
+ expansions to fully expand, rather than exactly two. Of course,
+ \texttt{x}-type expansion still correctly evaluates this function.
+\end{itemize}
+
+\section{July 2012}
+
+\begin{itemize}
+ \item The \cs{tl_if_head_eq_meaning:nN}, \cs{tl_if_head_eq_catcode:nN}
+ and \cs{tl_if_head_eq_charcode:nN} conditionals now never match when
+ their first argument is empty.
+\end{itemize}
+
+\section{August 2012}
+
+\begin{itemize}
+ \item \cs{lua_now:x} is now a standard \texttt{x}-type expansion of
+ \cs{lua_now:n}, which does no expansion. Engine-level expansion is moved
+ to \cs{lua_now_x:n}, reflecting the fact that this is non-standard in the
+ same way as for example \cs{str_if_eq_x:nn(TF)}.
+\end{itemize}
+
+
+\end{document}
diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
index 5c8550ec27d..26f6f5585ea 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3.tex b/Master/texmf-dist/doc/latex/l3kernel/source3.tex
new file mode 100644
index 00000000000..22c3c44048d
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/l3kernel/source3.tex
@@ -0,0 +1,106 @@
+% \iffalse meta-comment
+%
+%% File: source3.tex Copyright (C) 1990-2011 The LaTeX3 Project
+%%
+%% It may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this
+%% license or (at your option) any later version. The latest version
+%% of this license is in the file
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This file is part of the "l3kernel bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%%
+%% The released version of this bundle is available from CTAN.
+%%
+%% -----------------------------------------------------------------------
+%%
+%% The development version of the bundle can be found at
+%%
+%% http://www.latex-project.org/svnroot/experimental/trunk/
+%%
+%% for those people who are interested.
+%%
+%%%%%%%%%%%
+%% NOTE: %%
+%%%%%%%%%%%
+%%
+%% Snapshots taken from the repository represent work in progress and may
+%% not work or may contain conflicting material! We therefore ask
+%% people _not_ to put them into distributions, archives, etc. without
+%% prior consultation with the LaTeX3 Project.
+%%
+%% -----------------------------------------------------------------------
+%
+% \fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This document will typeset the LaTeX3 sources as a single document.
+% This will produce quite a large file (more than 780 pages).
+%
+% There is also a shorter version (interface3.tex) that only typesets the
+% command % interface descriptions.
+%
+% Do not forget to generate the index (as explained on the terminal output
+% near the end of the run)!
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentclass{l3doc}
+\listfiles
+
+\begin{document}
+
+\title{The \LaTeX3 Sources}
+\author{%
+ The \LaTeX3 Project\thanks
+ {%
+ E-mail:
+ \href{mailto:latex-team@latex-project.org}
+ {latex-team@latex-project.org}%
+ }%
+}
+
+\pagenumbering{roman}
+\maketitle
+
+%
+% First load all modules and typeset the documentation parts
+%
+
+\input{source3body} % all the individual modules
+
+%
+% Now reload all modules and typeset the implementation parts
+%
+
+\part{Implementation}
+
+\def\maketitle{}
+\EnableImplementation
+\DisableDocumentation
+\DocInputAgain
+
+\clearpage
+\pagestyle{headings}
+
+% Make TeX shut up.
+\hbadness=10000
+\newcount\hbadness
+\hfuzz=\maxdimen
+
+\PrintChanges
+\clearpage
+
+\begingroup
+ \def\endash{--}
+ \catcode`\-\active
+ \def-{\futurelet\temp\indexdash}
+ \def\indexdash{\ifx\temp-\endash\fi}
+
+ \DelayPrintIndex
+\endgroup
+
+\end{document}
diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3body.tex b/Master/texmf-dist/doc/latex/l3kernel/source3body.tex
new file mode 100644
index 00000000000..c5dbc33a7b3
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/l3kernel/source3body.tex
@@ -0,0 +1,448 @@
+% \iffalse meta-comment
+%
+%% File: source3body.tex Copyright (C) 1990-2012 The LaTeX3 Project
+%%
+%% It may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this
+%% license or (at your option) any later version. The latest version
+%% of this license is in the file
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This file is part of the "l3kernel bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%%
+%% The released version of this bundle is available from CTAN.
+%%
+%% -----------------------------------------------------------------------
+%%
+%% The development version of the bundle can be found at
+%%
+%% http://www.latex-project.org/svnroot/experimental/trunk/
+%%
+%% for those people who are interested.
+%%
+%%%%%%%%%%%
+%% NOTE: %%
+%%%%%%%%%%%
+%%
+%% Snapshots taken from the repository represent work in progress and may
+%% not work or may contain conflicting material! We therefore ask
+%% people _not_ to put them into distributions, archives, etc. without
+%% prior consultation with the LaTeX3 Project.
+%%
+%% -----------------------------------------------------------------------
+%
+% \fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This file is used by
+%
+% source3.tex % documentation including implementation
+%
+% interface3.tex % only interface documentation
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\begin{abstract}
+
+\setlength\parindent{0pt}
+\setlength\parskip{\baselineskip}
+
+\noindent
+This is the reference documentation for the \pkg{expl3}
+programming environment. The \pkg{expl3} modules set up an experimental
+naming scheme for \LaTeX{} commands, which allow the \LaTeX{} programmer
+to systematically name functions and variables, and specify the argument
+types of functions.
+
+The \TeX{} and \eTeX{} primitives are all given a new name according to
+these conventions. However, in the main direct use of the primitives is
+not required or encouraged: the \pkg{expl3} modules define an
+independent low-level \LaTeX3 programming language.
+
+At present, the \pkg{expl3} modules are designed to be loaded on top of
+\LaTeXe{}. In time, a \LaTeX3 format will be produced based on this code.
+This allows the code to be used in \LaTeXe{} packages \emph{now} while a
+stand-alone \LaTeX3 is developed.
+
+\begin{bfseries}
+ While \pkg{expl3} is still experimental, the bundle is now regarded as
+ broadly stable. The syntax conventions and functions provided are now
+ ready for wider use. There may still be changes to some functions, but
+ these will be minor when compared to the scope of \pkg{expl3}.
+
+ New modules will be added to the distributed version of \pkg{expl3} as
+ they reach maturity.
+\end{bfseries}
+
+\end{abstract}
+
+\clearpage
+
+{%
+ \def\\{:}% fix "newlines" in the ToC
+ \tableofcontents
+}
+
+\clearpage
+\pagenumbering{arabic}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Each of the following \DocInput lines includes a file with extension
+% .dtx. Each of these files may be typeset separately. For instance
+% pdflatex l3box.dtx
+% will typeset the source of the LaTeX3 box commands. If you use the
+% Makefile, the index will be generated automatically; e.g.,
+% make doc F=l3box
+%
+% If this file is processed, each of these separate dtx files will be
+% contained as a part of a single document.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\makeatletter
+\def\partname{Part}
+\def\maketitle{\clearpage\part{\@title}}
+\let\thanks\@gobble
+\let\DelayPrintIndex\PrintIndex
+\let\PrintIndex\@empty
+\makeatother
+
+\part{Introduction to \pkg{expl3} and this document}
+
+This document is intended to act as a comprehensive reference manual
+for the \pkg{expl3} language. A general guide to the \LaTeX3
+programming language is found in \href{expl3.pdf}{expl3.pdf}.
+
+\section{Naming functions and variables}
+
+\LaTeX3 does not use \texttt{@} as a \enquote{letter} for defining
+internal macros. Instead, the symbols |_| and \texttt{:}
+are used in internal macro names to provide structure. The name of
+each \emph{function} is divided into logical units using \texttt{_},
+while \texttt{:} separates the \emph{name} of the function from the
+\emph{argument specifier} (\enquote{arg-spec}). This describes the arguments
+expected by the function. In most cases, each argument is represented
+by a single letter. The complete list of arg-spec letters for a function
+is referred to as the \emph{signature} of the function.
+
+Each function name starts with the \emph{module} to which it belongs.
+Thus apart from a small number of very basic functions, all \pkg{expl3}
+function names contain at least one underscore to divide the module
+name from the descriptive name of the function. For example, all
+functions concerned with comma lists are in module \texttt{clist} and
+begin \cs{clist_}.
+
+Every function must include an argument specifier. For functions which
+take no arguments, this will be blank and the function name will end
+\texttt{:}. Most functions take one or more arguments, and use the
+following argument specifiers:
+\begin{description}
+ \item[\texttt{D}] The \texttt{D} specifier means \emph{do not use}.
+ All of the \TeX{} primitives are initially \cs{let} to a \texttt{D}
+ name, and some are then given a second name. Only the kernel
+ team should use anything with a \texttt{D} specifier!
+ \item[\texttt{N} and \texttt{n}] These mean \emph{no manipulation},
+ of a single token for \texttt{N} and of a set of tokens given in
+ braces for \texttt{n}. Both pass the argument through exactly as
+ given. Usually, if you use a single token for an \texttt{n} argument,
+ all will be well.
+ \item[\texttt{c}] This means \emph{csname}, and indicates that the
+ argument will be turned into a csname before being used. So
+ So \cs{foo:c} |{ArgumentOne}| will act in the same way as \cs{foo:N}
+ \cs{ArgumentOne}.
+ \item[\texttt{V} and \texttt{v}] These mean \emph{value
+ of variable}. The \texttt{V} and \texttt{v} specifiers are used to
+ get the content of a variable without needing to worry about the
+ underlying \TeX{} structure containing the data. A \texttt{V}
+ argument will be a single token (similar to \texttt{N}), for example
+ \cs{foo:V} \cs{MyVariable}; on the other hand, using \texttt{v} a
+ csname is constructed first, and then the value is recovered, for
+ example \cs{foo:v} |{MyVariable}|.
+ \item[\texttt{o}] This means \emph{expansion once}. In general, the
+ \texttt{V} and \texttt{v} specifiers are favoured over \texttt{o}
+ for recovering stored information. However, \texttt{o} is useful
+ for correctly processing information with delimited arguments.
+ \item[\texttt{x}] The \texttt{x} specifier stands for \emph{exhaustive
+ expansion}: every token in the argument is fully expanded until only
+ unexpandable ones remain. The \TeX{} \tn{edef} primitive carries out
+ this type of expansion. Functions which feature an \texttt{x}-type
+ argument are in general \emph{not} expandable, unless specifically
+ noted.
+ \item[\texttt{f}] The \texttt{f} specifier stands for \emph{full
+ expansion}, and in contrast to \texttt{x} stops at the first
+ non-expandable item (reading the argument from left to right) without
+ trying to expand it. For example, when setting a token list
+ variable (a macro used for storage), the sequence
+ \begin{verbatim}
+ \tl_set:Nn \l_mya_tl { A }
+ \tl_set:Nn \l_myb_tl { B }
+ \tl_set:Nf \l_mya_tl { \l_mya_tl \l_myb_tl }
+ \end{verbatim}
+ will leave |\l_mya_tl| with the content |A\l_myb_tl|, as |A| cannot
+ be expanded and so terminates expansion before |\l_myb_tl| is considered.
+ \item[\texttt{T} and \texttt{F}] For logic tests, there are the branch
+ specifiers \texttt{T} (\emph{true}) and \texttt{F} (\emph{false}).
+ Both specifiers treat the input in the same way as \texttt{n} (no
+ change), but make the logic much easier to see.
+ \item[\texttt{p}] The letter \texttt{p} indicates \TeX{}
+ \emph{parameters}. Normally this will be used for delimited
+ functions as \pkg{expl3} provides better methods for creating simple
+ sequential arguments.
+ \item[\texttt{w}] Finally, there is the \texttt{w} specifier for
+ \emph{weird} arguments. This covers everything else, but mainly
+ applies to delimited values (where the argument must be terminated
+ by some arbitrary string).
+\end{description}
+Notice that the argument specifier describes how the argument is
+processed prior to being passed to the underlying function. For example,
+\cs{foo:c} will take its argument, convert it to a control sequence and
+pass it to \cs{foo:N}.
+
+Variables are named in a similar manner to functions, but begin with
+a single letter to define the type of variable:
+\begin{description}
+ \item[\texttt{c}] Constant: global parameters whose value should not
+ be changed.
+ \item[\texttt{g}] Parameters whose value should only be set globally.
+ \item[\texttt{l}] Parameters whose value should only be set locally.
+\end{description}
+Each variable name is then build up in a similar way to that of a
+function, typically starting with the module\footnote{The module names are
+ not used in case of generic scratch registers defined in the data
+ type modules, e.g., the
+ \texttt{int} module contains some scratch variables called \cs{l_tmpa_int},
+ \cs{l_tmpb_int}, and so on. In such a case adding the module name up front
+ to denote the module
+ and in the back to indicate the type, as in
+ \cs{l_int_tmpa_int} would be very unreadable.} name
+and then a descriptive part.
+Variables end with a short identifier to show the variable type:
+\begin{description}
+ \item[\texttt{bool}] Either true or false.
+ \item[\texttt{box}] Box register.
+ \item[\texttt{clist}] Comma separated list.
+ \item[\texttt{coffin}] a \enquote{box with handles} --- a higher-level data
+ type for carrying out |box| alignment operations.
+ \item[\texttt{dim}] \enquote{Rigid} lengths.
+ \item[\texttt{fp}] floating-point values;
+ \item[\texttt{int}] Integer-valued count register.
+ \item[\texttt{prop}] Property list.
+ \item[\texttt{seq}] \enquote{Sequence}: a data-type used to implement lists
+ (with access at both ends) and stacks.
+ \item[\texttt{skip}] \enquote{Rubber} lengths.
+ \item[\texttt{stream}] An input or output stream (for reading from or
+ writing to, respectively).
+ \item[\texttt{tl}] Token list variables: placeholder for a token list.
+\end{description}
+
+\subsection{Terminological inexactitude}
+
+A word of warning. In this document, and others referring to the \pkg{expl3}
+programming modules, we often refer to \enquote{variables} and
+\enquote{functions} as if they
+were actual constructs from a real programming language. In truth, \TeX{}
+is a macro processor, and functions are simply macros that may or may not take
+arguments and expand to their replacement text. Many of the common variables
+are \emph{also} macros, and if placed into the input stream will simply expand
+to their definition as well~--- a \enquote{function} with no arguments and a
+\enquote{token list variable} are in truth one and the same. On the other
+hand, some \enquote{variables} are actually registers that must be
+initialised and their values set and retrieved with specific functions.
+
+The conventions of the \pkg{expl3} code are designed to clearly separate the
+ideas of \enquote{macros that contain data} and
+\enquote{macros that contain code}, and a
+consistent wrapper is applied to all forms of \enquote{data} whether they be
+macros or
+actually registers. This means that sometimes we will use phrases like
+\enquote{the function returns a value}, when actually we just mean
+\enquote{the macro expands to something}. Similarly, the term
+\enquote{execute} might be used in place of \enquote{expand}
+or it might refer to the more specific case of
+\enquote{processing in \TeX's stomach}
+(if you are familiar with the \TeX{}book parlance).
+
+If in doubt, please ask; chances are we've been hasty in writing certain
+definitions and need to be told to tighten up our terminology.
+
+\section{Documentation conventions}
+
+This document is typeset with the experimental \pkg{l3doc} class;
+several conventions are used to help describe the features of the code.
+A number of conventions are used here to make the documentation clearer.
+
+Each group of related functions is given in a box. For a function with
+a \enquote{user} name, this might read:
+\begin{function}{\ExplSyntaxOn, \ExplSyntaxOff}
+ \begin{syntax}
+ \cs{ExplSyntaxOn} \dots{} \cs{ExplSyntaxOff}
+ \end{syntax}
+ The textual description of how the function works would appear here. The
+ syntax of the function is shown in mono-spaced text to the right of
+ the box. In this example, the function takes no arguments and so the
+ name of the function is simply reprinted.
+\end{function}
+
+For programming functions, which use \texttt{_} and \texttt{:} in their name
+there are a few additional conventions: If two related functions are given
+with identical names but different argument specifiers, these are termed
+\emph{variants} of each other, and the latter functions are printed in grey to
+show this more clearly. They will carry out the same function but will take
+different types of argument:
+\begin{function}{\seq_new:N, \seq_new:c}
+ \begin{syntax}
+ \cs{seq_new:N} \meta{sequence}
+ \end{syntax}
+ When a number of variants are described, the arguments are usually
+ illustrated only for the base function. Here, \meta{sequence} indicates
+ that \cs{seq_new:N} expects the name of a sequence. From the argument
+ specifier, \cs{seq_new:c} also expects a sequence name, but as a
+ name rather than as a control sequence. Each argument given in the
+ illustration should be described in the following text.
+\end{function}
+
+\paragraph{Fully expandable functions}
+\hypertarget{expstar}{Some functions are fully expandable},
+which allows it to be used within
+an \texttt{x}-type argument (in plain \TeX{} terms, inside an \cs{edef}),
+as well as within an \texttt{f}-type argument.
+These fully expandable functions are indicated in the documentation by
+a star:
+\begin{function}[EXP]{\cs_to_str:N}
+ \begin{syntax}
+ \cs{cs_to_str:N} \meta{cs}
+ \end{syntax}
+ As with other functions, some text should follow which explains how
+ the function works. Usually, only the star will indicate that the
+ function is expandable. In this case, the function expects a \meta{cs},
+ shorthand for a \meta{control sequence}.
+\end{function}
+
+\paragraph{Restricted expandable functions}
+\hypertarget{rexpstar}{A few functions are fully expandable} but cannot be fully expanded within
+an \texttt{f}-type argument. In this case a hollow star is used to indicate
+this:
+\begin{function}[rEXP]{\seq_map_function:NN}
+ \begin{syntax}
+ \cs{seq_map_function:NN} \meta{seq} \meta{function}
+ \end{syntax}
+\end{function}
+
+\paragraph{Conditional functions}
+\hypertarget{explTF}{Conditional (\texttt{if}) functions}
+are normally defined in three variants, with
+\texttt{T}, \texttt{F} and \texttt{TF} argument specifiers. This allows
+them to be used for different \enquote{true}/\enquote{false} branches,
+depending on
+which outcome the conditional is being used to test. To indicate this
+without repetition, this information is given in a shortened form:
+\begin{function}[EXP,TF]{\xetex_if_engine:}
+ \begin{syntax}
+ \cs{xetex_if_engine:TF} \Arg{true code} \Arg{false code}
+ \end{syntax}
+ The underlining and italic of \texttt{TF} indicates that
+ \cs{xetex_if_engine:T}, \cs{xetex_if_engine:F} and
+ \cs{xetex_if_engine:TF} are all available. Usually, the illustration
+ will use the \texttt{TF} variant, and so both \meta{true code}
+ and \meta{false code} will be shown. The two variant forms \texttt{T} and
+ \texttt{F} take only \meta{true code} and \meta{false code}, respectively.
+ Here, the star also shows that this function is expandable.
+ With some minor exceptions, \emph{all} conditional functions in the
+ \pkg{expl3} modules should be defined in this way.
+\end{function}
+
+Variables, constants and so on are described in a similar manner:
+\begin{variable}{\l_tmpa_tl}
+ A short piece of text will describe the variable: there is no
+ syntax illustration in this case.
+\end{variable}
+
+In some cases, the function is similar to one in \LaTeXe{} or plain \TeX{}.
+In these cases, the text will include an extra \enquote{\textbf{\TeX{}hackers
+note}} section:
+\begin{function}[EXP]{\token_to_str:N}
+ \begin{syntax}
+ \cs{token_to_str:N} \meta{token}
+ \end{syntax}
+ The normal description text.
+ \begin{texnote}
+ Detail for the experienced \TeX{} or \LaTeXe\ programmer. In this
+ case, it would point out that this function is the \TeX{} primitive
+ \cs{string}.
+ \end{texnote}
+\end{function}
+
+\section{Formal language conventions which apply generally}
+
+As this is a formal reference guide for \LaTeX3 programming, the descriptions
+of functions are intended to be reasonably \enquote{complete}. However, there
+is also a need to avoid repetition. Formal ideas which apply to general
+classes of function are therefore summarised here.
+
+For tests which have a \texttt{TF} argument specification, the test if
+evaluated to give a logically \texttt{TRUE} or \texttt{FALSE} result.
+Depending on this result, either the \meta{true code} or the \meta{false code}
+will be left in the input stream. In the case where the test is expandable,
+and a predicate (|_p|) variant is available, the logical value determined by
+the test is left in the input stream: this will typically be part of a larger
+logical construct.
+
+\section{\TeX{} concepts not supported by \LaTeX3{}}
+
+The \TeX{} concept of an \enquote{\cs{outer}} macro is \emph{not supported}
+at all by \LaTeX3{}. As such, the functions provided here may break when
+used on top of \LaTeXe{} if \cs{outer} tokens are used in the arguments.
+
+\DisableImplementation
+
+\DocInput{l3bootstrap.dtx}
+\DocInput{l3names.dtx}
+\DocInput{l3basics.dtx}
+\DocInput{l3expan.dtx}
+\DocInput{l3prg.dtx}
+\DocInput{l3quark.dtx}
+\DocInput{l3token.dtx}
+\DocInput{l3int.dtx}
+\DocInput{l3skip.dtx}
+\DocInput{l3tl.dtx}
+\DocInput{l3seq.dtx}
+\DocInput{l3clist.dtx}
+\DocInput{l3prop.dtx}
+\DocInput{l3box.dtx}
+\DocInput{l3coffins.dtx}
+\DocInput{l3color.dtx}
+\DocInput{l3msg.dtx}
+\DocInput{l3keys.dtx}
+\DocInput{l3file.dtx}
+\DocInput{l3fp.dtx}
+% To get the various submodules of l3fp to appear in the implementation
+% part only, they have to be added to the documentation list after typesetting
+% the 'user' part just for the main module.
+\ExplSyntaxOn
+\clist_gput_right:Nn \g_docinput_clist
+ {
+ l3fp-aux.dtx ,
+ l3fp-traps.dtx ,
+ l3fp-round.dtx ,
+ l3fp-parse.dtx ,
+ l3fp-logic.dtx ,
+ l3fp-basics.dtx ,
+ l3fp-extended.dtx ,
+ l3fp-expo.dtx ,
+ l3fp-trig.dtx ,
+ l3fp-convert.dtx ,
+ l3fp-assign.dtx ,
+ l3fp-old.dtx ,
+ }
+\ExplSyntaxOff
+\DocInput{l3luatex.dtx}
+
+\DocInput{l3candidates.dtx}
+
+\endinput
diff --git a/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf b/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf
index 59c9f4f46f0..7bf54fba7fa 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 16a718576c1..8218721ad20 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 e6c5670bb46..619a074273d 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 93c882f59ff..d773a6d9fb6 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/makeindex/l3kernel/l3doc.ist b/Master/texmf-dist/makeindex/l3kernel/l3doc.ist
new file mode 100644
index 00000000000..781c87e50f2
--- /dev/null
+++ b/Master/texmf-dist/makeindex/l3kernel/l3doc.ist
@@ -0,0 +1,72 @@
+%%
+%% This is file `l3doc.ist',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% l3doc.dtx (with options: `docist')
+%%
+%%
+%% EXPERIMENTAL CODE
+%%
+%% Do not distribute this file without also distributing the
+%% source files specified above.
+%%
+%% Do not distribute a modified version of this file.
+%%
+%%
+%% File: l3doc.dtx Copyright (C) 1990-2012 The LaTeX3 project
+%%
+%% It may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this
+%% license or (at your option) any later version. The latest version
+%% of this license is in the file
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This file is part of the "l3kernel bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%%
+%% The released version of this bundle is available from CTAN.
+%%
+%% -----------------------------------------------------------------------
+%%
+%% The development version of the bundle can be found at
+%%
+%% http://www.latex-project.org/svnroot/experimental/trunk/
+%%
+%% for those people who are interested.
+%%
+%%%%%%%%%%%
+%% NOTE: %%
+%%%%%%%%%%%
+%%
+%% Snapshots taken from the repository represent work in progress and may
+%% not work or may contain conflicting material! We therefore ask
+%% people _not_ to put them into distributions, archives, etc. without
+%% prior consultation with the LaTeX3 Project.
+%%
+%% -----------------------------------------------------------------------
+actual '='
+quote '!'
+level '#'
+preamble
+"\n \\begin{theindex} \n \\makeatletter\\scan@allowedfalse\n"
+postamble
+"\n\n \\end{theindex}\n"
+item_x1 "\\efill \n \\subitem "
+item_x2 "\\efill \n \\subsubitem "
+delim_0 "\\pfill "
+delim_1 "\\pfill "
+delim_2 "\\pfill "
+lethead_prefix "{\\bfseries\\hfil "
+lethead_suffix "\\hfil}\\nopagebreak\n"
+lethead_flag 1
+heading_prefix "{\\bfseries\\hfil "
+heading_suffix "\\hfil}\\nopagebreak\n"
+headings_flag 1
+
+page_precedence "rnaA"
+%%
+%%
+%% End of file `l3doc.ist'.
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx b/Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx
index b73a9084484..0733e3a1cba 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx
@@ -36,7 +36,7 @@
%
%<*driver|package>
\RequirePackage{expl3}
-\GetIdInfo$Id: l3sort.dtx 4491 2013-05-12 16:22:18Z bruno $
+\GetIdInfo$Id: l3sort.dtx 4566 2013-07-24 19:34:45Z bruno $
{L3 Experimental sorting functions}
%</driver|package>
%<*driver>
@@ -280,10 +280,11 @@
% The first argument to \cs{@@_main:NNNnNn} is the final
% assignment function used, either \cs{tl_set:Nn} or
% \cs{tl_gset:Nn} to control local versus global results.
-% The second argument is what mapping function is used
-% when storing items to \tn{toks} registers. The third
-% is used to build back the correct kind of list from the
-% contents of the \tn{toks} registers. Fourth and fifth
+% The second argument is what mapping function is used when storing
+% items to \tn{toks} registers, and the third breaks away from the
+% loop. The fourth is used to build back the correct kind of list
+% from the contents of the \tn{toks} registers, including the leading
+% \cs{s__seq} and trailing \cs{s_obj_end}. Fifth and sixth
% arguments are the variable to sort, and the sorting method
% as inline code.
% \begin{macrocode}
@@ -291,13 +292,13 @@
{
\@@_main:NNNnNn \tl_set:Nn
\seq_map_inline:Nn \seq_map_break:
- { \@@_toks:NNw \exp_not:N \__seq_item:n 0 ; }
+ { \s__seq \@@_toks:NNw \exp_not:N \__seq_item:n 0 ; \s_obj_end }
}
\cs_new_protected_nopar:Npn \seq_gsort:Nn
{
\@@_main:NNNnNn \tl_gset:Nn
\seq_map_inline:Nn \seq_map_break:
- { \@@_toks:NNw \exp_not:N \__seq_item:n 0 ; }
+ { \s__seq \@@_toks:NNw \exp_not:N \__seq_item:n 0 ; \s_obj_end }
}
% \end{macrocode}
% \end{macro}
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx
index 1ab8905e6aa..82a8e0ae577 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{expl3}
-\GetIdInfo$Id: l3regex.dtx 4482 2013-04-24 21:05:12Z joseph $
+\GetIdInfo$Id: l3regex.dtx 4576 2013-07-24 21:40:24Z joseph $
{L3 Experimental regular expressions}
%</driver|package>
%<*driver>
@@ -2542,13 +2542,12 @@
{
\token_if_eq_meaning:NNT \@@_compile_special:N #1
{
- \str_case:nnn { #2 }
+ \str_case:nn { #2 }
{
: { \@@_compile_class_posix:NNNNw }
= { \__msg_kernel_warning:nnx { regex } { posix-unsupported } { = } }
. { \__msg_kernel_warning:nnx { regex } { posix-unsupported } { . } }
}
- { }
}
\@@_compile_raw:N [ #1 #2
}
@@ -3164,7 +3163,7 @@
\@@_show_push:n {~}
#2
\exp_last_unbraced:Nf
- \int_case:nnn { \l_@@_show_lines_int }
+ \int_case:nnF { \l_@@_show_lines_int }
{
{0}
{
@@ -3206,7 +3205,7 @@
\cs_new:Npn \@@_show_anchor_to_str:N #1
{
anchor~at~
- \str_case:nnn { #1 }
+ \str_case:nnF { #1 }
{
{ \l_@@_min_pos_int } { start~(\iow_char:N\\A) }
{ \l_@@_start_pos_int } { start~of~match~(\iow_char:N\\G) }
@@ -5439,11 +5438,13 @@
\flag_clear:n { @@_end }
\tl_set:Nx \l_@@_internal_a_tl
{
+ \s__seq
\int_step_function:nnnN
{ \c_two * \l_@@_max_state_int }
\c_one
{ \l_@@_submatch_int - \c_one }
\@@_extract_seq_aux:n
+ \s_obj_end
}
\int_compare:nNnF
{ \flag_height:n { @@_begin } + \flag_height:n { @@_end } }
@@ -5934,7 +5935,7 @@
\str_if_eq_x:nnF { #1 #2 } { 1 0 }
{
, ~ repeated ~
- \int_case:nnn {#2}
+ \int_case:nnF {#2}
{
{ -1 } { #1~or~more~times,~\bool_if:NTF #3 { lazy } { greedy } }
{ 0 } { #1~times }
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx
index 3237dc3aaa4..10eea3278f4 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx
@@ -547,13 +547,24 @@
\cs_new:Npn \seq_format:Nn #1#2
{
\tl_to_str:f
- { \@@_seq:of {#1} { \@@_parse:n {#2} } }
+ {
+ \@@_seq:ff { \exp_after:wN \@@_seq_extract:w #1 }
+ { \@@_parse:n {#2} }
+ }
}
\cs_generate_variant:Nn \seq_format:Nn { c }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[aux, EXP]{\@@_seq:nn, \@@_seq:of}
+% \begin{macro}[aux, rEXP]{\@@_seq_extract:w}
+% Extract the contents of a sequence as items of the form
+% |\__seq_item:n| \Arg{item}.
+% \begin{macrocode}
+\cs_new:Npn \@@_seq_extract:w \s__seq #1 \s_obj_end { \exp_stop_f: #1 }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[aux, EXP]{\@@_seq:nn, \@@_seq:ff}
% The first argument is the contents of a \texttt{seq} variable. The
% second is a parsed \meta{format specification}. Set up the loop.
% \begin{macrocode}
@@ -563,7 +574,7 @@
#1
{ ? \@@_seq_end:w } { }
}
-\cs_generate_variant:Nn \@@_seq:nn { of }
+\cs_generate_variant:Nn \@@_seq:nn { ff }
% \end{macrocode}
% \end{macro}
%
@@ -644,7 +655,7 @@
\int_compare:nNnTF {#7} < \c_zero
{ \@@_put:nw { - } }
{
- \str_case:nnn {#3}
+ \str_case:nnF {#3}
{
{ ~ } { \@@_put:ow { \c_catcode_other_space_tl } }
{ + } { \@@_put:nw { + } }
@@ -657,7 +668,7 @@
\__msg_kernel_expandable_error:nnnn
{ str } { invalid-precision-format } {#5} {int}
}
- \str_case:nnn {#6}
+ \str_case:nnF {#6}
{
{ ? } { \@@_int:NwnnNNn \use:n }
{ d } { \@@_int:NwnnNNn \use:n }
@@ -757,7 +768,7 @@
\token_if_eq_meaning:NNTF 2 #8
{ \@@_put:nw { - } }
{
- \str_case:nnn {#3}
+ \str_case:nnF {#3}
{
{ ~ } { \@@_put:ow { \c_catcode_other_space_tl } }
{ + } { \@@_put:nw { + } }
@@ -768,7 +779,7 @@
\tl_if_empty:nTF {#5}
{ \@@_put:nw { { 6} } }
{ \@@_put:nw { {#5} } }
- \str_case:nnn {#6}
+ \str_case:nnF {#6}
{
{ e } { \@@_fp:wnnnNNw \@@_fp_e:wn }
{ f } { \@@_fp:wnnnNNw \@@_fp_f:wn }
@@ -828,7 +839,7 @@
\group_end:
\cs_new:Npn \@@_fp_e:wn \s__fp \__fp_chk:w #1#2#3 ; #4
{
- \int_case:nnn {#1}
+ \int_case:nnF {#1}
{
{0} { \use:nf { 0 . } { \prg_replicate:nn {#4} { 0 } } e 0 }
{2} { inf }
@@ -869,7 +880,7 @@
% \begin{macrocode}
\cs_new:Npn \@@_fp_f:wn \s__fp \__fp_chk:w #1#2#3 ; #4
{
- \int_case:nnn {#1}
+ \int_case:nnF {#1}
{
{0} { \use:nf { 0 . } { \prg_replicate:nn {#4} { 0 } } }
{2} { inf }
@@ -907,7 +918,7 @@
% \begin{macrocode}
\cs_new:Npn \@@_fp_g:wn \s__fp \__fp_chk:w #1#2 ; #3
{
- \int_case:nnn {#1}
+ \int_case:nnF {#1}
{
{0} { 0 }
{2} { inf }
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.dtx
index 836bb0481f2..90a2575bcd0 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{expl3}
-\GetIdInfo$Id: l3str.dtx 4482 2013-04-24 21:05:12Z joseph $
+\GetIdInfo$Id: l3str.dtx 4576 2013-07-24 21:40:24Z joseph $
{L3 Experimental strings}
%</driver|package>
%<*driver>
@@ -334,42 +334,51 @@
% is logically \texttt{true}.
% \end{function}
%
-% \begin{function}[added = 2012-06-03, EXP]{\str_case:nnn, \str_case:onn}
+% \begin{function}[added = 2013-07-24, EXP, TF]{\str_case:nn, \str_case:on}
% \begin{syntax}
-% \cs{str_case:nnn} \Arg{test string} \\
+% \cs{str_case:nnTF} \Arg{test string} \\
% ~~|{| \\
-% ~~~~\Arg{string case1} \Arg{code case1} \\
-% ~~~~\Arg{string case2} \Arg{code case2} \\
+% ~~~~\Arg{string case_1} \Arg{code case_1} \\
+% ~~~~\Arg{string case_2} \Arg{code case_2} \\
% ~~~~\ldots \\
-% ~~~~\Arg{string case$\sb{n}$} \Arg{code case$\sb{n}$} \\
+% ~~~~\Arg{string case_n} \Arg{code case_n} \\
% ~~|}| \\
-% ~~\Arg{else case}
+% ~~\Arg{true code}
+% ~~\Arg{false code}
% \end{syntax}
% This function compares the \meta{test string} in turn with each
% of the \meta{string cases}. If the two are equal (as described for
% \cs{str_if_eq:nnTF} then the
-% associated \meta{code} is left in the input stream. If none of
-% the tests are \texttt{true} then the \texttt{else code} will be
-% left in the input stream.
+% associated \meta{code} is left in the input stream. If any of the
+% cases are matched, the \meta{true code} is also inserted into the
+% input stream (after the code for the appropriate case), while if none
+% match then the \meta{false code} is inserted. The function
+% \cs{str_case:nn}, which does nothing if there is no match, is also
+% available.
% \end{function}
%
-% \begin{function}[added = 2012-06-05, EXP]{\str_case_x:nnn}
+% \begin{function}[added = 2013-07-24, EXP, TF]{\str_case_x:nn}
% \begin{syntax}
% \cs{str_case_x:nnn} \Arg{test string} \\
% ~~|{| \\
-% ~~~~\Arg{string case1} \Arg{code case1} \\
-% ~~~~\Arg{string case2} \Arg{code case2} \\
+% ~~~~\Arg{string case_1} \Arg{code case_1} \\
+% ~~~~\Arg{string case_2} \Arg{code case_2} \\
% ~~~~\ldots \\
-% ~~~~\Arg{string case$\sb{n}$} \Arg{code case$\sb{n}$} \\
+% ~~~~\Arg{string case_n} \Arg{code case_n} \\
% ~~|}| \\
-% ~~\Arg{else case}
+% ~~\Arg{true code}
+% ~~\Arg{false code}
% \end{syntax}
% This function compares the full expansion of the \meta{test string}
% in turn with the full expansion of the \meta{string cases}. If the two
% full expansions are equal (as described for \cs{str_if_eq:nnTF} then the
-% associated \meta{code} is left in the input stream. If none of the tests
-% are \texttt{true} then the \texttt{else code} will be left in the input
-% stream. The \meta{test string} is expanded in each comparison, and must
+% associated \meta{code} is left in the input stream. If any of the
+% cases are matched, the \meta{true code} is also inserted into the
+% input stream (after the code for the appropriate case), while if none
+% match then the \meta{false code} is inserted. The function
+% \cs{str_case_x:nn}, which does nothing if there is no match, is also
+% available.
+% The \meta{test string} is expanded in each comparison, and must
% always yield the same result: for example, random numbers must
% not be used within this string.
% \end{function}
@@ -1013,7 +1022,7 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}[EXP]{\str_case:nnn, \str_case:onn, \str_case_x:nnn}
+% \begin{macro}[EXP, TF]{\str_case:nn, \str_case:on, \str_case_x:nn}
% Defined in \pkg{l3basics} at present.
% \end{macro}
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
index 612cfb35e2c..56754ad3f02 100644
--- a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
@@ -49,8 +49,8 @@
%<*driver|package>
\def\ExplFileName{expl3}
\def\ExplFileDescription{L3 Experimental code bundle wrapper}
-\def\ExplFileDate{2013/07/12}
-\def\ExplFileVersion{4544}
+\def\ExplFileDate{2013/07/28}
+\def\ExplFileVersion{4582}
%</driver|package>
%<*driver>
\documentclass[full]{l3doc}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3.ins b/Master/texmf-dist/source/latex/l3kernel/l3.ins
deleted file mode 100644
index b869a70fee5..00000000000
--- a/Master/texmf-dist/source/latex/l3kernel/l3.ins
+++ /dev/null
@@ -1,93 +0,0 @@
-\iffalse meta-comment
-
-File l3.ins Copyright (C) 2011,2012 The LaTeX3 Project
-
-It may be distributed and/or modified under the conditions of the
-LaTeX Project Public License (LPPL), either version 1.3c of this
-license or (at your option) any later version. The latest version
-of this license is in the file
-
- http://www.latex-project.org/lppl.txt
-
-This file is part of the "l3kernel bundle" (The Work in LPPL)
-and all files in that bundle must be distributed together.
-
-The released version of this bundle is available from CTAN.
-
-\fi
-
-\let\jobname\relax
-\input l3docstrip.dtx
-\askforoverwritefalse
-
-\preamble
-
-EXPERIMENTAL CODE
-
-Do not distribute this file without also distributing the
-source files specified above.
-
-Do not distribute a modified version of this file.
-
-\endpreamble
-% stop docstrip adding \endinput
-\postamble
-\endpostamble
-
-\keepsilent
-
-% ===== PACKAGE ONLY ======
-\generate{\file{expl3.sty} {\from{expl3.dtx} {package}}}
-% ========================
-\generate{\file{l3bootstrap.sty} {\from{l3bootstrap.dtx}{package}}}
-\generate{\file{l3names.sty} {\from{l3names.dtx} {package}}}
-\generate{\file{l3basics.sty} {\from{l3basics.dtx} {package}}}
-\generate{\file{l3expan.sty} {\from{l3expan.dtx} {package}}}
-\generate{\file{l3tl.sty} {\from{l3tl.dtx} {package}}}
-\generate{\file{l3seq.sty} {\from{l3seq.dtx} {package}}}
-\generate{\file{l3int.sty} {\from{l3int.dtx} {package}}}
-\generate{\file{l3quark.sty} {\from{l3quark.dtx} {package}}}
-\generate{\file{l3prg.sty} {\from{l3prg.dtx} {package}}}
-\generate{\file{l3clist.sty} {\from{l3clist.dtx} {package}}}
-\generate{\file{l3token.sty} {\from{l3token.dtx} {package}}}
-\generate{\file{l3prop.sty} {\from{l3prop.dtx} {package}}}
-\generate{\file{l3msg.sty} {\from{l3msg.dtx} {package}}}
-\generate{\file{l3file.sty} {\from{l3file.dtx} {package}}}
-\generate{\file{l3skip.sty} {\from{l3skip.dtx} {package}}}
-\generate{\file{l3keys.sty} {\from{l3keys.dtx} {package}}}
-\generate
- {%
- \file{l3fp.sty}
- {%
- \from{l3fp.dtx} {package}
- \from{l3fp-aux.dtx} {package}
- \from{l3fp-traps.dtx} {package}
- \from{l3fp-round.dtx} {package}
- \from{l3fp-parse.dtx} {package}
- \from{l3fp-logic.dtx} {package}
- \from{l3fp-basics.dtx} {package}
- \from{l3fp-extended.dtx}{package}
- \from{l3fp-expo.dtx} {package}
- \from{l3fp-trig.dtx} {package}
- \from{l3fp-convert.dtx} {package}
- \from{l3fp-assign.dtx} {package}
- \from{l3fp-old.dtx} {package}
- }%
- }
-\generate{\file{l3box.sty} {\from{l3box.dtx} {package}}}
-\generate{\file{l3coffins.sty} {\from{l3coffins.dtx} {package}}}
-\generate{\file{l3color.sty} {\from{l3color.dtx} {package}}}
-\generate{\file{l3luatex.sty} {\from{l3luatex.dtx} {package}}}
-\generate{\file{l3candidates.sty}{\from{l3candidates.dtx}{package}}}
-
-\generate{\file{l3doc.cls} {\from{l3doc.dtx} {class}}}
-\generate{\file{l3doc.ist} {\from{l3doc.dtx} {docist}}}
-
-\generate{\file{l3dvipdfmx.def} {\from{l3drivers.dtx} {package,dvipdfmx} }}
-\generate{\file{l3dvips.def} {\from{l3drivers.dtx} {package,dvips} }}
-\generate{\file{l3pdfmode.def} {\from{l3drivers.dtx} {package,pdfmode} }}
-\generate{\file{l3xdvipdfmx.def} {\from{l3drivers.dtx} {package,xdvipdfmx}}}
-
-\generate{\file{l3docstrip.tex} {\from{l3docstrip.dtx} {program}}}
-
-\endbatchfile
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
index b00dee6ec9e..a43c8fec53f 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3basics.dtx 4521 2013-07-09 11:45:31Z joseph $
+\GetIdInfo$Id: l3basics.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Basic definitions}
%</driver|package>
%<*driver>
@@ -1122,26 +1122,30 @@
% is logically \texttt{true}.
% \end{function}
%
-% \begin{function}[added = 2012-06-03, EXP]{\str_case:nnn, \str_case:onn}
+% \begin{function}[added = 2013-07-24, EXP, TF]{\str_case:nn, \str_case:on}
% \begin{syntax}
-% \cs{str_case:nnn} \Arg{test string} \\
+% \cs{str_case:nnTF} \Arg{test string} \\
% ~~|{| \\
% ~~~~\Arg{string case_1} \Arg{code case_1} \\
% ~~~~\Arg{string case_2} \Arg{code case_2} \\
% ~~~~\ldots \\
% ~~~~\Arg{string case_n} \Arg{code case_n} \\
% ~~|}| \\
-% ~~\Arg{else code}
+% ~~\Arg{true code}
+% ~~\Arg{false code}
% \end{syntax}
% This function compares the \meta{test string} in turn with each
% of the \meta{string cases}. If the two are equal (as described for
% \cs{str_if_eq:nnTF} then the
-% associated \meta{code} is left in the input stream. If none of
-% the tests are \texttt{true} then the \texttt{else code} will be
-% left in the input stream.
+% associated \meta{code} is left in the input stream. If any of the
+% cases are matched, the \meta{true code} is also inserted into the
+% input stream (after the code for the appropriate case), while if none
+% match then the \meta{false code} is inserted. The function
+% \cs{str_case:nn}, which does nothing if there is no match, is also
+% available.
% \end{function}
%
-% \begin{function}[added = 2012-06-05, EXP]{\str_case_x:nnn}
+% \begin{function}[added = 2013-07-24, EXP, TF]{\str_case_x:nn}
% \begin{syntax}
% \cs{str_case_x:nnn} \Arg{test string} \\
% ~~|{| \\
@@ -1150,15 +1154,20 @@
% ~~~~\ldots \\
% ~~~~\Arg{string case_n} \Arg{code case_n} \\
% ~~|}| \\
-% ~~\Arg{else code}
+% ~~\Arg{true code}
+% ~~\Arg{false code}
% \end{syntax}
% This function compares the full expansion of the \meta{test string}
% in turn with the full expansion of the \meta{string cases}. If the two
% full expansions are equal (as described for \cs{str_if_eq:nnTF} then the
-% associated \meta{code} is left in the input stream. If none of the tests
-% are \texttt{true} then the \texttt{else code} will be left in the input
-% stream. The \meta{test string} is expanded in each comparison, and must
-% always yield the same result: for example, random numbers should
+% associated \meta{code} is left in the input stream. If any of the
+% cases are matched, the \meta{true code} is also inserted into the
+% input stream (after the code for the appropriate case), while if none
+% match then the \meta{false code} is inserted. The function
+% \cs{str_case_x:nn}, which does nothing if there is no match, is also
+% available.
+% The \meta{test string} is expanded in each comparison, and must
+% always yield the same result: for example, random numbers must
% not be used within this string.
% \end{function}
%
@@ -1350,12 +1359,13 @@
%
% \begin{function}{\__prg_case_end:nw}
% \begin{syntax}
-% \cs{__prg_case_end:nw} \Arg{code} \meta{tokens} \cs{q_recursion_stop}
+% \cs{__prg_case_end:nw} \Arg{code} \meta{tokens} \cs{q_mark} \Arg{true code} \cs{q_mark} \Arg{false code} \cs{q_stop}
% \end{syntax}
-% Used to terminate case statements (\cs{int_case:nnn}, \emph{etc.})
+% Used to terminate case statements (\cs{int_case:nnTF}, \emph{etc.})
% by removing trailing \meta{tokens} and the end marker
-% \cs{q_recursion_stop}, and inserting the \meta{code} for the successful
-% case.
+% \cs{q_stop}, inserting the \meta{code} for the successful
+% case (if one is found) and either the \texttt{true code} or
+% \texttt{false code} for the over all outcome, as appropriate.
% \end{function}
%
% \begin{function}{\__str_if_eq_x_return:nn}
@@ -3071,28 +3081,70 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[EXP]{\str_case:nnn, \str_case_x:nnn}
+% \begin{macro}[EXP]{\str_case:nn, \str_case_x:nn}
+% \begin{macro}[EXP, TF]{\str_case:nn, \str_case_x:nn}
+% \begin{macro}[EXP, aux]{\__str_case:nnTF, \__str_case_x:nnTF}
% \begin{macro}[int, EXP]{\__prg_case_end:nw}
% \begin{macro}[aux, EXP]
% {\__str_case:nw, \__str_case_x:nw, \__str_case_end:nw}
-% No calculations for strings, otherwise no surprises.
-% \begin{macrocode}
-\cs_new:Npn \str_case:nnn #1#2#3
+% The aim here is to allow the case statement to be evaluated
+% using a known number of expansion steps (two), and without
+% needing to use an explicit \enquote{end of recursion} marker.
+% That is achieved by using the test input as the final case,
+% as this will always be true. The trick is then to tidy up
+% the output such that the appropriate case code plus either
+% the \texttt{true} or \texttt{false} branch code is inserted.
+% \begin{macrocode}
+\cs_new:Npn \str_case:nn #1#2
+ {
+ \tex_romannumeral:D
+ \__str_case:nnTF {#1} {#2} { } { }
+ }
+\cs_new:Npn \str_case:nnT #1#2#3
{
\tex_romannumeral:D
- \__str_case:nw {#1} #2 {#1} {#3} \q_recursion_stop
+ \__str_case:nnTF {#1} {#2} {#3} { }
}
+\cs_new:Npn \str_case:nnF #1#2
+ {
+ \tex_romannumeral:D
+ \__str_case:nnTF {#1} {#2} { }
+ }
+\cs_new:Npn \str_case:nnTF #1#2
+ {
+ \tex_romannumeral:D
+ \__str_case:nnTF {#1} {#2}
+ }
+\cs_new:Npn \__str_case:nnTF #1#2#3#4
+ { \__str_case:nw {#1} #2 {#1} { } \q_mark {#3} \q_mark {#4} \q_stop }
\cs_new:Npn \__str_case:nw #1#2#3
{
\str_if_eq:nnTF {#1} {#2}
{ \__str_case_end:nw {#3} }
{ \__str_case:nw {#1} }
}
-\cs_new:Npn \str_case_x:nnn #1#2#3
+\cs_new:Npn \str_case_x:nn #1#2
+ {
+ \tex_romannumeral:D
+ \__str_case_x:nnTF {#1} {#2} { } { }
+ }
+\cs_new:Npn \str_case_x:nnT #1#2#3
+ {
+ \tex_romannumeral:D
+ \__str_case_x:nnTF {#1} {#2} {#3} { }
+ }
+\cs_new:Npn \str_case_x:nnF #1#2
+ {
+ \tex_romannumeral:D
+ \__str_case_x:nnTF {#1} {#2} { }
+ }
+\cs_new:Npn \str_case_x:nnTF #1#2
{
\tex_romannumeral:D
- \__str_case_x:nw {#1} #2 {#1} {#3} \q_recursion_stop
+ \__str_case_x:nnTF {#1} {#2}
}
+\cs_new:Npn \__str_case_x:nnTF #1#2#3#4
+ { \__str_case_x:nw {#1} #2 {#1} { } \q_mark {#3} \q_mark {#4} \q_stop }
\cs_new:Npn \__str_case_x:nw #1#2#3
{
\str_if_eq_x:nnTF {#1} {#2}
@@ -3100,15 +3152,26 @@
{ \__str_case_x:nw {#1} }
}
% \end{macrocode}
-% Here, |#1| will be the code needed, |#2| will be any remaining case
-% or cases, and the \cs{c_zero} stops the \tn{romannumeral}.
-% \begin{macrocode}
-\cs_new:Npn \__prg_case_end:nw #1#2 \q_recursion_stop { \c_zero #1 }
+% To tidy up the recursion, there are two outcomes. If there was a hit to
+% one of the cases searched for, then |#1| will be the code to insert,
+% |#2| will be the \emph{next} case to check on and |#3| will be all of
+% the rest of the cases code. That means that |#4| will be the \texttt{true}
+% branch code, and |#5| will be tidy up the spare \cs{q_mark} and the
+% \texttt{false} branch. On the other hand, if none of the cases matched
+% then we arrive here using the \enquote{termination} case of comparing
+% the search with itself. That means that |#1| will be empty, |#2| will be
+% the first \cs{q_mark} and so |#4| will be the \texttt{false} code (the
+% \texttt{true} code is mopped up by |#3|).
+% \begin{macrocode}
+\cs_new:Npn \__prg_case_end:nw #1#2#3 \q_mark #4#5 \q_stop
+ { \c_zero #1 #4 }
\cs_new_eq:NN \__str_case_end:nw \__prg_case_end:nw
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
+% \end{macro}
+% \end{macro}
%
% \subsection{Breaking out of mapping functions}
%
@@ -3150,117 +3213,11 @@
%
% \subsection{Deprecated functions}
%
-% Deprecated on 2011-05-27, for removal by 2011-08-31.
-%
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \cs_gnew_nopar:Npn \cs_new_nopar:Npn
-\cs_new_eq:NN \cs_gnew:Npn \cs_new:Npn
-\cs_new_eq:NN \cs_gnew_protected_nopar:Npn \cs_new_protected_nopar:Npn
-\cs_new_eq:NN \cs_gnew_protected:Npn \cs_new_protected:Npn
-\cs_new_eq:NN \cs_gnew_nopar:Npx \cs_new_nopar:Npx
-\cs_new_eq:NN \cs_gnew:Npx \cs_new:Npx
-\cs_new_eq:NN \cs_gnew_protected_nopar:Npx \cs_new_protected_nopar:Npx
-\cs_new_eq:NN \cs_gnew_protected:Npx \cs_new_protected:Npx
-\cs_new_eq:NN \cs_gnew_nopar:cpn \cs_new_nopar:cpn
-\cs_new_eq:NN \cs_gnew:cpn \cs_new:cpn
-\cs_new_eq:NN \cs_gnew_protected_nopar:cpn \cs_new_protected_nopar:cpn
-\cs_new_eq:NN \cs_gnew_protected:cpn \cs_new_protected:cpn
-\cs_new_eq:NN \cs_gnew_nopar:cpx \cs_new_nopar:cpx
-\cs_new_eq:NN \cs_gnew:cpx \cs_new:cpx
-\cs_new_eq:NN \cs_gnew_protected_nopar:cpx \cs_new_protected_nopar:cpx
-\cs_new_eq:NN \cs_gnew_protected:cpx \cs_new_protected:cpx
-%</deprecated>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \cs_gnew_eq:NN \cs_new_eq:NN
-\cs_new_eq:NN \cs_gnew_eq:cN \cs_new_eq:cN
-\cs_new_eq:NN \cs_gnew_eq:Nc \cs_new_eq:Nc
-\cs_new_eq:NN \cs_gnew_eq:cc \cs_new_eq:cc
-%</deprecated>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \cs_gundefine:N \cs_undefine:N
-\cs_new_eq:NN \cs_gundefine:c \cs_undefine:c
-%</deprecated>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \group_execute_after:N \group_insert_after:N
-%</deprecated>
-% \end{macrocode}
-%
-% Deprecated 2011-09-06, for removal by 2011-12-31.
-%
-% \begin{variable}
-% {
-% \c_pdftex_is_engine_bool, \c_luatex_is_engine_bool,
-% \c_xetex_is_engine_bool
-% }
-% Predicates are better
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \c_luatex_is_engine_bool \luatex_if_engine_p:
-\cs_new_eq:NN \c_pdftex_is_engine_bool \pdftex_if_engine_p:
-\cs_new_eq:NN \c_xetex_is_engine_bool \xetex_if_engine_p:
-%</deprecated>
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}[EXP]
-% {
-% \use_i_after_fi:nw,
-% \use_i_after_else:nw,
-% \use_i_after_or:nw,
-% \use_i_after_orelse:nw
-% }
-% These functions return the first argument after ending the conditional.
-% This is rather specialized, and we want to de-emphasize the use of
-% primitive \TeX{} conditionals.
-% \begin{macrocode}
-%<*deprecated>
-\cs_set:Npn \use_i_after_fi:nw #1 \fi: { \fi: #1 }
-\cs_set:Npn \use_i_after_else:nw #1 \else: #2 \fi: { \fi: #1 }
-\cs_set:Npn \use_i_after_or:nw #1 \or: #2 \fi: { \fi: #1 }
-\cs_set:Npn \use_i_after_orelse:nw #1#2#3 \fi: { \fi: #1 }
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% Deprecated 2011-09-07, for removal by 2011-12-31.
-%
-% \begin{macro}{\cs_set_eq:NwN}
-% \begin{macrocode}
-%<*deprecated>
-\tex_let:D \cs_set_eq:NwN \tex_let:D
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% Deprecated 2012-06-05 for removal after 2012-12-31.
-%
-% \begin{macro}[pTF, EXP]{\str_if_eq:xx}
-% Not really true \texttt{x}-type expansion
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \str_if_eq_p:xx \str_if_eq_x_p:nn
-\cs_new_eq:NN \str_if_eq:xxT \str_if_eq_x:nnT
-\cs_new_eq:NN \str_if_eq:xxF \str_if_eq_x:nnF
-\cs_new_eq:NN \str_if_eq:xxTF \str_if_eq_x:nnTF
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\chk_if_free_cs:N}
+% \begin{macro}{\str_case:nnn, \str_case_x:nnn}
+% Deprecated 2013-07-15.
% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \chk_if_free_cs:N \__chk_if_free_cs:N
-%</deprecated>
+\cs_new_eq:NN \str_case:nnn \str_case:nnF
+\cs_new_eq:NN \str_case_x:nnn \str_case_x:nnF
% \end{macrocode}
% \end{macro}
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
index 9ce55b15be3..22b8f3ccd5c 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
@@ -119,7 +119,7 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
-\GetIdInfo$Id: l3bootstrap.dtx 4420 2013-01-08 20:00:04Z joseph $
+\GetIdInfo$Id: l3bootstrap.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Bootstrap code}
%</driver|package>
%<*driver>
@@ -663,34 +663,6 @@
% \end{macrocode}
% \end{variable}
%
-% \subsection{Deprecated functions}
-%
-% Deprecated 2012-06-19 for removal after 2012-12-31.
-%
-% \begin{macro}{\ExplSyntaxNamesOn, \ExplSyntaxNamesOff}
-% These can be set up early, as they are not used anywhere in the
-% package or format itself. Using an \tn{edef} here makes the
-% definitions that bit clearer later.
-% \begin{macrocode}
-%<*deprecated>
-\protected\edef\ExplSyntaxNamesOn
- {%
- \expandafter\noexpand
- \csname\detokenize{char_set_catcode_letter:n}\endcsname{58}%
- \expandafter\noexpand
- \csname\detokenize{char_set_catcode_letter:n}\endcsname{95}%
- }
-\protected\edef\ExplSyntaxNamesOff
- {%
- \expandafter\noexpand
- \csname\detokenize{char_set_catcode_other:n}\endcsname{58}%
- \expandafter\noexpand
- \csname\detokenize{char_set_catcode_math_subscript:n}\endcsname{95}%
- }
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
% \begin{macrocode}
%</initex|package>
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
index ddb859bd03a..537ae210617 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-%% File: l3box.dtx Copyright (C) 2005-2012 The LaTeX3 Project
+%% File: l3box.dtx Copyright (C) 2005-2013 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
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3box.dtx 4482 2013-04-24 21:05:12Z joseph $
+\GetIdInfo$Id: l3box.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Experimental boxes}
%</driver|package>
%<*driver>
@@ -1245,17 +1245,6 @@
% \end{macrocode}
% \end{macro}
%
-% \subsection{Deprecated functions}
-%
-% \begin{variable}{\l_last_box}
-% Deprecated 2011-11-13, for removal by 2012-02-28.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \l_last_box \tex_lastbox:D
-%</deprecated>
-% \end{macrocode}
-% \end{variable}
-%
% \begin{macrocode}
%</initex|package>
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
index 1eaf1bdeb0f..f9faeada808 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
@@ -36,7 +36,7 @@
%
%<*driver|package>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3candidates.dtx 4521 2013-07-09 11:45:31Z joseph $
+\GetIdInfo$Id: l3candidates.dtx 4576 2013-07-24 21:40:24Z joseph $
{L3 Experimental additions to l3kernel}
%</driver|package>
%<*driver>
@@ -2154,25 +2154,29 @@
% \end{macrocode}
%
% \begin{macro}[rEXP]{\prop_map_tokens:Nn, \prop_map_tokens:cn}
-% \begin{macro}[aux]{\@@_map_tokens:nwn}
-% The mapping grabs one key--value pair at a time, and stops when
-% reaching the marker key \cs{q_recursion_tail}, which
-% cannot appear in normal keys since those are strings. The odd
-% construction |\use:n {#1}| allows |#1| to contain any token.
+% \begin{macro}[aux]{\@@_map_tokens:nwwn}
+% The mapping is very similar to \cs{prop_map_function:NN}. It grabs
+% one key--value pair at a time, and stops when reaching the marker
+% key \cs{q_recursion_tail}, which cannot appear in normal keys since
+% those are strings. The odd construction |\use:n {#1}| allows |#1|
+% to contain any token without interfering with \cs{prop_map_break:}.
+% Argument |#2| of \cs{@@_map_tokens:nwwn} is empty, with two
+% exceptions: it is \cs{s_@@} the first time and \cs{s_obj_end} the
+% last.
% \begin{macrocode}
\cs_new:Npn \prop_map_tokens:Nn #1#2
{
- \exp_last_unbraced:Nno \@@_map_tokens:nwn {#2} #1
- \s_@@ \q_recursion_tail \s_@@ { }
+ \exp_last_unbraced:Nno \@@_map_tokens:nwwn {#2} #1
+ \@@_pair:wn \q_recursion_tail \s_@@ { }
\__prg_break_point:Nn \prop_map_break: { }
}
-\cs_new:Npn \@@_map_tokens:nwn #1 \s_@@ #2 \s_@@ #3
+\cs_new:Npn \@@_map_tokens:nwwn #1#2 \@@_pair:wn #3 \s_@@ #4
{
- \if_meaning:w \q_recursion_tail #2
+ \if_meaning:w \q_recursion_tail #3
\exp_after:wN \prop_map_break:
\fi:
- \use:n {#1} {#2} {#3}
- \@@_map_tokens:nwn {#1}
+ \use:n {#1} {#3} {#4}
+ \@@_map_tokens:nwwn {#1}
}
\cs_generate_variant:Nn \prop_map_tokens:Nn { c }
% \end{macrocode}
@@ -2180,7 +2184,7 @@
% \end{macro}
%
% \begin{macro}[EXP]{\prop_get:Nn, \prop_get:cn}
-% \begin{macro}[aux, EXP]{\@@_get_Nn:nwn}
+% \begin{macro}[aux, EXP]{\@@_get_Nn:nwwn}
% Getting the value corresponding to a key in a property list in an
% expandable fashion is similar to mapping some tokens. Go through
% the property list one \meta{key}--\meta{value} pair at a time: the
@@ -2194,15 +2198,15 @@
% \begin{macrocode}
\cs_new:Npn \prop_get:Nn #1#2
{
- \exp_last_unbraced:Noo \@@_get_Nn:nwn { \tl_to_str:n {#2} } #1
- \s_@@ \tl_to_str:n {#2} \s_@@ { }
+ \exp_last_unbraced:Noo \@@_get_Nn:nwwn { \tl_to_str:n {#2} } #1
+ \@@_pair:wn \tl_to_str:n {#2} \s_@@ { }
\__prg_break_point:
}
-\cs_new:Npn \@@_get_Nn:nwn #1 \s_@@ #2 \s_@@ #3
+\cs_new:Npn \@@_get_Nn:nwwn #1#2 \@@_pair:wn #3 \s_@@ #4
{
- \str_if_eq_x:nnTF {#1} {#2}
- { \__prg_break:n { \exp_not:n {#3} } }
- { \@@_get_Nn:nwn {#1} }
+ \str_if_eq_x:nnTF {#1} {#3}
+ { \__prg_break:n { \exp_not:n {#4} } }
+ { \@@_get_Nn:nwwn {#1} }
}
\cs_generate_variant:Nn \prop_get:Nn { c }
% \end{macrocode}
@@ -2216,26 +2220,26 @@
% \end{macrocode}
%
% \begin{macro}{\seq_item:Nn, \seq_item:cn}
-% \begin{macro}[aux]{\@@_item:nnn}
+% \begin{macro}[aux]{\@@_item:wNn, \@@_item:nnn}
% The idea here is to find the offset of the item from the left, then use
% a loop to grab the correct item. If the resulting offset is too large,
% then the stop code |{ ? \__prg_break: } { }| will be used by the auxiliary,
% terminating the loop and returning nothing at all.
% \begin{macrocode}
-\cs_new:Npn \seq_item:Nn #1#2
+\cs_new:Npn \seq_item:Nn #1 { \exp_after:wN \@@_item:wNn #1 #1 }
+\cs_new:Npn \@@_item:wNn \s_@@ #1 \s_obj_end #2#3
{
- \exp_last_unbraced:Nfo \@@_item:nnn
+ \exp_args:Nf \@@_item:nnn
{
\int_eval:n
{
- \int_compare:nNnT {#2} < \c_zero
- { \seq_count:N #1 + \c_one + }
- #2
+ \int_compare:nNnT {#3} < \c_zero
+ { \seq_count:N #2 + \c_one + }
+ #3
}
}
#1
- { ? \__prg_break: }
- { }
+ { ? \__prg_break: } { }
\__prg_break_point:
}
\cs_new:Npn \@@_item:nnn #1#2#3
@@ -2255,34 +2259,33 @@
% \seq_mapthread_function:NNN, \seq_mapthread_function:NcN,
% \seq_mapthread_function:cNN, \seq_mapthread_function:ccN
% }
-% \begin{macro}[aux]{\@@_mapthread_function:NN}
+% \begin{macro}[aux]
+% {\@@_mapthread_function:wNN, \@@_mapthread_function:wNw}
% \begin{macro}[aux]{\@@_mapthread_function:Nnnwnn}
-% The idea here is to first expand both of the sequences, adding the usual
-% |{ ? \__prg_break: } { }| to the end of each one. This is most conveniently
-% done in two steps using an auxiliary function. The mapping then throws
-% away the first token of |#2| and |#5|, which for items in the sequences
-% will both be \cs{@@_item:n}. The function to be mapped will then be
-% applied to the two entries. When the code hits the end of one of the
-% sequences, the break material will stop the entire loop and tidy up. This
-% avoids needing to find the count of the two sequences, or worrying about
-% which is longer.
+% The idea here is to first expand both of the sequences, adding the
+% usual |{ ? \__prg_break: } { }| to the end of each one. This is
+% most conveniently done in two steps using an auxiliary function.
+% The mapping then throws away the first tokens of |#2| and |#5|,
+% which for items in the sequences will both be \cs{s_@@}
+% \cs{@@_item:n}. The function to be mapped will then be applied to
+% the two entries. When the code hits the end of one of the
+% sequences, the break material will stop the entire loop and tidy up.
+% This avoids needing to find the count of the two sequences, or
+% worrying about which is longer.
% \begin{macrocode}
\cs_new:Npn \seq_mapthread_function:NNN #1#2#3
+ { \exp_after:wN \@@_mapthread_function:wNN #2 #1 #3 }
+\cs_new:Npn \@@_mapthread_function:wNN \s_@@ #1 \s_obj_end #2#3
{
- \exp_after:wN \@@_mapthread_function:NN
- \exp_after:wN #3
- \exp_after:wN #1
- #2
- { ? \__prg_break: } { }
+ \exp_after:wN \@@_mapthread_function:wNw #2 #3
+ #1 { ? \__prg_break: } { }
\__prg_break_point:
}
-\cs_new:Npn \@@_mapthread_function:NN #1#2
+\cs_new:Npn \@@_mapthread_function:wNw \s_@@ #1 \s_obj_end #2
{
- \exp_after:wN \@@_mapthread_function:Nnnwnn
- \exp_after:wN #1
- #2
- { ? \__prg_break: } { }
- \q_stop
+ \@@_mapthread_function:Nnnwnn #2
+ #1 { ? \__prg_break: } { }
+ \q_stop
}
\cs_new:Npn \@@_mapthread_function:Nnnwnn #1#2#3#4 \q_stop #5#6
{
@@ -2316,22 +2319,22 @@
\cs_new_protected:Npn \seq_set_from_clist:NN #1#2
{
\tl_set:Nx #1
- { \clist_map_function:NN #2 \@@_wrap_item:n }
+ { \s_@@ \clist_map_function:NN #2 \@@_wrap_item:n \s_obj_end }
}
\cs_new_protected:Npn \seq_set_from_clist:Nn #1#2
{
\tl_set:Nx #1
- { \clist_map_function:nN {#2} \@@_wrap_item:n }
+ { \s_@@ \clist_map_function:nN {#2} \@@_wrap_item:n \s_obj_end }
}
\cs_new_protected:Npn \seq_gset_from_clist:NN #1#2
{
\tl_gset:Nx #1
- { \clist_map_function:NN #2 \@@_wrap_item:n }
+ { \s_@@ \clist_map_function:NN #2 \@@_wrap_item:n \s_obj_end }
}
\cs_new_protected:Npn \seq_gset_from_clist:Nn #1#2
{
\tl_gset:Nx #1
- { \clist_map_function:nN {#2} \@@_wrap_item:n }
+ { \s_@@ \clist_map_function:nN {#2} \@@_wrap_item:n \s_obj_end }
}
\cs_generate_variant:Nn \seq_set_from_clist:NN { Nc }
\cs_generate_variant:Nn \seq_set_from_clist:NN { c , cc }
@@ -2347,7 +2350,7 @@
% {\seq_reverse:N, \seq_reverse:c, \seq_greverse:N, \seq_greverse:c}
% \begin{macro}[aux]{\@@_tmp:w}
% \begin{macro}[aux]{\@@_reverse:NN}
-% \begin{macro}[aux]{\@@_reverse_item:nwn}
+% \begin{macro}[aux]{\@@_reverse_setup:w, \@@_reverse_item:nwn}
% Previously, \cs{seq_reverse:N} was coded by collecting the items
% in reverse order after an \cs{exp_stop_f:} marker.
% \begin{verbatim}
@@ -2389,9 +2392,11 @@
{
\cs_set_eq:NN \@@_tmp:w \@@_item:n
\cs_set_eq:NN \@@_item:n \@@_reverse_item:nwn
- #1 #2 { #2 \exp_not:n { } }
+ #1 #2 { \exp_after:wN \@@_reverse_setup:w #2 }
\cs_set_eq:NN \@@_item:n \@@_tmp:w
}
+\cs_new:Npn \@@_reverse_setup:w #1 \s_obj_end
+ { #1 \exp_not:n { } \s_obj_end }
\cs_new:Npn \@@_reverse_item:nwn #1 #2 \exp_not:n #3
{
#2
@@ -2669,7 +2674,7 @@
{
\exp_args:Nf \@@_act_output:n
{
- \exp_args:NNo \str_case:nnn #2 {#1}
+ \exp_args:NNo \str_case:nnF #2 {#1}
{ \exp_stop_f: #2 }
}
}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
index 1065a889bc5..9b26d172cae 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
@@ -37,7 +37,7 @@
%
%<*driver|package>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3clist.dtx 4500 2013-05-26 11:18:19Z bruno $
+\GetIdInfo$Id: l3clist.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Comma separated lists}
%</driver|package>
%<*driver>
@@ -1438,7 +1438,7 @@
{
\clist_if_exist:NTF #1
{
- \int_case:nnn { \clist_count:N #1 }
+ \int_case:nnF { \clist_count:N #1 }
{
{ 0 } { }
{ 1 } { \exp_after:wN \@@_use:wwn #1 , , { } }
@@ -1507,101 +1507,6 @@
% \end{variable}
% \end{variable}
%
-% \subsection{Deprecated interfaces}
-%
-% Deprecated on 2011-05-27, for removal by 2011-08-31.
-%
-% \begin{macro}{\clist_top:NN, \clist_top:cN}
-% \UnitTested
-% These are old stack functions.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \clist_top:NN \clist_get:NN
-\cs_new_eq:NN \clist_top:cN \clist_get:cN
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\clist_remove_element:Nn,\clist_gremove_element:Nn}
-% \UnitTested
-% An older name for \cs{clist_remove_all:Nn}.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \clist_remove_element:Nn \clist_remove_all:Nn
-\cs_new_eq:NN \clist_gremove_element:Nn \clist_gremove_all:Nn
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\clist_display:N, \clist_display:c}
-% An older name for \cs{clist_show:N}.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \clist_display:N \clist_show:N
-\cs_new_eq:NN \clist_display:c \clist_show:c
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% Deprecated on 2011-09-05, for removal by 2011-12-31.
-%
-% \begin{macro}
-% {
-% \clist_trim_spaces:N, \clist_trim_spaces:c,
-% \clist_gtrim_spaces:N, \clist_gtrim_spaces:c
-% }
-% Since clist items are now always stripped from their surrounding
-% spaces, it is redundant to provide these functions.
-% The \cs{@@_trim_spaces:n} function is now internal,
-% deprecated for use outside the kernel.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_protected:Npn \clist_trim_spaces:N #1 { \clist_set:No #1 {#1} }
-\cs_new_protected:Npn \clist_gtrim_spaces:N #1 { \clist_gset:No #1 {#1} }
-\cs_generate_variant:Nn \clist_trim_spaces:N { c }
-\cs_generate_variant:Nn \clist_gtrim_spaces:N { c }
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% Deprecated on 2012-05-10, for removal by 2012-08-31.
-%
-% \begin{macro}[pTF]
-% {\clist_if_eq:NN, \clist_if_eq:Nc, \clist_if_eq:cN, \clist_if_eq:cc}
-% Simple copies from the token list variable material.
-% \begin{macrocode}
-%<*deprecated>
-\prg_new_eq_conditional:NNn \clist_if_eq:NN \tl_if_eq:NN { p , T , F , TF }
-\prg_new_eq_conditional:NNn \clist_if_eq:Nc \tl_if_eq:Nc { p , T , F , TF }
-\prg_new_eq_conditional:NNn \clist_if_eq:cN \tl_if_eq:cN { p , T , F , TF }
-\prg_new_eq_conditional:NNn \clist_if_eq:cc \tl_if_eq:cc { p , T , F , TF }
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% Deprecated 2012-05-13 for removal by 2012-11-31.
-%
-% \begin{macro}{\clist_length:N, \clist_length:c, \clist_length:n}
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \clist_length:N \clist_count:N
-\cs_new_eq:NN \clist_length:n \clist_count:c
-\cs_new_eq:NN \clist_length:c \clist_count:n
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% Deprecated 2012-05-19 for removal by 2012-11-31.
-%
-% \begin{macro}{\clist_use:N, \clist_use:c}
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \clist_use:N \tl_use:N
-\cs_new_eq:NN \clist_use:c \tl_use:c
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
% \begin{macrocode}
%</initex|package>
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx b/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
index 9d19c801958..d238f97b31f 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3expan.dtx 4521 2013-07-09 11:45:31Z joseph $
+\GetIdInfo$Id: l3expan.dtx 4565 2013-07-24 08:21:51Z joseph $
{L3 Argument expansion}
%</driver|package>
%<*driver>
@@ -1672,7 +1672,8 @@
%
% \begin{macro}[EXP,pTF]
% {\str_if_eq:Vn, \str_if_eq:on, \str_if_eq:nV, \str_if_eq:no, \str_if_eq:VV}
-% \begin{macro}[EXP]{\str_case:onn}
+% \begin{macro}[EXP]{\str_case:on}
+% \begin{macro}[EXP, TF]{\str_case:on}
% These cannot come earlier as they need \cs{cs_generate_variant:Nn}.
% \begin{macrocode}
\cs_generate_variant:Nn \str_if_eq_p:nn { V , o }
@@ -1683,10 +1684,21 @@
\cs_generate_variant:Nn \str_if_eq:nnF { nV , no , VV }
\cs_generate_variant:Nn \str_if_eq:nnTF { V , o }
\cs_generate_variant:Nn \str_if_eq:nnTF { nV , no , VV }
-\cs_generate_variant:Nn \str_case:nnn { o }
+\cs_generate_variant:Nn \str_case:nn { o }
+\cs_generate_variant:Nn \str_case:nnT { o }
+\cs_generate_variant:Nn \str_case:nnF { o }
+\cs_generate_variant:Nn \str_case:nnTF { o }
% \end{macrocode}
% \end{macro}
% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\str_case:onn}
+% Deprecated 2013-07-15.
+% \begin{macrocode}
+\cs_new_eq:NN \str_case:onn \str_case:onF
+% \end{macrocode}
+% \end{macro}
%
% \begin{macrocode}
%</initex|package>
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
index 6b76cf6b341..3e2f06dacce 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3file.dtx 4483 2013-05-01 10:57:41Z bruno $
+\GetIdInfo$Id: l3file.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 File and I/O operations}
%</driver|package>
%<*driver>
@@ -1678,83 +1678,6 @@
}
% \end{macrocode}
%
-% \subsection{Deprecated functions}
-%
-% Deprecated on 2012-06-28, for removal by 2012-12-31.
-%
-% \begin{macro}{\iow_wrap:xnnnN}
-% This was renamed and one unneeded argument was removed.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_protected:Npn \iow_wrap:xnnnN #1#2#3#4#5
- { \iow_wrap:nnnN {#1} {#2} {#4} #5 }
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% Deprecated on 2012-06-24, for removal by 2012-12-31.
-%
-% \begin{variable}{\l_iow_line_length_int}
-% Simple rename. Here we copy the \TeX{} register.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \l_iow_line_length_int \l_iow_line_count_int
-%</deprecated>
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\ior_to:NN, \ior_gto:NN, \ior_str_to:NN, \ior_str_gto:NN}
-% The local variants are renames, while the global variants are
-% deprecated and add the \TeX{} primitive \tn{global}.
-% \begin{macrocode}
-\cs_new_eq:NN \ior_to:NN \ior_get:NN
-\cs_new_protected_nopar:Npn \ior_gto:NN { \tex_global:D \ior_to:NN }
-\cs_new_eq:NN \ior_str_to:NN \ior_get_str:NN
-\cs_new_protected_nopar:Npn \ior_str_gto:NN { \tex_global:D \ior_str_to:NN }
-% \end{macrocode}
-% \end{macro}
-%
-% Deprecated on 2012-02-10, for removal by 2012-05-31.
-%
-% \begin{macro}{\iow_now_when_avail:Nn, \iow_now_when_avail:Nx}
-% For writing only if the stream requested is open at all.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_protected:Npn \iow_now_when_avail:Nn #1
- { \cs_if_free:NTF #1 { \use_none:n } { \iow_now:Nn #1 } }
-\cs_new_protected:Npn \iow_now_when_avail:Nx #1
- { \cs_if_free:NTF #1 { \use_none:n } { \iow_now:Nx #1 } }
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% Deprecated on 2011-05-27, for removal by 2011-08-31.
-%
-% \begin{macro}{\iow_now_buffer_safe:Nn, \iow_now_buffer_safe:Nx}
-% This is much more easily done using the wrapping system: there is
-% an expansion there, so a bit of a hack is needed.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_protected:Npn \iow_now_buffer_safe:Nn #1#2
- { \iow_wrap:xnnnN { \exp_not:n {#2} } { } \c_zero { } \iow_now:Nn #1 }
-\cs_new_protected:Npn \iow_now_buffer_safe:Nx #1#2
- { \iow_wrap:xnnnN {#2} { } \c_zero { } \iow_now:Nn #1 }
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\ior_open_streams:}
-% \begin{macro}{\iow_open_streams:}
-% Slightly misleading names.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \ior_open_streams: \ior_list_streams:
-\cs_new_eq:NN \iow_open_streams: \iow_list_streams:
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
% \begin{macrocode}
%</initex|package>
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3format.ins b/Master/texmf-dist/source/latex/l3kernel/l3format.ins
deleted file mode 100644
index 76fe0ee3e76..00000000000
--- a/Master/texmf-dist/source/latex/l3kernel/l3format.ins
+++ /dev/null
@@ -1,92 +0,0 @@
-\iffalse meta-comment
-
-File l3format.ins Copyright (C) 2011,2012 The LaTeX3 Project
-
-It may be distributed and/or modified under the conditions of the
-LaTeX Project Public License (LPPL), either version 1.3c of this
-license or (at your option) any later version. The latest version
-of this license is in the file
-
- http://www.latex-project.org/lppl.txt
-
-This file is part of the "l3kernel bundle" (The Work in LPPL)
-and all files in that bundle must be distributed together.
-
-The released version of this bundle is available from CTAN.
-
-\fi
-
-\let\jobname\relax
-\input l3docstrip.dtx
-\askforoverwritefalse
-
-\preamble
-
-EXPERIMENTAL CODE
-
-Do not distribute this file without also distributing the
-source files specified above.
-
-Do not distribute a modified version of this file.
-
-\endpreamble
-% stop docstrip adding \endinput
-\postamble
-\endpostamble
-
-\keepsilent
-
-\generate
- {
- \file{l3format.ltx}
- {
- \from{l3bootstrap.dtx} {initex}
- \from{l3names.dtx} {initex}
- \from{l3basics.dtx} {initex}
- \from{l3expan.dtx} {initex}
- \from{l3tl.dtx} {initex}
- \from{l3seq.dtx} {initex}
- % ===== ===FORMAT ONLY =========
- \from{l3alloc.dtx} {initex}
- % ==============================
- \from{l3int.dtx} {initex}
- \from{l3quark.dtx} {initex}
- \from{l3prg.dtx} {initex}
- \from{l3clist.dtx} {initex}
- \from{l3token.dtx} {initex}
- \from{l3prop.dtx} {initex}
- \from{l3msg.dtx} {initex}
- \from{l3file.dtx} {initex}
- \from{l3skip.dtx} {initex}
- \from{l3keys.dtx} {initex}
- \from{l3fp.dtx} {initex}
- \from{l3fp-aux.dtx} {initex}
- \from{l3fp-traps.dtx} {initex}
- \from{l3fp-round.dtx} {initex}
- \from{l3fp-parse.dtx} {initex}
- \from{l3fp-logic.dtx} {initex}
- \from{l3fp-basics.dtx} {initex}
- \from{l3fp-extended.dtx}{initex}
- \from{l3fp-expo.dtx} {initex}
- \from{l3fp-trig.dtx} {initex}
- \from{l3fp-convert.dtx} {initex}
- \from{l3fp-assign.dtx} {initex}
- \from{l3fp-old.dtx} {initex}
- \from{l3box.dtx} {initex}
- \from{l3coffins.dtx} {initex}
- \from{l3color.dtx} {initex}
- \from{l3luatex.dtx} {initex}
- \from{l3candidates.dtx} {initex}
- % ======== FORMAT ONLY =========
- \from{l3final.dtx} {initex}
- % ==============================
- }
- }
-
-\generate{\file{l3dvips.ltx} {\from{l3drivers.dtx}{initex,dvips} }}
-\generate{\file{l3pdfmode.ltx} {\from{l3drivers.dtx}{initex,pdfmode} }}
-\generate{\file{l3xdvipdfmx.ltx}{\from{l3drivers.dtx}{initex,xdvipdfmx}}}
-
-\generate{\file{l3docstrip.tex}{\from{l3docstrip.dtx}{program}}}
-
-\endbatchfile \ No newline at end of file
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
index f1f034553aa..de6e4d72b6a 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3int.dtx 4482 2013-04-24 21:05:12Z joseph $
+\GetIdInfo$Id: l3int.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Integers}
%</driver|package>
%<*driver>
@@ -342,25 +342,29 @@
% \end{center}
% \end{function}
%
-% \begin{function}[added = 2012-06-03, EXP]{\int_case:nnn}
+% \begin{function}[added = 2013-07-24, EXP, TF]{\int_case:nn}
% \begin{syntax}
-% \cs{int_case:nnn} \Arg{test integer expression} \\
+% \cs{int_case:nnTF} \Arg{test integer expression} \\
% ~~|{| \\
% ~~~~\Arg{intexpr case_1} \Arg{code case_1} \\
% ~~~~\Arg{intexpr case_2} \Arg{code case_2} \\
% ~~~~\ldots \\
% ~~~~\Arg{intexpr case_n} \Arg{code case_n} \\
% ~~|}| \\
-% ~~\Arg{else code}
+% ~~\Arg{true code}
+% ~~\Arg{false code}
% \end{syntax}
% This function evaluates the \meta{test integer expression} and
% compares this in turn to each of the
% \meta{integer expression cases}. If the two are equal then the
-% associated \meta{code} is left in the input stream. If none of
-% the tests are \texttt{true} then the \texttt{else code} will be
-% left in the input stream. For example
+% associated \meta{code} is left in the input stream. If any of the
+% cases are matched, the \meta{true code} is also inserted into the
+% input stream (after the code for the appropriate case), while if none
+% match then the \meta{false code} is inserted. The function
+% \cs{int_case:nn}, which does nothing if there is no match, is also
+% available. For example
% \begin{verbatim}
-% \int_case:nnn
+% \int_case:nnF
% { 2 * 5 }
% {
% { 5 } { Small }
@@ -1464,23 +1468,36 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\int_case:nnn}
-% \begin{macro}[aux]{\@@_case:nnn}
+% \begin{macro}[EXP]{\int_case:nn}
+% \begin{macro}[EXP, TF]{\int_case:nn}
+% \begin{macro}[aux]{\@@_case:nnTF}
% \begin{macro}[aux]{\@@_case:nw, \@@_case_end:nw}
% For integer cases, the first task to fully expand the check
-% condition. After that, a loop is started to compare each possible
-% value and stop if the test is true. The tested value is put at the
-% end to ensure that there is necessarily a match, which will fire the
-% \enquote{else} pathway. The leading \tn{romannumeral} triggers an
-% expansion which is then stopped in \cs{@@_case_end:nw}.
+% condition. The over all idea is then much the same as for
+% \cs{str_case:nn(TF)} as described in \pkg{l3basics}.
% \begin{macrocode}
-\cs_new:Npn \int_case:nnn #1
+\cs_new:Npn \int_case:nnTF #1
+ {
+ \tex_romannumeral:D
+ \exp_args:Nf \@@_case:nnTF { \int_eval:n {#1} }
+ }
+\cs_new:Npn \int_case:nnT #1#2#3
+ {
+ \tex_romannumeral:D
+ \exp_args:Nf \@@_case:nnTF { \int_eval:n {#1} } {#2} {#3} { }
+ }
+\cs_new:Npn \int_case:nnF #1#2
+ {
+ \tex_romannumeral:D
+ \exp_args:Nf \@@_case:nnTF { \int_eval:n {#1} } {#2} { }
+ }
+\cs_new:Npn \int_case:nn #1#2
{
\tex_romannumeral:D
- \exp_args:Nf \@@_case:nnn { \int_eval:n {#1} }
+ \exp_args:Nf \@@_case:nnTF { \int_eval:n {#1} } {#2} { } { }
}
-\cs_new:Npn \@@_case:nnn #1#2#3
- { \@@_case:nw {#1} #2 {#1} {#3} \q_recursion_stop }
+\cs_new:Npn \@@_case:nnTF #1#2#3#4
+ { \@@_case:nw {#1} #2 {#1} { } \q_mark {#3} \q_mark {#4} \q_stop }
\cs_new:Npn \@@_case:nw #1#2#3
{
\int_compare:nNnTF {#1} = {#2}
@@ -1492,6 +1509,7 @@
% \end{macro}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \begin{macro}[pTF]{\int_if_odd:n}
% \UnitTested
@@ -1720,13 +1738,13 @@
{
\exp_args:NNo \exp_args:No \@@_to_symbols:nnnn
{
- \int_case:nnn
+ \int_case:nn
{ 1 + \int_mod:nn { #1 - 1 } {#2} }
- {#3} { }
+ {#3}
}
{#1} {#2} {#3}
}
- { \int_case:nnn {#1} {#3} { } }
+ { \int_case:nn {#1} {#3} }
}
\cs_new:Npn \@@_to_symbols:nnnn #1#2#3#4
{
@@ -1863,7 +1881,7 @@
}
% \end{macrocode}
% Convert to a letter only if necessary, otherwise simply return the
-% value unchanged. It would be cleaner to use \cs{int_case:nnn},
+% value unchanged. It would be cleaner to use \cs{int_case:nn},
% but in our case, the cases are contiguous, so it is forty times faster
% to use the \cs{if_case:w} primitive. The first \cs{exp_after:wN}
% expands the conditional, jumping to the correct case, the second one
@@ -2338,107 +2356,10 @@
%
% \subsection{Deprecated functions}
%
-% Deprecated on 2011-05-27, for removal by 2011-08-31.
-%
-% \begin{macro}{\int_convert_from_base_ten:nn}
-% \begin{macro}{\int_convert_to_symbols:nnn}
-% \begin{macro}{\int_convert_to_base_ten:nn}
-% Some simple renames.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \int_convert_from_base_ten:nn \int_to_base:nn
-\cs_new_eq:NN \int_convert_to_symbols:nnn \int_to_symbols:nnn
-\cs_new_eq:NN \int_convert_to_base_ten:nn \int_from_base:nn
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\int_to_symbol:n}
-% \begin{macro}[aux]{\int_to_symbol_math:n}
-% \begin{macro}[aux]{\int_to_symbol_text:n}
-% \UnitTested
-% This is rather too tied to \LaTeXe{}.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_nopar:Npn \int_to_symbol:n
- {
- \scan_align_safe_stop:
- \mode_if_math:TF
- { \int_to_symbol_math:n }
- { \int_to_symbol_text:n }
- }
-\cs_new:Npn \int_to_symbol_math:n #1
- {
- \int_to_symbols:nnn {#1} { 9 }
- {
- { 1 } { * }
- { 2 } { \dagger }
- { 3 } { \ddagger }
- { 4 } { \mathsection }
- { 5 } { \mathparagraph }
- { 6 } { \| }
- { 7 } { ** }
- { 8 } { \dagger \dagger }
- { 9 } { \ddagger \ddagger }
- }
- }
-\cs_new:Npn \int_to_symbol_text:n #1
- {
- \int_to_symbols:nnn {#1} { 9 }
- {
- { 1 } { \textasteriskcentered }
- { 2 } { \textdagger }
- { 3 } { \textdaggerdbl }
- { 4 } { \textsection }
- { 5 } { \textparagraph }
- { 6 } { \textbardbl }
- { 7 } { \textasteriskcentered \textasteriskcentered }
- { 8 } { \textdagger \textdagger }
- { 9 } { \textdaggerdbl \textdaggerdbl }
- }
- }
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\if_num:w}
-% Deprecated 2012-05-30 for removal after 2012-11-30.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \if_num:w \if_int_compare:w
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\l_tmpc_int}
-% Deprecated 2012-07-04 for removal after 2012-12-31.
-% \begin{macrocode}
-%<*deprecated>
-\int_new:N \l_tmpc_int
-%</deprecated>
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\int_eval:w, \int_eval_end:}
-% Deprecated 2012-07-13 for removal after 2012-12-31.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \int_eval:w \@@_eval:w
-\cs_new_eq:NN \int_eval_end: \@@_eval_end:
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\int_value:w}
-% Deprecated 2012-07-14 for removal after 2012-12-31.
+% \begin{macro}{\int_case:nnn}
+% Deprecated 2013-07-15.
% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \int_value:w \@@_value:w
-%</deprecated>
+\cs_new_eq:NN \int_case:nnn \int_case:nnF
% \end{macrocode}
% \end{macro}
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
index 3ad30990c73..e5c80030f7e 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3keys.dtx 4544 2013-07-12 07:14:52Z joseph $
+\GetIdInfo$Id: l3keys.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Experimental key-value interfaces}
%</driver|package>
%<*driver>
@@ -122,7 +122,7 @@
%
% Key names may contain any tokens, as they are handled internally
% using \cs{tl_to_str:n}. As will be discussed in
-% section~\ref{sec:subdivision}, it is suggested that the character
+% section~\ref{sec:l3keys:subdivision}, it is suggested that the character
% |/| is reserved for sub-division of keys into logical
% groups. Functions and variables are \emph{not} expanded when creating
% key names, and so
@@ -281,6 +281,16 @@
% (which must a floating point expression). If the variable does not exist,
% it will be created globally at the point that the key is set up.
% \end{function}
+%
+% \begin{function}[added = 2013-07-14]
+% {.groups:n}
+% \begin{syntax}
+% \meta{key} .groups:n = \meta{groups}
+% \end{syntax}
+% Defines \meta{key} as belonging to the \meta{groups} declared. Groups
+% provide a \enquote{secondary axis} for selectively setting keys, and are
+% described in Section~\ref{sec:l3keys:selective}.
+% \end{function}
%
% \begin{function}[updated = 2013-07-09]
% {.initial:n, .initial:V, .initial:o, .initial:x}
@@ -391,7 +401,7 @@
% \end{function}
%
% \section{Sub-dividing keys}
-% \label{sec:subdivision}
+% \label{sec:l3keys:subdivision}
%
% When creating large numbers of keys, it may be desirable to divide
% them into several sub-groups for a given module. This can be achieved
@@ -612,10 +622,12 @@
% \begin{function}[added = 2011-08-23]
% {
% \keys_set_known:nnN, \keys_set_known:nVN,
-% \keys_set_known:nvN, \keys_set_known:noN
+% \keys_set_known:nvN, \keys_set_known:noN,
+% \keys_set_known:nn, \keys_set_known:nV,
+% \keys_set_known:nv, \keys_set_known:no
% }
% \begin{syntax}
-% \cs{keys_set_known:nn} \Arg{module} \Arg{keyval list} \meta{tl}
+% \cs{keys_set_known:nnN} \Arg{module} \Arg{keyval list} \meta{tl}
% \end{syntax}
% In some cases, the desired behavior is to simply ignore unknown keys,
% collecting up information on these for later processing. The
@@ -624,7 +636,81 @@
% are not processed further by the parser.
% The key--value pairs for each \emph{unknown} key name will be
% stored in the \meta{tl} in a comma-separated form (\emph{i.e.}~an edited
-% version of the \meta{keyval list}).
+% version of the \meta{keyval list}). The \cs{keys_set_known:nn} version skips
+% this stage.
+% \end{function}
+%
+% \section{Selective key setting}
+% \label{sec:l3keys:selective}
+%
+% In some cases it may be useful to be able to select only some keys for
+% setting, even though these keys have the same path. For example, with
+% a set of keys defined using
+% \begin{verbatim}
+% \keys define:nn { mymodule }
+% {
+% key-one .code:n = { \my_func:n {#1} } ,
+% key-two .tl_set:N = \l_my_a_tl ,
+% key-three .tl_set:N = \l_my_b_tl ,
+% key-four .fp_set:N = \l_my_a_fp ,
+% }
+% \end{verbatim}
+% the use of \cs{keys_set:nn} will attempt to set all four keys. However, in
+% some contexts it may only be sensible to set some keys, or to control the
+% order of setting. To do this, keys may be assigned to \emph{groups}:
+% arbitrary sets which are independent of the key tree. Thus modifying the
+% example to read
+% \begin{verbatim}
+% \keys define:nn { mymodule }
+% {
+% key-one .code:n = { \my_func:n {#1} } ,
+% key-one .groups:n = { first } ,
+% key-two .tl_set:N = \l_my_a_tl ,
+% key-two .groups:n = { first } ,
+% key-three .tl_set:N = \l_my_b_tl ,
+% key-three .groups:n = { second } ,
+% key-four .fp_set:N = \l_my_a_fp ,
+% }
+% \end{verbatim}
+% will assign \texttt{key-one} and \texttt{key-two} to group \texttt{first},
+% \texttt{key-three} to group \texttt{second}, while \texttt{key-four} is
+% not assigned to a group.
+%
+% Selective key setting may be achieved either by selecting one or more
+% groups to be made \enquote{active}, or by marking one or more groups to
+% be ignored in key setting.
+%
+% \begin{function}[added = 2013-07-14]
+% {
+% \keys_set_filter:nnnN, \keys_set_filter:nnVN,
+% \keys_set_filter:nnvN, \keys_set_filter:nnoN,
+% \keys_set_filter:nnn, \keys_set_filter:nnV,
+% \keys_set_filter:nnv, \keys_set_filter:nno
+% }
+% \begin{syntax}
+% \cs{keys_set_filter:nnnN} \Arg{module} \Arg{groups} \Arg{keyval list} \meta{tl}
+% \end{syntax}
+% Actives key filtering in an \enquote{opt-out} sense: keys assigned to any
+% of the \meta{groups} specified will be ignored. The \meta{groups} are
+% given as a comma-separated list. Unknown keys are not assigned to any
+% group and will thus always be set. The key--value pairs for each
+% key which is filtered out will be stored in the \meta{tl} in a
+% comma-separated form (\emph{i.e.}~an edited version of the \meta{keyval
+% list}). The \cs{keys_set_filter:nnn} version skips this stage.
+% \end{function}
+%
+% \begin{function}[added = 2013-07-14]
+% {
+% \keys_set_groups:nnn, \keys_set_groups:nnV,
+% \keys_set_groups:nnv, \keys_set_groups:nno
+% }
+% \begin{syntax}
+% \cs{keys_set_groups:nnn} \Arg{module} \Arg{groups} \Arg{keyval list}
+% \end{syntax}
+% Actives key filtering in an \enquote{opt-in} sense: only keys assigned to
+% one or more of the \meta{groups} specified will be set. The \meta{groups} are
+% given as a comma-separated list. Unknown keys are not assigned to any
+% group and will thus never be set.
% \end{function}
%
% \section{Utility functions for keys}
@@ -968,11 +1054,11 @@
%<@@=keys>
% \end{macrocode}
%
-% \begin{variable}{\c_@@_code_root_tl, \c_@@_vars_root_tl}
+% \begin{variable}{\c_@@_code_root_tl, \c_@@_info_root_tl}
% The prefixes for the code and variables of the keys themselves.
% \begin{macrocode}
\tl_const:Nn \c_@@_code_root_tl { key~code~>~ }
-\tl_const:Nn \c_@@_vars_root_tl { key~var~>~ }
+\tl_const:Nn \c_@@_info_root_tl { key~info~>~ }
% \end{macrocode}
% \end{variable}
%
@@ -983,14 +1069,6 @@
% \end{macrocode}
% \end{variable}
%
-% \begin{variable}{\c_@@_value_forbidden_tl, \c_@@_value_required_tl}
-% Two marker token lists.
-% \begin{macrocode}
-\tl_const:Nn \c_@@_value_forbidden_tl { forbidden }
-\tl_const:Nn \c_@@_value_required_tl { required }
-% \end{macrocode}
-% \end{variable}
-%
% \begin{variable}{\l_keys_choice_int, \l_keys_choice_tl}
% Publicly accessible data on which choice is being used when several
% are generated as a set.
@@ -999,6 +1077,15 @@
\tl_new:N \l_keys_choice_tl
% \end{macrocode}
% \end{variable}
+%
+% \begin{variable}{\l_@@_groups_clist}
+% Used for storing and recovering the list of groups which apply to a key:
+% set as a comma list but at one point we have to use this for a token
+% list recovery.
+% \begin{macrocode}
+\clist_new:N \l_@@_groups_clist
+% \end{macrocode}
+% \end{variable}
%
% \begin{variable}{\l_keys_key_tl}
% The name of a key itself: needed when setting keys.
@@ -1021,6 +1108,13 @@
\bool_new:N \l_@@_no_value_bool
% \end{macrocode}
% \end{variable}
+%
+% \begin{variable}{\l_@@_only_known_bool}
+% Used to track if only \enquote{known} keys are being set.
+% \begin{macrocode}
+\bool_new:N \l_@@_only_known_bool
+% \end{macrocode}
+% \end{variable}
%
% \begin{variable}{\l_keys_path_tl}
% The \enquote{path} of the current key is stored here: this is
@@ -1037,11 +1131,28 @@
\tl_new:N \l_@@_property_tl
% \end{macrocode}
% \end{variable}
+%
+% \begin{variable}{\l_@@_selective_bool, \l_@@_filtered_bool}
+% Two flags for using key groups: one to indicate that \enquote{selective}
+% setting is active, a second to specify which type (\enquote{opt-in}
+% or \enquote{opt-out}).
+% \begin{macrocode}
+\bool_new:N \l_@@_selective_bool
+\bool_new:N \l_@@_filtered_bool
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\l_@@_selective_seq}
+% The list of key groups being filtered in or out during selective setting.
+% \begin{macrocode}
+\seq_new:N \l_@@_selective_seq
+% \end{macrocode}
+% \end{variable}
%
-% \begin{variable}{\l_@@_unknown_clist}
-% Used when setting only known keys to store those left over.
+% \begin{variable}{\l_@@_unused_clist}
+% Used when setting only some keys to store those left over.
% \begin{macrocode}
-\tl_new:N \l_@@_unknown_clist
+\tl_new:N \l_@@_unused_clist
% \end{macrocode}
% \end{variable}
%
@@ -1051,6 +1162,13 @@
\tl_new:N \l_keys_value_tl
% \end{macrocode}
% \end{variable}
+%
+% \begin{variable}{\l_@@_tmp_bool}
+% Scratch space.
+% \begin{macrocode}
+\bool_new:N \l_@@_tmp_bool
+% \end{macrocode}
+% \end{variable}
%
% \subsection{The key defining mechanism}
%
@@ -1259,31 +1377,43 @@
%
% \begin{macro}[int]
% {\@@_cmd_set:nn, \@@_cmd_set:nx, \@@_cmd_set:Vn, \@@_cmd_set:Vo}
-% \begin{macro}[aux]{\@@_cmd_set:n}
% Creating a new command means tidying up the properties and then making
% the internal function which actually does the work.
% \begin{macrocode}
\cs_new_protected:Npn \@@_cmd_set:nn #1#2
{
- \@@_cmd_set:n {#1}
+ \prop_clear_new:c { \c_@@_info_root_tl #1 }
\cs_set:cpn { \c_@@_code_root_tl #1 } ##1 {#2}
}
\cs_generate_variant:Nn \@@_cmd_set:nn { nx , Vn , Vo }
-\cs_new_protected:Npn \@@_cmd_set:n #1
- {
- \tl_clear_new:c { \c_@@_vars_root_tl #1 .default }
- \tl_set:cn { \c_@@_vars_root_tl #1 .default } { \q_no_value }
- \tl_clear_new:c { \c_@@_vars_root_tl #1 .req }
- }
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
% \begin{macro}[int]{\@@_default_set:n}
% Setting a default value is easy.
% \begin{macrocode}
\cs_new_protected:Npn \@@_default_set:n #1
- { \tl_set:cn { \c_@@_vars_root_tl \l_keys_path_tl .default } {#1} }
+ {
+ \prop_if_exist:cT { \c_@@_info_root_tl \l_keys_path_tl }
+ { \prop_put:cnn { \c_@@_info_root_tl \l_keys_path_tl } { default } {#1} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\@@_groups_set:n}
+% Assigning a key to one or more groups uses comma lists. So that the comma
+% list is \enquote{well-behaved} later, the storage is done via a stored
+% list here, which does the normalisation.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_groups_set:n #1
+ {
+ \prop_if_exist:cT { \c_@@_info_root_tl \l_keys_path_tl }
+ {
+ \clist_set:Nn \l_@@_groups_clist {#1}
+ \prop_put:cnV { \c_@@_info_root_tl \l_keys_path_tl }
+ { groups } \l_@@_groups_clist
+ }
+ }
% \end{macrocode}
% \end{macro}
%
@@ -1359,13 +1489,16 @@
%
% \begin{macro}[int]{\@@_value_requirement:n}
% Values can be required or forbidden by having the appropriate marker
-% set.
+% set. First, both the required and forbidden ones are clear, just in case!
% \begin{macrocode}
\cs_new_protected:Npn \@@_value_requirement:n #1
{
- \tl_set_eq:cc
- { \c_@@_vars_root_tl \l_keys_path_tl .req }
- { c_@@_value_ #1 _tl }
+ \prop_if_exist:cT { \c_@@_info_root_tl \l_keys_path_tl }
+ {
+ \prop_remove:cn { \c_@@_info_root_tl \l_keys_path_tl } { required }
+ \prop_remove:cn { \c_@@_info_root_tl \l_keys_path_tl } { forbidden }
+ \prop_put:cnn { \c_@@_info_root_tl \l_keys_path_tl } {#1} { true }
+ }
}
% \end{macrocode}
% \end{macro}
@@ -1522,6 +1655,14 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
+%
+% \begin{macro}{.groups:n}
+% A single property to create groups of keys.
+% \begin{macrocode}
+\cs_new_protected:cpn { \c_@@_props_root_tl .groups:n } #1
+ { \@@_groups_set:n {#1} }
+% \end{macrocode}
+% \end{macro}
%
% \begin{macro}{.initial:n, .initial:V, .initial:o, .initial:x}
% The standard hand-off approach.
@@ -1656,7 +1797,7 @@
% \begin{macro}[aux]{\@@_set:nnn, \@@_set:onn}
% A simple wrapper again.
% \begin{macrocode}
-\cs_new_protected:Npn \keys_set:nn
+\cs_new_protected_nopar:Npn \keys_set:nn
{ \@@_set:onn { \l_@@_module_tl } }
\cs_new_protected:Npn \@@_set:nnn #1#2#3
{
@@ -1675,28 +1816,83 @@
% \keys_set_known:nnN, \keys_set_known:nVN,
% \keys_set_known:nvN, \keys_set_known:noN
% }
-% \begin{macro}[aux]{\@@_set_known:nnnN, \@@_set_known:onnN}
+% \begin{macro}
+% {
+% \keys_set_known:nn, \keys_set_known:nV,
+% \keys_set_known:nv, \keys_set_known:no
+% }
+% Setting known keys simply means setting the appropriate flag, then
+% running the standard code.
% \begin{macrocode}
-\cs_new_protected:Npn \keys_set_known:nnN
- { \@@_set_known:onnN { \l_@@_module_tl } }
-\cs_new_protected:Npn \@@_set_known:nnnN #1#2#3#4
+\cs_new_protected:Npn \keys_set_known:nnN #1#2#3
{
- \tl_set:Nx \l_@@_module_tl { \tl_to_str:n {#2} }
- \clist_clear:N \l_@@_unknown_clist
- \cs_set_eq:NN \@@_execute_unknown: \@@_execute_unknown_alt:
- \keyval_parse:NNn \@@_set_elt:n \@@_set_elt:nn {#3}
- \cs_set_eq:NN \@@_execute_unknown: \@@_execute_unknown_std:
- \tl_set:Nn \l_@@_module_tl {#1}
- \cs_set_eq:NN #4 \l_@@_unknown_clist
+ \clist_clear:N \l_@@_unused_clist
+ \keys_set_known:nn {#1} {#2}
+ \tl_set:Nx #3 { \exp_not:o { \l_@@_unused_clist } }
}
\cs_generate_variant:Nn \keys_set_known:nnN { nV , nv , no }
-\cs_generate_variant:Nn \@@_set_known:nnnN { o }
+\cs_new_protected:Npn \keys_set_known:nn #1#2
+ {
+ \bool_set_true:N \l_@@_only_known_bool
+ \keys_set:nn {#1} {#2}
+ \bool_set_false:N \l_@@_only_known_bool
+ }
+\cs_generate_variant:Nn \keys_set_known:nn { nV , nv , no }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}
+% {
+% \keys_set_filter:nnnN, \keys_set_filter:nnVN, \keys_set_filter:nnvN
+% \keys_set_filter:nnoN
+% }
+% \begin{macro}
+% {
+% \keys_set_filter:nnn, \keys_set_filter:nnV, \keys_set_filter:nnv
+% \keys_set_filter:nno
+% }
+% \begin{macro}
+% {
+% \keys_set_groups:nnn, \keys_set_groups:nnV, \keys_set_groups:nnv
+% \keys_set_groups:nno
+% }
+% The idea of setting keys in a selective manner again uses flags
+% wrapped around the basic code.
+% \begin{macrocode}
+\cs_new_protected:Npn \keys_set_filter:nnnN #1#2#3#4
+ {
+ \clist_clear:N \l_@@_unused_clist
+ \keys_set_filter:nnn {#1} {#2} {#3}
+ \tl_set:Nx #4 { \exp_not:o { \l_@@_unused_clist } }
+ }
+\cs_generate_variant:Nn \keys_set_filter:nnnN { nnV , nnv , nno }
+\cs_new_protected:Npn \keys_set_filter:nnn #1#2#3
+ {
+ \bool_set_true:N \l_@@_selective_bool
+ \bool_set_true:N \l_@@_filtered_bool
+ \seq_set_from_clist:Nn \l_@@_selective_seq {#2}
+ \keys_set:nn {#1} {#3}
+ \bool_set_false:N \l_@@_selective_bool
+ }
+\cs_generate_variant:Nn \keys_set_filter:nnn { nnV , nnv , nno }
+\cs_new_protected:Npn \keys_set_groups:nnn #1#2#3
+ {
+ \bool_set_true:N \l_@@_selective_bool
+ \bool_set_false:N \l_@@_filtered_bool
+ \seq_set_from_clist:Nn \l_@@_selective_seq {#2}
+ \keys_set:nn {#1} {#3}
+ \bool_set_false:N \l_@@_selective_bool
+ }
+\cs_generate_variant:Nn \keys_set_groups:nnn { nnV , nnv , nno }
% \end{macrocode}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \begin{macro}[int]{\@@_set_elt:n, \@@_set_elt:nn}
% \begin{macro}[aux]{\@@_set_elt_aux:nn}
+% \begin{macro}[aux]{\@@_set_elt_aux:, \@@_set_elt_selective:}
% A shared system once again. First, set the current path and add a
% default if needed. There are then checks to see if the a value is
% required or forbidden. If everything passes, move on to execute the
@@ -1717,6 +1913,12 @@
\tl_set:Nx \l_keys_key_tl { \tl_to_str:n {#1} }
\tl_set:Nx \l_keys_path_tl { \l_@@_module_tl / \l_keys_key_tl }
\@@_value_or_default:n {#2}
+ \bool_if:NTF \l_@@_selective_bool
+ { \@@_set_elt_selective: }
+ { \@@_set_elt_aux: }
+ }
+\cs_new_protected_nopar:Npn \@@_set_elt_aux:
+ {
\bool_if:nTF
{
\@@_if_value_p:n { required } &&
@@ -1740,6 +1942,64 @@
}
}
% \end{macrocode}
+% If selective setting is active, there are a number of possible sub-cases
+% to consider. The key name may not be known at all or if it is, it may not
+% have any groups assigned. There is then the question of whether the
+% selection is opt-in or opt-out.
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_set_elt_selective:
+ {
+ \prop_if_exist:cTF { \c_@@_info_root_tl \l_keys_path_tl }
+ {
+ \prop_get:cnNTF { \c_@@_info_root_tl \l_keys_path_tl }
+ { groups } \l_@@_groups_clist
+ { \@@_check_groups: }
+ {
+ \bool_if:NTF \l_@@_filtered_bool
+ { \@@_set_elt_aux: }
+ { \@@_store_unused: }
+ }
+ }
+ {
+ \bool_if:NTF \l_@@_filtered_bool
+ { \@@_set_elt_aux: }
+ { \@@_store_unused: }
+ }
+ }
+% \end{macrocode}
+% In the case where selective setting requires a comparison of the list
+% of groups which apply to a key with the list of those which have been
+% set active. That requires two mappings, and again a different outcome
+% depending on whether opt-in or opt-out is set.
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_check_groups:
+ {
+ \bool_set_false:N \l_@@_tmp_bool
+ \seq_map_inline:Nn \l_@@_selective_seq
+ {
+ \clist_map_inline:Nn \l_@@_groups_clist
+ {
+ \str_if_eq:nnT {##1} {####1}
+ {
+ \bool_set_true:N \l_@@_tmp_bool
+ \clist_map_break:n { \seq_map_break: }
+ }
+ }
+ }
+ \bool_if:NTF \l_@@_tmp_bool
+ {
+ \bool_if:NTF \l_@@_filtered_bool
+ { \@@_store_unused: }
+ { \@@_set_elt_aux: }
+ }
+ {
+ \bool_if:NTF \l_@@_filtered_bool
+ { \@@_set_elt_aux: }
+ { \@@_store_unused: }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
% \end{macro}
% \end{macro}
%
@@ -1749,18 +2009,13 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_value_or_default:n #1
{
- \tl_set:Nn \l_keys_value_tl {#1}
- \bool_if:NT \l_@@_no_value_bool
+ \bool_if:NTF \l_@@_no_value_bool
{
- \quark_if_no_value:cF { \c_@@_vars_root_tl \l_keys_path_tl .default }
- {
- \cs_if_exist:cT { \c_@@_vars_root_tl \l_keys_path_tl .default }
- {
- \tl_set_eq:Nc \l_keys_value_tl
- { \c_@@_vars_root_tl \l_keys_path_tl .default }
- }
- }
+ \prop_get:cnNF { \c_@@_info_root_tl \l_keys_path_tl }
+ { default } \l_keys_value_tl
+ { \tl_clear:N \l_keys_value_tl }
}
+ { \tl_set:Nn \l_keys_value_tl {#1} }
}
% \end{macrocode}
% \end{macro}
@@ -1771,44 +2026,39 @@
% \begin{macrocode}
\prg_new_conditional:Npnn \@@_if_value:n #1 { p }
{
- \tl_if_eq:ccTF { c_@@_value_ #1 _tl }
- { \c_@@_vars_root_tl \l_keys_path_tl .req }
- { \prg_return_true: }
+ \prop_if_exist:cTF { \c_@@_info_root_tl \l_keys_path_tl }
+ {
+ \prop_if_in:cnTF { \c_@@_info_root_tl \l_keys_path_tl } {#1}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
{ \prg_return_false: }
}
% \end{macrocode}
% \end{macro}
%
% \begin{macro}[int]{\@@_execute:}
-% \begin{macro}[aux]
-% {
-% \@@_execute_unknown:,
-% \@@_execute_unknown_std:,
-% \@@_execute_unknown_alt:
-% }
+% \begin{macro}[aux]{\@@_execute_unknown:}
% \begin{macro}[aux, EXP]{\@@_execute:nn}
+% \begin{macro}[aux]{\@@_store_unused:}
% Actually executing a key is done in two parts. First, look for the
% key itself, then look for the \texttt{unknown} key with the same
-% path. If both of these fail, complain.
+% path. If both of these fail, complain. What exactly happens if a key
+% is unknown depends on whether unknown keys are being skipped or if
+% an error should be raised.
% \begin{macrocode}
\cs_new_protected_nopar:Npn \@@_execute:
{ \@@_execute:nn { \l_keys_path_tl } { \@@_execute_unknown: } }
\cs_new_protected_nopar:Npn \@@_execute_unknown:
{
- \@@_execute:nn { \l_@@_module_tl / unknown }
- {
- \__msg_kernel_error:nnxx { kernel } { key-unknown }
- { \l_keys_path_tl } { \l_@@_module_tl }
- }
- }
-\cs_new_eq:NN \@@_execute_unknown_std: \@@_execute_unknown:
-\cs_new_protected_nopar:Npn \@@_execute_unknown_alt:
- {
- \clist_put_right:Nx \l_@@_unknown_clist
+ \bool_if:NTF \l_@@_only_known_bool
+ { \@@_store_unused: }
{
- \exp_not:o \l_keys_key_tl
- \bool_if:NF \l_@@_no_value_bool
- { = { \exp_not:o \l_keys_value_tl } }
+ \@@_execute:nn { \l_@@_module_tl / unknown }
+ {
+ \__msg_kernel_error:nnxx { kernel } { key-unknown }
+ { \l_keys_path_tl } { \l_@@_module_tl }
+ }
}
}
\cs_new:Npn \@@_execute:nn #1#2
@@ -1820,10 +2070,20 @@
}
{#2}
}
+\cs_new_protected_nopar:Npn \@@_store_unused:
+ {
+ \clist_put_right:Nx \l_@@_unused_clist
+ {
+ \exp_not:o \l_keys_key_tl
+ \bool_if:NF \l_@@_no_value_bool
+ { = { \exp_not:o \l_keys_value_tl } }
+ }
+ }
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \begin{macro}[int, EXP]{\@@_choice_find:n}
% Executing a choice has two parts. First, try the choice given, then
@@ -1934,46 +2194,34 @@
% \end{macrocode}
%
% \subsection{Deprecated functions}
-%
-% Deprecated on 2013-07-09.
%
% \begin{macro}[int]{\@@_choice_code_store:n, \@@_choice_code_store:x}
-% The code for making multiple choices is stored in a token list.
+% \begin{macro}{.choice_code:n, .choice_code:x}
+% \begin{macro}[int]{\@@_choices_generate:n}
+% \begin{macro}[aux]{\@@_choices_generate_aux:n}
+% \begin{macro}{.generate_choices:n}
+% Deprecated on 2013-07-09.
% \begin{macrocode}
\cs_new_protected:Npn \@@_choice_code_store:n #1
{
\cs_if_exist:cF
- { \c_@@_vars_root_tl \l_keys_path_tl .choice~code }
+ { \c_@@_info_root_tl \l_keys_path_tl .choice~code }
{
\tl_new:c
- { \c_@@_vars_root_tl \l_keys_path_tl .choice~code }
+ { \c_@@_info_root_tl \l_keys_path_tl .choice~code }
}
- \tl_set:cn { \c_@@_vars_root_tl \l_keys_path_tl .choice~code }
+ \tl_set:cn { \c_@@_info_root_tl \l_keys_path_tl .choice~code }
{#1}
}
\cs_generate_variant:Nn \@@_choice_code_store:n { x }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{.choice_code:n, .choice_code:x}
-% Storing the code for choices
-% \begin{macrocode}
\cs_new_protected:cpn { \c_@@_props_root_tl .choice_code:n } #1
{ \@@_choice_code_store:n {#1} }
\cs_new_protected:cpn { \c_@@_props_root_tl .choice_code:x } #1
{ \@@_choice_code_store:x {#1} }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[int]{\@@_choices_generate:n}
-% \begin{macro}[aux]{\@@_choices_generate_aux:n}
-% Creating multiple-choices means setting up the \enquote{indicator}
-% code, then applying whatever the user wanted.
-% \begin{macrocode}
\cs_new_protected:Npn \@@_choices_generate:n #1
{
\cs_if_exist:cTF
- { \c_@@_vars_root_tl \l_keys_path_tl .choice~code }
+ { \c_@@_info_root_tl \l_keys_path_tl .choice~code }
{
\@@_choice_make:
\int_zero:N \l_keys_choice_int
@@ -1993,7 +2241,7 @@
\int_set:Nn \exp_not:N \l_keys_choice_int
{ \int_use:N \l_keys_choice_int }
\exp_not:v
- { \c_@@_vars_root_tl \l_keys_path_tl .choice~code }
+ { \c_@@_info_root_tl \l_keys_path_tl .choice~code }
}
}
\__msg_kernel_new:nnnn { kernel } { generate-choices-before-code }
@@ -2003,42 +2251,14 @@
Before~using~.generate_choices:n~the~code~should~be~defined~
with~'.choice_code:n'~or~'.choice_code:x'.
}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{.generate_choices:n}
-% Making choices is easy.
-% \begin{macrocode}
\cs_new_protected:cpn { \c_@@_props_root_tl .generate_choices:n } #1
{ \@@_choices_generate:n {#1} }
% \end{macrocode}
% \end{macro}
-%
-% Deprecated on 2011-05-27, for removal by 2011-08-31.
-%
-% \begin{macro}{\KV_process_space_removal_sanitize:NNn}
-% \begin{macro}{\KV_process_space_removal_no_sanitize:NNn}
-% \begin{macro}{\KV_process_no_space_removal_no_sanitize:NNn}
-% There is just one function for this now.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \KV_process_space_removal_sanitize:NNn \keyval_parse:NNn
-\cs_new_eq:NN \KV_process_space_removal_no_sanitize:NNn \keyval_parse:NNn
-\cs_new_eq:NN \KV_process_no_space_removal_no_sanitize:NNn \keyval_parse:NNn
-%</deprecated>
-% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
-%
-% Internal material for removal by 2012-12-31.
-%
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \c_keys_code_root_tl \c__keys_code_root_tl
-%</deprecated>
-% \end{macrocode}
+% \end{macro}
%
% \begin{macrocode}
%</initex|package>
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx b/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
index 5ae55447bf0..d6e34107c13 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-%% File: l3luatex.dtx Copyright (C) 2010-2012 The LaTeX3 Project
+%% File: l3luatex.dtx Copyright (C) 2010-2013 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
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3luatex.dtx 4049 2012-08-03 14:01:40Z bruno $
+\GetIdInfo$Id: l3luatex.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Experimental LuaTeX-specific functions}
%</driver|package>
%<*driver>
@@ -500,18 +500,6 @@
}
% \end{macrocode}
%
-% \subsection{Deprecated functions}
-%
-% Deprecated 2011-12-21, for removal by 2012-03-31.
-%
-% \begin{variable}{\c_string_cctab}
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \c_string_cctab \c_str_cctab
-%</deprecated>
-% \end{macrocode}
-% \end{variable}
-%
% \begin{macrocode}
%</initex|package>
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
index 9a10e278f2d..aa3cf3ca654 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3msg.dtx 4412 2013-01-08 12:23:19Z joseph $
+\GetIdInfo$Id: l3msg.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Messages}
%</driver|package>
%<*driver>
@@ -1874,6 +1874,8 @@
{ Erroneous~variable~#1 used! }
\@@_kernel_new:nnn { kernel } { misused-sequence }
{ A~sequence~was~misused. }
+\@@_kernel_new:nnn { kernel } { misused-prop }
+ { A~property~list~was~misused. }
\@@_kernel_new:nnn { kernel } { negative-replication }
{ Negative~argument~for~\prg_replicate:nn. }
\@@_kernel_new:nnn { kernel } { unknown-comparison }
@@ -2117,145 +2119,6 @@
% \end{macro}
% \end{macro}
%
-% \subsection{Deprecated functions}
-%
-% Deprecated on 2011-05-27, for removal by 2011-08-31.
-%
-% \begin{macro}{\msg_class_new:nn}
-% This is only ever used in a |set| fashion.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \msg_class_new:nn \msg_class_set:nn
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \msg_trace:nnxxxx, \msg_trace:nnxxx, \msg_trace:nnxx,
-% \msg_trace:nnx, \msg_trace:nn
-% }
-% The performance here is never going to be good enough for tracing
-% code, so let's be realistic.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \msg_trace:nnxxxx \msg_log:nnxxxx
-\cs_new_eq:NN \msg_trace:nnxxx \msg_log:nnxxx
-\cs_new_eq:NN \msg_trace:nnxx \msg_log:nnxx
-\cs_new_eq:NN \msg_trace:nnx \msg_log:nnx
-\cs_new_eq:NN \msg_trace:nn \msg_log:nn
-%</deprecated>
-% \end{macrocode}
-%\end{macro}
-%
-% \begin{macro}{\msg_generic_new:nnn}
-% \begin{macro}{\msg_generic_new:nn}
-% \begin{macro}{\msg_generic_set:nnn}
-% \begin{macro}{\msg_generic_set:nn}
-% \begin{macro}{\msg_direct_interrupt:xxxxx}
-% \begin{macro}{\msg_direct_log:xx}
-% \begin{macro}{\msg_direct_term:xx}
-% These were all too low-level.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_protected:Npn \msg_generic_new:nnn #1#2#3 { \deprecated }
-\cs_new_protected:Npn \msg_generic_new:nn #1#2 { \deprecated }
-\cs_new_protected:Npn \msg_generic_set:nnn #1#2#3 { \deprecated }
-\cs_new_protected:Npn \msg_generic_set:nn #1#2 { \deprecated }
-\cs_new_protected:Npn \msg_direct_interrupt:xxxxx #1#2#3#4#5 { \deprecated }
-\cs_new_protected:Npn \msg_direct_log:xx #1#2 { \deprecated }
-\cs_new_protected:Npn \msg_direct_term:xx #1#2 { \deprecated }
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_kernel_bug:x}
-% \begin{variable}{\c_@@_kernel_bug_text_tl, \c_@@_kernel_bug_more_text_tl}
-% \begin{macrocode}
-%<*deprecated>
-\cs_set_protected:Npn \@@_kernel_bug:x #1
- {
- \msg_interrupt:nnn { \c_@@_kernel_bug_text_tl }
- {
- #1
- \msg_see_documentation_text:n { LaTeX3 }
- }
- { \c_@@_kernel_bug_more_text_tl }
- }
-\tl_const:Nn \c_@@_kernel_bug_text_tl
- { This~is~a~LaTeX~bug:~check~coding! }
-\tl_const:Nn \c_@@_kernel_bug_more_text_tl
- {
- There~is~a~coding~bug~somewhere~around~here. \\
- This~probably~needs~examining~by~an~expert.
- \c_msg_return_text_tl
- }
-%</deprecated>
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-%
-% Deprecated on 2012-06-28, for removal by 2012-12-31.
-%
-% \begin{macro}{\msg_newline:, \msg_two_newlines:}
-% New lines are printed in the same way as for low-level file writing.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_nopar:Npn \msg_newline: { ^^J }
-\cs_new_nopar:Npn \msg_two_newlines: { ^^J ^^J }
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\msg_log:x, \msg_term:x}
-% \begin{macro}{\msg_interrupt:xxx}
-% These were all misnamed.
-% \begin{macrocode}
-%<*deprecated>
-\cs_generate_variant:Nn \msg_log:n { x }
-\cs_generate_variant:Nn \msg_term:n { x }
-\cs_generate_variant:Nn \msg_interrupt:nnn { xxx }
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% Deprecated on 2012-06-29, for removal by 2012-12-31.
-%
-% \begin{macro}{\msg_class_set:nn}
-% Setting up a message class does two tasks. Any existing redirection
-% is cleared, and the various message functions are created
-% to simply use the code stored for the message.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_protected:Npn \msg_class_set:nn #1#2
- {
- \cs_if_exist:cTF { @@_ #1 _code:nnnnnn }
- \cs_set_protected:cpn
- \cs_new_protected:cpn
- { @@_ #1 _code:nnnnnn } ##1##2##3##4##5##6 {#2}
- \prop_clear_new:c { l_@@_redirect_ #1 _prop }
- \cs_set_protected_nopar:cpn { msg_ #1 :nnxxxx }
- { \@@_use:nnnnnnn {#1} }
- \cs_set_protected:cpx { msg_ #1 :nnxxx } ##1##2##3##4##5
- { \exp_not:c { msg_ #1 :nnxxxx } {##1} {##2} {##3} {##4} {##5} { } }
- \cs_set_protected:cpx { msg_ #1 :nnxx } ##1##2##3##4
- { \exp_not:c { msg_ #1 :nnxxxx } {##1} {##2} {##3} {##4} { } { } }
- \cs_set_protected:cpx { msg_ #1 :nnx } ##1##2##3
- { \exp_not:c { msg_ #1 :nnxxxx } {##1} {##2} {##3} { } { } { } }
- \cs_set_protected:cpx { msg_ #1 :nn } ##1##2
- { \exp_not:c { msg_ #1 :nnxxxx } {##1} {##2} { } { } { } { } }
- }
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
% \begin{macrocode}
%</initex|package>
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
index 231c324274a..60e96a8351d 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3prg.dtx 4482 2013-04-24 21:05:12Z joseph $
+\GetIdInfo$Id: l3prg.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Control structures}
%</driver|package>
%<*driver>
@@ -1645,208 +1645,6 @@
% \end{macro}
% \end{macro}
%
-% \subsection{Deprecated functions}
-%
-% These were deprecated on 2012-02-08, and will be removed entirely by
-% 2012-05-31.
-%
-% \begin{macro}[aux]{\prg_define_quicksort:nnn}
-% |#1| is the name, |#2| and |#3| are the tokens enclosing the
-% argument. For the somewhat strange \meta{clist} type which doesn't
-% enclose the items but uses a separator we define it by hand
-% afterwards. When doing the first pass, the algorithm wraps all
-% elements in braces and then uses a generic quicksort which works
-% on token lists.
-%
-% As an example
-% \begin{quote}
-% |\prg_define_quicksort:nnn{seq}{\seq_elt:w}{\seq_elt_end:w}|
-% \end{quote}
-% defines the user function |\seq_quicksort:n| and furthermore
-% expects to use the two functions |\seq_quicksort_compare:nnTF|
-% which compares the items and |\seq_quicksort_function:n| which is
-% placed before each sorted item. It is up to the programmer to
-% define these functions when needed. For the |seq| type a sequence
-% is a token list variable, so one additionally has to define
-% \begin{quote}
-% |\cs_set_nopar:Npn \seq_quicksort:N{\exp_args:No\seq_quicksort:n}|
-% \end{quote}
-%
-%
-% For details on the implementation see \enquote{Sorting in \TeX{}'s Mouth}
-% by Bernd Raichle. Firstly we define the function for parsing the
-% initial list and then the braced list afterwards.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_protected:Npn \prg_define_quicksort:nnn #1#2#3 {
- \cs_set:cpx{#1_quicksort:n}##1{
- \exp_not:c{#1_quicksort_start_partition:w} ##1
- \exp_not:n{#2\q_nil#3\q_stop}
- }
- \cs_set:cpx{#1_quicksort_braced:n}##1{
- \exp_not:c{#1_quicksort_start_partition_braced:n} ##1
- \exp_not:N\q_nil\exp_not:N\q_stop
- }
- \cs_set:cpx {#1_quicksort_start_partition:w} #2 ##1 #3{
- \exp_not:N \quark_if_nil:nT {##1}\exp_not:N \use_none_delimit_by_q_stop:w
- \exp_not:c{#1_quicksort_do_partition_i:nnnw} {##1}{}{}
- }
- \cs_set:cpx {#1_quicksort_start_partition_braced:n} ##1 {
- \exp_not:N \quark_if_nil:nT {##1}\exp_not:N \use_none_delimit_by_q_stop:w
- \exp_not:c{#1_quicksort_do_partition_i_braced:nnnn} {##1}{}{}
- }
-%</deprecated>
-% \end{macrocode}
-% Now for doing the partitions.
-% \begin{macrocode}
-%<*deprecated>
- \cs_set:cpx {#1_quicksort_do_partition_i:nnnw} ##1##2##3 #2 ##4 #3 {
- \exp_not:N \quark_if_nil:nTF {##4} \exp_not:c {#1_do_quicksort_braced:nnnnw}
- {
- \exp_not:c{#1_quicksort_compare:nnTF}{##1}{##4}
- \exp_not:c{#1_quicksort_partition_greater_ii:nnnn}
- \exp_not:c{#1_quicksort_partition_less_ii:nnnn}
- }
- {##1}{##2}{##3}{##4}
- }
- \cs_set:cpx {#1_quicksort_do_partition_i_braced:nnnn} ##1##2##3##4 {
- \exp_not:N \quark_if_nil:nTF {##4} \exp_not:c {#1_do_quicksort_braced:nnnnw}
- {
- \exp_not:c{#1_quicksort_compare:nnTF}{##1}{##4}
- \exp_not:c{#1_quicksort_partition_greater_ii_braced:nnnn}
- \exp_not:c{#1_quicksort_partition_less_ii_braced:nnnn}
- }
- {##1}{##2}{##3}{##4}
- }
- \cs_set:cpx {#1_quicksort_do_partition_ii:nnnw} ##1##2##3 #2 ##4 #3 {
- \exp_not:N \quark_if_nil:nTF {##4} \exp_not:c {#1_do_quicksort_braced:nnnnw}
- {
- \exp_not:c{#1_quicksort_compare:nnTF}{##4}{##1}
- \exp_not:c{#1_quicksort_partition_less_i:nnnn}
- \exp_not:c{#1_quicksort_partition_greater_i:nnnn}
- }
- {##1}{##2}{##3}{##4}
- }
- \cs_set:cpx {#1_quicksort_do_partition_ii_braced:nnnn} ##1##2##3##4 {
- \exp_not:N \quark_if_nil:nTF {##4} \exp_not:c {#1_do_quicksort_braced:nnnnw}
- {
- \exp_not:c{#1_quicksort_compare:nnTF}{##4}{##1}
- \exp_not:c{#1_quicksort_partition_less_i_braced:nnnn}
- \exp_not:c{#1_quicksort_partition_greater_i_braced:nnnn}
- }
- {##1}{##2}{##3}{##4}
- }
-%</deprecated>
-% \end{macrocode}
-% This part of the code handles the two branches in each
-% sorting. Again we will also have to do it braced.
-% \begin{macrocode}
-%<*deprecated>
- \cs_set:cpx {#1_quicksort_partition_less_i:nnnn} ##1##2##3##4{
- \exp_not:c{#1_quicksort_do_partition_i:nnnw}{##1}{##2}{{##4}##3}}
- \cs_set:cpx {#1_quicksort_partition_less_ii:nnnn} ##1##2##3##4{
- \exp_not:c{#1_quicksort_do_partition_ii:nnnw}{##1}{##2}{##3{##4}}}
- \cs_set:cpx {#1_quicksort_partition_greater_i:nnnn} ##1##2##3##4{
- \exp_not:c{#1_quicksort_do_partition_i:nnnw}{##1}{{##4}##2}{##3}}
- \cs_set:cpx {#1_quicksort_partition_greater_ii:nnnn} ##1##2##3##4{
- \exp_not:c{#1_quicksort_do_partition_ii:nnnw}{##1}{##2{##4}}{##3}}
- \cs_set:cpx {#1_quicksort_partition_less_i_braced:nnnn} ##1##2##3##4{
- \exp_not:c{#1_quicksort_do_partition_i_braced:nnnn}{##1}{##2}{{##4}##3}}
- \cs_set:cpx {#1_quicksort_partition_less_ii_braced:nnnn} ##1##2##3##4{
- \exp_not:c{#1_quicksort_do_partition_ii_braced:nnnn}{##1}{##2}{##3{##4}}}
- \cs_set:cpx {#1_quicksort_partition_greater_i_braced:nnnn} ##1##2##3##4{
- \exp_not:c{#1_quicksort_do_partition_i_braced:nnnn}{##1}{{##4}##2}{##3}}
- \cs_set:cpx {#1_quicksort_partition_greater_ii_braced:nnnn} ##1##2##3##4{
- \exp_not:c{#1_quicksort_do_partition_ii_braced:nnnn}{##1}{##2{##4}}{##3}}
-%</deprecated>
-% \end{macrocode}
-% Finally, the big kahuna! This is where the sub-lists are sorted.
-% \begin{macrocode}
-%<*deprecated>
- \cs_set:cpx {#1_do_quicksort_braced:nnnnw} ##1##2##3##4\q_stop {
- \exp_not:c{#1_quicksort_braced:n}{##2}
- \exp_not:c{#1_quicksort_function:n}{##1}
- \exp_not:c{#1_quicksort_braced:n}{##3}
- }
-}
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\prg_quicksort:n}
-% A simple version. Sorts a list of tokens, uses the function
-% |\prg_quicksort_compare:nnTF| to compare items, and places the
-% function |\prg_quicksort_function:n| in front of each of them.
-% \begin{macrocode}
-%<*deprecated>
-\prg_define_quicksort:nnn {prg}{}{}
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\prg_quicksort_function:n}
-% \begin{macro}{\prg_quicksort_compare:nnTF}
-% \begin{macrocode}
-%<*deprecated>
-\cs_set:Npn \prg_quicksort_function:n {\ERROR}
-\cs_set:Npn \prg_quicksort_compare:nnTF {\ERROR}
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% These were deprecated on 2011-05-27 and will be removed entirely by
-% 2011-08-31.
-%
-% \begin{macro}{\prg_new_map_functions:Nn}
-% \begin{macro}{\prg_set_map_functions:Nn}
-% As we have restructured the structured variables, these are no
-% longer needed.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_protected:Npn \prg_new_map_functions:Nn #1#2 { \deprecated }
-\cs_new_protected:Npn \prg_set_map_functions:Nn #1#2 { \deprecated }
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% Deprecated 2012-06-03 for removal after 2012-12-31.
-%
-% \begin{macro}[EXP]
-% {
-% \prg_case_int:nnn, \prg_case_str:nnn, \prg_case_str:onn,
-% \prg_case_str:xxn, \prg_case_tl:Nnn, \prg_case_tl:cnn
-% }
-% Moved to more sensible modules.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \prg_case_int:nnn \int_case:nnn
-\cs_new_eq:NN \prg_case_str:nnn \str_case:nnn
-\cs_new_eq:NN \prg_case_str:onn \str_case:onn
-\cs_new_eq:NN \prg_case_str:xxn \str_case_x:nnn
-\cs_new_eq:NN \prg_case_tl:Nnn \tl_case:Nnn
-\cs_new_eq:NN \prg_case_tl:cnn \tl_case:cnn
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% Deprecated 2012-06-04 for removal after 2012-12-31.
-%
-% \begin{macro}
-% {
-% \prg_stepwise_function:nnnN, \prg_stepwise_inline:nnnn,
-% \prg_stepwise_variable:nnnNn
-% }
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \prg_stepwise_function:nnnN \int_step_function:nnnN
-\cs_new_eq:NN \prg_stepwise_inline:nnnn \int_step_inline:nnnn
-\cs_new_eq:NN \prg_stepwise_variable:nnnNn \int_step_variable:nnnNn
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
% \begin{macrocode}
%</initex|package>
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
index 3046ae59e8b..50472ab8754 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3prop.dtx 4423 2013-01-09 00:05:30Z bruno $
+\GetIdInfo$Id: l3prop.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Property lists}
%</driver|package>
%<*driver>
@@ -433,8 +433,18 @@
% \section{Internal property list functions}
%
% \begin{variable}{\s__prop}
-% The internal token used to separate out property list entries,
-% surrounding each \meta{key}.
+% The internal token used at the beginning of property lists. This is
+% also used after each \meta{key} (see \cs{__prop_pair:wn}).
+% \end{variable}
+%
+% \begin{variable}{\__prop_pair:wn}
+% \begin{syntax}
+% \cs{__prop_pair:wn} \meta{key} \cs{s__prop} \Arg{item}
+% \end{syntax}
+% The internal token used to begin each key--value pair in the
+% property list. If expanded outside of a mapping or manipulation
+% function, an error will be raised. The definition should always be
+% set globally.
% \end{variable}
%
% \begin{variable}{\l__prop_internal_tl}
@@ -494,18 +504,33 @@
%
% A property list is a macro whose top-level expansion is for the form
% \begin{quote}
-% \cs{s_@@} \meta{key_1} \cs{s_@@} \Arg{value_1} \\
+% \cs{s_@@}
+% \cs{@@_pair:wn} \meta{key_1} \cs{s_@@} \Arg{value_1} \\
% \ldots{} \\
-% \cs{s_@@} \meta{key_n} \cs{s_@@} \Arg{value_n} \\
+% \cs{@@_pair:wn} \meta{key_n} \cs{s_@@} \Arg{value_n} \\
+% \cs{s_obj_end}
% \end{quote}
+% where the separators \cs{s_@@} and \cs{s_obj_end} are scan marks
+% (equal to \cs{scan_stop:}), and \cs{@@_pair:wn} can be used to map
+% through the property list.
%
% \begin{macro}[int]{\s_@@}
-% A private scan mark is used as a marker surrounding each key.
+% A private scan mark is used as a marker after each key, and at the
+% very beginning of the property list.
% \begin{macrocode}
\__scan_new:N \s_@@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}[int]{\@@_pair:wn}
+% The delimiter is always defined, but when misused simply triggers an
+% error and removes its argument.
+% \begin{macrocode}
+\cs_new:Npn \@@_pair:wn #1 \s_@@ #2
+ { \__msg_kernel_expandable_error:nn { kernel } { misused-prop } }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{variable}{\l_@@_internal_tl}
% Token list used to store the new key--value pair inserted by
% \cs{prop_put:Nnn} and friends.
@@ -515,19 +540,23 @@
% \end{variable}
%
% \begin{variable}[tested = m3prop004]{\c_empty_prop}
-% An empty prop is an empty token list.
+% An empty prop.
% \begin{macrocode}
-\cs_new_eq:NN \c_empty_prop \c_empty_tl
+\tl_const:Nn \c_empty_prop { \s_@@ \s_obj_end }
% \end{macrocode}
% \end{variable}
%
% \subsection{Allocation and initialisation}
%
% \begin{macro}[tested = m3prop001]{\prop_new:N, \prop_new:c}
-% Internally, property lists are just token lists.
+% Property lists are initialized with the value \cs{c_empty_prop}.
% \begin{macrocode}
-\cs_new_eq:NN \prop_new:N \tl_new:N
-\cs_new_eq:NN \prop_new:c \tl_new:c
+\cs_new_protected:Npn \prop_new:N #1
+ {
+ \__chk_if_free_cs:N #1
+ \cs_gset_eq:NN #1 \c_empty_prop
+ }
+\cs_generate_variant:Nn \prop_new:N { c }
% \end{macrocode}
% \end{macro}
%
@@ -535,22 +564,26 @@
% \begin{macro}[tested = m3prop001]{\prop_gclear:N, \prop_gclear:c}
% The same idea for clearing.
% \begin{macrocode}
-\cs_new_eq:NN \prop_clear:N \tl_clear:N
-\cs_new_eq:NN \prop_clear:c \tl_clear:c
-\cs_new_eq:NN \prop_gclear:N \tl_gclear:N
-\cs_new_eq:NN \prop_gclear:c \tl_gclear:c
+\cs_new_protected:Npn \prop_clear:N #1
+ { \prop_set_eq:NN #1 \c_empty_prop }
+\cs_generate_variant:Nn \prop_clear:N { c }
+\cs_new_protected:Npn \prop_gclear:N #1
+ { \prop_gset_eq:NN #1 \c_empty_prop }
+\cs_generate_variant:Nn \prop_gclear:N { c }
% \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}[tested = m3prop001]{\prop_clear_new:N, \prop_clear_new:c}
% \begin{macro}[tested = m3prop001]{\prop_gclear_new:N, \prop_gclear_new:c}
-% Once again a simple copy from the token list functions.
+% Once again a simple variation of the token list functions.
% \begin{macrocode}
-\cs_new_eq:NN \prop_clear_new:N \tl_clear_new:N
-\cs_new_eq:NN \prop_clear_new:c \tl_clear_new:c
-\cs_new_eq:NN \prop_gclear_new:N \tl_gclear_new:N
-\cs_new_eq:NN \prop_gclear_new:c \tl_gclear_new:c
+\cs_new_protected:Npn \prop_clear_new:N #1
+ { \prop_if_exist:NTF #1 { \prop_clear:N #1 } { \prop_new:N #1 } }
+\cs_generate_variant:Nn \prop_clear_new:N { c }
+\cs_new_protected:Npn \prop_gclear_new:N #1
+ { \prop_if_exist:NTF #1 { \prop_gclear:N #1 } { \prop_new:N #1 } }
+\cs_generate_variant:Nn \prop_gclear_new:N { c }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -559,7 +592,7 @@
% {\prop_set_eq:NN, \prop_set_eq:cN, \prop_set_eq:Nc, \prop_set_eq:cc}
% \begin{macro}[tested = m3prop001]
% {\prop_gset_eq:NN, \prop_gset_eq:cN, \prop_gset_eq:Nc, \prop_gset_eq:cc}
-% Once again, these are simply copies from the token list functions.
+% These are simply copies from the token list functions.
% \begin{macrocode}
\cs_new_eq:NN \prop_set_eq:NN \tl_set_eq:NN
\cs_new_eq:NN \prop_set_eq:Nc \tl_set_eq:Nc
@@ -587,6 +620,14 @@
%
% \subsection{Accessing data in property lists}
%
+% \begin{macro}[EXP]{\@@_strip_end:w}
+% Strip the \cs{s_obj_end} marker from an expanded property list
+% variable.
+% \begin{macrocode}
+\cs_new:Npn \@@_strip_end:w #1 \s_obj_end { \exp_not:n {#1} }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}[int]{\@@_split:NnTF}
% \begin{macro}[aux]{\@@_split_aux:NnTF}
% \begin{macro}[aux, EXP]{\@@_split_aux:w}
@@ -600,7 +641,7 @@
% \meta{key} is turned into a string.
% \begin{quote}
% \cs{cs_set:Npn} \cs{@@_split_aux:w} |#1| \\
-% \quad \cs{s_@@} \meta{key} \cs{s_@@} |#2| \\
+% \quad \cs{@@_pair:wn} \meta{key} \cs{s_@@} |#2| \\
% \quad |#3| \cs{q_mark} |#4| |#5| \cs{q_stop} \\
% \quad |{| |#4| \Arg{true code} \Arg{false code} |}|
% \end{quote}
@@ -611,7 +652,8 @@
% \cs{use_i:nn}, and |#5| is additional tokens that we do not care
% about. The \meta{true code} is left in the input stream, and can
% use the parameters |#1|, |#2|, |#3| for the three parts of the
-% property list as desired.
+% property list as desired. Namely, the original property list is in
+% this case |#1| \cs{@@_pair:wn} \meta{key} \cs{s_@@} |{#2}| |#3|.
%
% If the \meta{key} is not there, then the \meta{function} is
% \cs{use_ii:nn}, which keeps the \meta{false code}.
@@ -621,10 +663,10 @@
\cs_new_protected:Npn \@@_split_aux:NnTF #1#2#3#4
{
\cs_set:Npn \@@_split_aux:w ##1
- \s_@@ #2 \s_@@ ##2 ##3 \q_mark ##4 ##5 \q_stop
+ \@@_pair:wn #2 \s_@@ ##2 ##3 \q_mark ##4 ##5 \q_stop
{ ##4 {#3} {#4} }
\exp_after:wN \@@_split_aux:w #1 \q_mark \use_i:nn
- \s_@@ #2 \s_@@ { } \q_mark \use_ii:nn \q_stop
+ \@@_pair:wn #2 \s_@@ { } \q_mark \use_ii:nn \q_stop
}
\cs_new:Npn \@@_split_aux:w { }
% \end{macrocode}
@@ -766,7 +808,7 @@
% \prop_gput:cnn, \prop_gput:cnV, \prop_gput:cno, \prop_gput:cnx,
% \prop_gput:cVn, \prop_gput:cVV, \prop_gput:con, \prop_gput:coo
% }
-% \begin{macro}[aux]{\@@_put:NNNnn}
+% \begin{macro}[aux]{\@@_put:NNnn}
% Since the branches of \cs{@@_split:NnTF} are used as the replacement
% text of an internal macro, and since the \meta{key} and new
% \meta{value} may contain arbitrary tokens, it is not safe to include
@@ -774,23 +816,30 @@
% storing in \cs{l_@@_internal_tl} tokens which (after
% \texttt{x}-expansion) encode the key--value pair. This variable can
% safely be used in \cs{@@_split:NnTF}. If the \meta{key} was absent,
-% append the new key--value to the list. Otherwise concatenate the
-% extracts |##1| and |##3| with the new key--value pair
-% \cs{l_@@_internal_tl}. The updated entry is placed at the same spot
-% as the original \meta{key} in the property list, preserving the
-% order of entries.
+% append the new key--value to the list (\cs{@@_strip_end:w} moves the
+% \cs{s_obj_end} marker). Otherwise concatenate the extracts |##1|
+% and |##3| with the new key--value pair \cs{l_@@_internal_tl}. The
+% updated entry is placed at the same spot as the original \meta{key}
+% in the property list, preserving the order of entries.
% \begin{macrocode}
-\cs_new_protected_nopar:Npn \prop_put:Nnn
- { \@@_put:NNNnn \tl_set:Nx \tl_put_right:Nx }
-\cs_new_protected_nopar:Npn \prop_gput:Nnn
- { \@@_put:NNNnn \tl_gset:Nx \tl_gput_right:Nx }
-\cs_new_protected:Npn \@@_put:NNNnn #1#2#3#4#5
+\cs_new_protected_nopar:Npn \prop_put:Nnn { \@@_put:NNnn \tl_set:Nx }
+\cs_new_protected_nopar:Npn \prop_gput:Nnn { \@@_put:NNnn \tl_gset:Nx }
+\cs_new_protected:Npn \@@_put:NNnn #1#2#3#4
{
\tl_set:Nn \l_@@_internal_tl
- { \s_@@ \tl_to_str:n {#4} \s_@@ { \exp_not:n {#5} } }
- \@@_split:NnTF #3 {#4}
- { #1 #3 { \exp_not:n {##1} \l_@@_internal_tl \exp_not:n {##3} } }
- { #2 #3 { \l_@@_internal_tl } }
+ {
+ \exp_not:N \@@_pair:wn \tl_to_str:n {#3}
+ \s_@@ { \exp_not:n {#4} }
+ }
+ \@@_split:NnTF #2 {#3}
+ { #1 #2 { \exp_not:n {##1} \l_@@_internal_tl \exp_not:n {##3} } }
+ {
+ #1 #2
+ {
+ \exp_after:wN \@@_strip_end:w #2
+ \l_@@_internal_tl \s_obj_end
+ }
+ }
}
\cs_generate_variant:Nn \prop_put:Nnn
{ NnV , Nno , Nnx , NV , NVV , No , Noo }
@@ -816,16 +865,25 @@
% convert the key to a string using \cs{tl_to_str:n}.
% \begin{macrocode}
\cs_new_protected_nopar:Npn \prop_put_if_new:Nnn
- { \@@_put_if_new:NNnn \tl_put_right:Nx }
+ { \@@_put_if_new:NNnn \tl_set:Nx }
\cs_new_protected_nopar:Npn \prop_gput_if_new:Nnn
- { \@@_put_if_new:NNnn \tl_gput_right:Nx }
+ { \@@_put_if_new:NNnn \tl_gset:Nx }
\cs_new_protected:Npn \@@_put_if_new:NNnn #1#2#3#4
{
\tl_set:Nn \l_@@_internal_tl
- { \s_@@ \tl_to_str:n {#3} \s_@@ \exp_not:n { {#4} } }
+ {
+ \exp_not:N \@@_pair:wn \tl_to_str:n {#3}
+ \s_@@ \exp_not:n { {#4} }
+ }
\@@_split:NnTF #2 {#3}
{ }
- { #1 #2 { \l_@@_internal_tl } }
+ {
+ #1 #2
+ {
+ \exp_after:wN \@@_strip_end:w #2
+ \l_@@_internal_tl \s_obj_end
+ }
+ }
}
\cs_generate_variant:Nn \prop_put_if_new:Nnn { c }
\cs_generate_variant:Nn \prop_gput_if_new:Nnn { c }
@@ -847,10 +905,15 @@
% \begin{macro}[pTF, tested = m3prop003]{\prop_if_empty:N, \prop_if_empty:c}
% Same test as for token lists.
% \begin{macrocode}
-\prg_new_eq_conditional:NNn \prop_if_empty:N \tl_if_empty:N
- { p , T , F , TF }
-\prg_new_eq_conditional:NNn \prop_if_empty:c \tl_if_empty:c
- { p , T , F , TF }
+\prg_new_conditional:Npnn \prop_if_empty:N #1 { p , T , F , TF }
+ {
+ \tl_if_eq:NNTF #1 \c_empty_prop
+ \prg_return_true: \prg_return_false:
+ }
+\cs_generate_variant:Nn \prop_if_empty_p:N { c }
+\cs_generate_variant:Nn \prop_if_empty:NT { c }
+\cs_generate_variant:Nn \prop_if_empty:NF { c }
+\cs_generate_variant:Nn \prop_if_empty:NTF { c }
% \end{macrocode}
% \end{macro}
%
@@ -859,7 +922,7 @@
% \prop_if_in:Nn, \prop_if_in:NV, \prop_if_in:No,
% \prop_if_in:cn, \prop_if_in:cV, \prop_if_in:co
% }
-% \begin{macro}[aux]{\@@_if_in:nwn,\@@_if_in:N}
+% \begin{macro}[aux,EXP]{\@@_if_in:nwwn,\@@_if_in:N}
% Testing expandably if a key is in a property list
% requires to go through the key--value pairs one by one.
% This is rather slow, and a faster test would be
@@ -867,47 +930,47 @@
% \prg_new_protected_conditional:Npnn \prop_if_in:Nn #1 #2
% {
% \@@_split:NnTF #1 {#2}
-% {
-% \prg_return_true:
-% \use_none:nnn
-% }
-% { \prg_return_false: }
+% { \prg_return_true: }
+% { \prg_return_false: }
% }
% \end{verbatim}
% but \cs{@@_split:NnTF} is non-expandable.
%
-% Instead, the key is compared to each key in turn using \cs{str_if_eq_x:nn},
-% which is expandable. To terminate the mapping, we append to the property
-% list the key that is searched for. This second
-% \cs{tl_to_str:n} is not expanded at the start, but only when included
-% in the \cs{str_if_eq_x:nn}. It cannot make the breaking mechanism choke,
-% because the arbitrary token list material is enclosed in braces.
-% When ending, we test the next token: it is either \cs{s_@@}
-% or \cs{q_recursion_tail} in the case of a missing key.
+% Instead, the key is compared to each key in turn using
+% \cs{str_if_eq_x:nn}, which is expandable. To terminate the mapping,
+% we append to the property list the key that is searched for. This
+% second \cs{tl_to_str:n} is not expanded at the start, but only when
+% included in the \cs{str_if_eq_x:nn}. It cannot make the breaking
+% mechanism choke, because the arbitrary token list material is
+% enclosed in braces. The second argument of \cs{@@_if_in:nwwn} is
+% most often empty. When the \meta{key} is found in the list,
+% \cs{@@_if_in:N} receives \cs{s_@@} or \cs{s_obj_end}, and if it is
+% found as the extra item, the function receives
+% \cs{q_recursion_tail}, easily recognizable.
+%
% Here, \cs{prop_map_function:NN} is not sufficient for the mapping,
% since it can only map a single token, and cannot carry the key that
% is searched for.
% \begin{macrocode}
\prg_new_conditional:Npnn \prop_if_in:Nn #1#2 { p , T , F , TF }
{
- \exp_last_unbraced:Noo \@@_if_in:nwn
- { \tl_to_str:n {#2} } #1
- \s_@@ \tl_to_str:n {#2} \s_@@ { }
- \q_recursion_tail
+ \exp_last_unbraced:Noo \@@_if_in:nwwn { \tl_to_str:n {#2} } #1
+ \@@_pair:wn \tl_to_str:n {#2} \s_@@ { }
+ \q_recursion_tail
\__prg_break_point:
}
-\cs_new:Npn \@@_if_in:nwn #1 \s_@@ #2 \s_@@ #3
+\cs_new:Npn \@@_if_in:nwwn #1#2 \@@_pair:wn #3 \s_@@ #4
{
- \str_if_eq_x:nnTF {#1} {#2}
+ \str_if_eq_x:nnTF {#1} {#3}
{ \@@_if_in:N }
- { \@@_if_in:nwn {#1} }
+ { \@@_if_in:nwwn {#1} }
}
\cs_new:Npn \@@_if_in:N #1
{
- \if_meaning:w \s_@@ #1
- \prg_return_true:
- \else:
+ \if_meaning:w \q_recursion_tail #1
\prg_return_false:
+ \else:
+ \prg_return_true:
\fi:
\__prg_break:
}
@@ -959,27 +1022,27 @@
% \prop_map_function:NN, \prop_map_function:Nc,
% \prop_map_function:cN, \prop_map_function:cc
% }
-% \begin{macro}[aux]{\@@_map_function:Nwn}
+% \begin{macro}[aux]{\@@_map_function:Nwwn}
% The fastest way to do a recursion here is to use an
-% \cs{if_meaning:w} test: the keys are strings, and thus
-% cannot match the marker \cs{q_recursion_tail}.
-% A special case to note is when the key |#2| is empty:
-% then \cs{q_recursion_tail} is compared to \cs{exp_after:wN},
-% also different.
+% \cs{if_meaning:w} test: the keys are strings, and thus cannot match
+% the marker \cs{q_recursion_tail}. A special case to note is when
+% the key |#3| is empty: then \cs{q_recursion_tail} is compared to
+% \cs{exp_after:wN}, also different. Note that |#2| can only consist
+% of \cs{s_@@} and/or \cs{s_obj_end}.
% \begin{macrocode}
\cs_new:Npn \prop_map_function:NN #1#2
{
- \exp_last_unbraced:NNo \@@_map_function:Nwn #2
- #1 \s_@@ \q_recursion_tail \s_@@ { }
+ \exp_last_unbraced:NNo \@@_map_function:Nwwn #2 #1
+ \@@_pair:wn \q_recursion_tail \s_@@ { }
\__prg_break_point:Nn \prop_map_break: { }
}
-\cs_new:Npn \@@_map_function:Nwn #1 \s_@@ #2 \s_@@ #3
+\cs_new:Npn \@@_map_function:Nwwn #1#2 \@@_pair:wn #3 \s_@@ #4
{
- \if_meaning:w \q_recursion_tail #2
+ \if_meaning:w \q_recursion_tail #3
\exp_after:wN \prop_map_break:
\fi:
- #1 {#2} {#3}
- \@@_map_function:Nwn #1
+ #1 {#3} {#4}
+ \@@_map_function:Nwwn #1
}
\cs_generate_variant:Nn \prop_map_function:NN { Nc }
\cs_generate_variant:Nn \prop_map_function:NN { c , cc }
@@ -988,17 +1051,26 @@
% \end{macro}
%
% \begin{macro}[tested = m3prop003]{\prop_map_inline:Nn, \prop_map_inline:cn}
-% Mapping in line requires a nesting level counter.
+% Mapping in line requires a nesting level counter. Store the current
+% definition of \cs{@@_pair:wn}, and define it anew. At the end of
+% the loop, revert to the earlier definition. Note that besides pairs
+% of the form \cs{@@_pair:wn} \meta{key} \cs{s_@@} \Arg{value}, there
+% are a leading and a trailing tokens, but both are equal to
+% \cs{scan_stop:}, hence have no effect in such inline mapping.
% \begin{macrocode}
\cs_new_protected:Npn \prop_map_inline:Nn #1#2
{
+ \cs_gset_eq:cN
+ { __prg_map_ \int_use:N \g__prg_map_int :wn } \@@_pair:wn
\int_gincr:N \g__prg_map_int
- \cs_gset:cpn { __prg_map_ \int_use:N \g__prg_map_int :w } ##1##2 {#2}
- \exp_last_unbraced:Nco \@@_map_function:Nwn
- { __prg_map_ \int_use:N \g__prg_map_int :w }
- #1
- \s_@@ \q_recursion_tail \s_@@ { }
- \__prg_break_point:Nn \prop_map_break: { \int_gdecr:N \g__prg_map_int }
+ \cs_gset:Npn \@@_pair:wn ##1 \s_@@ ##2 {#2}
+ #1
+ \__prg_break_point:Nn \prop_map_break:
+ {
+ \int_gdecr:N \g__prg_map_int
+ \cs_gset_eq:Nc \@@_pair:wn
+ { __prg_map_ \int_use:N \g__prg_map_int :wn }
+ }
}
\cs_generate_variant:Nn \prop_map_inline:Nn { c }
% \end{macrocode}
@@ -1032,100 +1104,6 @@
% \end{macrocode}
% \end{macro}
%
-% \subsection{Deprecated interfaces}
-%
-% Deprecated on 2011-05-27, for removal by 2011-08-31.
-%
-% \begin{macro}{\prop_display:N, \prop_display:c}
-% An older name for \cs{prop_show:N}.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \prop_display:N \prop_show:N
-\cs_new_eq:NN \prop_display:c \prop_show:c
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\prop_gget:NnN, \prop_gget:NVN, \prop_gget:cnN, \prop_gget:cVN}
-% \begin{macro}[aux]{\prop_gget_aux:Nnnn}
-% Getting globally is no longer supported: this is a conceptual change, so
-% the necessary code for the transition is provided directly.
-% \begin{macrocode}
-%<*deprecated>
-\tl_new:N \l_@@_internal_tl
-\cs_new_protected:Npn \prop_gget:NnN #1#2#3
- {
- \prop_get:NnN #1 {#2} \l_@@_internal_tl
- \tl_gset_eq:NN #3 \l_@@_internal_tl
- }
-\cs_generate_variant:Nn \prop_gget:NnN { NV }
-\cs_generate_variant:Nn \prop_gget:NnN { c , cV }
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\prop_get_gdel:NnN}
-% This name seems very odd.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \prop_get_gdel:NnN \prop_gpop:NnN
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[TF]{\prop_if_in:cc}
-% A hang-over from an ancient implementation
-% \begin{macrocode}
-%<*deprecated>
-\cs_generate_variant:Nn \prop_if_in:NnT { cc }
-\cs_generate_variant:Nn \prop_if_in:NnF { cc }
-\cs_generate_variant:Nn \prop_if_in:NnTF { cc }
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\prop_gput:ccx}
-% Another one.
-% \begin{macrocode}
-%<*deprecated>
-\cs_generate_variant:Nn \prop_gput:Nnn { ccx }
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[pTF]
-% {\prop_if_eq:NN, \prop_if_eq:Nc, \prop_if_eq:cN, \prop_if_eq:cc}
-% These ones do no even make sense!
-% \begin{macrocode}
-%<*deprecated>
-\prg_new_eq_conditional:NNn \prop_if_eq:NN \tl_if_eq:NN { p , T , F , TF }
-\prg_new_eq_conditional:NNn \prop_if_eq:cN \tl_if_eq:cN { p , T , F , TF }
-\prg_new_eq_conditional:NNn \prop_if_eq:Nc \tl_if_eq:Nc { p , T , F , TF }
-\prg_new_eq_conditional:NNn \prop_if_eq:cc \tl_if_eq:cc { p , T , F , TF }
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% Deprecated on 2012-05-12, for removal by 2012-11-30.
-%
-% \begin{macro}{\prop_del:Nn, \prop_del:NV, \prop_del:cn, \prop_del:cV}
-% \begin{macro}{\prop_gdel:Nn, \prop_gdel:NV, \prop_gdel:cn, \prop_gdel:cV}
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \prop_del:Nn \prop_remove:Nn
-\cs_new_eq:NN \prop_del:NV \prop_remove:NV
-\cs_new_eq:NN \prop_del:cn \prop_remove:cn
-\cs_new_eq:NN \prop_del:cV \prop_remove:cV
-\cs_new_eq:NN \prop_gdel:Nn \prop_gremove:Nn
-\cs_new_eq:NN \prop_gdel:NV \prop_gremove:NV
-\cs_new_eq:NN \prop_gdel:cn \prop_gremove:cn
-\cs_new_eq:NN \prop_gdel:cV \prop_gremove:cV
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
% \begin{macrocode}
%</initex|package>
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx b/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
index 145a9f4e369..26d3c4d78f7 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3quark.dtx 4521 2013-07-09 11:45:31Z joseph $
+\GetIdInfo$Id: l3quark.dtx 4564 2013-07-21 02:12:33Z bruno $
{L3 Quarks}
%</driver|package>
%<*driver>
@@ -663,6 +663,23 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{variable}{\s__seq}
+% This private scan mark is needed by \pkg{l3seq}, but that is loaded
+% before the quark module, hence its definition is deferred.
+% \begin{macrocode}
+\__scan_new:N \s__seq
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\s_obj_end}
+% This scan mark is used both in \pkg{l3seq} and \pkg{l3prop}. This
+% token ought to be defined in a \pkg{l3obj} module if we decide to go
+% in that direction. In the mean-time, we need it to be set.
+% \begin{macrocode}
+\__scan_new:N \s_obj_end
+% \end{macrocode}
+% \end{variable}
+%
% \subsection{Deprecated quark functions}
%
% \begin{macro}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
index 82c08c35f60..a697739d8da 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3seq.dtx 4500 2013-05-26 11:18:19Z bruno $
+\GetIdInfo$Id: l3seq.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Sequences and stacks}
%</driver|package>
%<*driver>
@@ -719,9 +719,14 @@
%
% \section{Internal sequence functions}
%
+% \begin{variable}{\s__seq}
+% This scan mark (equal to \cs{scan_stop:}) marks the beginning of a
+% sequence variable.
+% \end{variable}
+%
% \begin{function}[EXP]{\__seq_item:n}
% \begin{syntax}
-% \cs{__seq_item:n} \meta{item}
+% \cs{__seq_item:n} \Arg{item}
% \end{syntax}
% The internal token used to begin each sequence entry. If expanded
% outside of a mapping or manipulation function, an error will be
@@ -770,15 +775,19 @@
%</package>
% \end{macrocode}
%
-% A sequence is a control sequence whose top-level expansion is of
-% the form \enquote{\cs{@@_item:n} \marg{item_1}
-% \ldots \cs{@@_item:n} \marg{item_n}}. An earlier implementation
-% used the structure \enquote{\cs{seq_elt:w} \meta{item_1}
-% \cs{seq_elt_end:} \ldots \cs{seq_elt:w} \meta{item_n}
-% \cs{seq_elt_end:}}. This allows rapid searching using a delimited
-% function, but is not suitable for items containing |{|, |}| and |#|
-% tokens, and also leads to the loss of surrounding braces
-% around items.
+% A sequence is a control sequence whose top-level expansion is of the
+% form \enquote{\cs{s_@@} \cs{@@_item:n} \marg{item_1} \ldots
+% \cs{@@_item:n} \marg{item_n} \cs{s_obj_end}}, with a leading scan
+% mark, $n$~items of the same form, and a trailing scan mark. An
+% earlier implementation used the structure \enquote{\cs{seq_elt:w}
+% \meta{item_1} \cs{seq_elt_end:} \ldots \cs{seq_elt:w} \meta{item_n}
+% \cs{seq_elt_end:}}. This allowed rapid searching using a delimited
+% function, but was not suitable for items containing |{|, |}| and |#|
+% tokens, and also lead to the loss of surrounding braces around items.
+%
+% \begin{variable}{\s_@@}
+% The variable is defined in the \pkg{l3quark} module, loaded later.
+% \end{variable}
%
% \begin{macro}[int]{\@@_item:n}
% The delimiter is always defined, but when used incorrectly simply
@@ -802,9 +811,9 @@
% \end{variable}
%
% \begin{variable}{\c_empty_seq}
-% Simply copy the empty token list.
+% A sequence with no item, following the structure mentioned above.
% \begin{macrocode}
-\cs_new_eq:NN \c_empty_seq \c_empty_tl
+\tl_const:Nn \c_empty_seq { \s_@@ \s_obj_end }
% \end{macrocode}
% \end{variable}
%
@@ -812,10 +821,14 @@
%
% \begin{macro}{\seq_new:N,\seq_new:c}
% \UnitTested
-% Internally, sequences are just token lists.
+% Sequences are initialized to \cs{c_empty_seq}.
% \begin{macrocode}
-\cs_new_eq:NN \seq_new:N \tl_new:N
-\cs_new_eq:NN \seq_new:c \tl_new:c
+\cs_new_protected:Npn \seq_new:N #1
+ {
+ \__chk_if_free_cs:N #1
+ \cs_gset_eq:NN #1 \c_empty_seq
+ }
+\cs_generate_variant:Nn \seq_new:N { c }
% \end{macrocode}
% \end{macro}
%
@@ -823,12 +836,14 @@
% \UnitTested
% \begin{macro}{\seq_gclear:N, \seq_gclear:c}
% \UnitTested
-% Clearing sequences is just the same as clearing token lists.
+% Clearing a sequence is similar to setting it equal to the empty one.
% \begin{macrocode}
-\cs_new_eq:NN \seq_clear:N \tl_clear:N
-\cs_new_eq:NN \seq_clear:c \tl_clear:c
-\cs_new_eq:NN \seq_gclear:N \tl_gclear:N
-\cs_new_eq:NN \seq_gclear:c \tl_gclear:c
+\cs_new_protected:Npn \seq_clear:N #1
+ { \seq_set_eq:NN #1 \c_empty_seq }
+\cs_generate_variant:Nn \seq_clear:N { c }
+\cs_new_protected:Npn \seq_gclear:N #1
+ { \seq_gset_eq:NN #1 \c_empty_seq }
+\cs_generate_variant:Nn \seq_gclear:N { c }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -837,12 +852,14 @@
% \UnitTested
% \begin{macro}{\seq_gclear_new:N, \seq_gclear_new:c}
% \UnitTested
-% Once again a copy from the token list functions.
+% Once again we copy code from the token list functions.
% \begin{macrocode}
-\cs_new_eq:NN \seq_clear_new:N \tl_clear_new:N
-\cs_new_eq:NN \seq_clear_new:c \tl_clear_new:c
-\cs_new_eq:NN \seq_gclear_new:N \tl_gclear_new:N
-\cs_new_eq:NN \seq_gclear_new:c \tl_gclear_new:c
+\cs_new_protected:Npn \seq_clear_new:N #1
+ { \seq_if_exist:NTF #1 { \seq_clear:N #1 } { \seq_new:N #1 } }
+\cs_generate_variant:Nn \seq_clear_new:N { c }
+\cs_new_protected:Npn \seq_gclear_new:N #1
+ { \seq_if_exist:NTF #1 { \seq_gclear:N #1 } { \seq_new:N #1 } }
+\cs_generate_variant:Nn \seq_gclear_new:N { c }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -852,7 +869,7 @@
% \begin{macro}
% {\seq_gset_eq:NN, \seq_gset_eq:cN, \seq_gset_eq:Nc, \seq_gset_eq:cc}
% \UnitTested
-% Once again, these are simple copies from the token list functions.
+% Copying a sequence is the same as copying the underlying token list.
% \begin{macrocode}
\cs_new_eq:NN \seq_set_eq:NN \tl_set_eq:NN
\cs_new_eq:NN \seq_set_eq:Nc \tl_set_eq:Nc
@@ -877,8 +894,10 @@
% \@@_set_split_auxi:w, \@@_set_split_auxii:w,
% \@@_set_split_end:
% }
-% The goal is to split a given token list at a marker,
-% strip spaces from each item, and remove one set of
+% When the separator is empty, everything is very simple, just map
+% \cs{@@_wrap_item:n} through the items of the last argument.
+% For non-trivial separators, the goal is to split a given token list
+% at the marker, strip spaces from each item, and remove one set of
% outer braces if after removing leading and trailing
% spaces the item is enclosed within braces. After
% \cs{tl_replace_all:Nnn}, the token list \cs{l_@@_internal_a_tl}
@@ -900,10 +919,13 @@
{ \@@_set_split:NNnn \tl_set:Nx }
\cs_new_protected_nopar:Npn \seq_gset_split:Nnn
{ \@@_set_split:NNnn \tl_gset:Nx }
-\cs_new_protected:Npn \@@_set_split:NNnn #1 #2 #3 #4
+\cs_new_protected:Npn \@@_set_split:NNnn #1#2#3#4
{
\tl_if_empty:nTF {#3}
- { #1 #2 { \tl_map_function:nN {#4} \@@_wrap_item:n } }
+ {
+ \tl_set:Nn \l_@@_internal_a_tl
+ { \tl_map_function:nN {#4} \@@_wrap_item:n }
+ }
{
\tl_set:Nn \l_@@_internal_a_tl
{
@@ -917,8 +939,8 @@
\@@_set_split_auxi:w \prg_do_nothing:
}
\tl_set:Nx \l_@@_internal_a_tl { \l_@@_internal_a_tl }
- #1 #2 { \l_@@_internal_a_tl }
}
+ #1 #2 { \s_@@ \l_@@_internal_a_tl \s_obj_end }
}
\cs_new:Npn \@@_set_split_auxi:w #1 \@@_set_split_end:
{
@@ -939,15 +961,25 @@
% \UnitTested
% \begin{macro}{\seq_gconcat:NNN, \seq_gconcat:ccc}
% \UnitTested
-% Concatenating sequences is easy.
+% \begin{macro}[aux,EXP]{\@@_concat:NN, \@@_concat:w}
+% When concatenating sequences, one must take care of the trailing
+% \cs{s_obj_end} and leading \cs{s_@@}. The second argument of
+% \cs{@@_concat:NN} is \cs{s_@@}, and \cs{@@_concat:w} removes
+% \cs{s_obj_end} by a delimited approach. The result starts with
+% \cs{s_@@} (of the first sequence), which stops \texttt{f}-expansion.
% \begin{macrocode}
-\cs_new_eq:NN \seq_concat:NNN \tl_concat:NNN
-\cs_new_eq:NN \seq_gconcat:NNN \tl_gconcat:NNN
-\cs_new_eq:NN \seq_concat:ccc \tl_concat:ccc
-\cs_new_eq:NN \seq_gconcat:ccc \tl_gconcat:ccc
+\cs_new_protected:Npn \seq_concat:NNN #1#2#3
+ { \tl_set:Nf #1 { \exp_last_unbraced:NNo \@@_concat:NN #2 #3 } }
+\cs_new_protected:Npn \seq_gconcat:NNN #1#2#3
+ { \tl_gset:Nf #1 { \exp_last_unbraced:NNo \@@_concat:NN #2 #3 } }
+\cs_new:Npn \@@_concat:NN #1#2 { \exp_after:wN \@@_concat:w #1 }
+\cs_new:Npn \@@_concat:w #1 \s_obj_end {#1}
+\cs_generate_variant:Nn \seq_concat:NNN { ccc }
+\cs_generate_variant:Nn \seq_gconcat:NNN { ccc }
% \end{macrocode}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \begin{macro}[pTF]{\seq_if_exist:N, \seq_if_exist:c}
% Copies of the \texttt{cs} functions defined in \pkg{l3basics}.
@@ -967,51 +999,85 @@
% }
% \UnitTested
% \begin{macro}{
-% \seq_put_right:Nn, \seq_put_right:NV, \seq_put_right:Nv,
-% \seq_put_right:No, \seq_put_right:Nx,
-% \seq_put_right:cn, \seq_put_right:cV, \seq_put_right:cv,
-% \seq_put_right:co, \seq_put_right:cx
+% \seq_gput_left:Nn, \seq_gput_left:NV, \seq_gput_left:Nv,
+% \seq_gput_left:No, \seq_gput_left:Nx,
+% \seq_gput_left:cn, \seq_gput_left:cV, \seq_gput_left:cv,
+% \seq_gput_left:co, \seq_gput_left:cx
% }
-% \UnitTested
-% The code here is just a wrapper for adding to token lists.
+% \begin{macro}[aux,EXP]{\@@_put_left_aux:w}
+% When adding to the left of a sequence, remove \cs{s_@@}. This is
+% done by \cs{@@_put_left_aux:w}, which also stops
+% \texttt{f}-expansion.
% \begin{macrocode}
\cs_new_protected:Npn \seq_put_left:Nn #1#2
- { \tl_put_left:Nn #1 { \@@_item:n {#2} } }
-\cs_new_protected:Npn \seq_put_right:Nn #1#2
- { \tl_put_right:Nn #1 { \@@_item:n {#2} } }
+ {
+ \tl_set:Nx #1
+ {
+ \exp_not:n { \s_@@ \@@_item:n {#2} }
+ \exp_not:f { \exp_after:wN \@@_put_left_aux:w #1 }
+ }
+ }
+\cs_new_protected:Npn \seq_gput_left:Nn #1#2
+ {
+ \tl_gset:Nx #1
+ {
+ \exp_not:n { \s_@@ \@@_item:n {#2} }
+ \exp_not:f { \exp_after:wN \@@_put_left_aux:w #1 }
+ }
+ }
+\cs_new:Npn \@@_put_left_aux:w \s_@@ { \exp_stop_f: }
\cs_generate_variant:Nn \seq_put_left:Nn { NV , Nv , No , Nx }
\cs_generate_variant:Nn \seq_put_left:Nn { c , cV , cv , co , cx }
-\cs_generate_variant:Nn \seq_put_right:Nn { NV , Nv , No , Nx }
-\cs_generate_variant:Nn \seq_put_right:Nn { c , cV , cv , co , cx }
+\cs_generate_variant:Nn \seq_gput_left:Nn { NV , Nv , No , Nx }
+\cs_generate_variant:Nn \seq_gput_left:Nn { c , cV , cv , co , cx }
% \end{macrocode}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \begin{macro}{
-% \seq_gput_left:Nn, \seq_gput_left:NV, \seq_gput_left:Nv,
-% \seq_gput_left:No, \seq_gput_left:Nx,
-% \seq_gput_left:cn, \seq_gput_left:cV, \seq_gput_left:cv,
-% \seq_gput_left:co, \seq_gput_left:cx
+% \seq_put_right:Nn, \seq_put_right:NV, \seq_put_right:Nv,
+% \seq_put_right:No, \seq_put_right:Nx,
+% \seq_put_right:cn, \seq_put_right:cV, \seq_put_right:cv,
+% \seq_put_right:co, \seq_put_right:cx
% }
+% \UnitTested
% \begin{macro}{
% \seq_gput_right:Nn, \seq_gput_right:NV, \seq_gput_right:Nv,
% \seq_gput_right:No, \seq_gput_right:Nx,
% \seq_gput_right:cn, \seq_gput_right:cV,\seq_gput_right:cv,
% \seq_gput_right:co, \seq_gput_right:cx
% }
-% The same for global addition.
+% \begin{macro}[aux,EXP]{\@@_put_right_aux:w}
+% When adding to the right of a sequence, remove \cs{s_obj_end}. This
+% is done by \cs{@@_put_right_aux:w}, which takes its result through
+% \cs{exp_not:n}.
% \begin{macrocode}
-\cs_new_protected:Npn \seq_gput_left:Nn #1#2
- { \tl_gput_left:Nn #1 { \@@_item:n {#2} } }
+\cs_new_protected:Npn \seq_put_right:Nn #1#2
+ {
+ \tl_set:Nx #1
+ {
+ \exp_after:wN \@@_put_right_aux:w #1
+ \exp_not:n { \@@_item:n {#2} \s_obj_end }
+ }
+ }
\cs_new_protected:Npn \seq_gput_right:Nn #1#2
- { \tl_gput_right:Nn #1 { \@@_item:n {#2} } }
-\cs_generate_variant:Nn \seq_gput_left:Nn { NV , Nv , No , Nx }
-\cs_generate_variant:Nn \seq_gput_left:Nn { c , cV , cv , co , cx }
+ {
+ \tl_gset:Nx #1
+ {
+ \exp_after:wN \@@_put_right_aux:w #1
+ \exp_not:n { \@@_item:n {#2} \s_obj_end }
+ }
+ }
+\cs_new:Npn \@@_put_right_aux:w #1 \s_obj_end { \exp_not:n {#1} }
\cs_generate_variant:Nn \seq_gput_right:Nn { NV , Nv , No , Nx }
\cs_generate_variant:Nn \seq_gput_right:Nn { c , cV , cv , co , cx }
+\cs_generate_variant:Nn \seq_put_right:Nn { NV , Nv , No , Nx }
+\cs_generate_variant:Nn \seq_put_right:Nn { c , cV , cv , co , cx }
% \end{macrocode}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \subsection{Modifying sequences}
%
@@ -1113,12 +1179,20 @@
%
% \begin{macro}[pTF]{\seq_if_empty:N, \seq_if_empty:c}
% \UnitTested
-% Simple copies from the token list variable material.
+% Similar to token lists, we compare with the empty sequence.
% \begin{macrocode}
-\prg_new_eq_conditional:NNn \seq_if_empty:N \tl_if_empty:N
- { p , T , F , TF }
-\prg_new_eq_conditional:NNn \seq_if_empty:c \tl_if_empty:c
- { p , T , F , TF }
+\prg_new_conditional:Npnn \seq_if_empty:N #1 { p , T , F , TF }
+ {
+ \if_meaning:w #1 \c_empty_seq
+ \prg_return_true:
+ \else:
+ \prg_return_false:
+ \fi:
+ }
+\cs_generate_variant:Nn \seq_if_empty_p:N { c }
+\cs_generate_variant:Nn \seq_if_empty:NT { c }
+\cs_generate_variant:Nn \seq_if_empty:NF { c }
+\cs_generate_variant:Nn \seq_if_empty:NTF { c }
% \end{macrocode}
% \end{macro}
%
@@ -1197,22 +1271,21 @@
%
% \begin{macro}{\seq_get_left:NN, \seq_get_left:cN}
% \UnitTested
-% \begin{macro}[aux]{\@@_get_left:NnwN}
+% \begin{macro}[aux]{\@@_get_left:wnw}
% Getting an item from the left of a sequence is pretty easy: just
-% trim off the first item after removing the \cs{@@_item:n} at
-% the start. We first append a \cs{q_no_value} item to cover the case
-% of an empty sequence
+% trim off the first item after \cs{@@_item:n} at the start. We
+% append a \cs{q_no_value} item to cover the case of an empty sequence
% \begin{macrocode}
\cs_new_protected:Npn \seq_get_left:NN #1#2
{
\tl_set:Nx #2
{
- \exp_after:wN \@@_get_left:Nnw
+ \exp_after:wN \@@_get_left:wnw
#1 \@@_item:n { \q_no_value } \q_stop
}
}
-\cs_new:Npn \@@_get_left:Nnw \@@_item:n #1#2 \q_stop
- { \exp_not:n {#1} }
+\cs_new:Npn \@@_get_left:wnw #1 \@@_item:n #2#3 \q_stop
+ { \exp_not:n {#2} }
\cs_generate_variant:Nn \seq_get_left:NN { c }
% \end{macrocode}
% \end{macro}
@@ -1222,7 +1295,7 @@
% \UnitTested
% \begin{macro}{\seq_gpop_left:NN, \seq_gpop_left:cN}
% \UnitTested
-% \begin{macro}[aux]{\@@_pop_left:NNN, \@@_pop_left:NnwNNN}
+% \begin{macro}[aux]{\@@_pop_left:NNN, \@@_pop_left:wnwNNN}
% The approach to popping an item is pretty similar to that to get
% an item, with the only difference being that the sequence itself has
% to be redefined. This makes it more sensible to use an auxiliary
@@ -1233,11 +1306,12 @@
\cs_new_protected_nopar:Npn \seq_gpop_left:NN
{ \@@_pop:NNNN \@@_pop_left:NNN \tl_gset:Nn }
\cs_new_protected:Npn \@@_pop_left:NNN #1#2#3
- { \exp_after:wN \@@_pop_left:NnwNNN #2 \q_stop #1#2#3 }
-\cs_new_protected:Npn \@@_pop_left:NnwNNN \@@_item:n #1#2 \q_stop #3#4#5
+ { \exp_after:wN \@@_pop_left:wnwNNN #2 \q_stop #1#2#3 }
+\cs_new_protected:Npn \@@_pop_left:wnwNNN
+ #1 \@@_item:n #2#3 \q_stop #4#5#6
{
- #3 #4 {#2}
- \tl_set:Nn #5 {#1}
+ #4 #5 { #1 #3 }
+ \tl_set:Nn #6 {#2}
}
\cs_generate_variant:Nn \seq_pop_left:NN { c }
\cs_generate_variant:Nn \seq_gpop_left:NN { c }
@@ -1248,7 +1322,7 @@
%
% \begin{macro}{\seq_get_right:NN, \seq_get_right:cN}
% \UnitTested
-% \begin{macro}[aux]{\@@_get_right_loop:nn}
+% \begin{macro}[aux]{\@@_get_right_setup:wN, \@@_get_right_loop:nn}
% First prepend \cs{q_no_value}, then take two arguments at a time.
% Apart from the right-hand end of the sequence, this be a brace group
% followed by \cs{@@_item:n}. The \cs{use_none:nn} removes both of
@@ -1258,9 +1332,11 @@
% \cs{use_none:n} to get rid of a trailing \cs{@@_get_right_loop:nn}.
% \begin{macrocode}
\cs_new_protected:Npn \seq_get_right:NN #1#2
+ { \exp_after:wN \@@_get_right_setup:wN #1 #2 }
+\cs_new_protected:Npn \@@_get_right_setup:wN \s_@@ #1 \s_obj_end #2
{
- \exp_after:wN \@@_get_right_loop:nn
- \exp_after:wN \q_no_value
+ \@@_get_right_loop:nn
+ \q_no_value
#1
{
??
@@ -1283,6 +1359,7 @@
% \begin{macro}{\seq_gpop_right:NN, \seq_gpop_right:cN}
% \UnitTested
% \begin{macro}[aux]{\@@_pop_right_aux:NNN, \@@_pop_right_loop:nn}
+% \begin{macro}[aux, EXP]{\@@_pop_right_setup:w}
% The approach to popping from the right is a bit more involved, but does
% use some of the same ideas as getting from the right. What is needed is a
% \enquote{flexible length} way to set a token list variable. This is
@@ -1307,18 +1384,18 @@
\cs_set_eq:NN \seq_tmp:w \@@_item:n
\cs_set_eq:NN \@@_item:n \scan_stop:
#1 #2
- { \if_false: } \fi:
- \exp_after:wN \exp_after:wN
- \exp_after:wN \@@_pop_right_loop:nn
- \exp_after:wN \use_none:n
+ { \if_false: } \fi: \s_@@
+ \exp_after:wN \@@_pop_right_setup:w
#2
{
- \if_false: { \fi: }
+ \s_obj_end \if_false: { \fi: }
\tex_afterassignment:D \use_none:n
\tl_set:Nx #3
}
\cs_set_eq:NN \@@_item:n \seq_tmp:w
}
+\cs_new:Npn \@@_pop_right_setup:w \s_@@ #1 \s_obj_end
+ { \exp_after:wN \@@_pop_right_loop:nn \use_none:n #1 }
\cs_new:Npn \@@_pop_right_loop:nn #1#2
{
#2 { \exp_not:n {#1} }
@@ -1330,6 +1407,7 @@
% \end{macro}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \begin{macro}[TF]{\seq_get_left:NN, \seq_get_left:cN}
% \begin{macro}[TF]{\seq_get_right:NN, \seq_get_right:cN}
@@ -1402,7 +1480,7 @@
%
% \begin{macro}{\seq_map_function:NN, \seq_map_function:cN}
% \UnitTested
-% \begin{macro}[aux]{\@@_map_function:NNn}
+% \begin{macro}[aux,rEXP]{\@@_map_function:wN,\@@_map_function:NNn}
% The idea here is to apply the code of |#2| to each item in the
% sequence without altering the definition of \cs{@@_item:n}. This
% is done as by noting that every odd token in the sequence must be
@@ -1411,9 +1489,10 @@
% loop without needing to do a (relatively-expensive) quark test.
% \begin{macrocode}
\cs_new:Npn \seq_map_function:NN #1#2
+ { \exp_after:wN \@@_map_function:wN #1 #2 }
+\cs_new:Npn \@@_map_function:wN \s_@@ #1 \s_obj_end #2
{
- \exp_after:wN \@@_map_function:NNn \exp_after:wN #2 #1
- { ? \seq_map_break: } { }
+ \@@_map_function:NNn #2 #1 { ? \seq_map_break: } { }
\__prg_break_point:Nn \seq_map_break: { }
}
\cs_new:Npn \@@_map_function:NNn #1#2#3
@@ -1501,7 +1580,7 @@
\cs_generate_variant:Nn \seq_map_variable:NNn { c , cc }
% \end{macrocode}
% \end{macro}
-%
+%
% \begin{macro}{\seq_count:N, \seq_count:c}
% \begin{macro}[aux]{\@@_count:n}
% Counting the items in a sequence is done using the same approach as for
@@ -1526,25 +1605,29 @@
%
% \begin{macro}[EXP]{\seq_use:Nnnn, \seq_use:cnnn}
% \begin{macro}[EXP, aux]
-% {\@@_use:NnNnn, \@@_use:nwwwwnwn, \@@_use:nwwn}
+% {\@@_use:wnwnn, \@@_use_setup:w, \@@_use:nwwwwnwn, \@@_use:nwwn}
% \begin{macro}[EXP]{\seq_use:Nn, \seq_use:cn}
% See \cs{clist_use:Nnnn} for a general explanation. The main
% difference is that we use \cs{@@_item:n} as a delimiter rather than
-% commas. We also need to add \cs{@@_item:n} at various places.
+% commas. We also need to add \cs{@@_item:n} at various places, and
+% \cs{s_@@} and \cs{s_obj_end}.
% \begin{macrocode}
\cs_new:Npn \seq_use:Nnnn #1#2#3#4
{
\seq_if_exist:NTF #1
{
- \int_case:nnn { \seq_count:N #1 }
+ \int_case:nnF { \seq_count:N #1 }
{
{ 0 } { }
- { 1 } { \exp_after:wN \@@_use:NnNnn #1 \@@_item:n { } { } }
- { 2 } { \exp_after:wN \@@_use:NnNnn #1 {#2} }
+ { 1 }
+ {
+ \exp_after:wN \@@_use:wnwnn #1
+ \@@_item:n { } \s_obj_end { }
+ }
+ { 2 } { \exp_after:wN \@@_use:wnwnn #1 {#2} }
}
{
- \exp_after:wN \@@_use:nwwwwnwn
- \exp_after:wN { \exp_after:wN } #1 \@@_item:n
+ \exp_after:wN \@@_use_setup:w #1 \@@_item:n
\q_mark { \@@_use:nwwwwnwn {#3} }
\q_mark { \@@_use:nwwn {#4} }
\q_stop { }
@@ -1553,8 +1636,11 @@
{ \__msg_kernel_expandable_error:nnn { kernel } { bad-variable } {#1} }
}
\cs_generate_variant:Nn \seq_use:Nnnn { c }
-\cs_new:Npn \@@_use:NnNnn \@@_item:n #1 \@@_item:n #2#3
- { \exp_not:n { #1 #3 #2 } }
+\cs_new:Npn \@@_use:wnwnn
+ #1 \@@_item:n #2#3 \@@_item:n #4#5 \s_obj_end #6
+ { \exp_not:n { #2 #6 #4 } }
+\cs_new:Npn \@@_use_setup:w \s_@@ #1 \s_obj_end
+ { \@@_use:nwwwwnwn { } #1 }
\cs_new:Npn \@@_use:nwwwwnwn
#1 \@@_item:n #2 \@@_item:n #3 \@@_item:n #4#5
\q_mark #6#7 \q_stop #8
@@ -1675,55 +1761,6 @@
% \end{macrocode}
% \end{variable}
%
-% \subsection{Deprecated interfaces}
-%
-% A few functions which are no longer documented: these were moved
-% here on or before 2011-04-20, and will be removed entirely by
-% 2011-07-20.
-%
-% \begin{macro}{\seq_top:NN, \seq_top:cN}
-% These are old stack functions.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \seq_top:NN \seq_get_left:NN
-\cs_new_eq:NN \seq_top:cN \seq_get_left:cN
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\seq_display:N, \seq_display:c}
-% An older name for \cs{seq_show:N}.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \seq_display:N \seq_show:N
-\cs_new_eq:NN \seq_display:c \seq_show:c
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% Deprecated 2012-05-13 for removal by 2012-11-30.
-%
-% \begin{macro}{\seq_length:N, \seq_length:c}
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \seq_length:N \seq_count:N
-\cs_new_eq:NN \seq_length:c \seq_count:c
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% Deprecated 2012-05-23 for removal by 2012-08-30.
-%
-% \begin{macro}{\seq_use:N, \seq_use:c}
-% A simple short cut for a mapping.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new:Npn \seq_use:N #1 { \seq_use:Nn #1 { } }
-\cs_generate_variant:Nn \seq_use:N { c }
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
% \begin{macrocode}
%</initex|package>
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
index 1a9d70f8756..f7af3985dd1 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
@@ -36,7 +36,7 @@
%
%<*driver|package>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3skip.dtx 4444 2013-01-13 20:27:20Z bruno $
+\GetIdInfo$Id: l3skip.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Dimensions and skips}
%</driver|package>
%<*driver>
@@ -271,26 +271,30 @@
% \end{center}
% \end{function}
%
-% \begin{function}[added = 2012-06-03, EXP]{\dim_case:nnn}
+% \begin{function}[added = 2013-07-24, EXP, TF]{\dim_case:nn}
% \begin{syntax}
-% \cs{dim_case:nnn} \Arg{test dimension expression} \\
+% \cs{dim_case:nnTF} \Arg{test dimension expression} \\
% ~~|{| \\
% ~~~~\Arg{dimexpr case_1} \Arg{code case_1} \\
% ~~~~\Arg{dimexpr case_2} \Arg{code case_2} \\
% ~~~~\ldots \\
% ~~~~\Arg{dimexpr case_n} \Arg{code case_n} \\
% ~~|}| \\
-% ~~\Arg{else code}
+% ~~\Arg{true code}
+% ~~\Arg{false code}
% \end{syntax}
% This function evaluates the \meta{test dimension expression} and
% compares this in turn to each of the
% \meta{dimension expression cases}. If the two are equal then the
-% associated \meta{code} is left in the input stream. If none of
-% the tests are \texttt{true} then the \texttt{else code} will be
-% left in the input stream. For example
+% associated \meta{code} is left in the input stream. If any of the
+% cases are matched, the \meta{true code} is also inserted into the
+% input stream (after the code for the appropriate case), while if none
+% match then the \meta{false code} is inserted. The function
+% \cs{dim_case:nn}, which does nothing if there is no match, is also
+% available. For example
% \begin{verbatim}
% \dim_set:Nn \l_tmpa_dim { 5 pt }
-% \dim_case:nnn
+% \dim_case:nnF
% { 2 \l_tmpa_dim }
% {
% { 5 pt } { Small }
@@ -1209,30 +1213,48 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}[EXP]{\dim_case:nnn}
-% \begin{macro}[aux, EXP]{\@@_case_aux:nnn}
-% \begin{macro}[aux, EXP]{\@@_case_aux:nw,\@@_case_end:nw}
-% The dimension function is the same as the \texttt{int} version, so there
-% is not much to say here.
+% \begin{macro}[EXP]{\dim_case:nn}
+% \begin{macro}[EXP, TF]{\dim_case:nn}
+% \begin{macro}[aux]{\@@_case:nnTF}
+% \begin{macro}[aux]{\@@_case:nw, \@@_case_end:nw}
+% For dimension cases, the first task to fully expand the check
+% condition. The over all idea is then much the same as for
+% \cs{str_case:nn(TF)} as described in \pkg{l3basics}.
% \begin{macrocode}
-\cs_new:Npn \dim_case:nnn #1
+\cs_new:Npn \dim_case:nnTF #1
{
\tex_romannumeral:D
- \exp_args:Nf \@@_case_aux:nnn { \dim_eval:n {#1} }
+ \exp_args:Nf \@@_case:nnTF { \dim_eval:n {#1} }
}
-\cs_new:Npn \@@_case_aux:nnn #1#2#3
- { \@@_case_aux:nw {#1} #2 {#1} {#3} \q_recursion_stop }
-\cs_new:Npn \@@_case_aux:nw #1#2#3
+\cs_new:Npn \dim_case:nnT #1#2#3
+ {
+ \tex_romannumeral:D
+ \exp_args:Nf \@@_case:nnTF { \dim_eval:n {#1} } {#2} {#3} { }
+ }
+\cs_new:Npn \dim_case:nnF #1#2
+ {
+ \tex_romannumeral:D
+ \exp_args:Nf \@@_case:nnTF { \dim_eval:n {#1} } {#2} { }
+ }
+\cs_new:Npn \dim_case:nn #1#2
+ {
+ \tex_romannumeral:D
+ \exp_args:Nf \@@_case:nnTF { \dim_eval:n {#1} } {#2} { } { }
+ }
+\cs_new:Npn \@@_case:nnTF #1#2#3#4
+ { \@@_case:nw {#1} #2 {#1} { } \q_mark {#3} \q_mark {#4} \q_stop }
+\cs_new:Npn \@@_case:nw #1#2#3
{
\dim_compare:nNnTF {#1} = {#2}
{ \@@_case_end:nw {#3} }
- { \@@_case_aux:nw {#1} }
+ { \@@_case:nw {#1} }
}
\cs_new_eq:NN \@@_case_end:nw \__prg_case_end:nw
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \subsection{Dimension expression loops}
%
@@ -1848,69 +1870,13 @@
%
% \subsection{Deprecated functions}
%
-% Deprecated on 2012-05-10, for removal by 2012-08-31.
-%
-% \begin{macro}[EXP, pTF]{\skip_if_infinite_glue:n}
-% Reverse of \cs{skip_if_finite:nTF}.
+% \begin{macro}{\dim_case:nnn}
+% Deprecated 2013-07-15.
% \begin{macrocode}
-%<*deprecated>
-\prg_new_conditional:Npnn \skip_if_infinite_glue:n #1 { p , T , F , TF }
- { \skip_if_finite:nTF {#1} \prg_return_false: \prg_return_true: }
-%</deprecated>
+\cs_new_eq:NN \dim_case:nnn \dim_case:nnF
% \end{macrocode}
% \end{macro}
%
-% Deprecated 2012-06-03 for removal after 2012-12-31.
-%
-% \begin{macro}[EXP]{\prg_case_dim:nnn}
-% Moved here, was in \pkg{l3prg} but load order means we define it here
-% now.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \prg_case_dim:nnn \dim_case:nnn
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\dim_eval:w, \dim_eval_end:}
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \dim_eval:w \__dim_eval:w
-\cs_new_eq:NN \dim_eval_end: \__dim_eval_end:
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\dim_set_max:Nn, \dim_set_max:cn}
-% \begin{macro}{\dim_set_min:Nn, \dim_set_min:cn}
-% \begin{macro}{\dim_gset_max:Nn, \dim_gset_max:cn}
-% \begin{macro}{\dim_gset_min:Nn, \dim_gset_min:cn}
-% \begin{macro}[aux]{\@@_set_max:NNNn}
-% Deprecated on 2012-09-09 for removal after 2012-12-31.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_protected_nopar:Npn \dim_set_max:Nn
- { \@@_set_max:NNNn < \dim_set:Nn }
-\cs_new_protected_nopar:Npn \dim_gset_max:Nn
- { \@@_set_max:NNNn < \dim_gset:Nn }
-\cs_new_protected_nopar:Npn \dim_set_min:Nn
- { \@@_set_max:NNNn > \dim_set:Nn }
-\cs_new_protected_nopar:Npn \dim_gset_min:Nn
- { \@@_set_max:NNNn > \dim_gset:Nn }
-\cs_new_protected:Npn \@@_set_max:NNNn #1#2#3#4
- { \dim_compare:nNnT {#3} #1 {#4} { #2 #3 {#4} } }
-\cs_generate_variant:Nn \dim_set_max:Nn { c }
-\cs_generate_variant:Nn \dim_gset_max:Nn { c }
-\cs_generate_variant:Nn \dim_set_min:Nn { c }
-\cs_generate_variant:Nn \dim_gset_min:Nn { c }
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
% \begin{macrocode}
%</initex|package>
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
index e4c1329a728..a9eb3dc4376 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3tl.dtx 4482 2013-04-24 21:05:12Z joseph $
+\GetIdInfo$Id: l3tl.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Token lists}
%</driver|package>
%<*driver>
@@ -153,8 +153,7 @@
% \begin{syntax}
% \cs{tl_clear:N} \meta{tl~var}
% \end{syntax}
-% Clears all entries from the \meta{tl~var} within the scope of
-% the current \TeX{} group.
+% Clears all entries from the \meta{tl~var}.
% \end{function}
%
% \begin{function}
@@ -487,23 +486,28 @@
% token count $1$ according to \cs{tl_count:n}.
% \end{function}
%
-% \begin{function}[added = 2012-06-03, EXP]{\tl_case:Nnn, \tl_case:cnn}
+% \begin{function}[added = 2013-07-24, EXP, TF]{\tl_case:Nnn, \tl_case:cnn}
% \begin{syntax}
-% \cs{tl_case:Nnn} \meta{test token list variable} \\
+% \cs{tl_case:NnTF} \meta{test token list variable} \\
% ~~"{" \\
% ~~~~\meta{token list variable case_1} \Arg{code case_1} \\
% ~~~~\meta{token list variable case_2} \Arg{code case_2} \\
% ~~~~\ldots \\
% ~~~~\meta{token list variable case_n} \Arg{code case_n} \\
% ~~"}" \\
-% ~~\Arg{else code}
+% ~~\Arg{true code}
+% ~~\Arg{false code}
% \end{syntax}
% This function compares the \meta{test token list variable} in turn
% with each of the \meta{token list variable cases}. If the two
% are equal (as described for \cs{tl_if_eq:NNTF})
% then the associated \meta{code} is left in the input
-% stream. If none of the tests are \texttt{true} then the
-% \texttt{else code} will be left in the input stream.
+% stream. If any of the
+% cases are matched, the \meta{true code} is also inserted into the
+% input stream (after the code for the appropriate case), while if none
+% match then the \meta{false code} is inserted. The function
+% \cs{tl_case:Nn}, which does nothing if there is no match, is also
+% available.
% \end{function}
%
% \section{Mapping to token lists}
@@ -1775,27 +1779,52 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[EXP]{\tl_case:Nnn, \tl_case:cnn}
+% \begin{macro}[EXP]{\tl_case:Nn, \tl_case:cn}
+% \begin{macro}[EXP, TF]{\tl_case:Nn, \tl_case:cn}
+% \begin{macro}[EXP, aux]{\@@_case:nnTF}
% \begin{macro}[aux, EXP]{\@@_case:Nw}
% \begin{macro}[aux, EXP]{\@@_case_end:nw}
+% Similar set up to \cs{str_case:nn(TF)} as described in \pkg{l3basics}.
% \begin{macrocode}
-\cs_new:Npn \tl_case:Nnn #1#2#3
+\cs_new:Npn \tl_case:Nn #1#2
{
\tex_romannumeral:D
- \@@_case:Nw #1 #2 #1 {#3} \q_recursion_stop
+ \@@_case:NnTF #1 {#2} { } { }
}
+\cs_new:Npn \tl_case:NnT #1#2#3
+ {
+ \tex_romannumeral:D
+ \@@_case:NnTF #1 {#2} {#3} { }
+ }
+\cs_new:Npn \tl_case:NnF #1#2#3
+ {
+ \tex_romannumeral:D
+ \@@_case:NnTF #1 {#2} { } {#3}
+ }
+\cs_new:Npn \tl_case:NnTF #1#2
+ {
+ \tex_romannumeral:D
+ \@@_case:NnTF #1 {#2}
+ }
+\cs_new:Npn \@@_case:NnTF #1#2#3#4
+ { \@@_case:Nw #1 #2 #1 { } \q_mark {#3} \q_mark {#4} \q_stop }
\cs_new:Npn \@@_case:Nw #1#2#3
{
\tl_if_eq:NNTF #1 #2
{ \@@_case_end:nw {#3} }
{ \@@_case:Nw #1 }
}
-\cs_generate_variant:Nn \tl_case:Nnn { c }
+\cs_generate_variant:Nn \tl_case:Nn { c }
+\cs_generate_variant:Nn \tl_case:NnT { c }
+\cs_generate_variant:Nn \tl_case:NnF { c }
+\cs_generate_variant:Nn \tl_case:NnTF { c }
\cs_new_eq:NN \@@_case_end:nw \__prg_case_end:nw
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
+% \end{macro}
+% \end{macro}
%
% \subsection{Mapping to token lists}
%
@@ -2585,182 +2614,11 @@
%
% \subsection{Deprecated functions}
%
-% \begin{macro}{\tl_new:Nn, \tl_new:cn, \tl_new:Nx}
-% Use either \cs{tl_const:Nn} or \cs{tl_new:N}.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_protected:Npn \tl_new:Nn #1#2
- {
- \tl_new:N #1
- \tl_gset:Nn #1 {#2}
- }
-\cs_generate_variant:Nn \tl_new:Nn { c }
-\cs_generate_variant:Nn \tl_new:Nn { Nx }
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\tl_gset:Nc}
-% \begin{macro}{\tl_set:Nc}
-% This was useful once, but nowadays does not make much sense.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_protected_nopar:Npn \tl_gset:Nc
- { \tex_global:D \tl_set:Nc }
-\cs_new_protected:Npn \tl_set:Nc #1#2
- { \tl_set:No #1 { \cs:w #2 \cs_end: } }
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\tl_replace_in:Nnn, \tl_replace_in:cnn}
-% \begin{macro}{\tl_greplace_in:Nnn, \tl_greplace_in:cnn}
-% \begin{macro}{\tl_replace_all_in:Nnn, \tl_replace_all_in:cnn}
-% \begin{macro}{\tl_greplace_all_in:Nnn, \tl_greplace_all_in:cnn}
-% These are renamed.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \tl_replace_in:Nnn \tl_replace_once:Nnn
-\cs_new_eq:NN \tl_replace_in:cnn \tl_replace_once:cnn
-\cs_new_eq:NN \tl_greplace_in:Nnn \tl_greplace_once:Nnn
-\cs_new_eq:NN \tl_greplace_in:cnn \tl_greplace_once:cnn
-\cs_new_eq:NN \tl_replace_all_in:Nnn \tl_replace_all:Nnn
-\cs_new_eq:NN \tl_replace_all_in:cnn \tl_replace_all:cnn
-\cs_new_eq:NN \tl_greplace_all_in:Nnn \tl_greplace_all:Nnn
-\cs_new_eq:NN \tl_greplace_all_in:cnn \tl_greplace_all:cnn
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\tl_remove_in:Nn, \tl_remove_in:cn}
-% \begin{macro}{\tl_gremove_in:Nn, \tl_gremove_in:cn}
-% \begin{macro}{\tl_remove_all_in:Nn, \tl_remove_all_in:cn}
-% \begin{macro}{\tl_gremove_all_in:Nn, \tl_gremove_all_in:cn}
-% Also renamed.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \tl_remove_in:Nn \tl_remove_once:Nn
-\cs_new_eq:NN \tl_remove_in:cn \tl_remove_once:cn
-\cs_new_eq:NN \tl_gremove_in:Nn \tl_gremove_once:Nn
-\cs_new_eq:NN \tl_gremove_in:cn \tl_gremove_once:cn
-\cs_new_eq:NN \tl_remove_all_in:Nn \tl_remove_all:Nn
-\cs_new_eq:NN \tl_remove_all_in:cn \tl_remove_all:cn
-\cs_new_eq:NN \tl_gremove_all_in:Nn \tl_gremove_all:Nn
-\cs_new_eq:NN \tl_gremove_all_in:cn \tl_gremove_all:cn
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\tl_elt_count:n, \tl_elt_count:V, \tl_elt_count:o}
-% \begin{macro}{\tl_elt_count:N, \tl_elt_count:c}
-% Another renaming job.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \tl_elt_count:n \tl_count:n
-\cs_new_eq:NN \tl_elt_count:V \tl_count:V
-\cs_new_eq:NN \tl_elt_count:o \tl_count:o
-\cs_new_eq:NN \tl_elt_count:N \tl_count:N
-\cs_new_eq:NN \tl_elt_count:c \tl_count:c
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\tl_head_i:n}
-% \begin{macro}{\tl_head_i:w}
-% \begin{macro}{\tl_head_iii:n}
-% \begin{macro}{\tl_head_iii:f}
-% \begin{macro}{\tl_head_iii:w}
-% Two renames, and a few that are rather too specialised.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \tl_head_i:n \tl_head:n
-\cs_new_eq:NN \tl_head_i:w \tl_head:w
-\cs_new:Npn \tl_head_iii:n #1 { \tl_head_iii:w #1 \q_stop }
-\cs_generate_variant:Nn \tl_head_iii:n { f }
-\cs_new:Npn \tl_head_iii:w #1#2#3#4 \q_stop {#1#2#3}
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% Deprecated on 2012-05-13 for removal by 2012-08-31.
-%
-% \begin{macro}{\tl_length_tokens:n}
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \tl_length_tokens:n \tl_count_tokens:n
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% Deprecated 2012-05-13 for removal by 2012-11-31.
-%
-% \begin{macro}
-% {\tl_length:N, \tl_length:c, \tl_length:n, \tl_length:V, \tl_length:o}
-% Renames.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \tl_length:N \tl_count:N
-\cs_new_eq:NN \tl_length:c \tl_count:c
-\cs_new_eq:NN \tl_length:n \tl_count:n
-\cs_new_eq:NN \tl_length:V \tl_count:V
-\cs_new_eq:NN \tl_length:o \tl_count:o
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% Deprecated 2012-06-05 for removal after 2012-12-31.
-%
-% \begin{macro}[pTF]{\tl_if_empty:x}
-% We can test expandably the emptiness of an expanded token list
-% thanks to the primitive \tn{pdfstrcmp} which expands its argument:
-% a token list is empty if and only if its string representation is
-% empty.
-% \begin{macrocode}
-%<*deprecated>
-\prg_new_conditional:Npnn \tl_if_empty:x #1 { p , T , F , TF }
- { \__str_if_eq_x_return:nn { } {#1} }
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% Deprecated 2012-07-08 for removal after 2012-10-31.
-%
-% \begin{macro}[EXP, pTF]{\tl_if_head_group:n}
-% \begin{macro}[EXP, pTF]{\tl_if_head_N_type:n}
-% \begin{macro}[EXP, pTF]{\tl_if_head_space:n}
-% \begin{macrocode}
-%<*deprecated>
-\prg_new_eq_conditional:NNn \tl_if_head_group:n \tl_if_head_is_group:n
- { p , T , F , TF }
-\prg_new_eq_conditional:NNn \tl_if_head_N_type:n \tl_if_head_is_N_type:n
- { p , T , F , TF }
-\prg_new_eq_conditional:NNn \tl_if_head_space:n \tl_if_head_is_space:n
- { p , T , F , TF }
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\tl_tail:w}
-% Deprecated 2012-09-01 for removal after 2012-12-31. This is broken as
-% it will strip braces from a case such as |a{bc}|.
+% \begin{macro}{\tl_case:Nnn, \tl_case:cnn}
+% Deprecated 2013-07-15.
% \begin{macrocode}
-%<*deprecated>
-\cs_new:Npn \tl_tail:w #1#2 \q_stop {#2}
-%</deprecated>
+\cs_new_eq:NN \tl_case:Nnn \tl_case:NnF
+\cs_new_eq:NN \tl_case:cnn \tl_case:cnF
% \end{macrocode}
% \end{macro}
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
index 34427af0d1d..0b0024d2003 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3token.dtx 4482 2013-04-24 21:05:12Z joseph $
+\GetIdInfo$Id: l3token.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Experimental token manipulation}
%</driver|package>
%<*driver>
@@ -2256,223 +2256,6 @@
% \end{macro}
% \end{macro}
%
-% \subsection{Deprecated functions}
-%
-% Deprecated on 2011-05-27, for removal by 2011-08-31.
-%
-% \begin{macro}{\char_set_catcode:w}
-% \begin{macro}{\char_set_mathcode:w}
-% \begin{macro}{\char_set_lccode:w}
-% \begin{macro}{\char_set_uccode:w}
-% \begin{macro}{\char_set_sfcode:w}
-% Primitives renamed.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \char_set_catcode:w \tex_catcode:D
-\cs_new_eq:NN \char_set_mathcode:w \tex_mathcode:D
-\cs_new_eq:NN \char_set_lccode:w \tex_lccode:D
-\cs_new_eq:NN \char_set_uccode:w \tex_uccode:D
-\cs_new_eq:NN \char_set_sfcode:w \tex_sfcode:D
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\char_value_catcode:w}
-% \begin{macro}{\char_show_value_catcode:w}
-% \begin{macro}{\char_value_mathcode:w}
-% \begin{macro}{\char_show_value_mathcode:w}
-% \begin{macro}{\char_value_lccode:w}
-% \begin{macro}{\char_show_value_lccode:w}
-% \begin{macro}{\char_value_uccode:w}
-% \begin{macro}{\char_show_value_uccode:w}
-% \begin{macro}{\char_value_sfcode:w}
-% \begin{macro}{\char_show_value_sfcode:w}
-% More |w| functions we should not have.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_nopar:Npn \char_value_catcode:w { \tex_the:D \char_set_catcode:w }
-\cs_new_nopar:Npn \char_show_value_catcode:w
- { \tex_showthe:D \char_set_catcode:w }
-\cs_new_nopar:Npn \char_value_mathcode:w { \tex_the:D \char_set_mathcode:w }
-\cs_new_nopar:Npn \char_show_value_mathcode:w
- { \tex_showthe:D \char_set_mathcode:w }
-\cs_new_nopar:Npn \char_value_lccode:w { \tex_the:D \char_set_lccode:w }
-\cs_new_nopar:Npn \char_show_value_lccode:w
- { \tex_showthe:D \char_set_lccode:w }
-\cs_new_nopar:Npn \char_value_uccode:w { \tex_the:D \char_set_uccode:w }
-\cs_new_nopar:Npn \char_show_value_uccode:w
- { \tex_showthe:D \char_set_uccode:w }
-\cs_new_nopar:Npn \char_value_sfcode:w { \tex_the:D \char_set_sfcode:w }
-\cs_new_nopar:Npn \char_show_value_sfcode:w
- { \tex_showthe:D \char_set_sfcode:w }
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\peek_after:NN}
-% \begin{macro}{\peek_gafter:NN}
-% The second argument here must be |w|.
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \peek_after:NN \peek_after:Nw
-\cs_new_eq:NN \peek_gafter:NN \peek_gafter:Nw
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% Functions deprecated 2011-05-28 for removal by 2011-08-31.
-%
-% \begin{macro}{\c_alignment_tab_token}
-% \begin{macro}{\c_math_shift_token}
-% \begin{macro}{\c_letter_token}
-% \begin{macro}{\c_other_char_token}
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \c_alignment_tab_token \c_alignment_token
-\cs_new_eq:NN \c_math_shift_token \c_math_toggle_token
-\cs_new_eq:NN \c_letter_token \c_catcode_letter_token
-\cs_new_eq:NN \c_other_char_token \c_catcode_other_token
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\c_active_char_token}
-% An odd one: this was never a |token|!
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \c_active_char_token \c_catcode_active_tl
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \char_make_escape:N ,
-% \char_make_group_begin:N ,
-% \char_make_group_end:N ,
-% \char_make_math_toggle:N ,
-% \char_make_alignment:N ,
-% \char_make_end_line:N ,
-% \char_make_parameter:N ,
-% \char_make_math_superscript:N ,
-% \char_make_math_subscript:N ,
-% \char_make_ignore:N ,
-% \char_make_space:N ,
-% \char_make_letter:N ,
-% \char_make_other:N ,
-% \char_make_active:N ,
-% \char_make_comment:N ,
-% \char_make_invalid:N
-% }
-% \begin{macro}
-% {
-% \char_make_escape:n ,
-% \char_make_group_begin:n ,
-% \char_make_group_end:n ,
-% \char_make_math_toggle:n ,
-% \char_make_alignment:n ,
-% \char_make_end_line:n ,
-% \char_make_parameter:n ,
-% \char_make_math_superscript:n ,
-% \char_make_math_subscript:n ,
-% \char_make_ignore:n ,
-% \char_make_space:n ,
-% \char_make_letter:n ,
-% \char_make_other:n ,
-% \char_make_active:n ,
-% \char_make_comment:n ,
-% \char_make_invalid:n
-% }
-% Two renames in one block!
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \char_make_escape:N \char_set_catcode_escape:N
-\cs_new_eq:NN \char_make_begin_group:N \char_set_catcode_group_begin:N
-\cs_new_eq:NN \char_make_end_group:N \char_set_catcode_group_end:N
-\cs_new_eq:NN \char_make_math_shift:N \char_set_catcode_math_toggle:N
-\cs_new_eq:NN \char_make_alignment_tab:N \char_set_catcode_alignment:N
-\cs_new_eq:NN \char_make_end_line:N \char_set_catcode_end_line:N
-\cs_new_eq:NN \char_make_parameter:N \char_set_catcode_parameter:N
-\cs_new_eq:NN \char_make_math_superscript:N
- \char_set_catcode_math_superscript:N
-\cs_new_eq:NN \char_make_math_subscript:N
- \char_set_catcode_math_subscript:N
-\cs_new_eq:NN \char_make_ignore:N \char_set_catcode_ignore:N
-\cs_new_eq:NN \char_make_space:N \char_set_catcode_space:N
-\cs_new_eq:NN \char_make_letter:N \char_set_catcode_letter:N
-\cs_new_eq:NN \char_make_other:N \char_set_catcode_other:N
-\cs_new_eq:NN \char_make_active:N \char_set_catcode_active:N
-\cs_new_eq:NN \char_make_comment:N \char_set_catcode_comment:N
-\cs_new_eq:NN \char_make_invalid:N \char_set_catcode_invalid:N
-\cs_new_eq:NN \char_make_escape:n \char_set_catcode_escape:n
-\cs_new_eq:NN \char_make_begin_group:n \char_set_catcode_group_begin:n
-\cs_new_eq:NN \char_make_end_group:n \char_set_catcode_group_end:n
-\cs_new_eq:NN \char_make_math_shift:n \char_set_catcode_math_toggle:n
-\cs_new_eq:NN \char_make_alignment_tab:n \char_set_catcode_alignment:n
-\cs_new_eq:NN \char_make_end_line:n \char_set_catcode_end_line:n
-\cs_new_eq:NN \char_make_parameter:n \char_set_catcode_parameter:n
-\cs_new_eq:NN \char_make_math_superscript:n
- \char_set_catcode_math_superscript:n
-\cs_new_eq:NN \char_make_math_subscript:n
- \char_set_catcode_math_subscript:n
-\cs_new_eq:NN \char_make_ignore:n \char_set_catcode_ignore:n
-\cs_new_eq:NN \char_make_space:n \char_set_catcode_space:n
-\cs_new_eq:NN \char_make_letter:n \char_set_catcode_letter:n
-\cs_new_eq:NN \char_make_other:n \char_set_catcode_other:n
-\cs_new_eq:NN \char_make_active:n \char_set_catcode_active:n
-\cs_new_eq:NN \char_make_comment:n \char_set_catcode_comment:n
-\cs_new_eq:NN \char_make_invalid:n \char_set_catcode_invalid:n
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[pTF]{\token_if_alignment_tab:N}
-% \begin{macro}[pTF]{\token_if_math_shift:N}
-% \begin{macro}[pTF]{\token_if_other_char:N}
-% \begin{macro}[pTF]{\token_if_active_char:N}
-% \begin{macrocode}
-%<*deprecated>
-\cs_new_eq:NN \token_if_alignment_tab_p:N \token_if_alignment_p:N
-\cs_new_eq:NN \token_if_alignment_tab:NT \token_if_alignment:NT
-\cs_new_eq:NN \token_if_alignment_tab:NF \token_if_alignment:NF
-\cs_new_eq:NN \token_if_alignment_tab:NTF \token_if_alignment:NTF
-\cs_new_eq:NN \token_if_math_shift_p:N \token_if_math_toggle_p:N
-\cs_new_eq:NN \token_if_math_shift:NT \token_if_math_toggle:NT
-\cs_new_eq:NN \token_if_math_shift:NF \token_if_math_toggle:NF
-\cs_new_eq:NN \token_if_math_shift:NTF \token_if_math_toggle:NTF
-\cs_new_eq:NN \token_if_other_char_p:N \token_if_other_p:N
-\cs_new_eq:NN \token_if_other_char:NT \token_if_other:NT
-\cs_new_eq:NN \token_if_other_char:NF \token_if_other:NF
-\cs_new_eq:NN \token_if_other_char:NTF \token_if_other:NTF
-\cs_new_eq:NN \token_if_active_char_p:N \token_if_active_p:N
-\cs_new_eq:NN \token_if_active_char:NT \token_if_active:NT
-\cs_new_eq:NN \token_if_active_char:NF \token_if_active:NF
-\cs_new_eq:NN \token_if_active_char:NTF \token_if_active:NTF
-%</deprecated>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
% \begin{macrocode}
%</initex|package>
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx b/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx
index 7c3661493a1..3e32750aeeb 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}[2013/07/12]
-%<package>\@ifpackagelater{expl3}{2013/07/12}
+\RequirePackage{expl3}[2013/07/28]
+%<package>\@ifpackagelater{expl3}{2013/07/28}
%<package> {}
%<package> {%
%<package> \PackageError{l3keys2e}{Support package l3kernel too old}
@@ -50,7 +50,7 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: l3keys2e.dtx 4544 2013-07-12 07:14:52Z joseph $
+\GetIdInfo$Id: l3keys2e.dtx 4582 2013-07-28 08:57:13Z joseph $
{LaTeX2e option processing using LaTeX3 keys}
%</driver|package>
%<*driver>
diff --git a/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx b/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx
index be5242226ba..a51b54ea376 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}[2013/07/12]
-%<package>\@ifpackagelater{expl3}{2013/07/12}
+\RequirePackage{expl3}[2013/07/28]
+%<package>\@ifpackagelater{expl3}{2013/07/28}
%<package> {}
%<package> {%
%<package> \PackageError{xparse}{Support package l3kernel too old}
@@ -54,7 +54,7 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: xparse.dtx 4544 2013-07-12 07:14:52Z joseph $
+\GetIdInfo$Id: xparse.dtx 4582 2013-07-28 08:57:13Z joseph $
{L3 Experimental document command parser}
%</driver|package>
%<*driver>
diff --git a/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx b/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx
index 4730ece2af6..6455094ead6 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}[2013/07/12]
-%<package>\@ifpackagelater{expl3}{2013/03/12}
+\RequirePackage{expl3}[2013/07/28]
+%<package>\@ifpackagelater{expl3}{2013/07/28}
%<package> {}
%<package> {%
%<package> \PackageError{xtemplate}{Support package l3kernel too old}
@@ -54,7 +54,7 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: xtemplate.dtx 4544 2013-07-12 07:14:52Z joseph $
+\GetIdInfo$Id: xtemplate.dtx 4582 2013-07-28 08:57:13Z joseph $
{L3 Experimental prototype document functions}
%</driver|package>
%<*driver>
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3sort/l3sort.sty b/Master/texmf-dist/tex/latex/l3experimental/l3sort/l3sort.sty
index 71ce3d901e9..e1129ef82da 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3sort/l3sort.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/l3sort/l3sort.sty
@@ -47,7 +47,7 @@
%% -----------------------------------------------------------------------
%%
\RequirePackage{expl3}
-\GetIdInfo$Id: l3sort.dtx 4491 2013-05-12 16:22:18Z bruno $
+\GetIdInfo$Id: l3sort.dtx 4566 2013-07-24 19:34:45Z bruno $
{L3 Experimental sorting functions}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -85,13 +85,13 @@
{
\__sort_main:NNNnNn \tl_set:Nn
\seq_map_inline:Nn \seq_map_break:
- { \__sort_toks:NNw \exp_not:N \__seq_item:n 0 ; }
+ { \s__seq \__sort_toks:NNw \exp_not:N \__seq_item:n 0 ; \s_obj_end }
}
\cs_new_protected_nopar:Npn \seq_gsort:Nn
{
\__sort_main:NNNnNn \tl_gset:Nn
\seq_map_inline:Nn \seq_map_break:
- { \__sort_toks:NNw \exp_not:N \__seq_item:n 0 ; }
+ { \s__seq \__sort_toks:NNw \exp_not:N \__seq_item:n 0 ; \s_obj_end }
}
\cs_new_protected_nopar:Npn \tl_sort:Nn
{
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 a06c2d882db..16337136351 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex-trace.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex-trace.sty
@@ -46,7 +46,7 @@
%%
%% -----------------------------------------------------------------------
\RequirePackage{expl3}
-\GetIdInfo$Id: l3regex.dtx 4482 2013-04-24 21:05:12Z joseph $
+\GetIdInfo$Id: l3regex.dtx 4576 2013-07-24 21:40:24Z joseph $
{L3 Experimental regular expressions}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -973,13 +973,12 @@
{
\token_if_eq_meaning:NNT \__regex_compile_special:N #1
{
- \str_case:nnn { #2 }
+ \str_case:nn { #2 }
{
: { \__regex_compile_class_posix:NNNNw }
= { \__msg_kernel_warning:nnx { regex } { posix-unsupported } { = } }
. { \__msg_kernel_warning:nnx { regex } { posix-unsupported } { . } }
}
- { }
}
\__regex_compile_raw:N [ #1 #2
}
@@ -1387,7 +1386,7 @@
\__regex_show_push:n {~}
#2
\exp_last_unbraced:Nf
- \int_case:nnn { \l__regex_show_lines_int }
+ \int_case:nnF { \l__regex_show_lines_int }
{
{0}
{
@@ -1422,7 +1421,7 @@
\cs_new:Npn \__regex_show_anchor_to_str:N #1
{
anchor~at~
- \str_case:nnn { #1 }
+ \str_case:nnF { #1 }
{
{ \l__regex_min_pos_int } { start~(\iow_char:N\\A) }
{ \l__regex_start_pos_int } { start~of~match~(\iow_char:N\\G) }
@@ -2434,11 +2433,13 @@
\flag_clear:n { __regex_end }
\tl_set:Nx \l__regex_internal_a_tl
{
+ \s__seq
\int_step_function:nnnN
{ \c_two * \l__regex_max_state_int }
\c_one
{ \l__regex_submatch_int - \c_one }
\__regex_extract_seq_aux:n
+ \s_obj_end
}
\int_compare:nNnF
{ \flag_height:n { __regex_begin } + \flag_height:n { __regex_end } }
@@ -2804,7 +2805,7 @@
\str_if_eq_x:nnF { #1 #2 } { 1 0 }
{
, ~ repeated ~
- \int_case:nnn {#2}
+ \int_case:nnF {#2}
{
{ -1 } { #1~or~more~times,~\bool_if:NTF #3 { lazy } { greedy } }
{ 0 } { #1~times }
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex.sty
index f3438ed74f6..a04fee919c5 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex.sty
@@ -46,7 +46,7 @@
%%
%% -----------------------------------------------------------------------
\RequirePackage{expl3}
-\GetIdInfo$Id: l3regex.dtx 4482 2013-04-24 21:05:12Z joseph $
+\GetIdInfo$Id: l3regex.dtx 4576 2013-07-24 21:40:24Z joseph $
{L3 Experimental regular expressions}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -971,13 +971,12 @@
{
\token_if_eq_meaning:NNT \__regex_compile_special:N #1
{
- \str_case:nnn { #2 }
+ \str_case:nn { #2 }
{
: { \__regex_compile_class_posix:NNNNw }
= { \__msg_kernel_warning:nnx { regex } { posix-unsupported } { = } }
. { \__msg_kernel_warning:nnx { regex } { posix-unsupported } { . } }
}
- { }
}
\__regex_compile_raw:N [ #1 #2
}
@@ -1385,7 +1384,7 @@
\__regex_show_push:n {~}
#2
\exp_last_unbraced:Nf
- \int_case:nnn { \l__regex_show_lines_int }
+ \int_case:nnF { \l__regex_show_lines_int }
{
{0}
{
@@ -1420,7 +1419,7 @@
\cs_new:Npn \__regex_show_anchor_to_str:N #1
{
anchor~at~
- \str_case:nnn { #1 }
+ \str_case:nnF { #1 }
{
{ \l__regex_min_pos_int } { start~(\iow_char:N\\A) }
{ \l__regex_start_pos_int } { start~of~match~(\iow_char:N\\G) }
@@ -2407,11 +2406,13 @@
\flag_clear:n { __regex_end }
\tl_set:Nx \l__regex_internal_a_tl
{
+ \s__seq
\int_step_function:nnnN
{ \c_two * \l__regex_max_state_int }
\c_one
{ \l__regex_submatch_int - \c_one }
\__regex_extract_seq_aux:n
+ \s_obj_end
}
\int_compare:nNnF
{ \flag_height:n { __regex_begin } + \flag_height:n { __regex_end } }
@@ -2777,7 +2778,7 @@
\str_if_eq_x:nnF { #1 #2 } { 1 0 }
{
, ~ repeated ~
- \int_case:nnn {#2}
+ \int_case:nnF {#2}
{
{ -1 } { #1~or~more~times,~\bool_if:NTF #3 { lazy } { greedy } }
{ 0 } { #1~times }
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty
index bbf68b78646..0cdd5c2bbcf 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty
@@ -237,16 +237,20 @@
\cs_new:Npn \seq_format:Nn #1#2
{
\tl_to_str:f
- { \__str_format_seq:of {#1} { \__str_format_parse:n {#2} } }
+ {
+ \__str_format_seq:ff { \exp_after:wN \__str_format_seq_extract:w #1 }
+ { \__str_format_parse:n {#2} }
+ }
}
\cs_generate_variant:Nn \seq_format:Nn { c }
+\cs_new:Npn \__str_format_seq_extract:w \s__seq #1 \s_obj_end { \exp_stop_f: #1 }
\cs_new:Npn \__str_format_seq:nn #1#2
{
\__str_format_seq_loop:nnNn { } {#2}
#1
{ ? \__str_format_seq_end:w } { }
}
-\cs_generate_variant:Nn \__str_format_seq:nn { of }
+\cs_generate_variant:Nn \__str_format_seq:nn { ff }
\cs_new:Npn \__str_format_seq_loop:nnNn #1#2#3#4
{
\use_none:n #3
@@ -274,7 +278,7 @@
\int_compare:nNnTF {#7} < \c_zero
{ \__str_format_put:nw { - } }
{
- \str_case:nnn {#3}
+ \str_case:nnF {#3}
{
{ ~ } { \__str_format_put:ow { \c_catcode_other_space_tl } }
{ + } { \__str_format_put:nw { + } }
@@ -287,7 +291,7 @@
\__msg_kernel_expandable_error:nnnn
{ str } { invalid-precision-format } {#5} {int}
}
- \str_case:nnn {#6}
+ \str_case:nnF {#6}
{
{ ? } { \__str_format_int:NwnnNNn \use:n }
{ d } { \__str_format_int:NwnnNNn \use:n }
@@ -330,7 +334,7 @@
\token_if_eq_meaning:NNTF 2 #8
{ \__str_format_put:nw { - } }
{
- \str_case:nnn {#3}
+ \str_case:nnF {#3}
{
{ ~ } { \__str_format_put:ow { \c_catcode_other_space_tl } }
{ + } { \__str_format_put:nw { + } }
@@ -341,7 +345,7 @@
\tl_if_empty:nTF {#5}
{ \__str_format_put:nw { { 6} } }
{ \__str_format_put:nw { {#5} } }
- \str_case:nnn {#6}
+ \str_case:nnF {#6}
{
{ e } { \__str_format_fp:wnnnNNw \__str_format_fp_e:wn }
{ f } { \__str_format_fp:wnnnNNw \__str_format_fp_f:wn }
@@ -374,7 +378,7 @@
\group_end:
\cs_new:Npn \__str_format_fp_e:wn \s__fp \__fp_chk:w #1#2#3 ; #4
{
- \int_case:nnn {#1}
+ \int_case:nnF {#1}
{
{0} { \use:nf { 0 . } { \prg_replicate:nn {#4} { 0 } } e 0 }
{2} { inf }
@@ -406,7 +410,7 @@
}
\cs_new:Npn \__str_format_fp_f:wn \s__fp \__fp_chk:w #1#2#3 ; #4
{
- \int_case:nnn {#1}
+ \int_case:nnF {#1}
{
{0} { \use:nf { 0 . } { \prg_replicate:nn {#4} { 0 } } }
{2} { inf }
@@ -428,7 +432,7 @@
}
\cs_new:Npn \__str_format_fp_g:wn \s__fp \__fp_chk:w #1#2 ; #3
{
- \int_case:nnn {#1}
+ \int_case:nnF {#1}
{
{0} { 0 }
{2} { inf }
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str.sty
index 40b503280e3..e374955c56b 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str.sty
@@ -46,7 +46,7 @@
%%
%% -----------------------------------------------------------------------
\RequirePackage{expl3}
-\GetIdInfo$Id: l3str.dtx 4482 2013-04-24 21:05:12Z joseph $
+\GetIdInfo$Id: l3str.dtx 4576 2013-07-24 21:40:24Z joseph $
{L3 Experimental strings}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
index d8105f61edb..8a36ae304ff 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
@@ -60,8 +60,8 @@
}
\def\ExplFileName{expl3}
\def\ExplFileDescription{L3 Experimental code bundle wrapper}
-\def\ExplFileDate{2013/07/12}
-\def\ExplFileVersion{4544}
+\def\ExplFileDate{2013/07/28}
+\def\ExplFileVersion{4582}
\RequirePackage{etex}
\relax
\reserveinserts{32}
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3basics.sty b/Master/texmf-dist/tex/latex/l3kernel/l3basics.sty
index 703d134e38b..27ccd762525 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3basics.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3basics.sty
@@ -46,7 +46,7 @@
%%
%% -----------------------------------------------------------------------
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3basics.dtx 4521 2013-07-09 11:45:31Z joseph $
+\GetIdInfo$Id: l3basics.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Basic definitions}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -809,29 +809,64 @@
\prg_return_false:
\fi:
}
-\cs_new:Npn \str_case:nnn #1#2#3
+\cs_new:Npn \str_case:nn #1#2
{
\tex_romannumeral:D
- \__str_case:nw {#1} #2 {#1} {#3} \q_recursion_stop
+ \__str_case:nnTF {#1} {#2} { } { }
}
+\cs_new:Npn \str_case:nnT #1#2#3
+ {
+ \tex_romannumeral:D
+ \__str_case:nnTF {#1} {#2} {#3} { }
+ }
+\cs_new:Npn \str_case:nnF #1#2
+ {
+ \tex_romannumeral:D
+ \__str_case:nnTF {#1} {#2} { }
+ }
+\cs_new:Npn \str_case:nnTF #1#2
+ {
+ \tex_romannumeral:D
+ \__str_case:nnTF {#1} {#2}
+ }
+\cs_new:Npn \__str_case:nnTF #1#2#3#4
+ { \__str_case:nw {#1} #2 {#1} { } \q_mark {#3} \q_mark {#4} \q_stop }
\cs_new:Npn \__str_case:nw #1#2#3
{
\str_if_eq:nnTF {#1} {#2}
{ \__str_case_end:nw {#3} }
{ \__str_case:nw {#1} }
}
-\cs_new:Npn \str_case_x:nnn #1#2#3
+\cs_new:Npn \str_case_x:nn #1#2
+ {
+ \tex_romannumeral:D
+ \__str_case_x:nnTF {#1} {#2} { } { }
+ }
+\cs_new:Npn \str_case_x:nnT #1#2#3
+ {
+ \tex_romannumeral:D
+ \__str_case_x:nnTF {#1} {#2} {#3} { }
+ }
+\cs_new:Npn \str_case_x:nnF #1#2
+ {
+ \tex_romannumeral:D
+ \__str_case_x:nnTF {#1} {#2} { }
+ }
+\cs_new:Npn \str_case_x:nnTF #1#2
{
\tex_romannumeral:D
- \__str_case_x:nw {#1} #2 {#1} {#3} \q_recursion_stop
+ \__str_case_x:nnTF {#1} {#2}
}
+\cs_new:Npn \__str_case_x:nnTF #1#2#3#4
+ { \__str_case_x:nw {#1} #2 {#1} { } \q_mark {#3} \q_mark {#4} \q_stop }
\cs_new:Npn \__str_case_x:nw #1#2#3
{
\str_if_eq_x:nnTF {#1} {#2}
{ \__str_case_end:nw {#3} }
{ \__str_case_x:nw {#1} }
}
-\cs_new:Npn \__prg_case_end:nw #1#2 \q_recursion_stop { \c_zero #1 }
+\cs_new:Npn \__prg_case_end:nw #1#2#3 \q_mark #4#5 \q_stop
+ { \c_zero #1 #4 }
\cs_new_eq:NN \__str_case_end:nw \__prg_case_end:nw
\cs_new_eq:NN \__prg_break_point:Nn \use_ii:nn
\cs_new:Npn \__prg_map_break:Nn #1#2#3 \__prg_break_point:Nn #4#5
@@ -845,6 +880,8 @@
\cs_new_eq:NN \__prg_break_point: \prg_do_nothing:
\cs_new:Npn \__prg_break: #1 \__prg_break_point: { }
\cs_new:Npn \__prg_break:n #1#2 \__prg_break_point: {#1}
+\cs_new_eq:NN \str_case:nnn \str_case:nnF
+\cs_new_eq:NN \str_case_x:nnn \str_case_x:nnF
%%
%%
%% End of file `l3basics.sty'.
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3bootstrap.sty b/Master/texmf-dist/tex/latex/l3kernel/l3bootstrap.sty
index 89dd24ceae5..9cd140d7174 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3bootstrap.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3bootstrap.sty
@@ -102,7 +102,7 @@
{%
\def\ExplFileDate{#1/#2/#3}%
}
-\GetIdInfo$Id: l3bootstrap.dtx 4420 2013-01-08 20:00:04Z joseph $
+\GetIdInfo$Id: l3bootstrap.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Bootstrap code}
\ProvidesPackage{l3bootstrap}
[%
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3box.sty b/Master/texmf-dist/tex/latex/l3kernel/l3box.sty
index 32f90af3a29..1f9be4b1206 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3box.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3box.sty
@@ -13,7 +13,7 @@
%%
%% Do not distribute a modified version of this file.
%%
-%% File: l3box.dtx Copyright (C) 2005-2012 The LaTeX3 Project
+%% File: l3box.dtx Copyright (C) 2005-2013 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
@@ -46,7 +46,7 @@
%%
%% -----------------------------------------------------------------------
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3box.dtx 4482 2013-04-24 21:05:12Z joseph $
+\GetIdInfo$Id: l3box.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Experimental boxes}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3candidates.sty b/Master/texmf-dist/tex/latex/l3kernel/l3candidates.sty
index 586823f2c55..4288b0d5288 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3candidates.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3candidates.sty
@@ -47,7 +47,7 @@
%% -----------------------------------------------------------------------
%%
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3candidates.dtx 4521 2013-07-09 11:45:31Z joseph $
+\GetIdInfo$Id: l3candidates.dtx 4576 2013-07-24 21:40:24Z joseph $
{L3 Experimental additions to l3kernel}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -758,46 +758,46 @@
\cs_generate_variant:Nn \fp_gset_from_dim:Nn { c }
\cs_new:Npn \prop_map_tokens:Nn #1#2
{
- \exp_last_unbraced:Nno \__prop_map_tokens:nwn {#2} #1
- \s__prop \q_recursion_tail \s__prop { }
+ \exp_last_unbraced:Nno \__prop_map_tokens:nwwn {#2} #1
+ \__prop_pair:wn \q_recursion_tail \s__prop { }
\__prg_break_point:Nn \prop_map_break: { }
}
-\cs_new:Npn \__prop_map_tokens:nwn #1 \s__prop #2 \s__prop #3
+\cs_new:Npn \__prop_map_tokens:nwwn #1#2 \__prop_pair:wn #3 \s__prop #4
{
- \if_meaning:w \q_recursion_tail #2
+ \if_meaning:w \q_recursion_tail #3
\exp_after:wN \prop_map_break:
\fi:
- \use:n {#1} {#2} {#3}
- \__prop_map_tokens:nwn {#1}
+ \use:n {#1} {#3} {#4}
+ \__prop_map_tokens:nwwn {#1}
}
\cs_generate_variant:Nn \prop_map_tokens:Nn { c }
\cs_new:Npn \prop_get:Nn #1#2
{
- \exp_last_unbraced:Noo \__prop_get_Nn:nwn { \tl_to_str:n {#2} } #1
- \s__prop \tl_to_str:n {#2} \s__prop { }
+ \exp_last_unbraced:Noo \__prop_get_Nn:nwwn { \tl_to_str:n {#2} } #1
+ \__prop_pair:wn \tl_to_str:n {#2} \s__prop { }
\__prg_break_point:
}
-\cs_new:Npn \__prop_get_Nn:nwn #1 \s__prop #2 \s__prop #3
+\cs_new:Npn \__prop_get_Nn:nwwn #1#2 \__prop_pair:wn #3 \s__prop #4
{
- \str_if_eq_x:nnTF {#1} {#2}
- { \__prg_break:n { \exp_not:n {#3} } }
- { \__prop_get_Nn:nwn {#1} }
+ \str_if_eq_x:nnTF {#1} {#3}
+ { \__prg_break:n { \exp_not:n {#4} } }
+ { \__prop_get_Nn:nwwn {#1} }
}
\cs_generate_variant:Nn \prop_get:Nn { c }
-\cs_new:Npn \seq_item:Nn #1#2
+\cs_new:Npn \seq_item:Nn #1 { \exp_after:wN \__seq_item:wNn #1 #1 }
+\cs_new:Npn \__seq_item:wNn \s__seq #1 \s_obj_end #2#3
{
- \exp_last_unbraced:Nfo \__seq_item:nnn
+ \exp_args:Nf \__seq_item:nnn
{
\int_eval:n
{
- \int_compare:nNnT {#2} < \c_zero
- { \seq_count:N #1 + \c_one + }
- #2
+ \int_compare:nNnT {#3} < \c_zero
+ { \seq_count:N #2 + \c_one + }
+ #3
}
}
#1
- { ? \__prg_break: }
- { }
+ { ? \__prg_break: } { }
\__prg_break_point:
}
\cs_new:Npn \__seq_item:nnn #1#2#3
@@ -809,21 +809,18 @@
}
\cs_generate_variant:Nn \seq_item:Nn { c }
\cs_new:Npn \seq_mapthread_function:NNN #1#2#3
+ { \exp_after:wN \__seq_mapthread_function:wNN #2 #1 #3 }
+\cs_new:Npn \__seq_mapthread_function:wNN \s__seq #1 \s_obj_end #2#3
{
- \exp_after:wN \__seq_mapthread_function:NN
- \exp_after:wN #3
- \exp_after:wN #1
- #2
- { ? \__prg_break: } { }
+ \exp_after:wN \__seq_mapthread_function:wNw #2 #3
+ #1 { ? \__prg_break: } { }
\__prg_break_point:
}
-\cs_new:Npn \__seq_mapthread_function:NN #1#2
+\cs_new:Npn \__seq_mapthread_function:wNw \s__seq #1 \s_obj_end #2
{
- \exp_after:wN \__seq_mapthread_function:Nnnwnn
- \exp_after:wN #1
- #2
- { ? \__prg_break: } { }
- \q_stop
+ \__seq_mapthread_function:Nnnwnn #2
+ #1 { ? \__prg_break: } { }
+ \q_stop
}
\cs_new:Npn \__seq_mapthread_function:Nnnwnn #1#2#3#4 \q_stop #5#6
{
@@ -837,22 +834,22 @@
\cs_new_protected:Npn \seq_set_from_clist:NN #1#2
{
\tl_set:Nx #1
- { \clist_map_function:NN #2 \__seq_wrap_item:n }
+ { \s__seq \clist_map_function:NN #2 \__seq_wrap_item:n \s_obj_end }
}
\cs_new_protected:Npn \seq_set_from_clist:Nn #1#2
{
\tl_set:Nx #1
- { \clist_map_function:nN {#2} \__seq_wrap_item:n }
+ { \s__seq \clist_map_function:nN {#2} \__seq_wrap_item:n \s_obj_end }
}
\cs_new_protected:Npn \seq_gset_from_clist:NN #1#2
{
\tl_gset:Nx #1
- { \clist_map_function:NN #2 \__seq_wrap_item:n }
+ { \s__seq \clist_map_function:NN #2 \__seq_wrap_item:n \s_obj_end }
}
\cs_new_protected:Npn \seq_gset_from_clist:Nn #1#2
{
\tl_gset:Nx #1
- { \clist_map_function:nN {#2} \__seq_wrap_item:n }
+ { \s__seq \clist_map_function:nN {#2} \__seq_wrap_item:n \s_obj_end }
}
\cs_generate_variant:Nn \seq_set_from_clist:NN { Nc }
\cs_generate_variant:Nn \seq_set_from_clist:NN { c , cc }
@@ -869,9 +866,11 @@
{
\cs_set_eq:NN \__seq_tmp:w \__seq_item:n
\cs_set_eq:NN \__seq_item:n \__seq_reverse_item:nwn
- #1 #2 { #2 \exp_not:n { } }
+ #1 #2 { \exp_after:wN \__seq_reverse_setup:w #2 }
\cs_set_eq:NN \__seq_item:n \__seq_tmp:w
}
+\cs_new:Npn \__seq_reverse_setup:w #1 \s_obj_end
+ { #1 \exp_not:n { } \s_obj_end }
\cs_new:Npn \__seq_reverse_item:nwn #1 #2 \exp_not:n #3
{
#2
@@ -1007,7 +1006,7 @@
{
\exp_args:Nf \__tl_act_output:n
{
- \exp_args:NNo \str_case:nnn #2 {#1}
+ \exp_args:NNo \str_case:nnF #2 {#1}
{ \exp_stop_f: #2 }
}
}
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3clist.sty b/Master/texmf-dist/tex/latex/l3kernel/l3clist.sty
index 2a216e4ff73..5c066bd8b3e 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3clist.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3clist.sty
@@ -48,7 +48,7 @@
%%
%% -----------------------------------------------------------------------
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3clist.dtx 4500 2013-05-26 11:18:19Z bruno $
+\GetIdInfo$Id: l3clist.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Comma separated lists}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -415,7 +415,7 @@
{
\clist_if_exist:NTF #1
{
- \int_case:nnn { \clist_count:N #1 }
+ \int_case:nnF { \clist_count:N #1 }
{
{ 0 } { }
{ 1 } { \exp_after:wN \__clist_use:wwn #1 , , { } }
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls b/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls
index d3dd89238cb..9fa07d959ef 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls
@@ -4,7 +4,8 @@
%%
%% The original source files were:
%%
-%% l3doc.dtx (with options: `class')
+%% l3doc.dtx (with options: `class,cfg')
+%%
%%
%% EXPERIMENTAL CODE
%%
@@ -13,6 +14,7 @@
%%
%% Do not distribute a modified version of this file.
%%
+%%
%% File: l3doc.dtx Copyright (C) 1990-2012 The LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
@@ -1457,6 +1459,51 @@
\DisableCrossrefs
\OnlyDescription
}
+\tl_new:N \Team
+\tl_set:Nn \Team
+ {
+ The~\LaTeX3~Project\thanks
+ {
+ Frank~Mittelbach,~Denys~Duchier,~Chris~Rowley,~
+ Rainer~Sch\"opf,~Johannes~Braams,~Michael~Downes,~
+ David~Carlisle,~Alan~Jeffrey,~Morten~H\o{}gholm,~Thomas~Lotze,~
+ Javier~Bezos,~Will~Robertson,~Joseph~Wright,~Bruno~Le~Floch
+ }
+ }
+\NewDocumentCommand{\ExplMakeTitle}{mm}
+ {
+ \title
+ {
+ The~\pkg{#1}~package \\ #2
+ \thanks
+ {
+ This~file~describes~v\ExplFileVersion,~
+ last~revised~\ExplFileDate.
+ }
+ }
+ \author
+ {
+ The~\LaTeX3~Project\thanks{E-mail:~
+ \href{mailto:latex-l@listserv.uni-heidelberg.de}
+ {latex-l@listserv.uni-heidelberg.de}}
+ }
+ \date{Released~\ExplFileDate}
+ \maketitle
+ }
+\DeclareDocumentCommand\ie{}{\emph{i.e.}}
+\DeclareDocumentCommand\eg{}{\emph{e.g.}}
+\DeclareDocumentCommand\Ie{}{\emph{I.e.}}
+\DeclareDocumentCommand\Eg{}{\emph{E.g.}}
+\AtBeginDocument
+ {
+ \clist_map_inline:nn
+ {
+ asin, acos, atan, acot,
+ asinh, acosh, atanh, acoth, round, floor, ceil
+ }
+ { \exp_args:Nc \DeclareMathOperator{#1}{#1} }
+ }
+\NewDocumentCommand { \nan } { } { \text { \texttt { nan } } }
%%
%%
%% End of file `l3doc.cls'.
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3expan.sty b/Master/texmf-dist/tex/latex/l3kernel/l3expan.sty
index 69dc9b3593a..4cfe6746a86 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3expan.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3expan.sty
@@ -46,7 +46,7 @@
%%
%% -----------------------------------------------------------------------
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3expan.dtx 4521 2013-07-09 11:45:31Z joseph $
+\GetIdInfo$Id: l3expan.dtx 4565 2013-07-24 08:21:51Z joseph $
{L3 Argument expansion}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -501,7 +501,11 @@
\cs_generate_variant:Nn \str_if_eq:nnF { nV , no , VV }
\cs_generate_variant:Nn \str_if_eq:nnTF { V , o }
\cs_generate_variant:Nn \str_if_eq:nnTF { nV , no , VV }
-\cs_generate_variant:Nn \str_case:nnn { o }
+\cs_generate_variant:Nn \str_case:nn { o }
+\cs_generate_variant:Nn \str_case:nnT { o }
+\cs_generate_variant:Nn \str_case:nnF { o }
+\cs_generate_variant:Nn \str_case:nnTF { o }
+\cs_new_eq:NN \str_case:onn \str_case:onF
%%
%%
%% End of file `l3expan.sty'.
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3file.sty b/Master/texmf-dist/tex/latex/l3kernel/l3file.sty
index 16c7c74ede6..35c029411f4 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3file.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3file.sty
@@ -46,7 +46,7 @@
%%
%% -----------------------------------------------------------------------
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3file.dtx 4483 2013-05-01 10:57:41Z bruno $
+\GetIdInfo$Id: l3file.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 File and I/O operations}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -543,10 +543,6 @@
Spaces~are~not~permitted~in~files~loaded~by~LaTeX: \\
Further~errors~may~follow!
}
-\cs_new_eq:NN \ior_to:NN \ior_get:NN
-\cs_new_protected_nopar:Npn \ior_gto:NN { \tex_global:D \ior_to:NN }
-\cs_new_eq:NN \ior_str_to:NN \ior_get_str:NN
-\cs_new_protected_nopar:Npn \ior_str_gto:NN { \tex_global:D \ior_str_to:NN }
%%
%%
%% End of file `l3file.sty'.
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3int.sty b/Master/texmf-dist/tex/latex/l3kernel/l3int.sty
index fcff17590c0..7201e626947 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3int.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3int.sty
@@ -46,7 +46,7 @@
%%
%% -----------------------------------------------------------------------
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3int.dtx 4482 2013-04-24 21:05:12Z joseph $
+\GetIdInfo$Id: l3int.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Integers}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -277,13 +277,28 @@
\prg_return_false:
\fi:
}
-\cs_new:Npn \int_case:nnn #1
+\cs_new:Npn \int_case:nnTF #1
{
\tex_romannumeral:D
- \exp_args:Nf \__int_case:nnn { \int_eval:n {#1} }
+ \exp_args:Nf \__int_case:nnTF { \int_eval:n {#1} }
}
-\cs_new:Npn \__int_case:nnn #1#2#3
- { \__int_case:nw {#1} #2 {#1} {#3} \q_recursion_stop }
+\cs_new:Npn \int_case:nnT #1#2#3
+ {
+ \tex_romannumeral:D
+ \exp_args:Nf \__int_case:nnTF { \int_eval:n {#1} } {#2} {#3} { }
+ }
+\cs_new:Npn \int_case:nnF #1#2
+ {
+ \tex_romannumeral:D
+ \exp_args:Nf \__int_case:nnTF { \int_eval:n {#1} } {#2} { }
+ }
+\cs_new:Npn \int_case:nn #1#2
+ {
+ \tex_romannumeral:D
+ \exp_args:Nf \__int_case:nnTF { \int_eval:n {#1} } {#2} { } { }
+ }
+\cs_new:Npn \__int_case:nnTF #1#2#3#4
+ { \__int_case:nw {#1} #2 {#1} { } \q_mark {#3} \q_mark {#4} \q_stop }
\cs_new:Npn \__int_case:nw #1#2#3
{
\int_compare:nNnTF {#1} = {#2}
@@ -418,13 +433,13 @@
{
\exp_args:NNo \exp_args:No \__int_to_symbols:nnnn
{
- \int_case:nnn
+ \int_case:nn
{ 1 + \int_mod:nn { #1 - 1 } {#2} }
- {#3} { }
+ {#3}
}
{#1} {#2} {#3}
}
- { \int_case:nnn {#1} {#3} { } }
+ { \int_case:nn {#1} {#3} }
}
\cs_new:Npn \__int_to_symbols:nnnn #1#2#3#4
{
@@ -777,6 +792,7 @@
\int_new:N \l_tmpb_int
\int_new:N \g_tmpa_int
\int_new:N \g_tmpb_int
+\cs_new_eq:NN \int_case:nnn \int_case:nnF
%%
%%
%% End of file `l3int.sty'.
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3keys.sty b/Master/texmf-dist/tex/latex/l3kernel/l3keys.sty
index ab3bf0dcd66..a7a262f3020 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3keys.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3keys.sty
@@ -46,7 +46,7 @@
%%
%% -----------------------------------------------------------------------
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3keys.dtx 4544 2013-07-12 07:14:52Z joseph $
+\GetIdInfo$Id: l3keys.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Experimental key-value interfaces}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -160,19 +160,23 @@
two~equals~signs~not~separated~by~a~comma.
}
\tl_const:Nn \c__keys_code_root_tl { key~code~>~ }
-\tl_const:Nn \c__keys_vars_root_tl { key~var~>~ }
+\tl_const:Nn \c__keys_info_root_tl { key~info~>~ }
\tl_const:Nn \c__keys_props_root_tl { key~prop~>~ }
-\tl_const:Nn \c__keys_value_forbidden_tl { forbidden }
-\tl_const:Nn \c__keys_value_required_tl { required }
\int_new:N \l_keys_choice_int
\tl_new:N \l_keys_choice_tl
+\clist_new:N \l__keys_groups_clist
\tl_new:N \l_keys_key_tl
\tl_new:N \l__keys_module_tl
\bool_new:N \l__keys_no_value_bool
+\bool_new:N \l__keys_only_known_bool
\tl_new:N \l_keys_path_tl
\tl_new:N \l__keys_property_tl
-\tl_new:N \l__keys_unknown_clist
+\bool_new:N \l__keys_selective_bool
+\bool_new:N \l__keys_filtered_bool
+\seq_new:N \l__keys_selective_seq
+\tl_new:N \l__keys_unused_clist
\tl_new:N \l_keys_value_tl
+\bool_new:N \l__keys_tmp_bool
\cs_new_protected:Npn \keys_define:nn
{ \__keys_define:onn \l__keys_module_tl }
\cs_new_protected:Npn \__keys_define:nnn #1#2#3
@@ -302,18 +306,24 @@
}
\cs_new_protected:Npn \__keys_cmd_set:nn #1#2
{
- \__keys_cmd_set:n {#1}
+ \prop_clear_new:c { \c__keys_info_root_tl #1 }
\cs_set:cpn { \c__keys_code_root_tl #1 } ##1 {#2}
}
\cs_generate_variant:Nn \__keys_cmd_set:nn { nx , Vn , Vo }
-\cs_new_protected:Npn \__keys_cmd_set:n #1
+\cs_new_protected:Npn \__keys_default_set:n #1
{
- \tl_clear_new:c { \c__keys_vars_root_tl #1 .default }
- \tl_set:cn { \c__keys_vars_root_tl #1 .default } { \q_no_value }
- \tl_clear_new:c { \c__keys_vars_root_tl #1 .req }
+ \prop_if_exist:cT { \c__keys_info_root_tl \l_keys_path_tl }
+ { \prop_put:cnn { \c__keys_info_root_tl \l_keys_path_tl } { default } {#1} }
+ }
+\cs_new_protected:Npn \__keys_groups_set:n #1
+ {
+ \prop_if_exist:cT { \c__keys_info_root_tl \l_keys_path_tl }
+ {
+ \clist_set:Nn \l__keys_groups_clist {#1}
+ \prop_put:cnV { \c__keys_info_root_tl \l_keys_path_tl }
+ { groups } \l__keys_groups_clist
+ }
}
-\cs_new_protected:Npn \__keys_default_set:n #1
- { \tl_set:cn { \c__keys_vars_root_tl \l_keys_path_tl .default } {#1} }
\cs_new_protected:Npn \__keys_initialise:n #1
{ \exp_after:wN \__keys_initialise:wn \l_keys_path_tl \q_stop {#1} }
\cs_new_protected:Npn \__keys_initialise:wn #1 / #2 \q_stop #3
@@ -355,9 +365,12 @@
}
\cs_new_protected:Npn \__keys_value_requirement:n #1
{
- \tl_set_eq:cc
- { \c__keys_vars_root_tl \l_keys_path_tl .req }
- { c__keys_value_ #1 _tl }
+ \prop_if_exist:cT { \c__keys_info_root_tl \l_keys_path_tl }
+ {
+ \prop_remove:cn { \c__keys_info_root_tl \l_keys_path_tl } { required }
+ \prop_remove:cn { \c__keys_info_root_tl \l_keys_path_tl } { forbidden }
+ \prop_put:cnn { \c__keys_info_root_tl \l_keys_path_tl } {#1} { true }
+ }
}
\cs_new_protected:Npn \__keys_variable_set:NnnN #1#2#3#4
{
@@ -426,6 +439,8 @@
{ \__keys_variable_set:NnnN #1 { fp } { g } n }
\cs_new_protected:cpn { \c__keys_props_root_tl .fp_gset:c } #1
{ \__keys_variable_set:cnnN {#1} { fp } { g } n }
+\cs_new_protected:cpn { \c__keys_props_root_tl .groups:n } #1
+ { \__keys_groups_set:n {#1} }
\cs_new_protected:cpn { \c__keys_props_root_tl .initial:n } #1
{ \__keys_initialise:n {#1} }
\cs_new_protected:cpn { \c__keys_props_root_tl .initial:V } #1
@@ -484,7 +499,7 @@
{ \__keys_value_requirement:n { forbidden } }
\cs_new_protected_nopar:cpn { \c__keys_props_root_tl .value_required: }
{ \__keys_value_requirement:n { required } }
-\cs_new_protected:Npn \keys_set:nn
+\cs_new_protected_nopar:Npn \keys_set:nn
{ \__keys_set:onn { \l__keys_module_tl } }
\cs_new_protected:Npn \__keys_set:nnn #1#2#3
{
@@ -494,20 +509,45 @@
}
\cs_generate_variant:Nn \keys_set:nn { nV , nv , no }
\cs_generate_variant:Nn \__keys_set:nnn { o }
-\cs_new_protected:Npn \keys_set_known:nnN
- { \__keys_set_known:onnN { \l__keys_module_tl } }
-\cs_new_protected:Npn \__keys_set_known:nnnN #1#2#3#4
+\cs_new_protected:Npn \keys_set_known:nnN #1#2#3
{
- \tl_set:Nx \l__keys_module_tl { \tl_to_str:n {#2} }
- \clist_clear:N \l__keys_unknown_clist
- \cs_set_eq:NN \__keys_execute_unknown: \__keys_execute_unknown_alt:
- \keyval_parse:NNn \__keys_set_elt:n \__keys_set_elt:nn {#3}
- \cs_set_eq:NN \__keys_execute_unknown: \__keys_execute_unknown_std:
- \tl_set:Nn \l__keys_module_tl {#1}
- \cs_set_eq:NN #4 \l__keys_unknown_clist
+ \clist_clear:N \l__keys_unused_clist
+ \keys_set_known:nn {#1} {#2}
+ \tl_set:Nx #3 { \exp_not:o { \l__keys_unused_clist } }
}
\cs_generate_variant:Nn \keys_set_known:nnN { nV , nv , no }
-\cs_generate_variant:Nn \__keys_set_known:nnnN { o }
+\cs_new_protected:Npn \keys_set_known:nn #1#2
+ {
+ \bool_set_true:N \l__keys_only_known_bool
+ \keys_set:nn {#1} {#2}
+ \bool_set_false:N \l__keys_only_known_bool
+ }
+\cs_generate_variant:Nn \keys_set_known:nn { nV , nv , no }
+\cs_new_protected:Npn \keys_set_filter:nnnN #1#2#3#4
+ {
+ \clist_clear:N \l__keys_unused_clist
+ \keys_set_filter:nnn {#1} {#2} {#3}
+ \tl_set:Nx #4 { \exp_not:o { \l__keys_unused_clist } }
+ }
+\cs_generate_variant:Nn \keys_set_filter:nnnN { nnV , nnv , nno }
+\cs_new_protected:Npn \keys_set_filter:nnn #1#2#3
+ {
+ \bool_set_true:N \l__keys_selective_bool
+ \bool_set_true:N \l__keys_filtered_bool
+ \seq_set_from_clist:Nn \l__keys_selective_seq {#2}
+ \keys_set:nn {#1} {#3}
+ \bool_set_false:N \l__keys_selective_bool
+ }
+\cs_generate_variant:Nn \keys_set_filter:nnn { nnV , nnv , nno }
+\cs_new_protected:Npn \keys_set_groups:nnn #1#2#3
+ {
+ \bool_set_true:N \l__keys_selective_bool
+ \bool_set_false:N \l__keys_filtered_bool
+ \seq_set_from_clist:Nn \l__keys_selective_seq {#2}
+ \keys_set:nn {#1} {#3}
+ \bool_set_false:N \l__keys_selective_bool
+ }
+\cs_generate_variant:Nn \keys_set_groups:nnn { nnV , nnv , nno }
\cs_new_protected:Npn \__keys_set_elt:n #1
{
\bool_set_true:N \l__keys_no_value_bool
@@ -523,6 +563,12 @@
\tl_set:Nx \l_keys_key_tl { \tl_to_str:n {#1} }
\tl_set:Nx \l_keys_path_tl { \l__keys_module_tl / \l_keys_key_tl }
\__keys_value_or_default:n {#2}
+ \bool_if:NTF \l__keys_selective_bool
+ { \__keys_set_elt_selective: }
+ { \__keys_set_elt_aux: }
+ }
+\cs_new_protected_nopar:Npn \__keys_set_elt_aux:
+ {
\bool_if:nTF
{
\__keys_if_value_p:n { required } &&
@@ -545,46 +591,83 @@
{ \__keys_execute: }
}
}
-\cs_new_protected:Npn \__keys_value_or_default:n #1
+\cs_new_protected_nopar:Npn \__keys_set_elt_selective:
+ {
+ \prop_if_exist:cTF { \c__keys_info_root_tl \l_keys_path_tl }
+ {
+ \prop_get:cnNTF { \c__keys_info_root_tl \l_keys_path_tl }
+ { groups } \l__keys_groups_clist
+ { \__keys_check_groups: }
+ {
+ \bool_if:NTF \l__keys_filtered_bool
+ { \__keys_set_elt_aux: }
+ { \__keys_store_unused: }
+ }
+ }
+ {
+ \bool_if:NTF \l__keys_filtered_bool
+ { \__keys_set_elt_aux: }
+ { \__keys_store_unused: }
+ }
+ }
+\cs_new_protected_nopar:Npn \__keys_check_groups:
{
- \tl_set:Nn \l_keys_value_tl {#1}
- \bool_if:NT \l__keys_no_value_bool
+ \bool_set_false:N \l__keys_tmp_bool
+ \seq_map_inline:Nn \l__keys_selective_seq
{
- \quark_if_no_value:cF { \c__keys_vars_root_tl \l_keys_path_tl .default }
+ \clist_map_inline:Nn \l__keys_groups_clist
{
- \cs_if_exist:cT { \c__keys_vars_root_tl \l_keys_path_tl .default }
+ \str_if_eq:nnT {##1} {####1}
{
- \tl_set_eq:Nc \l_keys_value_tl
- { \c__keys_vars_root_tl \l_keys_path_tl .default }
+ \bool_set_true:N \l__keys_tmp_bool
+ \clist_map_break:n { \seq_map_break: }
}
}
}
+ \bool_if:NTF \l__keys_tmp_bool
+ {
+ \bool_if:NTF \l__keys_filtered_bool
+ { \__keys_store_unused: }
+ { \__keys_set_elt_aux: }
+ }
+ {
+ \bool_if:NTF \l__keys_filtered_bool
+ { \__keys_set_elt_aux: }
+ { \__keys_store_unused: }
+ }
+ }
+\cs_new_protected:Npn \__keys_value_or_default:n #1
+ {
+ \bool_if:NTF \l__keys_no_value_bool
+ {
+ \prop_get:cnNF { \c__keys_info_root_tl \l_keys_path_tl }
+ { default } \l_keys_value_tl
+ { \tl_clear:N \l_keys_value_tl }
+ }
+ { \tl_set:Nn \l_keys_value_tl {#1} }
}
\prg_new_conditional:Npnn \__keys_if_value:n #1 { p }
{
- \tl_if_eq:ccTF { c__keys_value_ #1 _tl }
- { \c__keys_vars_root_tl \l_keys_path_tl .req }
- { \prg_return_true: }
+ \prop_if_exist:cTF { \c__keys_info_root_tl \l_keys_path_tl }
+ {
+ \prop_if_in:cnTF { \c__keys_info_root_tl \l_keys_path_tl } {#1}
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
{ \prg_return_false: }
}
\cs_new_protected_nopar:Npn \__keys_execute:
{ \__keys_execute:nn { \l_keys_path_tl } { \__keys_execute_unknown: } }
\cs_new_protected_nopar:Npn \__keys_execute_unknown:
{
- \__keys_execute:nn { \l__keys_module_tl / unknown }
+ \bool_if:NTF \l__keys_only_known_bool
+ { \__keys_store_unused: }
{
- \__msg_kernel_error:nnxx { kernel } { key-unknown }
- { \l_keys_path_tl } { \l__keys_module_tl }
- }
- }
-\cs_new_eq:NN \__keys_execute_unknown_std: \__keys_execute_unknown:
-\cs_new_protected_nopar:Npn \__keys_execute_unknown_alt:
- {
- \clist_put_right:Nx \l__keys_unknown_clist
- {
- \exp_not:o \l_keys_key_tl
- \bool_if:NF \l__keys_no_value_bool
- { = { \exp_not:o \l_keys_value_tl } }
+ \__keys_execute:nn { \l__keys_module_tl / unknown }
+ {
+ \__msg_kernel_error:nnxx { kernel } { key-unknown }
+ { \l_keys_path_tl } { \l__keys_module_tl }
+ }
}
}
\cs_new:Npn \__keys_execute:nn #1#2
@@ -596,6 +679,15 @@
}
{#2}
}
+\cs_new_protected_nopar:Npn \__keys_store_unused:
+ {
+ \clist_put_right:Nx \l__keys_unused_clist
+ {
+ \exp_not:o \l_keys_key_tl
+ \bool_if:NF \l__keys_no_value_bool
+ { = { \exp_not:o \l_keys_value_tl } }
+ }
+ }
\cs_new:Npn \__keys_choice_find:n #1
{
\__keys_execute:nn { \l_keys_path_tl / \tl_to_str:n {#1} }
@@ -673,12 +765,12 @@
\cs_new_protected:Npn \__keys_choice_code_store:n #1
{
\cs_if_exist:cF
- { \c__keys_vars_root_tl \l_keys_path_tl .choice~code }
+ { \c__keys_info_root_tl \l_keys_path_tl .choice~code }
{
\tl_new:c
- { \c__keys_vars_root_tl \l_keys_path_tl .choice~code }
+ { \c__keys_info_root_tl \l_keys_path_tl .choice~code }
}
- \tl_set:cn { \c__keys_vars_root_tl \l_keys_path_tl .choice~code }
+ \tl_set:cn { \c__keys_info_root_tl \l_keys_path_tl .choice~code }
{#1}
}
\cs_generate_variant:Nn \__keys_choice_code_store:n { x }
@@ -689,7 +781,7 @@
\cs_new_protected:Npn \__keys_choices_generate:n #1
{
\cs_if_exist:cTF
- { \c__keys_vars_root_tl \l_keys_path_tl .choice~code }
+ { \c__keys_info_root_tl \l_keys_path_tl .choice~code }
{
\__keys_choice_make:
\int_zero:N \l_keys_choice_int
@@ -709,7 +801,7 @@
\int_set:Nn \exp_not:N \l_keys_choice_int
{ \int_use:N \l_keys_choice_int }
\exp_not:v
- { \c__keys_vars_root_tl \l_keys_path_tl .choice~code }
+ { \c__keys_info_root_tl \l_keys_path_tl .choice~code }
}
}
\__msg_kernel_new:nnnn { kernel } { generate-choices-before-code }
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3luatex.sty b/Master/texmf-dist/tex/latex/l3kernel/l3luatex.sty
index 9673e80ab1c..74d3875a445 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3luatex.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3luatex.sty
@@ -13,7 +13,7 @@
%%
%% Do not distribute a modified version of this file.
%%
-%% File: l3luatex.dtx Copyright (C) 2010-2012 The LaTeX3 Project
+%% File: l3luatex.dtx Copyright (C) 2010-2013 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
@@ -46,7 +46,7 @@
%%
%% -----------------------------------------------------------------------
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3luatex.dtx 4049 2012-08-03 14:01:40Z bruno $
+\GetIdInfo$Id: l3luatex.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Experimental LuaTeX-specific functions}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3msg.sty b/Master/texmf-dist/tex/latex/l3kernel/l3msg.sty
index 5ceb1e0e81c..fd4541915c4 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3msg.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3msg.sty
@@ -46,7 +46,7 @@
%%
%% -----------------------------------------------------------------------
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3msg.dtx 4412 2013-01-08 12:23:19Z joseph $
+\GetIdInfo$Id: l3msg.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Messages}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -642,6 +642,8 @@
{ Erroneous~variable~#1 used! }
\__msg_kernel_new:nnn { kernel } { misused-sequence }
{ A~sequence~was~misused. }
+\__msg_kernel_new:nnn { kernel } { misused-prop }
+ { A~property~list~was~misused. }
\__msg_kernel_new:nnn { kernel } { negative-replication }
{ Negative~argument~for~\prg_replicate:nn. }
\__msg_kernel_new:nnn { kernel } { unknown-comparison }
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3prg.sty b/Master/texmf-dist/tex/latex/l3kernel/l3prg.sty
index 8bc31c71ee5..bf730fd44cc 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3prg.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3prg.sty
@@ -46,7 +46,7 @@
%%
%% -----------------------------------------------------------------------
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3prg.dtx 4482 2013-04-24 21:05:12Z joseph $
+\GetIdInfo$Id: l3prg.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Control structures}
%%
\ProvidesExplPackage
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3prop.sty b/Master/texmf-dist/tex/latex/l3kernel/l3prop.sty
index 85cff451ddb..c08682a0b57 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3prop.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3prop.sty
@@ -46,24 +46,34 @@
%%
%% -----------------------------------------------------------------------
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3prop.dtx 4423 2013-01-09 00:05:30Z bruno $
+\GetIdInfo$Id: l3prop.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Property lists}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
\__expl_package_check:
\__scan_new:N \s__prop
+\cs_new:Npn \__prop_pair:wn #1 \s__prop #2
+ { \__msg_kernel_expandable_error:nn { kernel } { misused-prop } }
\tl_new:N \l__prop_internal_tl
-\cs_new_eq:NN \c_empty_prop \c_empty_tl
-\cs_new_eq:NN \prop_new:N \tl_new:N
-\cs_new_eq:NN \prop_new:c \tl_new:c
-\cs_new_eq:NN \prop_clear:N \tl_clear:N
-\cs_new_eq:NN \prop_clear:c \tl_clear:c
-\cs_new_eq:NN \prop_gclear:N \tl_gclear:N
-\cs_new_eq:NN \prop_gclear:c \tl_gclear:c
-\cs_new_eq:NN \prop_clear_new:N \tl_clear_new:N
-\cs_new_eq:NN \prop_clear_new:c \tl_clear_new:c
-\cs_new_eq:NN \prop_gclear_new:N \tl_gclear_new:N
-\cs_new_eq:NN \prop_gclear_new:c \tl_gclear_new:c
+\tl_const:Nn \c_empty_prop { \s__prop \s_obj_end }
+\cs_new_protected:Npn \prop_new:N #1
+ {
+ \__chk_if_free_cs:N #1
+ \cs_gset_eq:NN #1 \c_empty_prop
+ }
+\cs_generate_variant:Nn \prop_new:N { c }
+\cs_new_protected:Npn \prop_clear:N #1
+ { \prop_set_eq:NN #1 \c_empty_prop }
+\cs_generate_variant:Nn \prop_clear:N { c }
+\cs_new_protected:Npn \prop_gclear:N #1
+ { \prop_gset_eq:NN #1 \c_empty_prop }
+\cs_generate_variant:Nn \prop_gclear:N { c }
+\cs_new_protected:Npn \prop_clear_new:N #1
+ { \prop_if_exist:NTF #1 { \prop_clear:N #1 } { \prop_new:N #1 } }
+\cs_generate_variant:Nn \prop_clear_new:N { c }
+\cs_new_protected:Npn \prop_gclear_new:N #1
+ { \prop_if_exist:NTF #1 { \prop_gclear:N #1 } { \prop_new:N #1 } }
+\cs_generate_variant:Nn \prop_gclear_new:N { c }
\cs_new_eq:NN \prop_set_eq:NN \tl_set_eq:NN
\cs_new_eq:NN \prop_set_eq:Nc \tl_set_eq:Nc
\cs_new_eq:NN \prop_set_eq:cN \tl_set_eq:cN
@@ -76,15 +86,16 @@
\prop_new:N \l_tmpb_prop
\prop_new:N \g_tmpa_prop
\prop_new:N \g_tmpb_prop
+\cs_new:Npn \__prop_strip_end:w #1 \s_obj_end { \exp_not:n {#1} }
\cs_new_protected:Npn \__prop_split:NnTF #1#2
{ \exp_args:NNo \__prop_split_aux:NnTF #1 { \tl_to_str:n {#2} } }
\cs_new_protected:Npn \__prop_split_aux:NnTF #1#2#3#4
{
\cs_set:Npn \__prop_split_aux:w ##1
- \s__prop #2 \s__prop ##2 ##3 \q_mark ##4 ##5 \q_stop
+ \__prop_pair:wn #2 \s__prop ##2 ##3 \q_mark ##4 ##5 \q_stop
{ ##4 {#3} {#4} }
\exp_after:wN \__prop_split_aux:w #1 \q_mark \use_i:nn
- \s__prop #2 \s__prop { } \q_mark \use_ii:nn \q_stop
+ \__prop_pair:wn #2 \s__prop { } \q_mark \use_ii:nn \q_stop
}
\cs_new:Npn \__prop_split_aux:w { }
\cs_new_protected:Npn \prop_remove:Nn #1#2
@@ -159,17 +170,24 @@
\cs_generate_variant:Nn \prop_gpop:NnNT { c }
\cs_generate_variant:Nn \prop_gpop:NnNF { c }
\cs_generate_variant:Nn \prop_gpop:NnNTF { c }
-\cs_new_protected_nopar:Npn \prop_put:Nnn
- { \__prop_put:NNNnn \tl_set:Nx \tl_put_right:Nx }
-\cs_new_protected_nopar:Npn \prop_gput:Nnn
- { \__prop_put:NNNnn \tl_gset:Nx \tl_gput_right:Nx }
-\cs_new_protected:Npn \__prop_put:NNNnn #1#2#3#4#5
+\cs_new_protected_nopar:Npn \prop_put:Nnn { \__prop_put:NNnn \tl_set:Nx }
+\cs_new_protected_nopar:Npn \prop_gput:Nnn { \__prop_put:NNnn \tl_gset:Nx }
+\cs_new_protected:Npn \__prop_put:NNnn #1#2#3#4
{
\tl_set:Nn \l__prop_internal_tl
- { \s__prop \tl_to_str:n {#4} \s__prop { \exp_not:n {#5} } }
- \__prop_split:NnTF #3 {#4}
- { #1 #3 { \exp_not:n {##1} \l__prop_internal_tl \exp_not:n {##3} } }
- { #2 #3 { \l__prop_internal_tl } }
+ {
+ \exp_not:N \__prop_pair:wn \tl_to_str:n {#3}
+ \s__prop { \exp_not:n {#4} }
+ }
+ \__prop_split:NnTF #2 {#3}
+ { #1 #2 { \exp_not:n {##1} \l__prop_internal_tl \exp_not:n {##3} } }
+ {
+ #1 #2
+ {
+ \exp_after:wN \__prop_strip_end:w #2
+ \l__prop_internal_tl \s_obj_end
+ }
+ }
}
\cs_generate_variant:Nn \prop_put:Nnn
{ NnV , Nno , Nnx , NV , NVV , No , Noo }
@@ -180,45 +198,58 @@
\cs_generate_variant:Nn \prop_gput:Nnn
{ c , cnV , cno , cnx , cV , cVV , co , coo }
\cs_new_protected_nopar:Npn \prop_put_if_new:Nnn
- { \__prop_put_if_new:NNnn \tl_put_right:Nx }
+ { \__prop_put_if_new:NNnn \tl_set:Nx }
\cs_new_protected_nopar:Npn \prop_gput_if_new:Nnn
- { \__prop_put_if_new:NNnn \tl_gput_right:Nx }
+ { \__prop_put_if_new:NNnn \tl_gset:Nx }
\cs_new_protected:Npn \__prop_put_if_new:NNnn #1#2#3#4
{
\tl_set:Nn \l__prop_internal_tl
- { \s__prop \tl_to_str:n {#3} \s__prop \exp_not:n { {#4} } }
+ {
+ \exp_not:N \__prop_pair:wn \tl_to_str:n {#3}
+ \s__prop \exp_not:n { {#4} }
+ }
\__prop_split:NnTF #2 {#3}
{ }
- { #1 #2 { \l__prop_internal_tl } }
+ {
+ #1 #2
+ {
+ \exp_after:wN \__prop_strip_end:w #2
+ \l__prop_internal_tl \s_obj_end
+ }
+ }
}
\cs_generate_variant:Nn \prop_put_if_new:Nnn { c }
\cs_generate_variant:Nn \prop_gput_if_new:Nnn { c }
\prg_new_eq_conditional:NNn \prop_if_exist:N \cs_if_exist:N { TF , T , F , p }
\prg_new_eq_conditional:NNn \prop_if_exist:c \cs_if_exist:c { TF , T , F , p }
-\prg_new_eq_conditional:NNn \prop_if_empty:N \tl_if_empty:N
- { p , T , F , TF }
-\prg_new_eq_conditional:NNn \prop_if_empty:c \tl_if_empty:c
- { p , T , F , TF }
+\prg_new_conditional:Npnn \prop_if_empty:N #1 { p , T , F , TF }
+ {
+ \tl_if_eq:NNTF #1 \c_empty_prop
+ \prg_return_true: \prg_return_false:
+ }
+\cs_generate_variant:Nn \prop_if_empty_p:N { c }
+\cs_generate_variant:Nn \prop_if_empty:NT { c }
+\cs_generate_variant:Nn \prop_if_empty:NF { c }
+\cs_generate_variant:Nn \prop_if_empty:NTF { c }
\prg_new_conditional:Npnn \prop_if_in:Nn #1#2 { p , T , F , TF }
{
- \exp_last_unbraced:Noo \__prop_if_in:nwn
- { \tl_to_str:n {#2} } #1
- \s__prop \tl_to_str:n {#2} \s__prop { }
- \q_recursion_tail
+ \exp_last_unbraced:Noo \__prop_if_in:nwwn { \tl_to_str:n {#2} } #1
+ \__prop_pair:wn \tl_to_str:n {#2} \s__prop { }
+ \q_recursion_tail
\__prg_break_point:
}
-\cs_new:Npn \__prop_if_in:nwn #1 \s__prop #2 \s__prop #3
+\cs_new:Npn \__prop_if_in:nwwn #1#2 \__prop_pair:wn #3 \s__prop #4
{
- \str_if_eq_x:nnTF {#1} {#2}
+ \str_if_eq_x:nnTF {#1} {#3}
{ \__prop_if_in:N }
- { \__prop_if_in:nwn {#1} }
+ { \__prop_if_in:nwwn {#1} }
}
\cs_new:Npn \__prop_if_in:N #1
{
- \if_meaning:w \s__prop #1
- \prg_return_true:
- \else:
+ \if_meaning:w \q_recursion_tail #1
\prg_return_false:
+ \else:
+ \prg_return_true:
\fi:
\__prg_break:
}
@@ -247,29 +278,33 @@
\cs_generate_variant:Nn \prop_get:NnNTF { c , cV , co }
\cs_new:Npn \prop_map_function:NN #1#2
{
- \exp_last_unbraced:NNo \__prop_map_function:Nwn #2
- #1 \s__prop \q_recursion_tail \s__prop { }
+ \exp_last_unbraced:NNo \__prop_map_function:Nwwn #2 #1
+ \__prop_pair:wn \q_recursion_tail \s__prop { }
\__prg_break_point:Nn \prop_map_break: { }
}
-\cs_new:Npn \__prop_map_function:Nwn #1 \s__prop #2 \s__prop #3
+\cs_new:Npn \__prop_map_function:Nwwn #1#2 \__prop_pair:wn #3 \s__prop #4
{
- \if_meaning:w \q_recursion_tail #2
+ \if_meaning:w \q_recursion_tail #3
\exp_after:wN \prop_map_break:
\fi:
- #1 {#2} {#3}
- \__prop_map_function:Nwn #1
+ #1 {#3} {#4}
+ \__prop_map_function:Nwwn #1
}
\cs_generate_variant:Nn \prop_map_function:NN { Nc }
\cs_generate_variant:Nn \prop_map_function:NN { c , cc }
\cs_new_protected:Npn \prop_map_inline:Nn #1#2
{
+ \cs_gset_eq:cN
+ { __prg_map_ \int_use:N \g__prg_map_int :wn } \__prop_pair:wn
\int_gincr:N \g__prg_map_int
- \cs_gset:cpn { __prg_map_ \int_use:N \g__prg_map_int :w } ##1##2 {#2}
- \exp_last_unbraced:Nco \__prop_map_function:Nwn
- { __prg_map_ \int_use:N \g__prg_map_int :w }
- #1
- \s__prop \q_recursion_tail \s__prop { }
- \__prg_break_point:Nn \prop_map_break: { \int_gdecr:N \g__prg_map_int }
+ \cs_gset:Npn \__prop_pair:wn ##1 \s__prop ##2 {#2}
+ #1
+ \__prg_break_point:Nn \prop_map_break:
+ {
+ \int_gdecr:N \g__prg_map_int
+ \cs_gset_eq:Nc \__prop_pair:wn
+ { __prg_map_ \int_use:N \g__prg_map_int :wn }
+ }
}
\cs_generate_variant:Nn \prop_map_inline:Nn { c }
\cs_new_nopar:Npn \prop_map_break:
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3quark.sty b/Master/texmf-dist/tex/latex/l3kernel/l3quark.sty
index 46447aae9a1..6f13a54607b 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3quark.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3quark.sty
@@ -46,7 +46,7 @@
%%
%% -----------------------------------------------------------------------
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3quark.dtx 4521 2013-07-09 11:45:31Z joseph $
+\GetIdInfo$Id: l3quark.dtx 4564 2013-07-21 02:12:33Z bruno $
{L3 Quarks}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -162,6 +162,8 @@
}
\__scan_new:N \s__stop
\cs_new:Npn \__use_none_delimit_by_s__stop:w #1 \s__stop { }
+\__scan_new:N \s__seq
+\__scan_new:N \s_obj_end
\cs_new:Npn \quark_if_recursion_tail_break:N #1
{ \__quark_if_recursion_tail_break:NN #1 \prg_break: }
\cs_new:Npn \quark_if_recursion_tail_break:n #1
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3seq.sty b/Master/texmf-dist/tex/latex/l3kernel/l3seq.sty
index 80ee168e421..2df60faf409 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3seq.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3seq.sty
@@ -46,7 +46,7 @@
%%
%% -----------------------------------------------------------------------
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3seq.dtx 4500 2013-05-26 11:18:19Z bruno $
+\GetIdInfo$Id: l3seq.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Sequences and stacks}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -58,17 +58,25 @@
}
\tl_new:N \l__seq_internal_a_tl
\tl_new:N \l__seq_internal_b_tl
-\cs_new_eq:NN \c_empty_seq \c_empty_tl
-\cs_new_eq:NN \seq_new:N \tl_new:N
-\cs_new_eq:NN \seq_new:c \tl_new:c
-\cs_new_eq:NN \seq_clear:N \tl_clear:N
-\cs_new_eq:NN \seq_clear:c \tl_clear:c
-\cs_new_eq:NN \seq_gclear:N \tl_gclear:N
-\cs_new_eq:NN \seq_gclear:c \tl_gclear:c
-\cs_new_eq:NN \seq_clear_new:N \tl_clear_new:N
-\cs_new_eq:NN \seq_clear_new:c \tl_clear_new:c
-\cs_new_eq:NN \seq_gclear_new:N \tl_gclear_new:N
-\cs_new_eq:NN \seq_gclear_new:c \tl_gclear_new:c
+\tl_const:Nn \c_empty_seq { \s__seq \s_obj_end }
+\cs_new_protected:Npn \seq_new:N #1
+ {
+ \__chk_if_free_cs:N #1
+ \cs_gset_eq:NN #1 \c_empty_seq
+ }
+\cs_generate_variant:Nn \seq_new:N { c }
+\cs_new_protected:Npn \seq_clear:N #1
+ { \seq_set_eq:NN #1 \c_empty_seq }
+\cs_generate_variant:Nn \seq_clear:N { c }
+\cs_new_protected:Npn \seq_gclear:N #1
+ { \seq_gset_eq:NN #1 \c_empty_seq }
+\cs_generate_variant:Nn \seq_gclear:N { c }
+\cs_new_protected:Npn \seq_clear_new:N #1
+ { \seq_if_exist:NTF #1 { \seq_clear:N #1 } { \seq_new:N #1 } }
+\cs_generate_variant:Nn \seq_clear_new:N { c }
+\cs_new_protected:Npn \seq_gclear_new:N #1
+ { \seq_if_exist:NTF #1 { \seq_gclear:N #1 } { \seq_new:N #1 } }
+\cs_generate_variant:Nn \seq_gclear_new:N { c }
\cs_new_eq:NN \seq_set_eq:NN \tl_set_eq:NN
\cs_new_eq:NN \seq_set_eq:Nc \tl_set_eq:Nc
\cs_new_eq:NN \seq_set_eq:cN \tl_set_eq:cN
@@ -81,10 +89,13 @@
{ \__seq_set_split:NNnn \tl_set:Nx }
\cs_new_protected_nopar:Npn \seq_gset_split:Nnn
{ \__seq_set_split:NNnn \tl_gset:Nx }
-\cs_new_protected:Npn \__seq_set_split:NNnn #1 #2 #3 #4
+\cs_new_protected:Npn \__seq_set_split:NNnn #1#2#3#4
{
\tl_if_empty:nTF {#3}
- { #1 #2 { \tl_map_function:nN {#4} \__seq_wrap_item:n } }
+ {
+ \tl_set:Nn \l__seq_internal_a_tl
+ { \tl_map_function:nN {#4} \__seq_wrap_item:n }
+ }
{
\tl_set:Nn \l__seq_internal_a_tl
{
@@ -98,8 +109,8 @@
\__seq_set_split_auxi:w \prg_do_nothing:
}
\tl_set:Nx \l__seq_internal_a_tl { \l__seq_internal_a_tl }
- #1 #2 { \l__seq_internal_a_tl }
}
+ #1 #2 { \s__seq \l__seq_internal_a_tl \s_obj_end }
}
\cs_new:Npn \__seq_set_split_auxi:w #1 \__seq_set_split_end:
{
@@ -111,28 +122,58 @@
{ \__seq_wrap_item:n {#1} }
\cs_generate_variant:Nn \seq_set_split:Nnn { NnV }
\cs_generate_variant:Nn \seq_gset_split:Nnn { NnV }
-\cs_new_eq:NN \seq_concat:NNN \tl_concat:NNN
-\cs_new_eq:NN \seq_gconcat:NNN \tl_gconcat:NNN
-\cs_new_eq:NN \seq_concat:ccc \tl_concat:ccc
-\cs_new_eq:NN \seq_gconcat:ccc \tl_gconcat:ccc
+\cs_new_protected:Npn \seq_concat:NNN #1#2#3
+ { \tl_set:Nf #1 { \exp_last_unbraced:NNo \__seq_concat:NN #2 #3 } }
+\cs_new_protected:Npn \seq_gconcat:NNN #1#2#3
+ { \tl_gset:Nf #1 { \exp_last_unbraced:NNo \__seq_concat:NN #2 #3 } }
+\cs_new:Npn \__seq_concat:NN #1#2 { \exp_after:wN \__seq_concat:w #1 }
+\cs_new:Npn \__seq_concat:w #1 \s_obj_end {#1}
+\cs_generate_variant:Nn \seq_concat:NNN { ccc }
+\cs_generate_variant:Nn \seq_gconcat:NNN { ccc }
\prg_new_eq_conditional:NNn \seq_if_exist:N \cs_if_exist:N { TF , T , F , p }
\prg_new_eq_conditional:NNn \seq_if_exist:c \cs_if_exist:c { TF , T , F , p }
\cs_new_protected:Npn \seq_put_left:Nn #1#2
- { \tl_put_left:Nn #1 { \__seq_item:n {#2} } }
-\cs_new_protected:Npn \seq_put_right:Nn #1#2
- { \tl_put_right:Nn #1 { \__seq_item:n {#2} } }
+ {
+ \tl_set:Nx #1
+ {
+ \exp_not:n { \s__seq \__seq_item:n {#2} }
+ \exp_not:f { \exp_after:wN \__seq_put_left_aux:w #1 }
+ }
+ }
+\cs_new_protected:Npn \seq_gput_left:Nn #1#2
+ {
+ \tl_gset:Nx #1
+ {
+ \exp_not:n { \s__seq \__seq_item:n {#2} }
+ \exp_not:f { \exp_after:wN \__seq_put_left_aux:w #1 }
+ }
+ }
+\cs_new:Npn \__seq_put_left_aux:w \s__seq { \exp_stop_f: }
\cs_generate_variant:Nn \seq_put_left:Nn { NV , Nv , No , Nx }
\cs_generate_variant:Nn \seq_put_left:Nn { c , cV , cv , co , cx }
-\cs_generate_variant:Nn \seq_put_right:Nn { NV , Nv , No , Nx }
-\cs_generate_variant:Nn \seq_put_right:Nn { c , cV , cv , co , cx }
-\cs_new_protected:Npn \seq_gput_left:Nn #1#2
- { \tl_gput_left:Nn #1 { \__seq_item:n {#2} } }
-\cs_new_protected:Npn \seq_gput_right:Nn #1#2
- { \tl_gput_right:Nn #1 { \__seq_item:n {#2} } }
\cs_generate_variant:Nn \seq_gput_left:Nn { NV , Nv , No , Nx }
\cs_generate_variant:Nn \seq_gput_left:Nn { c , cV , cv , co , cx }
+\cs_new_protected:Npn \seq_put_right:Nn #1#2
+ {
+ \tl_set:Nx #1
+ {
+ \exp_after:wN \__seq_put_right_aux:w #1
+ \exp_not:n { \__seq_item:n {#2} \s_obj_end }
+ }
+ }
+\cs_new_protected:Npn \seq_gput_right:Nn #1#2
+ {
+ \tl_gset:Nx #1
+ {
+ \exp_after:wN \__seq_put_right_aux:w #1
+ \exp_not:n { \__seq_item:n {#2} \s_obj_end }
+ }
+ }
+\cs_new:Npn \__seq_put_right_aux:w #1 \s_obj_end { \exp_not:n {#1} }
\cs_generate_variant:Nn \seq_gput_right:Nn { NV , Nv , No , Nx }
\cs_generate_variant:Nn \seq_gput_right:Nn { c , cV , cv , co , cx }
+\cs_generate_variant:Nn \seq_put_right:Nn { NV , Nv , No , Nx }
+\cs_generate_variant:Nn \seq_put_right:Nn { c , cV , cv , co , cx }
\cs_new:Npn \__seq_wrap_item:n #1 { \exp_not:n { \__seq_item:n {#1} } }
\seq_new:N \l__seq_remove_seq
\cs_new_protected:Npn \seq_remove_duplicates:N
@@ -177,10 +218,18 @@
}
\cs_generate_variant:Nn \seq_remove_all:Nn { c }
\cs_generate_variant:Nn \seq_gremove_all:Nn { c }
-\prg_new_eq_conditional:NNn \seq_if_empty:N \tl_if_empty:N
- { p , T , F , TF }
-\prg_new_eq_conditional:NNn \seq_if_empty:c \tl_if_empty:c
- { p , T , F , TF }
+\prg_new_conditional:Npnn \seq_if_empty:N #1 { p , T , F , TF }
+ {
+ \if_meaning:w #1 \c_empty_seq
+ \prg_return_true:
+ \else:
+ \prg_return_false:
+ \fi:
+ }
+\cs_generate_variant:Nn \seq_if_empty_p:N { c }
+\cs_generate_variant:Nn \seq_if_empty:NT { c }
+\cs_generate_variant:Nn \seq_if_empty:NF { c }
+\cs_generate_variant:Nn \seq_if_empty:NTF { c }
\prg_new_protected_conditional:Npnn \seq_if_in:Nn #1#2
{ T , F , TF }
{
@@ -228,30 +277,33 @@
{
\tl_set:Nx #2
{
- \exp_after:wN \__seq_get_left:Nnw
+ \exp_after:wN \__seq_get_left:wnw
#1 \__seq_item:n { \q_no_value } \q_stop
}
}
-\cs_new:Npn \__seq_get_left:Nnw \__seq_item:n #1#2 \q_stop
- { \exp_not:n {#1} }
+\cs_new:Npn \__seq_get_left:wnw #1 \__seq_item:n #2#3 \q_stop
+ { \exp_not:n {#2} }
\cs_generate_variant:Nn \seq_get_left:NN { c }
\cs_new_protected_nopar:Npn \seq_pop_left:NN
{ \__seq_pop:NNNN \__seq_pop_left:NNN \tl_set:Nn }
\cs_new_protected_nopar:Npn \seq_gpop_left:NN
{ \__seq_pop:NNNN \__seq_pop_left:NNN \tl_gset:Nn }
\cs_new_protected:Npn \__seq_pop_left:NNN #1#2#3
- { \exp_after:wN \__seq_pop_left:NnwNNN #2 \q_stop #1#2#3 }
-\cs_new_protected:Npn \__seq_pop_left:NnwNNN \__seq_item:n #1#2 \q_stop #3#4#5
+ { \exp_after:wN \__seq_pop_left:wnwNNN #2 \q_stop #1#2#3 }
+\cs_new_protected:Npn \__seq_pop_left:wnwNNN
+ #1 \__seq_item:n #2#3 \q_stop #4#5#6
{
- #3 #4 {#2}
- \tl_set:Nn #5 {#1}
+ #4 #5 { #1 #3 }
+ \tl_set:Nn #6 {#2}
}
\cs_generate_variant:Nn \seq_pop_left:NN { c }
\cs_generate_variant:Nn \seq_gpop_left:NN { c }
\cs_new_protected:Npn \seq_get_right:NN #1#2
+ { \exp_after:wN \__seq_get_right_setup:wN #1 #2 }
+\cs_new_protected:Npn \__seq_get_right_setup:wN \s__seq #1 \s_obj_end #2
{
- \exp_after:wN \__seq_get_right_loop:nn
- \exp_after:wN \q_no_value
+ \__seq_get_right_loop:nn
+ \q_no_value
#1
{
??
@@ -274,18 +326,18 @@
\cs_set_eq:NN \seq_tmp:w \__seq_item:n
\cs_set_eq:NN \__seq_item:n \scan_stop:
#1 #2
- { \if_false: } \fi:
- \exp_after:wN \exp_after:wN
- \exp_after:wN \__seq_pop_right_loop:nn
- \exp_after:wN \use_none:n
+ { \if_false: } \fi: \s__seq
+ \exp_after:wN \__seq_pop_right_setup:w
#2
{
- \if_false: { \fi: }
+ \s_obj_end \if_false: { \fi: }
\tex_afterassignment:D \use_none:n
\tl_set:Nx #3
}
\cs_set_eq:NN \__seq_item:n \seq_tmp:w
}
+\cs_new:Npn \__seq_pop_right_setup:w \s__seq #1 \s_obj_end
+ { \exp_after:wN \__seq_pop_right_loop:nn \use_none:n #1 }
\cs_new:Npn \__seq_pop_right_loop:nn #1#2
{
#2 { \exp_not:n {#1} }
@@ -328,9 +380,10 @@
\cs_new_nopar:Npn \seq_map_break:n
{ \__prg_map_break:Nn \seq_map_break: }
\cs_new:Npn \seq_map_function:NN #1#2
+ { \exp_after:wN \__seq_map_function:wN #1 #2 }
+\cs_new:Npn \__seq_map_function:wN \s__seq #1 \s_obj_end #2
{
- \exp_after:wN \__seq_map_function:NNn \exp_after:wN #2 #1
- { ? \seq_map_break: } { }
+ \__seq_map_function:NNn #2 #1 { ? \seq_map_break: } { }
\__prg_break_point:Nn \seq_map_break: { }
}
\cs_new:Npn \__seq_map_function:NNn #1#2#3
@@ -395,15 +448,18 @@
{
\seq_if_exist:NTF #1
{
- \int_case:nnn { \seq_count:N #1 }
+ \int_case:nnF { \seq_count:N #1 }
{
{ 0 } { }
- { 1 } { \exp_after:wN \__seq_use:NnNnn #1 \__seq_item:n { } { } }
- { 2 } { \exp_after:wN \__seq_use:NnNnn #1 {#2} }
+ { 1 }
+ {
+ \exp_after:wN \__seq_use:wnwnn #1
+ \__seq_item:n { } \s_obj_end { }
+ }
+ { 2 } { \exp_after:wN \__seq_use:wnwnn #1 {#2} }
}
{
- \exp_after:wN \__seq_use:nwwwwnwn
- \exp_after:wN { \exp_after:wN } #1 \__seq_item:n
+ \exp_after:wN \__seq_use_setup:w #1 \__seq_item:n
\q_mark { \__seq_use:nwwwwnwn {#3} }
\q_mark { \__seq_use:nwwn {#4} }
\q_stop { }
@@ -412,8 +468,11 @@
{ \__msg_kernel_expandable_error:nnn { kernel } { bad-variable } {#1} }
}
\cs_generate_variant:Nn \seq_use:Nnnn { c }
-\cs_new:Npn \__seq_use:NnNnn \__seq_item:n #1 \__seq_item:n #2#3
- { \exp_not:n { #1 #3 #2 } }
+\cs_new:Npn \__seq_use:wnwnn
+ #1 \__seq_item:n #2#3 \__seq_item:n #4#5 \s_obj_end #6
+ { \exp_not:n { #2 #6 #4 } }
+\cs_new:Npn \__seq_use_setup:w \s__seq #1 \s_obj_end
+ { \__seq_use:nwwwwnwn { } #1 }
\cs_new:Npn \__seq_use:nwwwwnwn
#1 \__seq_item:n #2 \__seq_item:n #3 \__seq_item:n #4#5
\q_mark #6#7 \q_stop #8
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3skip.sty b/Master/texmf-dist/tex/latex/l3kernel/l3skip.sty
index 20f3c09ebcd..419536abeab 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3skip.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3skip.sty
@@ -47,7 +47,7 @@
%%
%% -----------------------------------------------------------------------
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3skip.dtx 4444 2013-01-13 20:27:20Z bruno $
+\GetIdInfo$Id: l3skip.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Dimensions and skips}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -176,18 +176,33 @@
#1 \reverse_if:N #2 > #3 = { #1 #2 < #3 }
\cs_new:Npn \__dim_compare_end:w #1 \prg_return_false: #2 \q_stop
{ #1 \prg_return_false: \else: \prg_return_true: \fi: }
-\cs_new:Npn \dim_case:nnn #1
+\cs_new:Npn \dim_case:nnTF #1
{
\tex_romannumeral:D
- \exp_args:Nf \__dim_case_aux:nnn { \dim_eval:n {#1} }
+ \exp_args:Nf \__dim_case:nnTF { \dim_eval:n {#1} }
}
-\cs_new:Npn \__dim_case_aux:nnn #1#2#3
- { \__dim_case_aux:nw {#1} #2 {#1} {#3} \q_recursion_stop }
-\cs_new:Npn \__dim_case_aux:nw #1#2#3
+\cs_new:Npn \dim_case:nnT #1#2#3
+ {
+ \tex_romannumeral:D
+ \exp_args:Nf \__dim_case:nnTF { \dim_eval:n {#1} } {#2} {#3} { }
+ }
+\cs_new:Npn \dim_case:nnF #1#2
+ {
+ \tex_romannumeral:D
+ \exp_args:Nf \__dim_case:nnTF { \dim_eval:n {#1} } {#2} { }
+ }
+\cs_new:Npn \dim_case:nn #1#2
+ {
+ \tex_romannumeral:D
+ \exp_args:Nf \__dim_case:nnTF { \dim_eval:n {#1} } {#2} { } { }
+ }
+\cs_new:Npn \__dim_case:nnTF #1#2#3#4
+ { \__dim_case:nw {#1} #2 {#1} { } \q_mark {#3} \q_mark {#4} \q_stop }
+\cs_new:Npn \__dim_case:nw #1#2#3
{
\dim_compare:nNnTF {#1} = {#2}
{ \__dim_case_end:nw {#3} }
- { \__dim_case_aux:nw {#1} }
+ { \__dim_case:nw {#1} }
}
\cs_new_eq:NN \__dim_case_end:nw \__prg_case_end:nw
\cs_set:Npn \dim_while_do:nn #1#2
@@ -425,6 +440,7 @@
\muskip_new:N \l_tmpb_muskip
\muskip_new:N \g_tmpa_muskip
\muskip_new:N \g_tmpb_muskip
+\cs_new_eq:NN \dim_case:nnn \dim_case:nnF
%%
%%
%% End of file `l3skip.sty'.
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3tl.sty b/Master/texmf-dist/tex/latex/l3kernel/l3tl.sty
index 4cd85c60ac6..71c0e0c91e7 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3tl.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3tl.sty
@@ -46,7 +46,7 @@
%%
%% -----------------------------------------------------------------------
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3tl.dtx 4482 2013-04-24 21:05:12Z joseph $
+\GetIdInfo$Id: l3tl.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Token lists}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -369,18 +369,38 @@
\cs_new:Npn \tl_if_single:NTF { \exp_args:No \tl_if_single:nTF }
\prg_new_conditional:Npnn \tl_if_single:n #1 { p , T , F , TF }
{ \__str_if_eq_x_return:nn { \exp_not:o { \use_none:nn #1 ?? } } {?} }
-\cs_new:Npn \tl_case:Nnn #1#2#3
+\cs_new:Npn \tl_case:Nn #1#2
{
\tex_romannumeral:D
- \__tl_case:Nw #1 #2 #1 {#3} \q_recursion_stop
+ \__tl_case:NnTF #1 {#2} { } { }
}
+\cs_new:Npn \tl_case:NnT #1#2#3
+ {
+ \tex_romannumeral:D
+ \__tl_case:NnTF #1 {#2} {#3} { }
+ }
+\cs_new:Npn \tl_case:NnF #1#2#3
+ {
+ \tex_romannumeral:D
+ \__tl_case:NnTF #1 {#2} { } {#3}
+ }
+\cs_new:Npn \tl_case:NnTF #1#2
+ {
+ \tex_romannumeral:D
+ \__tl_case:NnTF #1 {#2}
+ }
+\cs_new:Npn \__tl_case:NnTF #1#2#3#4
+ { \__tl_case:Nw #1 #2 #1 { } \q_mark {#3} \q_mark {#4} \q_stop }
\cs_new:Npn \__tl_case:Nw #1#2#3
{
\tl_if_eq:NNTF #1 #2
{ \__tl_case_end:nw {#3} }
{ \__tl_case:Nw #1 }
}
-\cs_generate_variant:Nn \tl_case:Nnn { c }
+\cs_generate_variant:Nn \tl_case:Nn { c }
+\cs_generate_variant:Nn \tl_case:NnT { c }
+\cs_generate_variant:Nn \tl_case:NnF { c }
+\cs_generate_variant:Nn \tl_case:NnTF { c }
\cs_new_eq:NN \__tl_case_end:nw \__prg_case_end:nw
\cs_new:Npn \tl_map_function:nN #1#2
{
@@ -751,6 +771,8 @@
\tl_new:N \g_tmpb_tl
\tl_new:N \l_tmpa_tl
\tl_new:N \l_tmpb_tl
+\cs_new_eq:NN \tl_case:Nnn \tl_case:NnF
+\cs_new_eq:NN \tl_case:cnn \tl_case:cnF
%%
%%
%% End of file `l3tl.sty'.
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3token.sty b/Master/texmf-dist/tex/latex/l3kernel/l3token.sty
index 255da5c2d5e..65df10c3b6c 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3token.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3token.sty
@@ -46,7 +46,7 @@
%%
%% -----------------------------------------------------------------------
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3token.dtx 4482 2013-04-24 21:05:12Z joseph $
+\GetIdInfo$Id: l3token.dtx 4581 2013-07-28 08:38:50Z joseph $
{L3 Experimental token manipulation}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty b/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty
index dfa1f56700a..641251cfffb 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}[2013/07/12]
-\@ifpackagelater{expl3}{2013/07/12}
+\RequirePackage{expl3}[2013/07/28]
+\@ifpackagelater{expl3}{2013/07/28}
{}
{%
\PackageError{l3keys2e}{Support package l3kernel too old}
@@ -59,7 +59,7 @@
}%
\endinput
}
-\GetIdInfo$Id: l3keys2e.dtx 4544 2013-07-12 07:14:52Z joseph $
+\GetIdInfo$Id: l3keys2e.dtx 4582 2013-07-28 08:57:13Z joseph $
{LaTeX2e option processing using LaTeX3 keys}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty b/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty
index 705265bc4f3..274b5a005e6 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}[2013/07/12]
-\@ifpackagelater{expl3}{2013/07/12}
+\RequirePackage{expl3}[2013/07/28]
+\@ifpackagelater{expl3}{2013/07/28}
{}
{%
\PackageError{xparse}{Support package l3kernel too old}
@@ -63,7 +63,7 @@
}%
\endinput
}
-\GetIdInfo$Id: xparse.dtx 4544 2013-07-12 07:14:52Z joseph $
+\GetIdInfo$Id: xparse.dtx 4582 2013-07-28 08:57:13Z joseph $
{L3 Experimental document command parser}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty b/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty
index c561c724439..144817099c7 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}[2013/07/12]
-\@ifpackagelater{expl3}{2013/03/12}
+\RequirePackage{expl3}[2013/07/28]
+\@ifpackagelater{expl3}{2013/07/28}
{}
{%
\PackageError{xtemplate}{Support package l3kernel too old}
@@ -63,7 +63,7 @@
}%
\endinput
}
-\GetIdInfo$Id: xtemplate.dtx 4544 2013-07-12 07:14:52Z joseph $
+\GetIdInfo$Id: xtemplate.dtx 4582 2013-07-28 08:57:13Z joseph $
{L3 Experimental prototype document functions}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}