summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3dt/l3dt.pdfbin550481 -> 550374 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3sort/l3sort.pdfbin515197 -> 556258 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3flag.pdfbin390089 -> 390100 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3regex.pdfbin980838 -> 981442 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdfbin757047 -> 781940 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdfbin568575 -> 568590 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3str.pdfbin621472 -> 621683 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-analysis.pdfbin521017 -> 521029 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-build.pdfbin468385 -> 468393 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdfbin490248 -> 490259 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdfbin680485 -> 681144 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdfbin575676 -> 575685 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/expl3.pdfbin674945 -> 674929 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/interface3.pdfbin1269244 -> 1273451 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/interface3.tex89
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdfbin449457 -> 393848 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdfbin273207 -> 273226 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex242
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdfbin220205 -> 220222 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex110
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/source3.pdfbin3872664 -> 3883722 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.pdfbin473388 -> 473513 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdfbin633943 -> 633954 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdfbin796471 -> 796742 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdfbin721943 -> 722110 bytes
-rw-r--r--Master/texmf-dist/makeindex/l3kernel/l3doc.ist72
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3dt/l3dt.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx426
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx26
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx50
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3str/l3str.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx33
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/expl3.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3.ins93
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3basics.dtx20
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3box.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx258
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3clist.dtx124
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx28
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3expan.dtx16
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3file.dtx8
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3format.ins92
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx14
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp.dtx24
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3int.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3keys.dtx801
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3prg.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3quark.dtx7
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3seq.dtx114
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3tl.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3token.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx22
-rw-r--r--Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx4
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3dt/l3dt.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3sort/l3sort.sty116
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex-trace.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty17
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3str/l3str.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty27
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3.sty4
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3basics.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3box.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3candidates.sty71
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3clist.sty32
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3doc.cls49
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def10
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3dvips.def2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3expan.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3file.sty4
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3fp.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3int.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3keys.sty277
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3prg.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3quark.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3seq.sty37
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3tl.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3token.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def10
-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.sty4
-rwxr-xr-xMaster/tlpkg/libexec/ctan2tds4
92 files changed, 1853 insertions, 2148 deletions
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3dt/l3dt.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3dt/l3dt.pdf
index 48bcd348b37..3786ba4a39f 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 58839db8756..7a6d9e63dd4 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 45893cbfaf5..e7709c5a019 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 7d1eb3d244f..d3f9ce01af2 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 f3963ef30bc..8600e9f5833 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 3fa7baa9ca8..03945affdc6 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 4d5a154cb26..06cb8f92a62 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 6dff4edf002..32e7a69e2a4 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 4aea8a37103..43d2b9dbe0e 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 fc11336eef5..aff1a3dfd68 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 1401845d3c5..8e47ec4cf68 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 75c826c159b..5459361e7be 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 feee4f9f5f0..901a2238a13 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 d2c03ac72ec..e8d01c41b85 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
deleted file mode 100644
index 4c0a2761e92..00000000000
--- a/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
+++ /dev/null
@@ -1,89 +0,0 @@
-% \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 e5f095e5de0..0ad6b8c2265 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 7f601c55686..6d788a41a6c 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
deleted file mode 100644
index 6a3a9d122e6..00000000000
--- a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
+++ /dev/null
@@ -1,242 +0,0 @@
-\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 9f23074a46d..bc5f88b549b 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
deleted file mode 100644
index 4dfc70e0e97..00000000000
--- a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
+++ /dev/null
@@ -1,110 +0,0 @@
-\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 7908abedabe..5c8550ec27d 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
deleted file mode 100644
index 22c3c44048d..00000000000
--- a/Master/texmf-dist/doc/latex/l3kernel/source3.tex
+++ /dev/null
@@ -1,106 +0,0 @@
-% \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
deleted file mode 100644
index c5dbc33a7b3..00000000000
--- a/Master/texmf-dist/doc/latex/l3kernel/source3body.tex
+++ /dev/null
@@ -1,448 +0,0 @@
-% \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 8874180a75c..59c9f4f46f0 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 af8bac1e2ac..16a718576c1 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 9763d473dec..e6c5670bb46 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 fa4a5766134..93c882f59ff 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
deleted file mode 100644
index 781c87e50f2..00000000000
--- a/Master/texmf-dist/makeindex/l3kernel/l3doc.ist
+++ /dev/null
@@ -1,72 +0,0 @@
-%%
-%% 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/l3dt/l3dt.dtx b/Master/texmf-dist/source/latex/l3experimental/l3dt/l3dt.dtx
index 63a3218f06a..36454f14c49 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3dt/l3dt.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3dt/l3dt.dtx
@@ -36,7 +36,7 @@
%
%<*driver|package>
\RequirePackage{expl3}
-\GetIdInfo$Id: l3dt.dtx 4420 2013-01-08 20:00:04Z joseph $
+\GetIdInfo$Id: l3dt.dtx 4482 2013-04-24 21:05:12Z joseph $
{L3 Experimental data tables}
%</driver|package>
%<*driver>
@@ -133,7 +133,7 @@
% \cs{dt_add_row:N} \meta{dt}
% \end{syntax}
% Adds a new row to the \meta{data table}. This will initially contain
-% no entries: all keys will be be blank.
+% no entries: all keys will be blank.
% \end{function}
%
% \begin{function}{\dt_put:Nnn, \dt_gput:Nnn}
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx b/Master/texmf-dist/source/latex/l3experimental/l3sort/l3sort.dtx
index 1b3ac4d507a..b73a9084484 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 4339 2012-11-24 19:16:43Z joseph $
+\GetIdInfo$Id: l3sort.dtx 4491 2013-05-12 16:22:18Z bruno $
{L3 Experimental sorting functions}
%</driver|package>
%<*driver>
@@ -143,6 +143,11 @@
% and return \texttt{true} if the two items being compared should be
% left in the same order, and \texttt{false} if the items should be
% swapped.
+% \begin{texnote}
+% The result is returned within \cs{exp_not:n}, which means that the
+% token list will not expand further when appearing in an
+% \texttt{x}-type argument expansion.
+% \end{texnote}
% \end{function}
%
% \end{documentation}
@@ -233,98 +238,6 @@
% \end{variable}
% \end{variable}
%
-% \subsection{Expandable sorting}
-%
-% Sorting expandably is very different from sorting and assigning to a
-% variable. Since tokens cannot be stored, they must remain in the
-% input stream, and be read through at every step. It is thus
-% necessarily much slower (at best $O(n^2)$) than non-expandable sorting
-% functions.
-%
-% A prototypical version of expandable quicksort is as follows. If the
-% argument has no item, return nothing, otherwise partition, using the
-% first item as a pivot (argument |#4| of |\__sort:nnNnn|). The
-% arguments of \cs{__sort:nnNnn} are 1.~items less than |#4|, 2.~items
-% greater than |#4|, 3.~comparison, 4.~pivot, 5.~next item to test. If
-% |#5| is the tail of the list, call \cs{tl_sort:nN} on |#1| and on
-% |#2|, placing |#4| in between; |\use:ff| expands the parts to make
-% \cs{tl_sort:nN} \texttt{f}-expandable. Otherwise, compare |#4| and
-% |#5| using |#3|. If they are ordered, place |#5| amongst the
-% \enquote{greater} items, otherwise amongst the \enquote{lesser} items,
-% and continue partitioning.
-% \begin{verbatim}
-% \cs_new:Npn \tl_sort:nN #1#2
-% {
-% \tl_if_blank:nF {#1}
-% {
-% \__sort:nnNnn { } { } #2
-% #1 \q_recursion_tail \q_recursion_stop
-% }
-% }
-% \cs_new:Npn \__sort:nnNnn #1#2#3#4#5
-% {
-% \quark_if_recursion_tail_stop_do:nn {#5}
-% { \use:ff { \tl_sort:nN {#1} #3 {#4} } { \tl_sort:nN {#2} #3 } }
-% #3 {#4} {#5}
-% { \__sort:nnNnn {#1} { #2 {#5} } #3 {#4} }
-% { \__sort:nnNnn { #1 {#5} } {#2} #3 {#4} }
-% }
-% \cs_generate_variant:Nn \use:nn { ff }
-% \end{verbatim}
-% There are quite a few optimizations available here: the code below is
-% less legible, but twice as fast.
-%
-% \begin{macro}[EXP]{\tl_sort:nN}
-% \begin{macro}[EXP, aux]
-% {
-% \@@_quick:nNn, \@@_quick:wn,
-% \@@_quick:nnNnn, \@@_quick:nnNnwn
-% }
-% The \cs{@@_quick:nNn} function sorts |#1| using the comparison
-% |#2|, then places its third argument (\meta{continuation}) before
-% the result. This essentially avoids the rather slow \cs{use:ff}.
-% First test if |#1| is blank: if it is, \cs{use_none:n} eats the
-% break point, and \cs{@@_quick:wn} removes all until the ending
-% break point, unbracing the \meta{continuation}. If it is not blank,
-% \cs{@@_quick:wn} simply removes the end of that test until the
-% break point. The third auxiliary plays the role of |\__sort:nnNnn|
-% above, with an end-test replaced by \cs{__prg_break:}, which skips
-% to the break point two lines later, unless |#5| is itself a break
-% point. In that case, \cs{@@_quick:nnNnwn} calls the first
-% auxiliary, which sorts |#2| and places another call to itself before
-% the result.
-% \begin{macrocode}
-\cs_new:Npn \tl_sort:nN #1#2 { \@@_quick:nNn {#1} #2 { } }
-\cs_new:Npn \@@_quick:nNn #1#2
- {
- \exp_after:wN \@@_quick:wn
- \use_none:n #1 \__prg_break_point:
- \@@_quick:nnNnn { } { } #2
- #1
- { \__prg_break_point: }
- \__prg_break_point:
- }
-\cs_new:Npn \@@_quick:wn #1 \__prg_break_point: #2 {#2}
-\cs_new:Npn \@@_quick:nnNnn #1#2#3#4#5
- {
- \__prg_break: #5
- \@@_quick:nnNnwn {#1} {#2}
- \__prg_break_point:
- #3 {#4} {#5}
- { \@@_quick:nnNnn {#1} { #2 {#5} } }
- { \@@_quick:nnNnn { #1 {#5} } {#2} }
- #3 {#4}
- }
-\cs_new:Npn \@@_quick:nnNnwn
- #1#2 \__prg_break_point: #3#4 #5 \__prg_break_point: #6
- {
- \@@_quick:nNn {#2} #3
- { \@@_quick:nNn {#1} #3 {#6} {#4} }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
% \subsection{Protected user commands}
%
% \begin{macro}[int]{\@@_main:NNNnNn}
@@ -412,7 +325,7 @@
% \end{macro}
%
% \begin{macro}{\clist_sort:Nn, \clist_gsort:Nn}
-% \begin{macro}[aux]{\@@_sort:NNn}
+% \begin{macro}[aux]{\@@_clist:NNn}
% The case of empty comma-lists is a little bit special as usual,
% and filtered out: there is nothing to sort in that case.
% Otherwise, the input is done with \cs{clist_map_inline:Nn},
@@ -426,10 +339,10 @@
% once to unpack the register.
% \begin{macrocode}
\cs_new_protected_nopar:Npn \clist_sort:Nn
- { \@@_sort:NNn \tl_set:Nn }
+ { \@@_clist:NNn \tl_set:Nn }
\cs_new_protected_nopar:Npn \clist_gsort:Nn
- { \@@_sort:NNn \tl_gset:Nn }
-\cs_new_protected:Npn \@@_sort:NNn #1#2#3
+ { \@@_clist:NNn \tl_gset:Nn }
+\cs_new_protected:Npn \@@_clist:NNn #1#2#3
{
\clist_if_empty:NF #2
{
@@ -607,7 +520,7 @@
% then the next item to add to the merger is the first
% argument, contents of the \tn{toks} register $A$.
% Then shift the pointers $A$ and $B$ to the left, and
-% go for one more step fo the merger, unless the left
+% go for one more step for the merger, unless the left
% block was exhausted ($A$ goes below the threshold).
% In that case, all remaining \tn{toks} registers in
% the second block, indexed by $C$, should be copied
@@ -646,6 +559,323 @@
% \end{macrocode}
% \end{macro}
%
+% \subsection{Expandable sorting}
+%
+% Sorting expandably is very different from sorting and assigning to a
+% variable. Since tokens cannot be stored, they must remain in the
+% input stream, and be read through at every step. It is thus
+% necessarily much slower (at best $O(n^2\ln n)$) than non-expandable
+% sorting functions ($O(n\ln n)$).
+%
+% A prototypical version of expandable quicksort is as follows. If the
+% argument has no item, return nothing, otherwise partition, using the
+% first item as a pivot (argument |#4| of |\__sort:nnNnn|). The
+% arguments of |\__sort:nnNnn| are 1.~items less than |#4|, 2.~items
+% greater or equal to |#4|, 3.~comparison, 4.~pivot, 5.~next item to
+% test. If |#5| is the tail of the list, call \cs{tl_sort:nN} on |#1|
+% and on |#2|, placing |#4| in between; |\use:ff| expands the parts to
+% make \cs{tl_sort:nN} \texttt{f}-expandable. Otherwise, compare |#4|
+% and |#5| using |#3|. If they are ordered, place |#5| amongst the
+% \enquote{greater} items, otherwise amongst the \enquote{lesser} items,
+% and continue partitioning.
+% \begin{verbatim}
+% \cs_new:Npn \tl_sort:nN #1#2
+% {
+% \tl_if_blank:nF {#1}
+% {
+% \__sort:nnNnn { } { } #2
+% #1 \q_recursion_tail \q_recursion_stop
+% }
+% }
+% \cs_new:Npn \__sort:nnNnn #1#2#3#4#5
+% {
+% \quark_if_recursion_tail_stop_do:nn {#5}
+% { \use:ff { \tl_sort:nN {#1} #3 {#4} } { \tl_sort:nN {#2} #3 } }
+% #3 {#4} {#5}
+% { \__sort:nnNnn {#1} { #2 {#5} } #3 {#4} }
+% { \__sort:nnNnn { #1 {#5} } {#2} #3 {#4} }
+% }
+% \cs_generate_variant:Nn \use:nn { ff }
+% \end{verbatim}
+% There are quite a few optimizations available here: the code below is
+% less legible, but more than twice as fast.
+%
+% In the simple version of the code, |\__sort:nnNnn| is called
+% \(O(n\ln n)\) times on average (the number of comparisons required by
+% the quicksort algorithm). Hence most of our focus will be on
+% optimizing that function.
+%
+% The first speed up is to avoid testing for the end of the list at
+% every call to |\__sort:nnNnn|. For this, the list is prepared by
+% changing each \meta{item} of the original token list into
+% \meta{command} \Arg{item}, just like sequences are stored. We arrange
+% things such that the \meta{command} is the \meta{conditional} provided
+% by the user: the loop over the \meta{prepared tokens} then looks like
+% \begin{quote}
+% \ttfamily
+% \cs{cs_new:Npn}~|\__sort_loop:wNn|~\ldots{}~|#6#7|\\
+% ~~|{|\\
+% ~~~~|#6|~\Arg{pivot}~|{#7}|~\meta{loop big}~\meta{loop small}\\
+% ~~~~~~\meta{extra arguments}\\
+% ~~|}|\\
+% |\__sort_loop:wNn|~\ldots{}~\meta{prepared tokens}\\
+% ~~\meta{end-loop}~|{}|~|\q_stop|
+% \end{quote}
+% In this example, which matches the structure of
+% \cs{__sort_quick_split_i:NnnnnNn} and a few other functions below, the
+% |\__sort_loop:wNn| auxiliary normally receives the user's
+% \meta{conditional} as~|#6| and an \meta{item} as~|#7|. This is
+% compared to the \meta{pivot} (the argument~|#5|, not shown here), and
+% the \meta{conditional} leaves the \meta{loop big} or \meta{loop small}
+% auxiliary, which both have the same form as |\__sort_loop:wNn|,
+% receiving the next pair \meta{conditional} \Arg{item} as |#6|
+% and~|#7|. At the end, |#6| is the \meta{end-loop} function, which
+% terminates the loop.
+%
+% The second speed up is to minimize the duplicated tokens between the
+% \texttt{true} and \texttt{false} branches of the conditional. For
+% this, we introduce two versions of |\__sort:nnNnn|, which receive
+% the new item as~|#1| and place it either into the list~|#2| of items
+% less than the pivot~|#4| or into the list~|#3| of items greater or
+% equal to the pivot.
+% \begin{verbatim}
+% \cs_new:Npn \__sort_i:nnnnNn #1#2#3#4#5#6
+% {
+% #5 {#4} {#6} \__sort_ii:nnnnNn \__sort_i:nnnnNn
+% {#6} { #2 {#1} } {#3} {#4}
+% }
+% \cs_new:Npn \__sort_ii:nnnnNn #1#2#3#4#5#6
+% {
+% #5 {#4} {#6} \__sort_ii:nnnnNn \__sort_i:nnnnNn
+% {#6} {#2} { #3 {#1} } {#4}
+% }
+% \end{verbatim}
+% Note that the two functions have the form of |\__sort_loop:wNn| above,
+% receiving as~|#5| the conditional or a function to end the loop. In
+% fact, the lists~|#2| and~|#3| must be made of pairs \meta{conditional}
+% \Arg{item}, so we have to replace~|{#6}| above by |{|~|#5|~|{#6}|~|}|,
+% and |{#1}|~by~|#1|. The actual functions have one more argument, so
+% all argument numbers are shifted compared to this code.
+%
+% The third speed up is to avoid |\use:ff| using a continuation-passing
+% style: \cs{__sort_quick_split:NnNn} expects a list followed by
+% \cs{q_mark} \Arg{code}, and expands to \meta{code} \meta{sorted list}.
+% Sorting the two parts of the list around the pivot is done with
+% \begin{quote}
+% \ttfamily
+% \cs{__sort_quick_split:NnNn} |#2| \ldots{} \cs{q_mark}\\
+% ~~|{|\\
+% ~~~~\cs{__sort_quick_split:NnNn} |#1| \ldots{} \cs{q_mark} \Arg{code}\\
+% ~~~~\Arg{pivot}\\
+% ~~|}|
+% \end{quote}
+% Items which are larger than the \meta{pivot} are sorted, then placed
+% after code that sorts the smaller items, and after the (braced)
+% \meta{pivot}.
+%
+% The fourth speed up is avoid the recursive call to \cs{tl_sort:nN}
+% with an empty first argument. For this, we introduce functions
+% similar to the |\__sort_i:nnnnNn| of the last example, but aware of
+% whether the list of \meta{conditional} \Arg{item} read so far that are
+% less than the pivot, and the list of those greater or equal, are empty
+% or not: see \cs{__sort_quick_split:NnNn} and functions defined below.
+% Knowing whether the lists are empty or not is useless if we do not use
+% distinct ending codes as appropriate. The splitting auxiliaries
+% communicate to the \meta{end-loop} function (that is initially placed
+% after the ``prepared'' list) by placing a specific ending function,
+% ignored when looping, but useful at the end. In fact, the
+% \meta{end-loop} function does nothing but place the appropriate ending
+% function in front of all its arguments. The ending functions take
+% care of sorting non-empty sublists, placing the pivot in between, and
+% the continuation before.
+%
+% The final change in fact slows down the code a little, but is required
+% to avoid memory issues: schematically, when \TeX{} encounters
+% \begin{verbatim}
+% \use:n { \use:n { \use:n { ... } ... } ... }
+% \end{verbatim}
+% the argument of the first \cs{use:n} is not completely read by the
+% second \cs{use:n}, hence must remain in memory; then the argument of
+% the second \cs{use:n} is not completely read when grabbing the
+% argument of the third \cs{use:n}, hence must remain in memory, and so
+% on. The memory consumption grows quadratically with the number of
+% nested \cs{use:n}. In practice, this means that we must read
+% everything until a trailing \cs{q_stop} once in a while, otherwise
+% sorting lists of more than a few thousand items would exhaust a
+% typical \TeX{}'s memory.
+%
+% \begin{macro}[EXP]{\tl_sort:nN}
+% \begin{macro}[aux, EXP]
+% {
+% \__sort_quick_prepare:Nnnn,
+% \__sort_quick_prepare_end:NNNnw,
+% \__sort_quick_cleanup:w
+% }
+% The code within the \cs{exp_not:f} sorts the list, leaving in most
+% cases a leading \cs{exp_not:f}, which stops the expansion, letting
+% the result be return within \cs{exp_not:n}. We filter out the case
+% of a list with no item, which would otherwise cause problems. Then
+% prepare the token list~|#1| by inserting the conditional~|#2| before
+% each item. The \texttt{prepare} auxiliary receives the conditional
+% as~|#1|, the prepared token list so far as~|#2|, the next prepared
+% item as~|#3|, and the item after that as~|#4|. The loop ends
+% when~|#4| contains \cs{__prg_break_point:}, then the
+% \texttt{prepare_end} auxiliary finds the prepared token list
+% as~|#4|. The scene is then set up for \cs{__sort_quick_split:NnNn},
+% which will sort the prepared list and perform the post action placed
+% after \cs{q_mark}, namely removing the trailing \cs{s__stop} and
+% \cs{q_stop} and leaving \cs{exp_stop_f:} to stop
+% \texttt{f}-expansion.
+% \begin{macrocode}
+\cs_new:Npn \tl_sort:nN #1#2
+ {
+ \exp_not:f
+ {
+ \tl_if_blank:nF {#1}
+ {
+ \__sort_quick_prepare:Nnnn #2 { } { }
+ #1
+ { \__prg_break_point: \__sort_quick_prepare_end:NNNnw }
+ \q_stop
+ }
+ }
+ }
+\cs_new:Npn \__sort_quick_prepare:Nnnn #1#2#3#4
+ {
+ \__prg_break: #4 \__prg_break_point:
+ \__sort_quick_prepare:Nnnn #1 { #2 #3 } { #1 {#4} }
+ }
+\cs_new:Npn \__sort_quick_prepare_end:NNNnw #1#2#3#4#5 \q_stop
+ {
+ \__sort_quick_split:NnNn #4 \__sort_quick_end:nnTFNn { }
+ \q_mark { \__sort_quick_cleanup:w \exp_stop_f: }
+ \s__stop \q_stop
+ }
+\cs_new:Npn \__sort_quick_cleanup:w #1 \s__stop \q_stop {#1}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}[EXP, aux]
+% {
+% \__sort_quick_split:NnNn,
+% \__sort_quick_only_i:NnnnnNn,
+% \__sort_quick_only_ii:NnnnnNn,
+% \__sort_quick_split_i:NnnnnNn,
+% \__sort_quick_split_ii:NnnnnNn
+% }
+% The \texttt{only_i}, \texttt{only_ii}, \texttt{split_i} and
+% \texttt{split_ii} auxiliaries receive a useless first argument, the
+% new item~|#2| (that they append to either one of the next two
+% arguments), the list~|#3| of items less than the pivot, bigger
+% items~|#4|, the pivot~|#5|, a \meta{function}~|#6|, and an
+% item~|#7|. The \meta{function} is the user's \meta{conditional}
+% except at the end of the list where it is
+% \cs{__sort_quick_end:nnTFNn}. The comparison is applied to the
+% \meta{pivot} and the \meta{item}, and calls the \texttt{only_i} or
+% \texttt{split_i} auxiliaries if the \meta{item} is smaller, and the
+% \texttt{only_ii} or \texttt{split_ii} auxiliaries otherwise. In
+% both cases, the next auxiliary goes to work right away, with no
+% intermediate expansion that would slow down operations. Note that
+% the argument~|#2| left for the next call has the form
+% \meta{conditional} \Arg{item}, so that the lists~|#3| and~|#4| keep
+% the right form to be fed to the next sorting function.
+% The \texttt{split} auxiliary differs from these in that it is
+% missing three of the arguments, which would be empty, and its first
+% argument is always the user's \meta{conditional} rather than an
+% ending function.
+% \begin{macrocode}
+\cs_new:Npn \__sort_quick_split:NnNn #1#2#3#4
+ {
+ #3 {#2} {#4} \__sort_quick_only_ii:NnnnnNn \__sort_quick_only_i:NnnnnNn
+ \__sort_quick_single_end:nnnwnw
+ { #3 {#4} } { } { } {#2}
+ }
+\cs_new:Npn \__sort_quick_only_i:NnnnnNn #1#2#3#4#5#6#7
+ {
+ #6 {#5} {#7} \__sort_quick_split_ii:NnnnnNn \__sort_quick_only_i:NnnnnNn
+ \__sort_quick_only_i_end:nnnwnw
+ { #6 {#7} } { #3 #2 } { } {#5}
+ }
+\cs_new:Npn \__sort_quick_only_ii:NnnnnNn #1#2#3#4#5#6#7
+ {
+ #6 {#5} {#7} \__sort_quick_only_ii:NnnnnNn \__sort_quick_split_i:NnnnnNn
+ \__sort_quick_only_ii_end:nnnwnw
+ { #6 {#7} } { } { #4 #2 } {#5}
+ }
+\cs_new:Npn \__sort_quick_split_i:NnnnnNn #1#2#3#4#5#6#7
+ {
+ #6 {#5} {#7} \__sort_quick_split_ii:NnnnnNn \__sort_quick_split_i:NnnnnNn
+ \__sort_quick_split_end:nnnwnw
+ { #6 {#7} } { #3 #2 } {#4} {#5}
+ }
+\cs_new:Npn \__sort_quick_split_ii:NnnnnNn #1#2#3#4#5#6#7
+ {
+ #6 {#5} {#7} \__sort_quick_split_ii:NnnnnNn \__sort_quick_split_i:NnnnnNn
+ \__sort_quick_split_end:nnnwnw
+ { #6 {#7} } {#3} { #4 #2 } {#5}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP, aux]
+% {
+% \__sort_quick_end:nnTFNn,
+% \__sort_quick_single_end:nnnwnw,
+% \__sort_quick_only_i_end:nnnwnw,
+% \__sort_quick_only_ii_end:nnnwnw,
+% \__sort_quick_split_end:nnnwnw,
+% }
+% The \cs{__sort_quick_end:nnTFNn} appears instead of the user's
+% conditional, and receives as its arguments the pivot~|#1|, a fake
+% item~|#2|, a \texttt{true} and a \texttt{false} branches |#3|
+% and~|#4|, followed by an ending function~|#5| (one of the four
+% auxiliaries here) and another copy~|#6| of the fake item. All those
+% are discarded except the function~|#5|. This function receives
+% lists~|#1| and~|#2| of items less than or greater than the
+% pivot~|#3|, then a continuation code~|#5| just after \cs{q_mark}.
+% To avoid a memory problem described earlier, all of the ending
+% functions read~|#6| until \cs{q_stop} and place~|#6| back into the
+% input stream. When the lists |#1| and~|#2| are empty, the
+% \texttt{single} auxiliary simply places the continuation~|#5| before
+% the pivot~|{#3}|. When |#2|~is empty, |#1|~is sorted and placed
+% before the pivot~|{#3}|, taking care to feed the continuation~|#5|
+% as a continuation for the function sorting~|#1|. When |#1|~is
+% empty, |#2|~is sorted, and the continuation argument is used to
+% place the continuation~|#5| and the pivot~|{#3}| before the sorted
+% result. Finally, when both lists are non-empty, items larger than
+% the pivot are sorted, then items less than the pivot, and the
+% continuations are done in such a way to place the pivot in between.
+% \begin{macrocode}
+\cs_new:Npn \__sort_quick_end:nnTFNn #1#2#3#4#5#6 {#5}
+\cs_new:Npn \__sort_quick_single_end:nnnwnw #1#2#3#4 \q_mark #5#6 \q_stop
+ { #5 {#3} #6 \q_stop }
+\cs_new:Npn \__sort_quick_only_i_end:nnnwnw #1#2#3#4 \q_mark #5#6 \q_stop
+ {
+ \__sort_quick_split:NnNn #1
+ \__sort_quick_end:nnTFNn { } \q_mark {#5}
+ {#3}
+ #6 \q_stop
+ }
+\cs_new:Npn \__sort_quick_only_ii_end:nnnwnw #1#2#3#4 \q_mark #5#6 \q_stop
+ {
+ \__sort_quick_split:NnNn #2
+ \__sort_quick_end:nnTFNn { } \q_mark { #5 {#3} }
+ #6 \q_stop
+ }
+\cs_new:Npn \__sort_quick_split_end:nnnwnw #1#2#3#4 \q_mark #5#6 \q_stop
+ {
+ \__sort_quick_split:NnNn #2 \__sort_quick_end:nnTFNn { } \q_mark
+ {
+ \__sort_quick_split:NnNn #1
+ \__sort_quick_end:nnTFNn { } \q_mark {#5}
+ {#3}
+ }
+ #6 \q_stop
+ }
+% \end{macrocode}
+% \end{macro}
+%
% \subsection{Messages}
%
% \begin{macro}{\@@_too_long_error:NNw}
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx
index 7260ca7667f..1ab8905e6aa 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 4455 2013-01-22 20:38:19Z bruno $
+\GetIdInfo$Id: l3regex.dtx 4482 2013-04-24 21:05:12Z joseph $
{L3 Experimental regular expressions}
%</driver|package>
%<*driver>
@@ -752,7 +752,7 @@
% integer \meta{position}, with $\texttt{min_pos} - 1 \leq
% \meta{position} \leq \texttt{max_pos}$. The lowest and highest
% positions correspond to imaginary begin and end markers (with
-% inacessible category code and character code).
+% inaccessible category code and character code).
% \item \emph{Query}: the token list to which we apply the regular
% expression.
% \item \emph{State}: each state of the \textsc{nfa} is labelled by an
@@ -767,7 +767,7 @@
% unique id for all the steps of the matching algorithm.
% \end{itemize}
%
-% To acheive a good performance, we abuse \TeX{}'s registers in two
+% To achieve a good performance, we abuse \TeX{}'s registers in two
% ways. We access registers directly by number rather than tying them
% to control sequence using \cs{int_new:N} and other allocation
% functions. And we store integers in \tn{dimen} registers in scaled
@@ -913,7 +913,7 @@
%
% \begin{macro}[int]{\@@_item_reverse:n}
% This function makes showing regular expressions easier, and lets us
-% define |\D| in terms of |\d| for instance. There is a subtelty: the
+% define |\D| in terms of |\d| for instance. There is a subtlety: the
% end of the query is marked by $-2$, and will thus match |\D| and
% other negated properties; this case is caught by another part of
% the code.
@@ -1596,7 +1596,7 @@
% \begin{variable}{\l_@@_catcodes_bool}
% We wish to allow constructions such as |\c[^BE](..\cL[a-z]..)|,
% where the outer catcode test applies to the whole group, but is
-% superseeded by the inner catcode test. For this to work, we need to
+% superseded by the inner catcode test. For this to work, we need to
% keep track of lists of allowed category codes:
% \cs{l_@@_catcodes_int} and \cs{l_@@_default_catcodes_int} are
% bitmaps, sums of $4^c$, for all allowed catcodes $c$. The latter is
@@ -2018,7 +2018,7 @@
% \end{macrocode}
% \end{macro}
%
-% \subsubsection{Quantifers}
+% \subsubsection{Quantifiers}
%
% \begin{macro}[int]{\@@_compile_quantifier:w}
% This looks ahead and finds any quantifier (special character equal
@@ -2436,7 +2436,7 @@
% \begin{macro}[aux]{\@@_compile_[:}
% In a class, left brackets might introduce a \textsc{posix} character
% class, or mean nothing. Immediately following |\c|\meta{category},
-% we must insert the apropriate catcode test, then parse the class; we
+% we must insert the appropriate catcode test, then parse the class; we
% pre-expand the catcode as an optimization. Otherwise (modes $0$,
% $-2$ and $-6$) just parse the class. The mode is updated later.
% \begin{macrocode}
@@ -2614,7 +2614,7 @@
% using \pkg{l3tl-build} within a \TeX{} group, which automatically
% makes sure that options (case-sensitivity and default catcode) are
% reset at the end of the group. The argument |#1| is
-% \cs{@@_group:nnnN} or a variant thereof. A small subtelty to
+% \cs{@@_group:nnnN} or a variant thereof. A small subtlety to
% support |\cL(abc)| as a shorthand for |(\cLa\cLb\cLc)|: exit any
% pending catcode test, save the category code at the start of the
% group as the default catcode for that group, and make sure that the
@@ -3093,7 +3093,7 @@
%
% \begin{macro}[aux]{\@@_show_one:n}
% Every part of the final message go through this function, which adds
-% one line to the output, with the apropriate prefix.
+% one line to the output, with the appropriate prefix.
% \begin{macrocode}
\cs_new_protected:Npn \@@_show_one:n #1
{
@@ -4082,7 +4082,7 @@
% \tn{toks} register for the target state of the transition, to be
% retrieved when matching at the next position. When a thread
% succeeds, this property list is copied to
-% \cs{l_@@_success_submatches_prop}: only the last sucessful thread
+% \cs{l_@@_success_submatches_prop}: only the last successful thread
% will remain there.
% \begin{macrocode}
\prop_new:N \l_@@_current_submatches_prop
@@ -4184,7 +4184,7 @@
% First store the query into \tn{toks} and \tn{muskip} registers (see
% \cs{@@_query_set:nnn}). Then initialize the variables that should
% be set once for each user function (even for multiple
-% matches). Namely, the overall matching is not yet sucessful; none of
+% matches). Namely, the overall matching is not yet successful; none of
% the states should be marked as visited (\tn{dimen} registers), and
% we start at step $0$; we pretend that there was a previous match
% ending at the start of the query, which was not empty (to avoid
@@ -4226,7 +4226,7 @@
% \cs{@@_match_once:}. First initialize some variables: set the
% conditional which detects identical empty matches; this match
% attempt starts at the previous \texttt{success_pos}, is not yet
-% sucessful, and has no submatches yet; clear the array of active
+% successful, and has no submatches yet; clear the array of active
% threads, and put the starting state $0$ in it. We are then almost
% ready to read our first token in the query, but we actually start
% one position earlier than the start, and \texttt{get} that token, so
@@ -5927,7 +5927,7 @@
% This is not technically a message, but seems related enough to go
% there. The arguments are: |#1| is the minimum number of repetitions;
% |#2| is the number of allowed extra repetitions ($-1$ for infinite
-% number), and |#3| tells us aboud lazyness.
+% number), and |#3| tells us about lazyness.
% \begin{macrocode}
\cs_new:Npn \@@_msg_repeated:nnN #1#2#3
{
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx
index 1810468ff7d..19bad05b982 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx
@@ -125,7 +125,8 @@
% \texttt{iso885915}, \texttt{latin9} & \textsc{iso 8859-15} \\
% \texttt{iso885916}, \texttt{latin10} & \textsc{iso 8859-16} \\
% \midrule
-% Empty & Native (Unicode) string. \\
+% \texttt{clist} & comma-list of integers \\
+% \meta{empty} & native (Unicode) string \\
% \bottomrule
% \end{tabular}
% \end{table}
@@ -1187,6 +1188,47 @@
% \end{macrocode}
% \end{macro}
%
+% \subsubsection{\texttt{clist}}
+%
+% \begin{macro}[int]{\@@_convert_decode_clist:}
+% \begin{macro}[aux, rEXP]{\@@_decode_clist_char:n}
+% Convert each integer to the internal form. We first turn
+% \cs{g_@@_result_tl} into a clist variable, as this avoids problems
+% with leading or trailing commas.
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_convert_decode_clist:
+ {
+ \clist_set:No \g_@@_result_tl \g_@@_result_tl
+ \tl_gset:Nx \g_@@_result_tl
+ {
+ \exp_args:No \clist_map_function:nN
+ \g_@@_result_tl \@@_decode_clist_char:n
+ }
+ }
+\cs_new:Npn \@@_decode_clist_char:n #1
+ { #1 \s__tl \int_eval:n {#1} \s__tl }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}[int]{\@@_convert_encode_clist:}
+% \begin{macro}[aux, rEXP]{\@@_encode_clist_char:n}
+% Convert the internal list of character codes to a comma-list of
+% character codes. The first line produces a comma-list with a
+% leading comma, removed in the next step (this also works in the
+% empty case, since \cs{tl_tail:N} does not trigger an error in this
+% case).
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \@@_convert_encode_clist:
+ {
+ \@@_convert_gmap_internal:N \@@_encode_clist_char:n
+ \tl_gset:Nx \g_@@_result_tl { \tl_tail:N \g_@@_result_tl }
+ }
+\cs_new:Npn \@@_encode_clist_char:n #1 { , #1 }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
% \subsubsection{8-bit encodings}
%
% This section will be entirely rewritten: it is not yet clear in what
@@ -1211,7 +1253,7 @@
% \end{syntax}
% This declares the encoding \meta{name} to map bytes to Unicode
% characters according to the \meta{mapping}, and map those bytes
-% which are not mentionned in the \meta{mapping} either to the
+% which are not mentioned in the \meta{mapping} either to the
% replacement character (if they appear in \meta{missing}), or to
% themselves.
%
@@ -2067,7 +2109,7 @@
% |#3| for the previous range. Otherwise, we call the
% \texttt{_continuation} auxiliary again, after shifting the
% \enquote{current code point} by |#4| (maximum from the range we just
-% checkedd).
+% checked).
%
% Two additional tests are needed: if we reach the end of the list of
% range maxima and we are still not done, then we are faced with an
@@ -2629,7 +2671,7 @@
% of a byte-order mark. If there is a byte-order mark, use that
% endianness, and remove the $4$ bytes, otherwise default to
% big-endian, and leave the $4$ bytes in place. The
-% \cs{@@_decode_utf_xxxii:Nw} auxiliary recieves $1$ or $2$ as its
+% \cs{@@_decode_utf_xxxii:Nw} auxiliary receives $1$ or $2$ as its
% first argument indicating endianness, and the string to convert as
% its second argument (expanded or not). It sets \cs{@@_tmp:w} to
% expand to the character code of either of its two arguments
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 7d42697daab..3237dc3aaa4 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx
@@ -597,7 +597,7 @@
% \subsection{Formatting integers}
%
% \begin{macro}[EXP]{\int_format:nn}
-% Evalute the first argument and feed it to \cs{@@_int:nn}.
+% Evaluate the first argument and feed it to \cs{@@_int:nn}.
% \begin{macrocode}
\cs_new:Npn \int_format:nn #1
{ \exp_args:Nf \@@_int:nn { \int_eval:n {#1} } }
@@ -705,7 +705,7 @@
% \subsection{Formatting floating points}
%
% \begin{macro}[EXP]{\fp_format:nn}
-% Evalute the first argument to an internal floating point number, and
+% Evaluate the first argument to an internal floating point number, and
% feed it to \cs{@@_fp:nn}.
% \begin{macrocode}
\cs_new:Npn \fp_format:nn #1
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.dtx
index 0a4d72afd2f..836bb0481f2 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 4452 2013-01-20 10:18:32Z joseph $
+\GetIdInfo$Id: l3str.dtx 4482 2013-04-24 21:05:12Z joseph $
{L3 Experimental strings}
%</driver|package>
%<*driver>
@@ -421,7 +421,7 @@
% characters with category \enquote{other}, as produced by
% \cs{__str_to_other:n}. It leaves in the input stream the number of
% character tokens in the \meta{other string}, faster than the
-% analoguous \cs{str_count:n} function.
+% analogous \cs{str_count:n} function.
% \end{function}
%
% \begin{function}[EXP]{\__str_range_unsafe:nnn}
@@ -577,7 +577,7 @@
% To speed up this function, we grab and discard $9$ space-delimited
% arguments in each iteration of the loop. The loop stops when the
% last argument is one of the trailing |X|\meta{number}, and that
-% \meta{number} is added to the sum of $9$ that preceeds, to adjust
+% \meta{number} is added to the sum of $9$ that precedes, to adjust
% the result.
% \begin{macrocode}
\cs_new_nopar:Npn \str_count_spaces:N
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx
index ad4d20f7aba..5c4787cc5aa 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx
@@ -114,7 +114,7 @@
% \ldots{}
% \cs{__tl_build_end:}
% \end{syntax}
-% Defines the \meta{tl~var} to contain the contens of \meta{tokens1}
+% Defines the \meta{tl~var} to contain the contents of \meta{tokens1}
% followed by \meta{tokens2}, \emph{etc.} This is built in such a way
% to be more efficient than repeatedly using \cs{tl_put_right:Nn}. The
% code in \enquote{\texttt{\ldots{}}} does not need to be
diff --git a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx
index 60ebd14993f..3bbe92eacc0 100644
--- a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx
@@ -1,7 +1,7 @@
% \iffalse
%
%% File: l3galley.dtx Copyright (C) 1999-2001, 2004-2009 Frank Mittelbach
-%% (C) 2010-2012 The LaTeX3 Project
+%% (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
@@ -37,7 +37,7 @@
%
%<*driver|package>
\RequirePackage{xparse}
-\GetIdInfo$Id: l3galley.dtx 4402 2013-01-08 08:59:44Z bruno $
+\GetIdInfo$Id: l3galley.dtx 4494 2013-05-24 06:27:01Z joseph $
{L3 Experimental galley code}
%</driver|package>
%<*driver>
@@ -260,7 +260,7 @@
% \end{verbatim}
% would create a paragraph shape in which the first line is the full
% width of the measure, the second line is indented by $2$\,pt on each side,
-% the third line by by $4$\,pt and the fourth line and subsequent lines by
+% the third line by $4$\,pt and the fourth line and subsequent lines by
% $6$\,pt from the edge of the measure on each side.
%
% The \texttt{single_par} version applies only to a single paragraph,
@@ -1087,7 +1087,7 @@
% saved \emph{local} versions, hence the position of the close-of-group
% instruction. As this code can be inserted automatically, at the point
% of use only the start of a galley level needs to be marked up: the end
-% must come in a fixed location. All of this relies on the the
+% must come in a fixed location. All of this relies on the
% \enquote{color safe} group used inside a box.
% \begin{macrocode}
\cs_new_protected_nopar:Npn \@@_level_end:
@@ -1650,7 +1650,7 @@
% parts in advance (the same number of loops would still be needed).
% \begin{macrocode}
{
- \prg_replicate:nn \g@@_previous_par_lines_int
+ \prg_replicate:nn \g_galley_previous_par_lines_int
{
\seq_gpop:NN \g_@@_cutout_left_seq \l_@@_tmp_tl
\seq_gpop:NN \g_@@_cutout_right_seq \l_@@_tmp_tl
@@ -1851,7 +1851,7 @@
\int_compare:nNnTF \tex_parshape:D = \c_zero
{
\tl_put_right:Nn \l_@@_tmp_tl
- { \l@@_total_left_margin_dim \l@@_text_width_dim }
+ { \l_@@_total_left_margin_dim \l_galley_text_width_dim }
}
{
\tl_put_right:Nx \l_@@_tmp_tl
@@ -1879,9 +1879,9 @@
{
\int_compare:nNnTF \l_@@_tmp_int > \tex_parshape:D
{
- \dim_eval:n { \l@@_total_left_margin_dim + ( #1 ) }
+ \dim_eval:n { \l_@@_total_left_margin_dim + ( #1 ) }
\c_space_tl
- \dim_eval:n { \l@@_text_width_dim - ( #1 ) }
+ \dim_eval:n { \l_galley_text_width_dim - ( #1 ) }
\c_space_tl
}
{
@@ -1897,10 +1897,19 @@
\int_incr:N \l_@@_tmp_int
\tl_put_right:Nx \l_@@_tmp_tl
{
- \dim_eval:n { \etex_parshapeindent:D \l_@@_tmp_int }
- \c_space_tl
- \dim_eval:n { \etex_parshapelength:D \l_@@_tmp_int - ( #1 ) }
- \c_space_tl
+ \int_compare:nNnTF \l_@@_tmp_int > \tex_parshape:D
+ {
+ \dim_use:N \l_@@_total_left_margin_dim
+ \c_space_tl
+ \dim_eval:n { \l_galley_text_width_dim - ( #1 ) }
+ \c_space_tl
+ }
+ {
+ \dim_eval:n { \etex_parshapeindent:D \l_@@_tmp_int }
+ \c_space_tl
+ \dim_eval:n { \etex_parshapelength:D \l_@@_tmp_int - ( #1 ) }
+ \c_space_tl
+ }
}
}
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
index 176bf791101..612cfb35e2c 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/03/14}
-\def\ExplFileVersion{4469}
+\def\ExplFileDate{2013/07/12}
+\def\ExplFileVersion{4544}
%</driver|package>
%<*driver>
\documentclass[full]{l3doc}
@@ -894,7 +894,7 @@
% is concerned with code, and some with coding style.
%
% \begin{itemize}
-% \item \pkg{expl3} is mainly focussed on programming. This means that
+% \item \pkg{expl3} is mainly focused on programming. This means that
% some areas still require the use of \LaTeXe{} internal macros.
% For example, you may well need \tn{@ifpackageloaded}, as there
% is currently no native \LaTeX3 package loading module.
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3.ins b/Master/texmf-dist/source/latex/l3kernel/l3.ins
new file mode 100644
index 00000000000..b869a70fee5
--- /dev/null
+++ b/Master/texmf-dist/source/latex/l3kernel/l3.ins
@@ -0,0 +1,93 @@
+\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 98fe66d8b35..b00dee6ec9e 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 4428 2013-01-10 13:23:29Z bruno $
+\GetIdInfo$Id: l3basics.dtx 4521 2013-07-09 11:45:31Z joseph $
{L3 Basic definitions}
%</driver|package>
%<*driver>
@@ -185,15 +185,15 @@
% \end{description}
%
% Finally, the functions in
-% Subsections~\ref{sec:defining-new-function-1}~and
-% \ref{sec:defining-new-function-2} are primarily meant to define
+% Subsections~\ref{sec:l3basics:defining-new-function-1}~and
+% \ref{sec:l3basics:defining-new-function-2} are primarily meant to define
% \emph{base functions} only. Base functions can only have the following
% argument specifiers:
% \begin{description}
% \item[|N| and |n|] No manipulation.
% \item[|T| and |F|] Functionally equivalent to |n| (you are actually
% encouraged to use the family of |\prg_new_conditional:| functions
-% described in Section~\ref{sec:new-conditional-functions}).
+% described in Section~\ref{sec:l3basics:new-conditional-functions}).
% \item[|p| and |w|] These are special cases.
% \end{description}
%
@@ -201,10 +201,10 @@
% other argument specifiers in your function names, but they do not handle
% expansion for you. You should define the base function and then use
% \cs{cs_generate_variant:Nn} to generate custom variants as described in
-% Section~\ref{sec:defining-variants}.
+% Section~\ref{sec:l3basics:defining-variants}.
%
% \subsection{Defining new functions using parameter text}
-% \label{sec:defining-new-function-1}
+% \label{sec:l3basics:defining-new-function-1}
%
% \begin{function}{\cs_new:Npn, \cs_new:cpn, \cs_new:Npx, \cs_new:cpx}
% \begin{syntax}
@@ -393,7 +393,7 @@
% \end{function}
%
% \subsection{Defining new functions using the signature}
-% \label{sec:defining-new-function-2}
+% \label{sec:l3basics:defining-new-function-2}
%
% \begin{function}
% {
@@ -982,7 +982,7 @@
% \end{function}
%
% \section{Predicates and conditionals}
-% \label{sec:predicates}
+% \label{sec:l3basics:predicates}
%
% \LaTeX3 has three concepts for conditional flow processing:
% \begin{description}
@@ -1337,7 +1337,7 @@
% \begin{function}{\__cs_tmp:w}
% Function used for various short-term usages, for instance defining
% functions whose definition involves tokens which are hard to insert
-% normally (spaces, charactes with category other).
+% normally (spaces, characters with category other).
% \end{function}
%
% \begin{function}{\__kernel_register_show:N, \__kernel_register_show:c}
@@ -1899,7 +1899,7 @@
% name. In the absence of a colon, we throw an error and don't define
% any conditional. The fourth and fifth arguments build up the
% defining function. The sixth is the parameters to use (possibly
-% empty), the seventh is the list of forms to define, the eigth is the
+% empty), the seventh is the list of forms to define, the eighth is the
% replacement text which we will augment when defining the forms.
% The use of \cs{etex_detokenize:D} makes the later loop more robust.
% \begin{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
index b6e89bde0be..ddb859bd03a 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3box.dtx 4411 2013-01-08 12:21:52Z bruno $
+\GetIdInfo$Id: l3box.dtx 4482 2013-04-24 21:05:12Z joseph $
{L3 Experimental boxes}
%</driver|package>
%<*driver>
@@ -490,7 +490,7 @@
% \end{syntax}
% Typesets the \meta{contents} into a vertical box of natural height
% and includes this box in the current list for typesetting. The
-% baseline of the box will tbe equal to that of the \emph{first}
+% baseline of the box will be equal to that of the \emph{first}
% item added to the box.
% \begin{texnote}
% This is the \TeX{} primitive \tn{vtop}.
@@ -529,7 +529,7 @@
% \cs{vbox_set_top:Nn} \meta{box} \Arg{contents}
% \end{syntax}
% Typesets the \meta{contents} at natural height and then stores the
-% result inside the \meta{box}. The baseline of the box will tbe equal
+% result inside the \meta{box}. The baseline of the box will be equal
% to that of the \emph{first} item added to the box.
% \end{function}
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
index e144922e224..1eaf1bdeb0f 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-%% File: l3candidates.dtx Copyright(C) 2012 The LaTeX3 Project
+%% File: l3candidates.dtx Copyright(C) 2012,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
@@ -36,7 +36,7 @@
%
%<*driver|package>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3candidates.dtx 4468 2013-03-14 20:30:45Z joseph $
+\GetIdInfo$Id: l3candidates.dtx 4521 2013-07-09 11:45:31Z joseph $
{L3 Experimental additions to l3kernel}
%</driver|package>
%<*driver>
@@ -264,7 +264,7 @@
%
% \section{Additions to \pkg{l3clist}}
%
-% \begin{function}{\clist_item:Nn, \clist_item:cn, \clist_item:nn}
+% \begin{function}[EXP]{\clist_item:Nn, \clist_item:cn, \clist_item:nn}
% \begin{syntax}
% \cs{clist_item:Nn} \meta{comma list} \Arg{integer expression}
% \end{syntax}
@@ -326,37 +326,6 @@
% is not empty.
% \end{function}
%
-% \begin{function}[EXP, added = 2012-06-26]{\clist_use:Nnnn}
-% \begin{syntax}
-% \cs{clist_use:Nnnn} \meta{clist~var} \Arg{separator~between~two} \Arg{separator~between~more~than~two} \Arg{separator~between~final~two}
-% \end{syntax}
-% Places the contents of the \meta{clist~var} in the input stream,
-% with the appropriate \meta{separator} between the items. Namely, if
-% the comma list has more than $2$ items, the \meta{separator between
-% more than two} is placed between each pair of items except the
-% last, for which the \meta{separator between final two} is used. If
-% the comma list has $2$ items, then they are placed in the input
-% stream separated by the \meta{separator between two}. If the comma
-% list has $1$ item, it is placed in the input stream, and a comma
-% list with no items produces no output. An error will be raised if
-% the variable does not exist or if it is invalid.
-%
-% For example,
-% \begin{verbatim}
-% \clist_set:Nn \l_tmpa_clist { a , b , , c , {de} , f }
-% \clist_use:Nnnn \l_tmpa_clist { ~and~ } { ,~ } { ,~and~ }
-% \end{verbatim}
-% will insert \enquote{\texttt{a, b, c, de, and f}} in the input
-% stream. The first separator argument is not used in this case
-% because the comma list has more than $2$ items.
-% \begin{texnote}
-% The result is returned within the \tn{unexpanded}
-% primitive (\cs{exp_not:n}), which means that the \meta{items}
-% will not expand further when appearing in an \texttt{x}-type
-% argument expansion.
-% \end{texnote}
-% \end{function}
-%
% \section{Additions to \pkg{l3coffins}}
%
% \begin{function}{\coffin_resize:Nnn, \coffin_resize:cnn}
@@ -622,38 +591,45 @@
% \end{texnote}
% \end{function}
%
-% \begin{function}[EXP, added = 2012-06-26]{\seq_use:Nnnn}
+% \section{Additions to \pkg{l3skip}}
+%
+% \begin{function}[added = 2013-05-06, EXP]{\dim_to_pt:n}
% \begin{syntax}
-% \cs{seq_use:Nnnn} \meta{seq~var} \Arg{separator~between~two} \Arg{separator~between~more~than~two} \Arg{separator~between~final~two}
+% \cs{dim_to_pt:n} \Arg{dimexpr}
% \end{syntax}
-% Places the contents of the \meta{seq~var} in the input stream, with
-% the appropriate \meta{separator} between the items. Namely, if the
-% sequence has more than $2$ items, the \meta{separator between more
-% than two} is placed between each pair of items except the last,
-% for which the \meta{separator between final two} is used. If the
-% sequence has $2$ items, then they are placed in the input stream
-% separated by the \meta{separator between two}. If the sequence has
-% $1$ item, it is placed in the input stream, and an empty sequence
-% produces no output. An error will be raised if the variable does
-% not exist or if it is invalid.
-%
-% For example,
+% Evaluates the \meta{dimension expression}, and leaves the result,
+% expressed in points (\texttt{pt}) in the input stream, with \emph{no
+% units}. The result is rounded by \TeX{} to four or five decimal
+% places. If the decimal part of the result is zero, it is omitted,
+% together with the decimal marker.
+%
+% If the \meta{dimension expression} contains additional tokens such
+% as redundant units, these will be ignored, so for example
% \begin{verbatim}
-% \seq_set_split:Nnn \l_tmpa_seq { | } { a | b | c | {de} | f }
-% \seq_use:Nnnn \l_tmpa_seq { ~and~ } { ,~ } { ,~and~ }
+% \dim_to_pt:n { 1 bp pt }
% \end{verbatim}
-% will insert \enquote{\texttt{a, b, c, de, and f}} in the input
-% stream. The first separator argument is not used in this case
-% because the sequence has more than $2$ items.
-% \begin{texnote}
-% The result is returned within the \tn{unexpanded}
-% primitive (\cs{exp_not:n}), which means that the \meta{items}
-% will not expand further when appearing in an \texttt{x}-type
-% argument expansion.
-% \end{texnote}
+% leaves |1.00374| in the input stream, \emph{i.e.}~the magnitude of
+% one \enquote{big point} when converted to points.
% \end{function}
%
-% \section{Additions to \pkg{l3skip}}
+% \begin{function}[added = 2013-05-06, EXP]{\dim_to_unit:nn}
+% \begin{syntax}
+% \cs{dim_to_unit:nn} \Arg{dimexpr_1} \Arg{dimexpr_2}
+% \end{syntax}
+% Evaluates the \meta{dimension expressions}, and leaves the value of
+% \meta{dimexpr_1}, expressed in a unit given by \meta{dimexpr_2}, in
+% the input stream. The result is a decimal number, rounded by \TeX{}
+% to four or five decimal places. If the decimal part of the result
+% is zero, it is omitted, together with the decimal marker.
+%
+% If the \meta{dimension expressions} contain additional tokens such
+% as redundant units, these will be ignored, so for example
+% \begin{verbatim}
+% \dim_to_unit:nn { 1 bp pt } { 1 mm }
+% \end{verbatim}
+% leaves |0.35277| in the input stream, \emph{i.e.}~the magnitude of
+% one \enquote{big point} when converted to millimeters.
+% \end{function}
%
% \begin{function}{\skip_split_finite_else_action:nnNN}
% \begin{syntax}
@@ -940,8 +916,8 @@
% The next step is to work out the $x$ and $y$ coordinates of vertices of
% the rotated box in relation to its original coordinates. The box can be
% visualized with vertices $B$, $C$, $D$ and $E$ is illustrated
-% (Figure~\ref{fig:rotation}). The vertex $O$ is the reference point on the
-% baseline, and in this implementation is also the centre of rotation.
+% (Figure~\ref{fig:l3candidates:rotation}). The vertex $O$ is the reference point
+% on the baseline, and in this implementation is also the centre of rotation.
% \begin{figure}
% \centering
% \setlength{\unitlength}{3pt}^^A
@@ -958,7 +934,7 @@
% \put(21,59){O}
% \end{picture}
% \caption{Co-ordinates of a box prior to rotation.}
-% \label{fig:rotation}
+% \label{fig:l3candidates:rotation}
% \end{figure}
% The formulae are, for a point $P$ and angle $\alpha$:
% \[
@@ -1602,7 +1578,7 @@
% any argument: this avoids losing braces. The argument
% of \cs{tl_if_empty:oTF} is empty if |#1| is |?| followed
% by blank spaces (besides, this particular variant of
-% the emptyness test is optimized). If the item of the
+% the emptiness test is optimized). If the item of the
% comma list is blank, grab the next one. As soon as one
% item is non-blank, exit: the second auxiliary will grab
% \cs{prg_return_false:} as |#2|, unless every item in
@@ -1628,62 +1604,6 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}[EXP]{\clist_use:Nnnn}
-% \begin{macro}[EXP, aux]
-% {\@@_use:wwn, \@@_use:nwwwwnwn, \@@_use:nwwn}
-% First check that the variable exists. Then count the items in the
-% comma list. If it has none, output nothing. If it has one item,
-% output that item, brace stripped (note that space-trimming has
-% already been done when the comma list was assigned). If it has two,
-% place the \meta{separator~between~two} in the middle.
-%
-% Otherwise, \cs{@@_use:nwwwwnwn} takes the following arguments; 1:
-% a \meta{separator}, 2, 3, 4: three items from the comma list (or
-% quarks), 5: the rest of the comma list, 6: a \meta{continuation}
-% function (\texttt{use_ii} or \texttt{use_iii} with its
-% \meta{separator} argument), 7: junk, and 8: the temporary result,
-% which is built in a brace group following \cs{q_stop}. The
-% \meta{separator} and the first of the three items are placed in the
-% result, then we use the \meta{continuation}, placing the remaining
-% two items after it. When we begin this loop, the three items really
-% belong to the comma list, the first \cs{q_mark} is taken as a
-% delimiter to the \texttt{use_ii} function, and the continuation is
-% \texttt{use_ii} itself. When we reach the last two items of the
-% original token list, \cs{q_mark} is taken as a third item, and now
-% the seconf \cs{q_mark} serves as a delimiter to \texttt{use_ii},
-% switching to the other \meta{continuation}, \texttt{use_iii}, which
-% uses the \meta{separator between final two}.
-% \begin{macrocode}
-\cs_new:Npn \clist_use:Nnnn #1#2#3#4
- {
- \clist_if_exist:NTF #1
- {
- \int_case:nnn { \clist_count:N #1 }
- {
- { 0 } { }
- { 1 } { \exp_after:wN \@@_use:wwn #1 , , { } }
- { 2 } { \exp_after:wN \@@_use:wwn #1 , {#2} }
- }
- {
- \exp_after:wN \@@_use:nwwwwnwn
- \exp_after:wN { \exp_after:wN } #1 ,
- \q_mark , { \@@_use:nwwwwnwn {#3} }
- \q_mark , { \@@_use:nwwn {#4} }
- \q_stop { }
- }
- }
- { \__msg_kernel_expandable_error:nnn { kernel } { bad-variable } {#1} }
- }
-\cs_new:Npn \@@_use:wwn #1 , #2 , #3 { \exp_not:n { #1 #3 #2 } }
-\cs_new:Npn \@@_use:nwwwwnwn
- #1#2 , #3 , #4 , #5 \q_mark , #6#7 \q_stop #8
- { #6 {#3} , {#4} , #5 \q_mark , {#6} #7 \q_stop { #8 #1 #2 } }
-\cs_new:Npn \@@_use:nwwn #1#2 , #3 \q_stop #4
- { \exp_not:n { #4 #1 #2 } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
% \subsection{Additions to \pkg{l3coffins}}
%
% \begin{macrocode}
@@ -2260,25 +2180,24 @@
% \end{macro}
%
% \begin{macro}[EXP]{\prop_get:Nn, \prop_get:cn}
-% \begin{macro}[aux, EXP]{\@@_get:Nn, \@@_get:No}
% \begin{macro}[aux, EXP]{\@@_get_Nn:nwn}
% Getting the value corresponding to a key in a property list in an
-% expandable fashion is a simple instance of mapping some tokens.
-% Map the function \cs{prop_get:nnn} which takes as its three
-% arguments the \meta{key} that we are looking for, the current
-% \meta{key} and the current \meta{value}. If the \meta{keys} match,
-% the \meta{value} is returned. If none of the keys match, this expands
-% to nothing.
+% expandable fashion is similar to mapping some tokens. Go through
+% the property list one \meta{key}--\meta{value} pair at a time: the
+% arguments of \cs{@@_get_Nn:nwn} are the \meta{key} we are looking
+% for, a \meta{key} of the property list, and its associated value.
+% The \meta{keys} are compared (as strings). If they match, the
+% \meta{value} is returned, within \cs{exp_not:n}. The loop
+% terminates even if the \meta{key} is missing, and yields an empty
+% value, because we have appended the appropriate
+% \meta{key}--\meta{empty value} pair to the property list.
% \begin{macrocode}
\cs_new:Npn \prop_get:Nn #1#2
- { \@@_get:No #1 { \tl_to_str:n {#2} } }
-\cs_new:Npn \@@_get:Nn #1#2
{
- \exp_last_unbraced:Nno \@@_get_Nn:nwn {#2} #1
- \s_@@ #2 \s_@@ { }
+ \exp_last_unbraced:Noo \@@_get_Nn:nwn { \tl_to_str:n {#2} } #1
+ \s_@@ \tl_to_str:n {#2} \s_@@ { }
\__prg_break_point:
}
-\cs_generate_variant:Nn \@@_get:Nn { No }
\cs_new:Npn \@@_get_Nn:nwn #1 \s_@@ #2 \s_@@ #3
{
\str_if_eq_x:nnTF {#1} {#2}
@@ -2289,7 +2208,6 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
-% \end{macro}
%
% \subsection{Additions to \pkg{l3seq}}
%
@@ -2531,50 +2449,46 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}[EXP]{\seq_use:Nnnn}
-% \begin{macro}[EXP, aux]
-% {\@@_use:NnNnn, \@@_use:nwwwwnwn, \@@_use:nwwn}
-% 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.
+% \subsection{Additions to \pkg{l3skip}}
+%
+% \begin{macrocode}
+%<@@=dim>
+% \end{macrocode}
+%
+% \begin{macro}[EXP]{\dim_to_pt:n}
+% A copy of the internal function \cs{@@_strip_pt:n}, which should
+% perhaps be eliminated in favor of \cs{dim_to_pt:n}.
% \begin{macrocode}
-\cs_new:Npn \seq_use:Nnnn #1#2#3#4
+\cs_new_eq:NN \dim_to_pt:n \@@_strip_pt:n
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\dim_to_unit:nn}
+% \begin{macro}[aux, EXP]{\@@_to_unit:n}
+% An analog of \cs{dim_ratio:nn} that produces a decimal number as its
+% result, rather than a rational fraction for use within dimension
+% expressions. The naive implementation as
+% \begin{verbatim}
+% \cs_new:Npn \dim_to_unit:nn #1#2
+% { \dim_to_pt:n { 1pt * \dim_ratio:nn {#1} {#2} } }
+% \end{verbatim}
+% would not ignore trailing tokens (see documentation), so we need a
+% bit more work.
+% \begin{macrocode}
+\cs_new:Npn \dim_to_unit:nn #1#2
{
- \seq_if_exist:NTF #1
+ \dim_to_pt:n
{
- \int_case:nnn { \seq_count:N #1 }
- {
- { 0 } { }
- { 1 } { \exp_after:wN \@@_use:NnNnn #1 \@@_item:n { } { } }
- { 2 } { \exp_after:wN \@@_use:NnNnn #1 {#2} }
- }
- {
- \exp_after:wN \@@_use:nwwwwnwn
- \exp_after:wN { \exp_after:wN } #1 \@@_item:n
- \q_mark { \@@_use:nwwwwnwn {#3} }
- \q_mark { \@@_use:nwwn {#4} }
- \q_stop { }
- }
+ 1pt * \@@_to_unit:n { \dim_to_pt:n {#1} pt }
+ / \@@_to_unit:n { \dim_to_pt:n {#2} pt }
}
- { \__msg_kernel_expandable_error:nnn { kernel } { bad-variable } {#1} }
}
-\cs_new:Npn \@@_use:NnNnn \@@_item:n #1 \@@_item:n #2#3
- { \exp_not:n { #1 #3 #2 } }
-\cs_new:Npn \@@_use:nwwwwnwn
- #1 \@@_item:n #2 \@@_item:n #3 \@@_item:n #4#5
- \q_mark #6#7 \q_stop #8
- {
- #6 \@@_item:n {#3} \@@_item:n {#4} #5
- \q_mark {#6} #7 \q_stop { #8 #1 #2 }
- }
-\cs_new:Npn \@@_use:nwwn #1 \@@_item:n #2 #3 \q_stop #4
- { \exp_not:n { #4 #1 #2 } }
+\cs_new:Npn \@@_to_unit:n #1
+ { \__int_value:w \@@_eval:w #1 \@@_eval_end: }
% \end{macrocode}
% \end{macro}
% \end{macro}
%
-% \subsection{Additions to \pkg{l3skip}}
-%
% \begin{macrocode}
%<@@=skip>
% \end{macrocode}
@@ -2613,7 +2527,7 @@
% There are four cases: empty token list, token list starting with
% a normal token, with a brace group, or with a space token.
% If the token list starts with a normal token, remove it
-% and check for emptyness. Otherwise, compare with a single
+% and check for emptiness. Otherwise, compare with a single
% space, only case where we have a single token.
% \begin{macrocode}
\prg_new_conditional:Npnn \tl_if_single_token:n #1 { p , T , F , TF }
@@ -2668,7 +2582,7 @@
% \begin{macro}[EXP]{\tl_count_tokens:n}
% \begin{macro}[EXP,aux]{\@@_act_count_normal:nN,
% \@@_act_count_group:nn,\@@_act_count_space:n}
-% The token coung is computed through an \cs{int_eval:n} construction.
+% The token count is computed through an \cs{int_eval:n} construction.
% Each \texttt{1+} is output to the \emph{left}, into the integer
% expression, and the sum is ended by the \cs{c_zero} inserted by
% \cs{@@_act_end:wn}. Somewhat a hack.
@@ -2694,7 +2608,7 @@
% \end{macro}
%
% \begin{variable}{\c_@@_act_uppercase_tl, \c_@@_act_lowercase_tl}
-% These constants contain the correspondance between lowercase
+% These constants contain the correspondence between lowercase
% and uppercase letters, in the form |aAbBcC...| and |AaBbCc...|
% respectively.
% \begin{macrocode}
@@ -2715,7 +2629,7 @@
% \begin{macro}[EXP,aux]{\@@_act_case_normal:nN,
% \@@_act_case_group:nn,\@@_act_case_space:n}
% The only difference between uppercasing and lowercasing is
-% the table of correspondance that is used. As for other
+% the table of correspondence that is used. As for other
% token list actions, we feed \cs{@@_act:NNNnn} three
% functions, and this time, we use the \meta{parameters}
% argument to carry which case-changing we are applying.
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
index 333bbb9402a..1065a889bc5 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 4414 2013-01-08 12:32:12Z bruno $
+\GetIdInfo$Id: l3clist.dtx 4500 2013-05-26 11:18:19Z bruno $
{L3 Comma separated lists}
%</driver|package>
%<*driver>
@@ -420,6 +420,64 @@
% \emph{i.e.}~every item in a \meta{comma list} is unique.
% \end{function}
%
+% \section{Using the content of comma lists directly}
+%
+% \begin{function}[EXP, added = 2013-05-26]{\clist_use:Nnnn, \clist_use:cnnn}
+% \begin{syntax}
+% \cs{clist_use:Nnnn} \meta{clist~var} \Arg{separator~between~two} \Arg{separator~between~more~than~two} \Arg{separator~between~final~two}
+% \end{syntax}
+% Places the contents of the \meta{clist~var} in the input stream,
+% with the appropriate \meta{separator} between the items. Namely, if
+% the comma list has more than two items, the \meta{separator between
+% more than two} is placed between each pair of items except the
+% last, for which the \meta{separator between final two} is used. If
+% the comma list has exactly two items, then they are placed in the input
+% stream separated by the \meta{separator between two}. If the comma
+% list has a single item, it is placed in the input stream, and a comma
+% list with no items produces no output. An error will be raised if
+% the variable does not exist or if it is invalid.
+%
+% For example,
+% \begin{verbatim}
+% \clist_set:Nn \l_tmpa_clist { a , b , , c , {de} , f }
+% \clist_use:Nnnn \l_tmpa_clist { ~and~ } { ,~ } { ,~and~ }
+% \end{verbatim}
+% will insert \enquote{\texttt{a, b, c, de, and f}} in the input
+% stream. The first separator argument is not used in this case
+% because the comma list has more than $2$ items.
+% \begin{texnote}
+% The result is returned within the \tn{unexpanded}
+% primitive (\cs{exp_not:n}), which means that the \meta{items}
+% will not expand further when appearing in an \texttt{x}-type
+% argument expansion.
+% \end{texnote}
+% \end{function}
+%
+% \begin{function}[EXP, added = 2013-05-26]{\clist_use:Nn, \clist_use:cn}
+% \begin{syntax}
+% \cs{clist_use:Nn} \meta{clist~var} \Arg{separator}
+% \end{syntax}
+% Places the contents of the \meta{clist~var} in the input stream,
+% with the \meta{separator} between the items. If the comma
+% list has a single item, it is placed in the input stream, and a comma
+% list with no items produces no output. An error will be raised if
+% the variable does not exist or if it is invalid.
+%
+% For example,
+% \begin{verbatim}
+% \clist_set:Nn \l_tmpa_clist { a , b , , c , {de} , f }
+% \clist_use:Nn \l_tmpa_clist { ~and~ }
+% \end{verbatim}
+% will insert \enquote{\texttt{a and b and c and de and f}} in the input
+% stream.
+% \begin{texnote}
+% The result is returned within the \tn{unexpanded}
+% primitive (\cs{exp_not:n}), which means that the \meta{items}
+% will not expand further when appearing in an \texttt{x}-type
+% argument expansion.
+% \end{texnote}
+% \end{function}
+%
% \section{Comma lists as stacks}
%
% Comma lists can be used as stacks, where data is pushed to and popped
@@ -1347,6 +1405,70 @@
% \end{macro}
% \end{macro}
%
+% \subsection{Using comma lists}
+%
+% \begin{macro}[EXP]{\clist_use:Nnnn, \clist_use:cnnn}
+% \begin{macro}[EXP, aux]
+% {\@@_use:wwn, \@@_use:nwwwwnwn, \@@_use:nwwn}
+% \begin{macro}[EXP]{\clist_use:Nn, \clist_use:cn}
+% First check that the variable exists. Then count the items in the
+% comma list. If it has none, output nothing. If it has one item,
+% output that item, brace stripped (note that space-trimming has
+% already been done when the comma list was assigned). If it has two,
+% place the \meta{separator~between~two} in the middle.
+%
+% Otherwise, \cs{@@_use:nwwwwnwn} takes the following arguments; 1:
+% a \meta{separator}, 2, 3, 4: three items from the comma list (or
+% quarks), 5: the rest of the comma list, 6: a \meta{continuation}
+% function (\texttt{use_ii} or \texttt{use_iii} with its
+% \meta{separator} argument), 7: junk, and 8: the temporary result,
+% which is built in a brace group following \cs{q_stop}. The
+% \meta{separator} and the first of the three items are placed in the
+% result, then we use the \meta{continuation}, placing the remaining
+% two items after it. When we begin this loop, the three items really
+% belong to the comma list, the first \cs{q_mark} is taken as a
+% delimiter to the \texttt{use_ii} function, and the continuation is
+% \texttt{use_ii} itself. When we reach the last two items of the
+% original token list, \cs{q_mark} is taken as a third item, and now
+% the second \cs{q_mark} serves as a delimiter to \texttt{use_ii},
+% switching to the other \meta{continuation}, \texttt{use_iii}, which
+% uses the \meta{separator between final two}.
+% \begin{macrocode}
+\cs_new:Npn \clist_use:Nnnn #1#2#3#4
+ {
+ \clist_if_exist:NTF #1
+ {
+ \int_case:nnn { \clist_count:N #1 }
+ {
+ { 0 } { }
+ { 1 } { \exp_after:wN \@@_use:wwn #1 , , { } }
+ { 2 } { \exp_after:wN \@@_use:wwn #1 , {#2} }
+ }
+ {
+ \exp_after:wN \@@_use:nwwwwnwn
+ \exp_after:wN { \exp_after:wN } #1 ,
+ \q_mark , { \@@_use:nwwwwnwn {#3} }
+ \q_mark , { \@@_use:nwwn {#4} }
+ \q_stop { }
+ }
+ }
+ { \__msg_kernel_expandable_error:nnn { kernel } { bad-variable } {#1} }
+ }
+\cs_generate_variant:Nn \clist_use:Nnnn { c }
+\cs_new:Npn \@@_use:wwn #1 , #2 , #3 { \exp_not:n { #1 #3 #2 } }
+\cs_new:Npn \@@_use:nwwwwnwn
+ #1#2 , #3 , #4 , #5 \q_mark , #6#7 \q_stop #8
+ { #6 {#3} , {#4} , #5 \q_mark , {#6} #7 \q_stop { #8 #1 #2 } }
+\cs_new:Npn \@@_use:nwwn #1#2 , #3 \q_stop #4
+ { \exp_not:n { #4 #1 #2 } }
+\cs_new:Npn \clist_use:Nn #1#2
+ { \clist_use:Nnnn #1 {#2} {#2} {#2} }
+\cs_generate_variant:Nn \clist_use:Nn { c }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
% \subsection{Viewing comma lists}
%
% \begin{macro}{\clist_show:N, \clist_show:c}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx b/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx
index 4696adddd6f..4fded9b0079 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx
@@ -36,7 +36,7 @@
%
%<*driver|package>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3drivers.dtx 4280 2012-11-07 07:13:51Z joseph $
+\GetIdInfo$Id: l3drivers.dtx 4505 2013-06-28 22:06:04Z joseph $
{L3 Experimental drivers}
%</driver|package>
%<*driver>
@@ -227,14 +227,14 @@
{ \tex_special:D { ps:gsave } }
%</dvips>
%<*dvipdfmx|xdvipdfmx>
- { \tex_special:D { pdf:bcontent } }
+ { \tex_special:D { pdf:content~q } }
%</dvipdfmx|xdvipdfmx>
\cs_new_protected_nopar:Npn \@@_graphic_state_restore:
%<*dvips>
{ \tex_special:D { ps:grestore } }
%</dvips>
%<*dvipdfmx|xdvipdfmx>
- { \tex_special:D { pdf:econtent } }
+ { \tex_special:D { pdf:content~Q } }
%</dvipdfmx|xdvipdfmx>
%</!pdfmode>
% \end{macrocode}
@@ -353,10 +353,32 @@
}
%</!dvips>
% \end{macrocode}
+% For \texttt{(x)dvipdfmx} the is a bit more to do yet. Using
+% \texttt{pdf:bcontent}/\texttt{pdf:econtent} for scoping seems the easiest
+% approach, but only works reliably when all of the specials used are
+% \texttt{pdf:\ldots} ones. As (some) PostScript specials can also be used
+% with \texttt{(x)dvipdfmx}, that is not safe and can give unexpected output.
+% To get everything in the right place, what is required is that the
+% insertion point for the clip and the \TeX{} box material are the same. That
+% is done by flipping the axes twice with an additional scope level in
+% between. The scoping level moves to the \enquote{current point}, which
+% due to the axis inversion is the \emph{start} of the clip. The second
+% inversion puts things back to normal, the \TeX{} material is inserted and
+% then the extra scope is closed (below).
+% \begin{macrocode}
+%<*dvipdfmx|xdvipdfmx>
+ \@@_pdf_matrix:n { -1~0~0~-1 }
+ \@@_graphic_state_save:
+ \@@_pdf_matrix:n { -1~0~0~-1 }
+%</dvipdfmx|xdvipdfmx>
+% \end{macrocode}
% Insert the material in a box of no width, restore the graphic state
% and then insert the necessary width.
% \begin{macrocode}
\hbox_overlap_right:n { \box_use:N #1 }
+%<*dvipdfmx|xdvipdfmx>
+ \@@_graphic_state_restore:
+%</dvipdfmx|xdvipdfmx>
\@@_graphic_state_restore:
\skip_horizontal:n { \box_wd:N #1 }
}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx b/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
index 739acab95e5..9d19c801958 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 4458 2013-02-03 15:49:37Z bruno $
+\GetIdInfo$Id: l3expan.dtx 4521 2013-07-09 11:45:31Z joseph $
{L3 Argument expansion}
%</driver|package>
%<*driver>
@@ -78,7 +78,7 @@
% variants.
%
% \section{Defining new variants}
-% \label{sec:defining-variants}
+% \label{sec:l3expan:defining-variants}
%
% The definition of variant forms for base functions may be necessary
% when writing new functions or when applying a kernel function in a
@@ -117,7 +117,7 @@
%
% \section{Methods for defining variants}
%
-% \begin{function}[updated = 2012-08-28]{\cs_generate_variant:Nn}
+% \begin{function}[updated = 2013-07-09]{\cs_generate_variant:Nn}
% \begin{syntax}
% \cs{cs_generate_variant:Nn} \meta{parent control sequence} \Arg{variant argument specifiers}
% \end{syntax}
@@ -447,7 +447,7 @@
% \end{syntax}
% These functions absorb the number of arguments given by their
% specification, carry out the expansion
-% indicated and leave the the results in the input stream, with the
+% indicated and leave the results in the input stream, with the
% last argument not surrounded by the usual braces.
% Of these, the \texttt{:Nno}, \texttt{:Noo}, and \texttt{:Nfo}
% variants need special (slower) processing.
@@ -648,8 +648,8 @@
% point, and so is never going to be expandable.)
%
% The definition of expansion functions with this technique happens
-% in section~\ref{sec:gendef}.
-% In section~\ref{sec:handtune} some common cases are coded by a more direct
+% in section~\ref{sec:l3expan:gendef}.
+% In section~\ref{sec:l3expan:handtune} some common cases are coded by a more direct
% method for efficiency, typically using calls to \cs{exp_after:wN}.
%
% \begin{variable}{\l_@@_internal_tl}
@@ -877,7 +877,7 @@
% \end{macro}
%
% \subsection{Hand-tuned definitions}
-% \label{sec:handtune}
+% \label{sec:l3expan:handtune}
%
% One of the most important features of these functions is that they
% are fully expandable and therefore allow to prefix them with
@@ -1027,7 +1027,7 @@
% \end{macro}
%
% \subsection{Definitions with the automated technique}
-% \label{sec:gendef}
+% \label{sec:l3expan:gendef}
%
% Some of these could be done more efficiently, but the complexity of
% coding then becomes an issue. Notice that the auto-generated functions
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
index 67461fd01c9..6b76cf6b341 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 4446 2013-01-14 00:03:17Z bruno $
+\GetIdInfo$Id: l3file.dtx 4483 2013-05-01 10:57:41Z bruno $
{L3 File and I/O operations}
%</driver|package>
%<*driver>
@@ -910,7 +910,7 @@
% auxiliary function does not issue an error if the file is not found.
% \begin{macrocode}
\prg_new_protected_conditional:Npnn \ior_open:Nn #1#2 { T , F , TF }
- { \__file_name_sanitize:nn {#2} { \@@_open:NnTF #1 } }
+ { \__file_name_sanitize:nn {#2} { \@@_open_aux:NnTF #1 } }
\cs_generate_variant:Nn \ior_open:NnT { c }
\cs_generate_variant:Nn \ior_open:NnF { c }
\cs_generate_variant:Nn \ior_open:NnTF { c }
@@ -1374,7 +1374,7 @@
% \c_@@_wrap_indent_marker_tl,
% \c_@@_wrap_unindent_marker_tl
% }
-% Every special action of the wrapping code is preceeded by
+% Every special action of the wrapping code is preceded by
% the same recognizable string, \cs{c_@@_wrap_marker_tl}.
% Upon seeing that \enquote{word}, the wrapping code reads
% one space-delimited argument to know what operation to
@@ -1683,7 +1683,7 @@
% Deprecated on 2012-06-28, for removal by 2012-12-31.
%
% \begin{macro}{\iow_wrap:xnnnN}
-% This was renamed and one unneed argument was removed.
+% This was renamed and one unneeded argument was removed.
% \begin{macrocode}
%<*deprecated>
\cs_new_protected:Npn \iow_wrap:xnnnN #1#2#3#4#5
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3format.ins b/Master/texmf-dist/source/latex/l3kernel/l3format.ins
new file mode 100644
index 00000000000..76fe0ee3e76
--- /dev/null
+++ b/Master/texmf-dist/source/latex/l3kernel/l3format.ins
@@ -0,0 +1,92 @@
+\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/l3fp-basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
index 6dee0ef45bc..cdc2e983983 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
@@ -36,7 +36,7 @@
%
%<*driver>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3fp-basics.dtx 4163 2012-08-30 16:33:11Z bruno $
+\GetIdInfo$Id: l3fp-basics.dtx 4482 2013-04-24 21:05:12Z joseph $
{L3 Floating-point arithmetic}
\documentclass[full]{l3doc}
\begin{document}
@@ -895,7 +895,7 @@
% \end{quote}
% Note the three semicolons at the end of the definition. One is for
% the last \cs{@@_mul_significand_drop:NNNNNw}; one is for
-% \cs{@@_round_digit:Nw} later on; and one, preceeded by
+% \cs{@@_round_digit:Nw} later on; and one, preceded by
% \cs{exp_after:wN}, which is correctly expanded (within an
% \cs{__int_eval:w}), is used by \cs{@@_basics_pack_low:NNNNNw}.
%
@@ -1020,7 +1020,7 @@
% exceptions display |/| rather than |*|. In the formula for
% dispatch, we replace |- \c_two +| by |-|. The case of normal
% numbers is treated using \cs{@@_div_npos_o:Nww} rather than
-% \cs{@@_mul_npos_o:Nww}. There are two additionnal cases: if the
+% \cs{@@_mul_npos_o:Nww}. There are two additional cases: if the
% first operand is normal and the second is a zero, then the division
% by zero exception is raised: cases $10$ and $11$ of the
% \cs{if_case:w} construction in \cs{@@_mul_cases_o:NnNnww} are
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
index d6f76c3b0c1..f0782a2eed4 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
@@ -36,7 +36,7 @@
%
%<*driver>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3fp-expo.dtx 4163 2012-08-30 16:33:11Z bruno $
+\GetIdInfo$Id: l3fp-expo.dtx 4482 2013-04-24 21:05:12Z joseph $
{L3 Floating-point exponential-related functions}
\documentclass[full]{l3doc}
\begin{document}
@@ -96,7 +96,7 @@
% \ln (a \cdot 10^b) = b \cdot \ln (10) - \ln (c/5) + \ln (ac/5).
% \end{equation*}
% The logarithms $\ln(10)$ and $\ln(c/5)$ are looked up in a table. The
-% last term is computed using the following Talor series of $\ln$ near
+% last term is computed using the following Taylor series of $\ln$ near
% $1$:
% \begin{equation*}
% \ln\left(\frac{ac}{5}\right)
@@ -264,7 +264,7 @@
% both $A$ and $Z$ are arbitrary, in the range $[0.1,1)$,
% and we had to monitor the growth of the sequence of
% remainders $A$, $B$, $C$, etc. to ensure that no overflow
-% occured during the computation of the next quotient.
+% occurred during the computation of the next quotient.
% The main source of risk was our choice to define the
% quotient as roughly $10^9 \cdot A / 10^5 \cdot Z$: then
% $A$ was bound to be below $2.147\cdots$, and this limit
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
index 9d5ff40b7ca..79e96d7715c 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
@@ -36,7 +36,7 @@
%
%<*driver>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3fp-extended.dtx 4339 2012-11-24 19:16:43Z joseph $
+\GetIdInfo$Id: l3fp-extended.dtx 4482 2013-04-24 21:05:12Z joseph $
{L3 Floating-point extended precision fixed-points}
\documentclass[full]{l3doc}
\begin{document}
@@ -482,7 +482,7 @@
% $a_{1} \cdot b_{1}$ for $10^{-8}$, $(a_{1} \cdot b_{2} + a_{2} \cdot
% b_{1})$ for $10^{-12}$, and $(a_{1} \cdot b_{3} + a_{2} \cdot b_{2}
% + a_{3} \cdot b_{1} + c_{3} c_{4})$ for $10^{-16}$. The $a$--$b$
-% products huse the sign |#1|. Note that |#2| is empty for
+% products use the sign |#1|. Note that |#2| is empty for
% \cs{@@_fixed_one_minus_mul:wwn}. We call the \texttt{ii} auxiliary
% for levels $10^{-20}$ and $10^{-24}$, keeping the pieces of \meta{a}
% we've read, but not \meta{b}, since there is another copy later in
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
index cd67aa2b2c1..a9e926bcaeb 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
@@ -36,7 +36,7 @@
%
%<*driver>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3fp-parse.dtx 4339 2012-11-24 19:16:43Z joseph $
+\GetIdInfo$Id: l3fp-parse.dtx 4482 2013-04-24 21:05:12Z joseph $
{L3 Floating-point expression parsing}
\documentclass[full]{l3doc}
\begin{document}
@@ -341,9 +341,9 @@
% and in red. Tokens that have not yet been read (and could
% still be hidden in macros) are in gray.
%
-% In a first reading, the disinction between the \meta{precedence}
+% In a first reading, the distinction between the \meta{precedence}
% \fpPrecedence{+}, the operation \fpOperation{+}, and the character
-% token |+| should not matter. It is only required to accomodate for
+% token |+| should not matter. It is only required to accommodate for
% multi-token infix operators such as |**|: indeed, when controlling
% expansion, we need to skip over those tokens using \cs{exp_after:wN},
% and this only skips one token. Thus |**| needs to be replaced by a
@@ -412,7 +412,7 @@
% taken care of by the same mechanism, and functions (\texttt{sin},
% \texttt{exp}, etc.) as well. Finding the argument of the unary
% |-|, for instance, is very similar to grabbing the second operand
-% of a binary infix operator, with a small subtelty on precedence
+% of a binary infix operator, with a small subtlety on precedence
% explained below. Once that argument is found, its sign can be
% flipped. A left parenthesis is just a prefix operator which
% removes the closing parenthesis (with some extra checks).
@@ -866,9 +866,9 @@
% first token after \texttt{f}-expansion:
% \begin{itemize}
% \item \cs{tex_relax:D} in some form. That can be an internal
-% floating point, a premature end, or an unitialized register.
+% floating point, a premature end, or an uninitialized register.
% \item A register. We interpret this as the significand of a floating
-% point number. This is subtely different from unpacking it, for
+% point number. This is subtly different from unpacking it, for
% instance, \texttt{\cs{c_minus_one}**2} gives $1$, while
% \texttt{-1**2} gives $-1$.
% \item A digit, or a dot. That marks the start of the significand for
@@ -1537,7 +1537,7 @@
% \begin{macro}[aux, rEXP]{\@@_parse_exponent:Nw}
% This auxiliary is convenient to smuggle some material through
% \cs{fi:} ending conditional processing. We place those \cs{fi:}
-% (argument |#2|) at a very odd place becase this allows us to insert
+% (argument |#2|) at a very odd place because this allows us to insert
% \cs{__int_eval:w} \ldots{} there if needed.
% \begin{macrocode}
\cs_new:Npn \@@_parse_exponent:Nw #1 #2 \@@_parse_expand:w
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
index 09efdfdd58f..d4f0a435ec9 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
@@ -36,7 +36,7 @@
%
%<*driver|package>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3fp.dtx 4449 2013-01-19 23:55:05Z bruno $
+\GetIdInfo$Id: l3fp.dtx 4521 2013-07-09 11:45:31Z joseph $
{L3 Floating points}
%</driver|package>
%<*driver>
@@ -119,11 +119,11 @@
% Floating point numbers can be given either explicitly (in a form such
% as |1.234e-34|, or |-.0001|), or as a stored floating point variable,
% which is automatically replaced by its current value. See
-% section~\ref{sec:fp-floats} for a description of what a floating point is,
-% section~\ref{sec:fp-precedence} for details about how an expression is
-% parsed, and section~\ref{sec:fp-operations} to know what the various
+% section~\ref{sec:l3fp:fp-floats} for a description of what a floating point is,
+% section~\ref{sec:l3fp:fp-precedence} for details about how an expression is
+% parsed, and section~\ref{sec:l3fp:fp-operations} to know what the various
% operations do. Some operations may raise exceptions (error messages),
-% described in section~\ref{sec:fp-exceptions}.
+% described in section~\ref{sec:l3fp:fp-exceptions}.
%
% An example of use could be the following.
% \begin{verbatim}
@@ -533,7 +533,7 @@
% \end{variable}
%
% \section{Floating point exceptions}
-% \label{sec:fp-exceptions}
+% \label{sec:l3fp:fp-exceptions}
%
% \emph{The functions defined in this section are experimental, and
% their functionality may be altered or removed altogether.}
@@ -637,7 +637,7 @@
%
% \section{Floating point expressions}
%
-% \subsection{Input of floating point numbers} \label{sec:fp-floats}
+% \subsection{Input of floating point numbers} \label{sec:l3fp:fp-floats}
%
% We support four types of floating point numbers:
% \begin{itemize}
@@ -705,7 +705,7 @@
% \texttt{exp(1)} or \cs{c_e_fp}.
%
% \subsection{Precedence of operators}
-% \label{sec:fp-precedence}
+% \label{sec:l3fp:fp-precedence}
%
% We list here all the operations supported in floating point
% expressions, in order of decreasing precedence: operations listed
@@ -731,7 +731,7 @@
% Functions are called on the value of their argument, contrarily to
% \TeX{} macros.
%
-% \subsection{Operations} \label{sec:fp-operations}
+% \subsection{Operations} \label{sec:l3fp:fp-operations}
%
% We now present the various operations allowed in floating point
% expressions, from the lowest precedence to the highest. When used as
@@ -789,7 +789,7 @@
% \cs{fp_eval:n} \{ \meta{operand_1} \meta{comparison} \meta{operand_2} \}
% \end{syntax}
% The \meta{comparison} consists of a non-empty string of |<|, |=|,
-% |>|, and |?|, optionally preceeded by |!|. It may not start with
+% |>|, and |?|, optionally preceded by |!|. It may not start with
% |?|. This evaluates to $+1$ if the \meta{comparison} between the
% \meta{operand_1} and \meta{operand_2} is true, and $+0$ otherwise.
% \end{function}
@@ -879,7 +879,7 @@
% \cs{fp_eval:n} \{ |max(| \meta{fpexpr_1} |,| \meta{fpexpr_2} |,| \ldots{} |)| \}
% \cs{fp_eval:n} \{ |min(| \meta{fpexpr_1} |,| \meta{fpexpr_2} |,| \ldots{} |)| \}
% \end{syntax}
-% Evalutes each \meta{fpexpr} and computes the largest (smallest) of
+% Evaluates each \meta{fpexpr} and computes the largest (smallest) of
% those. If any of the \meta{fpexpr} is a \nan{}, the result is
% \nan{}. Those operations do not raise exceptions.
% \end{function}
@@ -1081,7 +1081,7 @@
% \begin{itemize}
% \item Optimize argument reduction for trigonometric functions: we
% don't need $6\times 4$ digits here, only $4\times 4$.
-% \item In subsection~\ref{sec:fp-floats}, write a grammar.
+% \item In subsection~\ref{sec:l3fp:fp-floats}, write a grammar.
% \item Fix the |TWO BARS| business with the index.
% \item It would be nice if the \texttt{parse} auxiliaries for each
% operation were set up in the corresponding module, rather than
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
index dcea709ebbc..f1f034553aa 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 4444 2013-01-13 20:27:20Z bruno $
+\GetIdInfo$Id: l3int.dtx 4482 2013-04-24 21:05:12Z joseph $
{L3 Integers}
%</driver|package>
%<*driver>
@@ -949,7 +949,7 @@
% \begin{macro}{\int_eval:n}
% Wrapper for \cs{@@_eval:w}. Can be used in an integer expression
% or directly in the input stream. In format mode, there is already
-% a definition in \pkg{l3alloc} for bookstrapping, which is therefore
+% a definition in \pkg{l3alloc} for bootstrapping, which is therefore
% corrected to the \enquote{real} version here.
% \begin{macrocode}
%<*initex>
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
index 3d38853224a..3ad30990c73 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 4461 2013-02-24 18:55:17Z joseph $
+\GetIdInfo$Id: l3keys.dtx 4544 2013-07-12 07:14:52Z joseph $
{L3 Experimental key-value interfaces}
%</driver|package>
%<*driver>
@@ -68,21 +68,22 @@
% \begin{documentation}
%
% The key--value method is a popular system for creating large numbers
-% of settings for controlling function or package behaviour. For the
-% user, the system normally results in input of the form
+% of settings for controlling function or package behaviour. The
+% system normally results in input of the form
% \begin{verbatim}
-% \PackageControlMacro{
+% \MyModuleSetup{
% key-one = value one,
% key-two = value two
% }
% \end{verbatim}
% or
% \begin{verbatim}
-% \PackageMacro[
+% \MyModuleMacro[
% key-one = value one,
% key-two = value two
-% ]{argument}.
+% ]{argument}
% \end{verbatim}
+% for the user.
%
% The high level functions here are intended as a method to create
% key--value controls. Keys are themselves created using a key--value
@@ -90,15 +91,15 @@
% required. Each key is created by setting one or more \emph{properties}
% of the key:
% \begin{verbatim}
-% \keys_define:nn { module }
+% \keys_define:nn { mymodule }
% {
% key-one .code:n = code including parameter #1,
-% key-two .tl_set:N = \l_module_store_tl
+% key-two .tl_set:N = \l_mymodule_store_tl
% }
% \end{verbatim}
% These values can then be set as with other key--value approaches:
% \begin{verbatim}
-% \keys_set:nn { module }
+% \keys_set:nn { mymodule }
% {
% key-one = value one,
% key-two = value two
@@ -108,15 +109,15 @@
% At a document level, \cs{keys_set:nn} will be used within a
% document function, for example
% \begin{verbatim}
-% \DeclareDocumentCommand \SomePackageSetup { m }
-% { \keys_set:nn { module } { #1 } }
-% \DeclareDocumentCommand \SomePackageMacro { o m }
-% {
-% \group_begin:
-% \keys_set:nn { module } { #1 }
-% % Main code for \SomePackageMacro
-% \group_end:
-% }
+% \DeclareDocumentCommand \MyModuleSetup { m }
+% { \keys_set:nn { mymodule } { #1 } }
+% \DeclareDocumentCommand \MyModuleMacro { o m }
+% {
+% \group_begin:
+% \keys_set:nn { mymodule } { #1 }
+% % Main code for \MyModuleMacro
+% \group_end:
+% }
% \end{verbatim}
%
% Key names may contain any tokens, as they are handled internally
@@ -126,13 +127,13 @@
% groups. Functions and variables are \emph{not} expanded when creating
% key names, and so
% \begin{verbatim}
-% \tl_set:Nn \l_module_tmp_tl { key }
-% \keys_define:nn { module }
+% \tl_set:Nn \l_mymodule_tmp_tl { key }
+% \keys_define:nn { mymodule }
% {
-% \l_module_tmp_tl .code:n = code
+% \l_mymodule_tmp_tl .code:n = code
% }
% \end{verbatim}
-% will create a key called \cs{l_module_tmp_tl}, and not one called
+% will create a key called \cs{l_mymodule_tmp_tl}, and not one called
% \texttt{key}.
%
% \section{Creating keys}
@@ -164,32 +165,36 @@
% \end{function}
%
% The various properties available take either no arguments at
-% all, or require exactly one argument. This is indicated in the
+% all, or require one or more arguments. This is indicated in the
% name of the property using an argument specification. In the following
% discussion, each property is illustrated attached to an
% arbitrary \meta{key}, which when used may be supplied with a
% \meta{value}. All key \emph{definitions} are local.
%
-% \begin{function}{.bool_set:N, .bool_gset:N}
+% \begin{function}[updated = 2013-07-08]
+% {.bool_set:N, .bool_set:c, .bool_gset:N, .bool_gset:c}
% \begin{syntax}
% \meta{key} .bool_set:N = \meta{boolean}
% \end{syntax}
% Defines \meta{key} to set \meta{boolean} to \meta{value} (which
% must be either \texttt{true} or \texttt{false}). If the variable
-% does not exist, it will be created at the point that the key is
-% set up.
+% does not exist, it will be created globally at the point that
+% the key is set up.
% \end{function}
%
-% \begin{function}[added = 2011-08-28]
-% {.bool_set_inverse:N, .bool_gset_inverse:N}
+% \begin{function}[added = 2011-08-28, updated = 2013-07-08]
+% {
+% .bool_set_inverse:N, .bool_set_inverse:c,
+% .bool_gset_inverse:N, .bool_gset_inverse:c
+% }
% \begin{syntax}
% \meta{key} .bool_set_inverse:N = \meta{boolean}
% \end{syntax}
% Defines \meta{key} to set \meta{boolean} to the logical
% inverse of \meta{value} (which must be either \texttt{true} or
% \texttt{false}).
-% If the \meta{boolean} does not exist, it will be created at the point
-% that the key is set up.
+% If the \meta{boolean} does not exist, it will be created globally
+% at the point that the key is set up.
% \end{function}
%
% \begin{function}{.choice:}
@@ -198,10 +203,11 @@
% \end{syntax}
% Sets \meta{key} to act as a choice key. Each valid choice
% for \meta{key} must then be created, as discussed in
-% section~\ref{sec:choice}.
+% section~\ref{sec:l3keys:choice}.
% \end{function}
%
-% \begin{function}[added = 2011-08-21]{.choices:nn}
+% \begin{function}[added = 2011-08-21, updated = 2013-07-10]
+% {.choices:nn, .choices:Vn, .choices:on, .choices:xn}
% \begin{syntax}
% \meta{key} .choices:nn \meta{choices} \meta{code}
% \end{syntax}
@@ -210,22 +216,10 @@
% \cs{l_keys_choice_tl} will be the name of the choice made, and
% \cs{l_keys_choice_int} will be the position of the choice in the list
% of \meta{choices} (indexed from~$1$).
-% Choices are discussed in detail in section~\ref{sec:choice}.
+% Choices are discussed in detail in section~\ref{sec:l3keys:choice}.
% \end{function}
%
-% \begin{function}{.choice_code:n, .choice_code:x}
-% \begin{syntax}
-% \meta{key} .choice_code:n = \meta{code}
-% \end{syntax}
-% Stores \meta{code} for use when \texttt{.generate_choices:n} creates
-% one or more choice sub-keys of the current key. Inside \meta{code},
-% \cs{l_keys_choice_tl} will expand to the name of the choice made, and
-% \cs{l_keys_choice_int} will be the position of the choice in the list
-% given to \texttt{.generate_choices:n}. Choices are discussed in
-% detail in section~\ref{sec:choice}.
-% \end{function}
-%
-% \begin{function}[added=2011/09/11]
+% \begin{function}[added=2011-09-11]
% {.clist_set:N, .clist_set:c, .clist_gset:N, .clist_gset:c}
% \begin{syntax}
% \meta{key} .clist_set:N = \meta{comma list variable}
@@ -233,21 +227,22 @@
% Defines \meta{key} to set \meta{comma list variable} to \meta{value}.
% Spaces around commas and empty items will be stripped.
% If the variable does not exist, it
-% will be created at the point that the key is set up.
+% will be created globally at the point that the key is set up.
% \end{function}
%
-% \begin{function}{.code:n, .code:x}
+% \begin{function}[updated = 2013-07-10]{.code:n}
% \begin{syntax}
% \meta{key} .code:n = \meta{code}
% \end{syntax}
% Stores the \meta{code} for execution when \meta{key} is used. The
-% The \meta{code} can include one parameter ("#1"), which will be the
+% The \meta{code} can include one parameter (|#1|), which will be the
% \meta{value} given for the \meta{key}. The \texttt{x}-type variant
% will expand \meta{code} at the point where the \meta{key} is
% created.
% \end{function}
%
-% \begin{function}{.default:n, .default:V}
+% \begin{function}[updated = 2013-07-09]
+% {.default:n, .default:V, .default:o, .default:x}
% \begin{syntax}
% \meta{key} .default:n = \meta{default}
% \end{syntax}
@@ -255,12 +250,12 @@
% value is given. This will be used if only the key name is given,
% but not if a blank \meta{value} is given:
% \begin{verbatim}
-% \keys_define:nn { module }
+% \keys_define:nn { mymodule }
% {
% key .code:n = Hello~#1,
% key .default:n = World
% }
-% \keys_set:nn { module }
+% \keys_set:nn { mymodule }
% {
% key = Fred, % Prints 'Hello Fred'
% key, % Prints 'Hello World'
@@ -275,7 +270,7 @@
% \end{syntax}
% Defines \meta{key} to set \meta{dimension} to \meta{value} (which
% must a dimension expression). If the variable does not exist, it
-% will be created at the point that the key is set up.
+% will be created globally at the point that the key is set up.
% \end{function}
%
% \begin{function}{.fp_set:N, .fp_set:c, .fp_gset:N, .fp_gset:c}
@@ -283,29 +278,18 @@
% \meta{key} .fp_set:N = \meta{floating point}
% \end{syntax}
% Defines \meta{key} to set \meta{floating point} to \meta{value}
-% (which must a floating point number). If the variable does not exist,
-% it will be created at the point that the key is set up.
+% (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}{.generate_choices:n}
-% \begin{syntax}
-% \meta{key} .generate_choices:n = \Arg{list}
-% \end{syntax}
-% This property will mark \meta{key} as a multiple choice key,
-% and will use the \meta{list} to define the choices. The \meta{list}
-% should consist of a comma-separated list of choice names. Each
-% choice will be set up to execute \meta{code} as set using
-% \texttt{.choice_code:n} (or \texttt{.choice_code:x}). Choices are
-% discussed in detail in section~\ref{sec:choice}.
-% \end{function}
-%
-% \begin{function}[added = 2012-06-02]{.initial:n, .initial:V}
+% \begin{function}[updated = 2013-07-09]
+% {.initial:n, .initial:V, .initial:o, .initial:x}
% \begin{syntax}
% \meta{key} .initial:n = \meta{value}
% \end{syntax}
% Initialises the \meta{key} with the \meta{value}, equivalent to
% \begin{quote}
-% \cs{keys_set:nn} \marg{module} \{ \meta{key} = \meta{value} \}
+% \cs{keys_set:nn} \Arg{module} \{ \meta{key} = \meta{value} \}
% \end{quote}
% \end{function}
%
@@ -315,10 +299,10 @@
% \end{syntax}
% Defines \meta{key} to set \meta{integer} to \meta{value} (which
% must be an integer expression). If the variable does not exist, it
-% will be created at the point that the key is set up.
+% will be created globally at the point that the key is set up.
% \end{function}
%
-% \begin{function}{.meta:n, .meta:x}
+% \begin{function}[updated = 2013-07-10]{.meta:n}
% \begin{syntax}
% \meta{key} .meta:n = \Arg{keyval list}
% \end{syntax}
@@ -327,6 +311,17 @@
% is used, then the value will be passed through to the subsidiary
% \meta{keys} for processing (as |#1|).
% \end{function}
+%
+% \begin{function}[added = 2013-07-10]{.meta:nn}
+% \begin{syntax}
+% \meta{key} .meta:nn = \Arg{path} \Arg{keyval list}
+% \end{syntax}
+% Makes \meta{key} a meta-key, which will set \meta{keyval list} in
+% one go using the \meta{path} in place of the current one.
+% If \meta{key} is given with a value at the time the key
+% is used, then the value will be passed through to the subsidiary
+% \meta{keys} for processing (as |#1|).
+% \end{function}
%
% \begin{function}[added = 2011-08-21]{.multichoice:}
% \begin{syntax}
@@ -334,12 +329,11 @@
% \end{syntax}
% Sets \meta{key} to act as a multiple choice key. Each valid choice
% for \meta{key} must then be created, as discussed in
-% section~\ref{sec:choice}.
-%
-% \textbf{This property is experimental.}
+% section~\ref{sec:l3keys:choice}.
% \end{function}
%
-% \begin{function}[added = 2011-08-21]{.multichoices:nn}
+% \begin{function}[added = 2011-08-21, updated = 2013-07-10]
+% {.multichoices:nn, .multichoices:Vn, .multichoices:on, .multichoices:xn}
% \begin{syntax}
% \meta{key} .multichoices:nn \meta{choices} \meta{code}
% \end{syntax}
@@ -349,9 +343,7 @@
% \cs{l_keys_choice_tl} will be the name of the choice made, and
% \cs{l_keys_choice_int} will be the position of the choice in the list
% of \meta{choices} (indexed from~$1$).
-% Choices are discussed in detail in section~\ref{sec:choice}.
-%
-% \textbf{This property is experimental.}
+% Choices are discussed in detail in section~\ref{sec:l3keys:choice}.
% \end{function}
%
% \begin{function}{.skip_set:N, .skip_set:c, .skip_gset:N, .skip_gset:c}
@@ -360,7 +352,7 @@
% \end{syntax}
% Defines \meta{key} to set \meta{skip} to \meta{value} (which
% must be a skip expression). If the variable does not exist, it
-% will be created at the point that the key is set up.
+% will be created globally at the point that the key is set up.
% \end{function}
%
% \begin{function}{.tl_set:N, .tl_set:c, .tl_gset:N, .tl_gset:c}
@@ -368,8 +360,8 @@
% \meta{key} .tl_set:N = \meta{token list variable}
% \end{syntax}
% Defines \meta{key} to set \meta{token list variable} to \meta{value}.
-% If the variable does not exist, it will be created at the point that
-% the key is set up.
+% If the variable does not exist, it will be created globally
+% at the point that the key is set up.
% \end{function}
%
% \begin{function}{.tl_set_x:N, .tl_set_x:c, .tl_gset_x:N, .tl_gset_x:c}
@@ -379,7 +371,7 @@
% Defines \meta{key} to set \meta{token list variable} to \meta{value},
% which will be subjected to an \texttt{x}-type expansion
% (\emph{i.e.}~using \cs{tl_set:Nx}). If the variable does not exist,
-% it will be created at the point that the key is set up.
+% it will be created globally at the point that the key is set up.
% \end{function}
%
% \begin{function}{.value_forbidden:}
@@ -410,7 +402,7 @@
% \end{verbatim}
% or to the key name:
% \begin{verbatim}
-% \keys_define:nn { module }
+% \keys_define:nn { mymodule }
% { subgroup / key .code:n = code }
% \end{verbatim}
% As illustrated, the best choice of token for sub-dividing keys in
@@ -422,7 +414,7 @@
% particularly relevant to making multiple choices.
%
% \section{Choice and multiple choice keys}
-% \label{sec:choice}
+% \label{sec:l3keys:choice}
%
% The \pkg{l3keys} system supports two types of choice key, in which a series
% of pre-defined input values are linked to varying implementations. Choice
@@ -433,7 +425,7 @@
% Mutually-exclusive choices are created by setting the \texttt{.choice:}
% property:
% \begin{verbatim}
-% \keys_define:nn { module }
+% \keys_define:nn { mymodule }
% { key .choice: }
% \end{verbatim}
% For keys which are set up as choices, the valid choices are generated
@@ -442,53 +434,29 @@
%
% In many cases, choices execute similar code which is dependant only
% on the name of the choice or the position of the choice in the
-% list of choices. Here, the keys can share the same code, and can
-% be rapidly created using the \texttt{.choice_code:n} and
-% \texttt{.generate_choices:n} properties:
-% \begin{verbatim}
-% \keys_define:nn { module }
-% {
-% key .choice_code:n =
-% {
-% You~gave~choice~'\int_use:N \l_keys_choice_tl',~
-% which~is~in~position~
-% \int_use:N \l_keys_choice_int \c_space_tl
-% in~the~list.
-% },
-% key .generate_choices:n =
-% { choice-a, choice-b, choice-c }
-% }
-% \end{verbatim}
-% Following common computing practice, \cs{l_keys_choice_int} is
-% indexed from~$1$.
-%
-% The same approach is also implemented by the \emph{experimental}
-% property \texttt{.choices:nn}. This combines the functionality of
-% \texttt{.choice_code:n} and \texttt{.generate_choices:n} into one
-% property:
+% list of all possibilities. Here, the keys can share the same code, and can
+% be rapidly created using the \texttt{.choices:nn} property.
% \begin{verbatim}
-% \keys_define:nn { module }
+% \keys_define:nn { mymodule }
% {
% key .choices:nn =
% { choice-a, choice-b, choice-c }
% {
-% You~gave~choice~'\int_use:N \l_keys_choice_tl',~
-% which~is~in~position~
-% \int_use:N \l_keys_choice_int \c_space_tl
+% You~gave~choice~'\tl_use:N \l_keys_choice_tl',~
+% which~is~in~position~\int_use:N \l_keys_choice_int \c_space_tl
% in~the~list.
% }
% }
% \end{verbatim}
-% Note that the \texttt{.choices:nn} property should \emph{not} be mixed with
-% use of \texttt{.generate_choices:n}.
+% The index \cs{l_keys_choice_int} in the list of choices starts at~$1$.
%
% \begin{variable}{\l_keys_choice_int, \l_keys_choice_tl}
-% Inside the code block for a choice generated using
-% \texttt{.generate_choice:} or \texttt{.choices:nn},
-% the variables \cs{l_keys_choice_tl} and
-% \cs{l_keys_choice_int} are available to indicate the name of the
-% current choice, and its position in the comma list. The position
-% is indexed from $0$.
+% Inside the code block for a choice generated using \texttt{.choices:nn},
+% the variables \cs{l_keys_choice_tl} and \cs{l_keys_choice_int} are
+% available to indicate the name of the current choice, and its position in
+% the comma list. The position is indexed from~$1$. Note that, as with
+% standard key code generated using \texttt{.code:n}, the value passed to
+% the key (i.e.~the choice name) is also available as |#1|.
% \end{variable}
%
% On the other hand, it is sometimes useful to create choices which
@@ -496,32 +464,54 @@
% by setting the \texttt{.choice:} property of a key, then manually
% defining sub-keys.
% \begin{verbatim}
-% \keys_define:nn { module }
+% \keys_define:nn { mymodule }
% {
% key .choice:,
% key / choice-a .code:n = code-a,
% key / choice-b .code:n = code-b,
% key / choice-c .code:n = code-c,
% }
-%\end{verbatim}
+% \end{verbatim}
%
% It is possible to mix the two methods, but manually-created choices
% should \emph{not} use \cs{l_keys_choice_tl} or \cs{l_keys_choice_int}.
% These variables do not have defined behaviour when used outside of
-% code created using \texttt{.generate_choices:n}
+% code created using \texttt{.choices:nn}
% (\emph{i.e.}~anything might happen).
-%
+%
+% It is possible to allow choice keys to take values which have not previously
+% been defined by adding code for the special \texttt{unknown} choice. The
+% general behavior of the \texttt{unknown} key is described in
+% Section~\ref{sec:l3keys:unknown}. A typical example in the case of a choice
+% would be to issue a custom error message:
+% \begin{verbatim}
+% \keys_define:nn { mymodule }
+% {
+% key .choice:,
+% key / choice-a .code:n = code-a,
+% key / choice-b .code:n = code-b,
+% key / choice-c .code:n = code-c,
+% key / unknown .code:n =
+% \msg_error:nnxxx { mymodule } { unknown-choice }
+% { key } % Name of choice key
+% { choice-a , choice-b , choice-c } % Valid choices
+% { \exp_not:n {#1} } % Invalid choice given
+% %
+% %
+% }
+% \end{verbatim}
+%
% Multiple choices are created in a very similar manner to mutually-exclusive
% choices, using the properties \texttt{.multichoice:} and
% \texttt{.multichoices:nn}. As with mutually exclusive choices, multiple
% choices are define as sub-keys. Thus both
% \begin{verbatim}
-% \keys_define:nn { module }
+% \keys_define:nn { mymodule }
% {
% key .multichoices:nn =
% { choice-a, choice-b, choice-c }
% {
-% You~gave~choice~'\int_use:N \l_keys_choice_tl',~
+% You~gave~choice~'\tl_use:N \l_keys_choice_tl',~
% which~is~in~position~
% \int_use:N \l_keys_choice_int \c_space_tl
% in~the~list.
@@ -530,28 +520,36 @@
% \end{verbatim}
% and
% \begin{verbatim}
-% \keys_define:nn { module }
+% \keys_define:nn { mymodule }
% {
% key .multichoice:,
% key / choice-a .code:n = code-a,
% key / choice-b .code:n = code-b,
% key / choice-c .code:n = code-c,
% }
-%\end{verbatim}
-% are valid. The \texttt{.multichoices:nn} property causes
-% \cs{l_keys_choice_tl} and \cs{l_keys_choice_int} to be set in exactly
-% the same way as described for \texttt{.choices:nn}.
-%
-% When multiple choice keys are set, the value is treated as a comma-separated
-% list:
+% \end{verbatim}
+% are valid.
+%
+% When a multiple choice key is set
% \begin{verbatim}
-% \keys_set:nn { module }
+% \keys_set:nn { mymodule }
% {
% key = { a , b , c } % 'key' defined as a multiple choice
% }
-%\end{verbatim}
-% Each choice will be applied in turn, with the usual handling of unknown
-% values.
+% \end{verbatim}
+% each choice is applied in turn, equivalent to a \texttt{clist} mapping or
+% to applying each value individually:
+% \begin{verbatim}
+% \keys_set:nn { mymodule }
+% {
+% key = a ,
+% key = b ,
+% key = c ,
+% }
+% \end{verbatim}
+% Thus each separate choice will have passed to it the
+% \cs{l_keys_choice_tl} and \cs{l_keys_choice_int} in exactly
+% the same way as described for \texttt{.choices:nn}.
%
% \section{Setting keys}
%
@@ -565,37 +563,51 @@
% by defining a special \texttt{unknown} key: this will be illustrated
% later.
% \end{function}
+%
+% \begin{variable}{\l_keys_key_tl, \l_keys_path_tl, \l_keys_value_tl}
+% For each key processed, information of the full \emph{path} of the
+% key, the \emph{name} of the key and the \emph{value} of the key is
+% available within three token list variables. These may be used within
+% the code of the key.
+%
+% The \emph{value} is everything after the \texttt{=}, which may be
+% empty if no value was given. This is stored in \cs{l_keys_value_tl}, and
+% is not processed in any way by \cs{keys_set:nn}.
+%
+% The \emph{path} of the key is a \enquote{full} description of the key,
+% and is unique for each key. It consists of the module and full key name,
+% thus for example
+% \begin{verbatim}
+% \keys_set:nn { mymodule } { key-a = some-value }
+% \end{verbatim}
+% has path \texttt{mymodule/key-a} while
+% \begin{verbatim}
+% \keys_set:nn { mymodule } { subset / key-a = some-value }
+% \end{verbatim}
+% has path \texttt{mymodule/subset/key-a}. This information is stored in
+% \cs{l_keys_path_tl}, and will have been processed by \cs{tl_to_str:n}.
+%
+% The \emph{name} of the key is the part of the path after the last
+% \texttt{/}, and thus is not unique. In the preceding examples, both keys
+% have name \texttt{key-a} despite having different paths. This information
+% is stored in \cs{l_keys_key_tl}, and will have been processed by
+% \cs{tl_to_str:n}.
+% \end{variable}
+%
+% \section{Handling of unknown keys}
+% \label{sec:l3keys:unknown}
%
-% If a key is not known, \cs{keys_set:nn} will look for a special
-% \texttt{unknown} key for the same module. This mechanism can be
-% used to create new keys from user input.
+% If a key has not previously been defined (is unknown), \cs{keys_set:nn} will
+% look for a special \texttt{unknown} key for the same module, and if this is
+% not defined raises an error indicating that the key name was unknown. This
+% mechanism can be used for example to issue custom error texts.
% \begin{verbatim}
-% \keys_define:nn { module }
+% \keys_define:nn { mymodule }
% {
% unknown .code:n =
% You~tried~to~set~key~'\l_keys_key_tl'~to~'#1'.
% }
-%\end{verbatim}
-%
-% \begin{variable}{\l_keys_key_tl}
-% When processing an unknown key, the name of the key is available
-% as \cs{l_keys_key_tl}. Note that this will have been processed
-% using \cs{tl_to_str:n}.
-% \end{variable}
-%
-% \begin{variable}{\l_keys_path_tl}
-% When processing an unknown key, the path of the key used is available
-% as \cs{l_keys_path_tl}. Note that this will have been processed
-% using \cs{tl_to_str:n}.
-% \end{variable}
-%
-% \begin{variable}{\l_keys_value_tl}
-% When processing an unknown key, the value of the key is available as
-% \cs{l_keys_value_tl}. Note that this will be empty if no value was given
-% for the key.
-% \end{variable}
-%
-% \section{Setting known keys only}
+% \end{verbatim}
%
% \begin{function}[added = 2011-08-23]
% {
@@ -603,13 +615,16 @@
% \keys_set_known:nvN, \keys_set_known:noN
% }
% \begin{syntax}
-% \cs{keys_set_known:nn} \Arg{module} \Arg{keyval list} \meta{clist}
+% \cs{keys_set_known:nn} \Arg{module} \Arg{keyval list} \meta{tl}
% \end{syntax}
-% Parses the \meta{keyval list}, and sets those keys which are defined
-% for \meta{module}. Any keys which are unknown are not processed further
-% by the parser.
+% In some cases, the desired behavior is to simply ignore unknown keys,
+% collecting up information on these for later processing. The
+% \cs{keys_set_known:nnN} function parses the \meta{keyval list}, and sets
+% those keys which are defined for \meta{module}. Any keys which are unknown
+% are not processed further by the parser.
% The key--value pairs for each \emph{unknown} key name will be
-% stored in the \meta{clist}.
+% stored in the \meta{tl} in a comma-separated form (\emph{i.e.}~an edited
+% version of the \meta{keyval list}).
% \end{function}
%
% \section{Utility functions for keys}
@@ -629,7 +644,7 @@
% \cs{keys_if_choice_exist:nnnTF} \meta{module} \meta{key} \meta{choice} \Arg{true code} \Arg{false code}
% \end{syntax}
% Tests if the \meta{choice} is defined for the \meta{key} within the
-% \meta{module},, \emph{i.e.}~if any code has been defined for
+% \meta{module}, \emph{i.e.}~if any code has been defined for
% \meta{key}/\meta{choice}. The test is \texttt{false} if the \meta{key}
% itself is not defined.
% \end{function}
@@ -657,7 +672,7 @@
% braces, spaces and the category codes of separators.
%
% While the functions described earlier are used as a high-level interface
-% for processing such input, in especial circumstances you may wish to use
+% for processing such input, in special circumstances you may wish to use
% a lower-level approach.
% The low-level parsing system converts a \meta{key--value list}
% into \meta{keys} and associated \meta{values}. After the parsing phase
@@ -665,15 +680,16 @@
% available for further processing. This processing is not carried out by the
% low-level parser itself, and so the parser requires the names of
% two functions along with the key--value list. One function is
-% needed to process key--value pairs (\emph{i.e}~two arguments),
-% and a second function if required for keys given without arguments
-% (\emph{i.e.}~a single argument).
+% needed to process key--value pairs (it receives two arguments),
+% and a second function is required for keys given without any value
+% (it is called with a single argument).
%
-% The parser does not double |#| tokens or expand any input. The tokens
-% |=| and |,| are corrected so that the parser does not \enquote{miss}
+% The parser does not double |#| tokens or expand any input. Active
+% tokens |=| and |,| appearing at the outer level of braces are converted
+% to category \enquote{other} (12) so that the parser does not \enquote{miss}
% any due to category code changes. Spaces are removed from the ends
-% of the keys and values. Values which are given in braces will have
-% exactly one set removed, thus
+% of the keys and values. Keys and values which are given in braces
+% will have exactly one set removed (after space trimming), thus
% \begin{verbatim}
% key = {value here},
% \end{verbatim}
@@ -710,8 +726,8 @@
% Note that there is a difference between an empty value (an equals
% sign followed by nothing) and a missing value (no equals sign at
% all). Spaces are trimmed from the ends of the \meta{key} and \meta{value},
-% and any \emph{outer} set of braces are removed from the \meta{value} as
-% part of the processing.
+% then one \emph{outer} set of braces is removed from the \meta{key}
+% and \meta{value} as part of the processing.
% \end{function}
%
% \end{documentation}
@@ -733,7 +749,7 @@
% \end{macrocode}
%
% \subsection{Low-level interface}
-%
+%
% \begin{macrocode}
%<@@=keyval>
% \end{macrocode}
@@ -741,7 +757,8 @@
% For historical reasons this code uses the `keyval' module prefix.
%
% \begin{variable}{\g_@@_level_int}
-% For nesting purposes an integer is needed for the current level.
+% To allow nesting of \cs{keyval_parse:NNn}, an integer is needed for
+% the current level.
% \begin{macrocode}
\int_new:N \g_@@_level_int
% \end{macrocode}
@@ -763,8 +780,8 @@
\tl_new:N \l_@@_sanitise_tl
\tl_new:N \l_@@_parse_tl
% \end{macrocode}
-%\end{variable}
-%\end{variable}
+% \end{variable}
+% \end{variable}
%
% \begin{macro}{\@@_parse:n}
% The parsing function first deals with the category codes for
@@ -817,7 +834,7 @@
% \end{macro}
%
% \begin{macro}{\@@_split_key_value:w}
-% \begin{macro}[aux]{\@@_split_key_value:wTF}
+% \begin{macro}[aux, EXP]{\@@_split_key_value:wTF}
% The key and value are handled separately. First the key is grabbed and
% saved as \cs{l_@@_key_tl}. Then a check is need to see if there is
% a value at all: if not then the key name is simply added to the output.
@@ -946,7 +963,7 @@
% \end{macrocode}
%
% \subsection{Constants and variables}
-%
+%
% \begin{macrocode}
%<@@=keys>
% \end{macrocode}
@@ -1081,8 +1098,11 @@
\cs_if_exist:cTF { \c_@@_props_root_tl \l_@@_property_tl }
{ \@@_define_key:n {#2} }
{
- \__msg_kernel_error:nnxx { kernel } { property-unknown }
- { \l_@@_property_tl } { \l_keys_path_tl }
+ \str_if_eq_x:nnF { \l_@@_property_tl } { .abort: }
+ {
+ \__msg_kernel_error:nnxx { kernel } { property-unknown }
+ { \l_@@_property_tl } { \l_keys_path_tl }
+ }
}
}
% \end{macrocode}
@@ -1101,7 +1121,10 @@
\tl_set:Nx \l_keys_path_tl { \l_@@_module_tl / }
\tl_if_in:nnTF {#1} { . }
{ \@@_property_find:w #1 \q_stop }
- { \__msg_kernel_error:nnx { kernel } { key-no-property } {#1} }
+ {
+ \__msg_kernel_error:nnx { kernel } { key-no-property } {#1}
+ \tl_set:Nn \l_@@_property_tl { .abort: }
+ }
}
\cs_new_protected:Npn \@@_property_find:w #1 . #2 \q_stop
{
@@ -1148,12 +1171,12 @@
%
% \subsection{Turning properties into actions}
%
-% \begin{macro}[int]{\@@_bool_set:NN}
+% \begin{macro}[int]{\@@_bool_set:Nn, \@@_bool_set:cn}
% Boolean keys are really just choices, but all done by hand. The
-% second argument here is the scope: either empty or \texttt{g} for
+% second argument here is the scope: either empty or \texttt{ g } for
% global.
% \begin{macrocode}
-\cs_new:Npn \@@_bool_set:NN #1#2
+\cs_new_protected:Npn \@@_bool_set:Nn #1#2
{
\bool_if_exist:NF #1 { \bool_new:N #1 }
\@@_choice_make:
@@ -1168,13 +1191,14 @@
}
\@@_default_set:n { true }
}
+\cs_generate_variant:Nn \@@_bool_set:Nn { c }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[int]{\@@_bool_set_inverse:NN}
+% \begin{macro}[int]{\@@_bool_set_inverse:Nn, \@@_bool_set_inverse:cn}
% Inverse boolean setting is much the same.
% \begin{macrocode}
-\cs_new:Npn \@@_bool_set_inverse:NN #1#2
+\cs_new_protected:Npn \@@_bool_set_inverse:Nn #1#2
{
\bool_if_exist:NF #1 { \bool_new:N #1 }
\@@_choice_make:
@@ -1189,6 +1213,7 @@
}
\@@_default_set:n { true }
}
+\cs_generate_variant:Nn \@@_bool_set_inverse:Nn { c }
% \end{macrocode}
% \end{macro}
%
@@ -1232,60 +1257,8 @@
% \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 }
- {
- \@@_choice_make:
- \int_zero:N \l_keys_choice_int
- \clist_map_function:nN {#1} \@@_choices_generate_aux:n
- }
- {
- \__msg_kernel_error:nnx { kernel }
- { generate-choices-before-code } { \l_keys_path_tl }
- }
- }
-\cs_new_protected:Npn \@@_choices_generate_aux:n #1
- {
- \int_incr:N \l_keys_choice_int
- \@@_cmd_set:nx { \l_keys_path_tl / #1 }
- {
- \tl_set:Nn \exp_not:N \l_keys_choice_tl {#1}
- \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 }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[int]{\@@_choice_code_store:n, \@@_choice_code_store:x}
-% The code for making multiple choices is stored in a token list.
-% \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 }
- {
- \tl_new:c
- { \c_@@_vars_root_tl \l_keys_path_tl .choice~code }
- }
- \tl_set:cn { \c_@@_vars_root_tl \l_keys_path_tl .choice~code }
- {#1}
- }
-\cs_generate_variant:Nn \@@_choice_code_store:n { x }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[int]{\@@_cmd_set:nn, \@@_cmd_set:nx, \@@_cmd_set:Vo}
+% \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.
@@ -1295,12 +1268,7 @@
\@@_cmd_set:n {#1}
\cs_set:cpn { \c_@@_code_root_tl #1 } ##1 {#2}
}
-\cs_new_protected:Npn \@@_cmd_set:nx #1#2
- {
- \@@_cmd_set:n {#1}
- \cs_set:cpx { \c_@@_code_root_tl #1 } ##1 {#2}
- }
-\cs_generate_variant:Nn \@@_cmd_set:nn { Vo }
+\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 }
@@ -1311,34 +1279,30 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}[int]{\@@_default_set:n, \@@_default_set:V}
+% \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} }
-\cs_generate_variant:Nn \@@_default_set:n { V }
% \end{macrocode}
% \end{macro}
-%
-% \begin{macro}[aux]{\@@_initialise:n, \@@_initialise:V}
-% \begin{macro}[aux, EXP]{\@@_initialise:wn}
+%
+% \begin{macro}[int]{\@@_initialise:n}
+% \begin{macro}[aux]{\@@_initialise:wn}
% A set up for initialisation from which the key system requires that
% the path is split up into a module and a key name. At this stage,
% \cs{l_keys_path_tl} will contain \texttt{/} so a split is easy to do.
% \begin{macrocode}
\cs_new_protected:Npn \@@_initialise:n #1
- {
- \use:x
- { \exp_after:wN \@@_initialise:wn \l_keys_path_tl \q_stop {#1} }
- }
-\cs_generate_variant:Nn \@@_initialise:n { V }
-\cs_new:Npn \@@_initialise:wn #1 / #2 \q_stop #3
- { \keys_set:nn {#1} { #2 = \exp_not:n { {#3} } } }
+ { \exp_after:wN \@@_initialise:wn \l_keys_path_tl \q_stop {#1} }
+\cs_new_protected:Npn \@@_initialise:wn #1 / #2 \q_stop #3
+ { \keys_set:nn {#1} { #2 = {#3} } }
% \end{macrocode}
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\@@_meta_make:n, \@@_meta_make:x}
+% \begin{macro}[int]{\@@_meta_make:n}
+% \begin{macro}[int]{\@@_meta_make:nn}
% To create a meta-key, simply set up to pass data through.
% \begin{macrocode}
\cs_new_protected:Npn \@@_meta_make:n #1
@@ -1346,13 +1310,11 @@
\@@_cmd_set:Vo \l_keys_path_tl
{ \exp_after:wN \keys_set:nn \exp_after:wN { \l_@@_module_tl } {#1} }
}
-\cs_new_protected:Npn \@@_meta_make:x #1
- {
- \@@_cmd_set:nx { \l_keys_path_tl }
- { \exp_not:N \keys_set:nn { \l_@@_module_tl } {#1} }
- }
+\cs_new_protected:Npn \@@_meta_make:nn #1#2
+ { \@@_cmd_set:Vn \l_keys_path_tl { \keys_set:nn {#1} {#2} } }
% \end{macrocode}
% \end{macro}
+% \end{macro}
%
% \begin{macro}[int]{\@@_multichoice_find:n}
% \begin{macro}[int]{\@@_multichoice_make:}
@@ -1408,93 +1370,95 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[int]{\@@_variable_set:NnNN, \@@_variable_set:cnNN}
-% \begin{macro}[int]{\@@_variable_set:NnN, \@@_variable_set:cnN}
+% \begin{macro}[int]{\@@_variable_set:NnnN, \@@_variable_set:cnnN}
% Setting a variable takes the type and scope separately so that
-% it is easy to make a new variable if needed. The three-argument
-% version is set up so that the use of |{ }| as an \texttt{N}-type
-% variable is only done once!
+% it is easy to make a new variable if needed.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_variable_set:NnNN #1#2#3#4
+\cs_new_protected:Npn \@@_variable_set:NnnN #1#2#3#4
{
\use:c { #2_if_exist:NF } #1 { \use:c { #2 _new:N } #1 }
\@@_cmd_set:nx { \l_keys_path_tl }
- { \exp_not:c { #2 _ #3 set:N #4 } \exp_not:N #1 {##1} }
+ { \exp_not:c { #2 _ #3 set:N #4 } \exp_not:N #1 \exp_not:n { {##1} } }
}
-\cs_new_protected:Npn \@@_variable_set:NnN #1#2#3
- { \@@_variable_set:NnNN #1 {#2} { } #3 }
-\cs_generate_variant:Nn \@@_variable_set:NnNN { c }
-\cs_generate_variant:Nn \@@_variable_set:NnN { c }
+\cs_generate_variant:Nn \@@_variable_set:NnnN { c }
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
% \subsection{Creating key properties}
%
% The key property functions are all wrappers for internal functions,
% meaning that things stay readable and can also be altered later on.
-%
-% \begin{macro}{.bool_set:N}
-% \begin{macro}{.bool_gset:N}
+%
+% Importantly, while key properties have \enquote{normal} argument specs, the
+% underlying code always supplies one braced argument to these. As such, argument
+% expansion is handled by hand rather than using the standard tools. This shows
+% up particularly for the two-argument properties, where things would otherwise
+% go badly wrong.
+%
+% \begin{macro}{.bool_set:N, .bool_set:c}
+% \begin{macro}{.bool_gset:N, .bool_gset:c}
% One function for this.
% \begin{macrocode}
\cs_new_protected:cpn { \c_@@_props_root_tl .bool_set:N } #1
- { \@@_bool_set:NN #1 { } }
+ { \@@_bool_set:Nn #1 { } }
+\cs_new_protected:cpn { \c_@@_props_root_tl .bool_set:c } #1
+ { \@@_bool_set:cn {#1} { } }
\cs_new_protected:cpn { \c_@@_props_root_tl .bool_gset:N } #1
- { \@@_bool_set:NN #1 g }
+ { \@@_bool_set:Nn #1 { g } }
+\cs_new_protected:cpn { \c_@@_props_root_tl .bool_gset:c } #1
+ { \@@_bool_set:cn {#1} { g } }
% \end{macrocode}
% \end{macro}
% \end{macro}
%
-% \begin{macro}{.bool_set_inverse:N}
-% \begin{macro}{.bool_gset_inverse:N}
+% \begin{macro}{.bool_set_inverse:N, .bool_set_inverse:c}
+% \begin{macro}{.bool_gset_inverse:N, .bool_gset_inverse:c}
% One function for this.
% \begin{macrocode}
\cs_new_protected:cpn { \c_@@_props_root_tl .bool_set_inverse:N } #1
- { \@@_bool_set_inverse:NN #1 { } }
+ { \@@_bool_set_inverse:Nn #1 { } }
+\cs_new_protected:cpn { \c_@@_props_root_tl .bool_set_inverse:c } #1
+ { \@@_bool_set_inverse:cn {#1} { } }
\cs_new_protected:cpn { \c_@@_props_root_tl .bool_gset_inverse:N } #1
- { \@@_bool_set_inverse:NN #1 g }
+ { \@@_bool_set_inverse:Nn #1 { g } }
+\cs_new_protected:cpn { \c_@@_props_root_tl .bool_gset_inverse:c } #1
+ { \@@_bool_set_inverse:cn {#1} { g } }
% \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{.choice:}
% Making a choice is handled internally, as it is also needed by
-% \texttt{.generate_choices:n}.
+% \texttt{.generate_choices:n}.
% \begin{macrocode}
\cs_new_protected_nopar:cpn { \c_@@_props_root_tl .choice: }
{ \@@_choice_make: }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{.choices:nn}
+% \begin{macro}
+% {.choices:nn, .choices:Vn, .choices:on, .choices:xn}
% For auto-generation of a series of mutually-exclusive choices.
% Here, |#1| will consist of two separate
% arguments, hence the slightly odd-looking implementation.
% \begin{macrocode}
\cs_new_protected:cpn { \c_@@_props_root_tl .choices:nn } #1
{ \@@_choices_make:nn #1 }
+\cs_new_protected:cpn { \c_@@_props_root_tl .choices:Vn } #1
+ { \exp_args:NV \@@_choices_make:nn #1 }
+\cs_new_protected:cpn { \c_@@_props_root_tl .choices:on } #1
+ { \exp_args:No \@@_choices_make:nn #1 }
+\cs_new_protected:cpn { \c_@@_props_root_tl .choices:xn } #1
+ { \exp_args:Nx \@@_choices_make:nn #1 }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{.code:n, .code:x}
+% \begin{macro}{.code:n}
% Creating code is simply a case of passing through to the underlying
% \texttt{set} function.
% \begin{macrocode}
\cs_new_protected:cpn { \c_@@_props_root_tl .code:n } #1
{ \@@_cmd_set:nn { \l_keys_path_tl } {#1} }
-\cs_new_protected:cpn { \c_@@_props_root_tl .code:x } #1
- { \@@_cmd_set:nx { \l_keys_path_tl } {#1} }
-% \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}
%
@@ -1502,24 +1466,28 @@
% \begin{macro}{.clist_gset:N, .clist_gset:c}
% \begin{macrocode}
\cs_new_protected:cpn { \c_@@_props_root_tl .clist_set:N } #1
- { \@@_variable_set:NnN #1 { clist } n }
+ { \@@_variable_set:NnnN #1 { clist } { } n }
\cs_new_protected:cpn { \c_@@_props_root_tl .clist_set:c } #1
- { \@@_variable_set:cnN {#1} { clist } n }
+ { \@@_variable_set:cnnN {#1} { clist } { } n }
\cs_new_protected:cpn { \c_@@_props_root_tl .clist_gset:N } #1
- { \@@_variable_set:NnNN #1 { clist } g n }
+ { \@@_variable_set:NnnN #1 { clist } { g } n }
\cs_new_protected:cpn { \c_@@_props_root_tl .clist_gset:c } #1
- { \@@_variable_set:cnNN {#1} { clist } g n }
+ { \@@_variable_set:cnnN {#1} { clist } { g } n }
% \end{macrocode}
% \end{macro}
% \end{macro}
%
-% \begin{macro}{.default:n, .default:V}
+% \begin{macro}{.default:n, .default:V, .default:o, .default:x}
% Expansion is left to the internal functions.
% \begin{macrocode}
\cs_new_protected:cpn { \c_@@_props_root_tl .default:n } #1
{ \@@_default_set:n {#1} }
\cs_new_protected:cpn { \c_@@_props_root_tl .default:V } #1
- { \@@_default_set:V #1 }
+ { \exp_args:NV \@@_default_set:n #1 }
+\cs_new_protected:cpn { \c_@@_props_root_tl .default:o } #1
+ { \exp_args:No \@@_default_set:n {#1} }
+\cs_new_protected:cpn { \c_@@_props_root_tl .default:x } #1
+ { \exp_args:Nx \@@_default_set:n {#1} }
% \end{macrocode}
% \end{macro}
%
@@ -1528,13 +1496,13 @@
% Setting a variable is very easy: just pass the data along.
% \begin{macrocode}
\cs_new_protected:cpn { \c_@@_props_root_tl .dim_set:N } #1
- { \@@_variable_set:NnN #1 { dim } n }
+ { \@@_variable_set:NnnN #1 { dim } { } n }
\cs_new_protected:cpn { \c_@@_props_root_tl .dim_set:c } #1
- { \@@_variable_set:cnN {#1} { dim } n }
+ { \@@_variable_set:cnnN {#1} { dim } { } n }
\cs_new_protected:cpn { \c_@@_props_root_tl .dim_gset:N } #1
- { \@@_variable_set:NnNN #1 { dim } g n }
+ { \@@_variable_set:NnnN #1 { dim } { g } n }
\cs_new_protected:cpn { \c_@@_props_root_tl .dim_gset:c } #1
- { \@@_variable_set:cnNN {#1} { dim } g n }
+ { \@@_variable_set:cnnN {#1} { dim } { g } n }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -1544,32 +1512,28 @@
% Setting a variable is very easy: just pass the data along.
% \begin{macrocode}
\cs_new_protected:cpn { \c_@@_props_root_tl .fp_set:N } #1
- { \@@_variable_set:NnN #1 { fp } n }
+ { \@@_variable_set:NnnN #1 { fp } { } n }
\cs_new_protected:cpn { \c_@@_props_root_tl .fp_set:c } #1
- { \@@_variable_set:cnN {#1} { fp } n }
+ { \@@_variable_set:cnnN {#1} { fp } { } n }
\cs_new_protected:cpn { \c_@@_props_root_tl .fp_gset:N } #1
- { \@@_variable_set:NnNN #1 { fp } g n }
+ { \@@_variable_set:NnnN #1 { fp } { g } n }
\cs_new_protected:cpn { \c_@@_props_root_tl .fp_gset:c } #1
- { \@@_variable_set:cnNN {#1} { fp } g n }
+ { \@@_variable_set:cnnN {#1} { fp } { g } n }
% \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}
-%
-% \begin{macro}{.initial:n, .initial:V}
+% \begin{macro}{.initial:n, .initial:V, .initial:o, .initial:x}
% The standard hand-off approach.
% \begin{macrocode}
\cs_new_protected:cpn { \c_@@_props_root_tl .initial:n } #1
{ \@@_initialise:n {#1} }
\cs_new_protected:cpn { \c_@@_props_root_tl .initial:V } #1
- { \@@_initialise:V #1 }
+ { \exp_args:NV \@@_initialise:n #1 }
+\cs_new_protected:cpn { \c_@@_props_root_tl .initial:o } #1
+ { \exp_args:No \@@_initialise:n {#1} }
+\cs_new_protected:cpn { \c_@@_props_root_tl .initial:x } #1
+ { \exp_args:Nx \@@_initialise:n {#1} }
% \end{macrocode}
% \end{macro}
%
@@ -1578,29 +1542,40 @@
% Setting a variable is very easy: just pass the data along.
% \begin{macrocode}
\cs_new_protected:cpn { \c_@@_props_root_tl .int_set:N } #1
- { \@@_variable_set:NnN #1 { int } n }
+ { \@@_variable_set:NnnN #1 { int } { } n }
\cs_new_protected:cpn { \c_@@_props_root_tl .int_set:c } #1
- { \@@_variable_set:cnN {#1} { int } n }
+ { \@@_variable_set:cnnN {#1} { int } { } n }
\cs_new_protected:cpn { \c_@@_props_root_tl .int_gset:N } #1
- { \@@_variable_set:NnNN #1 { int } g n }
+ { \@@_variable_set:NnnN #1 { int } { g } n }
\cs_new_protected:cpn { \c_@@_props_root_tl .int_gset:c } #1
- { \@@_variable_set:cnNN {#1} { int } g n }
+ { \@@_variable_set:cnnN {#1} { int } { g } n }
% \end{macrocode}
% \end{macro}
% \end{macro}
%
-%\begin{macro}{.meta:n, .meta:x}
-% Making a meta is handled internally.
+% \begin{macro}{.meta:n}
+% Making a meta is handled internally.
% \begin{macrocode}
\cs_new_protected:cpn { \c_@@_props_root_tl .meta:n } #1
{ \@@_meta_make:n {#1} }
-\cs_new_protected:cpn { \c_@@_props_root_tl .meta:x } #1
- { \@@_meta_make:x {#1} }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{.meta:nn}
+% Meta with path: potentially lots of variants, but for the moment
+% no so many defined.
+% \begin{macrocode}
+\cs_new_protected:cpn { \c_@@_props_root_tl .meta:nn } #1
+ { \@@_meta_make:nn #1 }
% \end{macrocode}
% \end{macro}
%
% \begin{macro}{.multichoice:}
-% \begin{macro}{.multichoices:nn}
+% \begin{macro}
+% {
+% .multichoices:nn, .multichoices:Vn, .multichoices:on,
+% .multichoices:xn,
+% }
% The same idea as \texttt{.choice:} and \texttt{.choices:nn}, but
% where more than one choice is allowed.
% \begin{macrocode}
@@ -1608,6 +1583,12 @@
{ \@@_multichoice_make: }
\cs_new_protected:cpn { \c_@@_props_root_tl .multichoices:nn } #1
{ \@@_multichoices_make:nn #1 }
+\cs_new_protected:cpn { \c_@@_props_root_tl .multichoices:Vn } #1
+ { \exp_args:NV \@@_multichoices_make:nn #1 }
+\cs_new_protected:cpn { \c_@@_props_root_tl .multichoices:on } #1
+ { \exp_args:No \@@_multichoices_make:nn #1 }
+\cs_new_protected:cpn { \c_@@_props_root_tl .multichoices:xn } #1
+ { \exp_args:Nx \@@_multichoices_make:nn #1 }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -1617,13 +1598,13 @@
% Setting a variable is very easy: just pass the data along.
% \begin{macrocode}
\cs_new_protected:cpn { \c_@@_props_root_tl .skip_set:N } #1
- { \@@_variable_set:NnN #1 { skip } n }
+ { \@@_variable_set:NnnN #1 { skip } { } n }
\cs_new_protected:cpn { \c_@@_props_root_tl .skip_set:c } #1
- { \@@_variable_set:cnN {#1} { skip } n }
+ { \@@_variable_set:cnnN {#1} { skip } { } n }
\cs_new_protected:cpn { \c_@@_props_root_tl .skip_gset:N } #1
- { \@@_variable_set:NnNN #1 { skip } g n }
+ { \@@_variable_set:NnnN #1 { skip } { g } n }
\cs_new_protected:cpn { \c_@@_props_root_tl .skip_gset:c } #1
- { \@@_variable_set:cnNN {#1} { skip } g n }
+ { \@@_variable_set:cnnN {#1} { skip } { g } n }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -1636,21 +1617,21 @@
% Setting a variable is very easy: just pass the data along.
% \begin{macrocode}
\cs_new_protected:cpn { \c_@@_props_root_tl .tl_set:N } #1
- { \@@_variable_set:NnN #1 { tl } n }
+ { \@@_variable_set:NnnN #1 { tl } { } n }
\cs_new_protected:cpn { \c_@@_props_root_tl .tl_set:c } #1
- { \@@_variable_set:cnN {#1} { tl } n }
+ { \@@_variable_set:cnnN {#1} { tl } { } n }
\cs_new_protected:cpn { \c_@@_props_root_tl .tl_set_x:N } #1
- { \@@_variable_set:NnN #1 { tl } x }
+ { \@@_variable_set:NnnN #1 { tl } { } x }
\cs_new_protected:cpn { \c_@@_props_root_tl .tl_set_x:c } #1
- { \@@_variable_set:cnN {#1} { tl } x }
+ { \@@_variable_set:cnnN {#1} { tl } { } x }
\cs_new_protected:cpn { \c_@@_props_root_tl .tl_gset:N } #1
- { \@@_variable_set:NnNN #1 { tl } g n }
+ { \@@_variable_set:NnnN #1 { tl } { g } n }
\cs_new_protected:cpn { \c_@@_props_root_tl .tl_gset:c } #1
- { \@@_variable_set:cnNN {#1} { tl } g n }
+ { \@@_variable_set:cnnN {#1} { tl } { g } n }
\cs_new_protected:cpn { \c_@@_props_root_tl .tl_gset_x:N } #1
- { \@@_variable_set:NnNN #1 { tl } g x }
+ { \@@_variable_set:NnnN #1 { tl } { g } x }
\cs_new_protected:cpn { \c_@@_props_root_tl .tl_gset_x:c } #1
- { \@@_variable_set:cnNN {#1} { tl } g x }
+ { \@@_variable_set:cnnN {#1} { tl } { g } x }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -1706,7 +1687,7 @@
\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}
- \clist_set_eq:NN #4 \l_@@_unknown_clist
+ \cs_set_eq:NN #4 \l_@@_unknown_clist
}
\cs_generate_variant:Nn \keys_set_known:nnN { nV , nv , no }
\cs_generate_variant:Nn \@@_set_known:nnnN { o }
@@ -1805,14 +1786,14 @@
% \@@_execute_unknown_std:,
% \@@_execute_unknown_alt:
% }
-% \begin{macro}[aux]{\@@_execute:nn}
+% \begin{macro}[aux, EXP]{\@@_execute:nn}
% 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.
% \begin{macrocode}
-\cs_new_nopar:Npn \@@_execute:
+\cs_new_protected_nopar:Npn \@@_execute:
{ \@@_execute:nn { \l_keys_path_tl } { \@@_execute_unknown: } }
-\cs_new_nopar:Npn \@@_execute_unknown:
+\cs_new_protected_nopar:Npn \@@_execute_unknown:
{
\@@_execute:nn { \l_@@_module_tl / unknown }
{
@@ -1821,7 +1802,7 @@
}
}
\cs_new_eq:NN \@@_execute_unknown_std: \@@_execute_unknown:
-\cs_new_nopar:Npn \@@_execute_unknown_alt:
+\cs_new_protected_nopar:Npn \@@_execute_unknown_alt:
{
\clist_put_right:Nx \l_@@_unknown_clist
{
@@ -1844,7 +1825,7 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}[int]{\@@_choice_find:n}
+% \begin{macro}[int, EXP]{\@@_choice_find:n}
% Executing a choice has two parts. First, try the choice given, then
% if that fails call the unknown key. That will exist, as it is created
% when a choice is first made. So there is no need for any escape code.
@@ -1886,7 +1867,7 @@
% \begin{macro}{\keys_show:nn}
% Showing a key is just a question of using the correct name.
% \begin{macrocode}
-\cs_new:Npn \keys_show:nn #1#2
+\cs_new_protected:Npn \keys_show:nn #1#2
{ \cs_show:c { \c_@@_code_root_tl #1 / \tl_to_str:n {#2} } }
% \end{macrocode}
% \end{macro}
@@ -1904,20 +1885,18 @@
The~key~'#1'~takes~a~limited~number~of~values.\\
The~input~given,~'#2',~is~not~on~the~list~accepted.
}
-\__msg_kernel_new:nnnn { kernel } { generate-choices-before-code }
- { No~code~available~to~generate~choices~for~key~'#1'. }
+\__msg_kernel_new:nnnn { kernel } { key-choice-unknown }
+ { Key~'#1'~accepts~only~a~fixed~set~of~choices. }
{
- \c_msg_coding_error_text_tl
- Before~using~.generate_choices:n~the~code~should~be~defined~
- with~'.choice_code:n'~or~'.choice_code:x'.
+ The~key~'#1'~only~accepts~predefined~values,~and~'#2'~is~not~one~of~these.
}
\__msg_kernel_new:nnnn { kernel } { key-no-property }
{ No~property~given~in~definition~of~key~'#1'. }
{
\c_msg_coding_error_text_tl
- Inside~\keys_define:nn each~key~name
- needs~a~property: \\
- ~ ~ #1 .<property> \\
+ Inside~\keys_define:nn each~key~name~
+ needs~a~property: \\ \\
+ \iow_indent:n { #1 .<property> } \\ \\
LaTeX~did~not~find~a~'.'~to~indicate~the~start~of~a~property.
}
\__msg_kernel_new:nnnn { kernel } { key-unknown }
@@ -1930,7 +1909,7 @@
{ The~property~'#1'~requires~a~value. }
{
\c_msg_coding_error_text_tl
- LaTeX~was~asked~to~set~property~'#2'~for~key~'#1'.\\
+ LaTeX~was~asked~to~set~property~'#1'~for~key~'#2'.\\
No~value~was~given~for~the~property,~and~one~is~required.
}
\__msg_kernel_new:nnnn { kernel } { property-unknown }
@@ -1955,6 +1934,86 @@
% \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{macrocode}
+\cs_new_protected:Npn \@@_choice_code_store:n #1
+ {
+ \cs_if_exist:cF
+ { \c_@@_vars_root_tl \l_keys_path_tl .choice~code }
+ {
+ \tl_new:c
+ { \c_@@_vars_root_tl \l_keys_path_tl .choice~code }
+ }
+ \tl_set:cn { \c_@@_vars_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 }
+ {
+ \@@_choice_make:
+ \int_zero:N \l_keys_choice_int
+ \clist_map_function:nN {#1} \@@_choices_generate_aux:n
+ }
+ {
+ \__msg_kernel_error:nnx { kernel }
+ { generate-choices-before-code } { \l_keys_path_tl }
+ }
+ }
+\cs_new_protected:Npn \@@_choices_generate_aux:n #1
+ {
+ \int_incr:N \l_keys_choice_int
+ \@@_cmd_set:nx { \l_keys_path_tl / #1 }
+ {
+ \tl_set:Nn \exp_not:N \l_keys_choice_tl {#1}
+ \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 }
+ }
+ }
+\__msg_kernel_new:nnnn { kernel } { generate-choices-before-code }
+ { No~code~available~to~generate~choices~for~key~'#1'. }
+ {
+ \c_msg_coding_error_text_tl
+ 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.
%
@@ -1972,9 +2031,9 @@
% \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
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
index 79fa7961ebd..231c324274a 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 4459 2013-02-13 09:21:15Z will $
+\GetIdInfo$Id: l3prg.dtx 4482 2013-04-24 21:05:12Z joseph $
{L3 Control structures}
%</driver|package>
%<*driver>
@@ -639,7 +639,7 @@
% \cs{\meta{type}_map_break:} and \cs{\meta{type}_map_break:n} use
% this to break out of the loop. After the loop ends, the
% \meta{tokens} are inserted into the input stream. This occurs even
-% if the the break functions are \emph{not} applied:
+% if the break functions are \emph{not} applied:
% \cs{__prg_break_point:Nn} is functionally-equivalent in these cases
% to \cs{use_ii:nn}.
% \end{function}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx b/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
index c70b5137fa3..145a9f4e369 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 4268 2012-11-04 22:19:48Z joseph $
+\GetIdInfo$Id: l3quark.dtx 4521 2013-07-09 11:45:31Z joseph $
{L3 Quarks}
%</driver|package>
%<*driver>
@@ -198,7 +198,8 @@
%
% This module provides a uniform interface to intercepting and
% terminating loops as when one is doing tail recursion. The building
-% blocks follow below and an example is shown in Section~\ref{sec:quark-example}.
+% blocks follow below and an example is shown in
+% Section~\ref{sec:l3quark:quark-example}.
%
% \begin{variable}{\q_recursion_tail}
% This quark is appended to the data structure in question and
@@ -285,7 +286,7 @@
% \end{function}
%
% \section{An example of recursion with quarks}
-% \label{sec:quark-example}
+% \label{sec:l3quark:quark-example}
%
% Quarks are mainly used internally in the \pkg{expl3} code to define
% recursion functions such as \cs{tl_map_inline:nn} and so on.
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
index e917aeda4ea..82c08c35f60 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 4434 2013-01-12 09:33:40Z bruno $
+\GetIdInfo$Id: l3seq.dtx 4500 2013-05-26 11:18:19Z bruno $
{L3 Sequences and stacks}
%</driver|package>
%<*driver>
@@ -253,7 +253,7 @@
% \end{syntax}
% Pops the right-most item from a \meta{sequence} into the
% \meta{token list variable}, \emph{i.e.}~removes the item from the
-% sequence and stores it in in the \meta{token list variable}.
+% sequence and stores it in the \meta{token list variable}.
% Both of the variables are assigned locally. If \meta{sequence} is
% empty the \meta{token list variable} will
% contain the special marker \cs{q_no_value}.
@@ -536,6 +536,64 @@
% \emph{i.e.}~every item in a \meta{sequence} is unique.
% \end{function}
%
+% \section{Using the content of sequences directly}
+%
+% \begin{function}[EXP, added = 2013-05-26]{\seq_use:Nnnn, \seq_use:cnnn}
+% \begin{syntax}
+% \cs{seq_use:Nnnn} \meta{seq~var} \Arg{separator~between~two} \Arg{separator~between~more~than~two} \Arg{separator~between~final~two}
+% \end{syntax}
+% Places the contents of the \meta{seq~var} in the input stream, with
+% the appropriate \meta{separator} between the items. Namely, if the
+% sequence has more than two items, the \meta{separator between more
+% than two} is placed between each pair of items except the last,
+% for which the \meta{separator between final two} is used. If the
+% sequence has exactly two items, then they are placed in the input stream
+% separated by the \meta{separator between two}. If the sequence has
+% a single item, it is placed in the input stream, and an empty sequence
+% produces no output. An error will be raised if the variable does
+% not exist or if it is invalid.
+%
+% For example,
+% \begin{verbatim}
+% \seq_set_split:Nnn \l_tmpa_seq { | } { a | b | c | {de} | f }
+% \seq_use:Nnnn \l_tmpa_seq { ~and~ } { ,~ } { ,~and~ }
+% \end{verbatim}
+% will insert \enquote{\texttt{a, b, c, de, and f}} in the input
+% stream. The first separator argument is not used in this case
+% because the sequence has more than $2$ items.
+% \begin{texnote}
+% The result is returned within the \tn{unexpanded}
+% primitive (\cs{exp_not:n}), which means that the \meta{items}
+% will not expand further when appearing in an \texttt{x}-type
+% argument expansion.
+% \end{texnote}
+% \end{function}
+%
+% \begin{function}[EXP, added = 2013-05-26]{\seq_use:Nn, \seq_use:cn}
+% \begin{syntax}
+% \cs{seq_use:Nn} \meta{seq~var} \Arg{separator}
+% \end{syntax}
+% Places the contents of the \meta{seq~var} in the input stream, with
+% the \meta{separator} between the items. If the sequence has
+% a single item, it is placed in the input stream with no \meta{separator},
+% and an empty sequence produces no output. An error will be raised if
+% the variable does not exist or if it is invalid.
+%
+% For example,
+% \begin{verbatim}
+% \seq_set_split:Nnn \l_tmpa_seq { | } { a | b | c | {de} | f }
+% \seq_use:Nn \l_tmpa_seq { ~and~ }
+% \end{verbatim}
+% will insert \enquote{\texttt{a and b and c and de and f}} in the input
+% stream.
+% \begin{texnote}
+% The result is returned within the \tn{unexpanded}
+% primitive (\cs{exp_not:n}), which means that the \meta{items}
+% will not expand further when appearing in an \texttt{x}-type
+% argument expansion.
+% \end{texnote}
+% \end{function}
+%
% \section{Sequences as stacks}
%
% Sequences can be used as stacks, where data is pushed to and popped
@@ -1464,6 +1522,56 @@
% \end{macro}
% \end{macro}
%
+% \subsection{Using sequences}
+%
+% \begin{macro}[EXP]{\seq_use:Nnnn, \seq_use:cnnn}
+% \begin{macro}[EXP, aux]
+% {\@@_use:NnNnn, \@@_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.
+% \begin{macrocode}
+\cs_new:Npn \seq_use:Nnnn #1#2#3#4
+ {
+ \seq_if_exist:NTF #1
+ {
+ \int_case:nnn { \seq_count:N #1 }
+ {
+ { 0 } { }
+ { 1 } { \exp_after:wN \@@_use:NnNnn #1 \@@_item:n { } { } }
+ { 2 } { \exp_after:wN \@@_use:NnNnn #1 {#2} }
+ }
+ {
+ \exp_after:wN \@@_use:nwwwwnwn
+ \exp_after:wN { \exp_after:wN } #1 \@@_item:n
+ \q_mark { \@@_use:nwwwwnwn {#3} }
+ \q_mark { \@@_use:nwwn {#4} }
+ \q_stop { }
+ }
+ }
+ { \__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:nwwwwnwn
+ #1 \@@_item:n #2 \@@_item:n #3 \@@_item:n #4#5
+ \q_mark #6#7 \q_stop #8
+ {
+ #6 \@@_item:n {#3} \@@_item:n {#4} #5
+ \q_mark {#6} #7 \q_stop { #8 #1 #2 }
+ }
+\cs_new:Npn \@@_use:nwwn #1 \@@_item:n #2 #3 \q_stop #4
+ { \exp_not:n { #4 #1 #2 } }
+\cs_new:Npn \seq_use:Nn #1#2
+ { \seq_use:Nnnn #1 {#2} {#2} {#2} }
+\cs_generate_variant:Nn \seq_use:Nn { c }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
% \subsection{Sequence stacks}
%
% The same functions as for sequences, but with the correct naming.
@@ -1610,7 +1718,7 @@
% A simple short cut for a mapping.
% \begin{macrocode}
%<*deprecated>
-\cs_new:Npn \seq_use:N #1 { \seq_map_function:NN #1 \use:n }
+\cs_new:Npn \seq_use:N #1 { \seq_use:Nn #1 { } }
\cs_generate_variant:Nn \seq_use:N { c }
%</deprecated>
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
index dc164dc20c8..e4c1329a728 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 4415 2013-01-08 12:32:51Z bruno $
+\GetIdInfo$Id: l3tl.dtx 4482 2013-04-24 21:05:12Z joseph $
{L3 Token lists}
%</driver|package>
%<*driver>
@@ -1570,7 +1570,7 @@
% \TeX{} skips spaces when reading a non-delimited arguments. Thus,
% a \meta{token list} is blank if and only if \cs{use_none:n}
% \meta{token list} |?| is empty. For performance reasons, we hard-code
-% the emptyness test done in \cs{tl_if_empty:n(TF)}: convert to harmless
+% the emptiness test done in \cs{tl_if_empty:n(TF)}: convert to harmless
% characters with \cs{tl_to_str:n}, and then use
% \cs{if_meaning:w} \cs{q_nil} |...| \cs{q_nil}.
% Note that converting to a string is done after reading the delimited
@@ -1730,7 +1730,7 @@
% of |#2|. If this does not appear in |#1|, then the final |#2| is removed,
% leaving an empty token list. Otherwise some tokens remain, and the
% test is \texttt{false}. See \cs{tl_if_empty:n(TF)} for details on
-% the emptyness test.
+% the emptiness test.
%
% Special care is needed to treat correctly cases like
% |\tl_if_in:nnTF {a state}{states}|, where |#1#2| contains |#2| before
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
index 16e5510475a..34427af0d1d 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 4428 2013-01-10 13:23:29Z bruno $
+\GetIdInfo$Id: l3token.dtx 4482 2013-04-24 21:05:12Z joseph $
{L3 Experimental token manipulation}
%</driver|package>
%<*driver>
@@ -1556,7 +1556,7 @@
% thinks of such tokens as hexadecimal so it stores them as
% |\char"|\meta{hex~number} or |\mathchar"|\meta{hex~number}.
% Grab until the first occurrence of |char"|, and compare what
-% preceeds with |\| or |\math|. In fact, the escape character
+% precedes with |\| or |\math|. In fact, the escape character
% may not be a backslash, so we compare with the result of
% converting some other control sequence to a string, namely
% |\char| or |\mathchar| (the auxiliary adds the |char| back).
@@ -2015,7 +2015,7 @@
% The catcode and charcode tests are very similar, and in order to use
% the same auxiliaries we do something a little bit odd, firing
% \cs{if_catcode:w} and \cs{if_charcode:w} before finding the operands
-% for those tests, which will only be given in in the |auxii:N| and
+% for those tests, which will only be given in the |auxii:N| and
% |auxiii:| auxiliaries. For our purposes, three kinds of tokens may
% follow the peeking function:
% \begin{itemize}
diff --git a/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx b/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx
index 4e7635b8be3..7c3661493a1 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/03/12]
-%<package>\@ifpackagelater{expl3}{2013/03/12}
+\RequirePackage{expl3}[2013/07/12]
+%<package>\@ifpackagelater{expl3}{2013/07/12}
%<package> {}
%<package> {%
%<package> \PackageError{l3keys2e}{Support package l3kernel too old}
@@ -50,7 +50,7 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: l3keys2e.dtx 4467 2013-03-12 08:29:05Z joseph $
+\GetIdInfo$Id: l3keys2e.dtx 4544 2013-07-12 07:14:52Z 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 64a7cb504d9..be5242226ba 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/03/12]
-%<package>\@ifpackagelater{expl3}{2013/03/12}
+\RequirePackage{expl3}[2013/07/12]
+%<package>\@ifpackagelater{expl3}{2013/07/12}
%<package> {}
%<package> {%
%<package> \PackageError{xparse}{Support package l3kernel too old}
@@ -54,7 +54,7 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: xparse.dtx 4467 2013-03-12 08:29:05Z joseph $
+\GetIdInfo$Id: xparse.dtx 4544 2013-07-12 07:14:52Z joseph $
{L3 Experimental document command parser}
%</driver|package>
%<*driver>
@@ -344,10 +344,10 @@
% \begin{verbatim}
% \DeclareDocumentCommand \chapter { s o m }
% {
-% \IfBooleanTF {#1}
-% { \typesetnormalchapter {#2} {#3} }
-% { \typesetstarchapter {#3} }
-% }
+% \IfBooleanTF {#1}
+% { \typesetstarchapter {#3} }
+% { \typesetnormalchapter {#2} {#3} }
+% }
% \end{verbatim}
% would be a way to define a \cs{chapter} command which would
% essentially behave like the current \LaTeXe{} command (except that it
@@ -499,7 +499,7 @@
% \cs{ReverseBoolean}
% \end{syntax}
% This processor reverses the logic of \cs{BooleanTrue} and
-% \cs{BooleanFalse}, so that the the example from earlier would become
+% \cs{BooleanFalse}, so that the example from earlier would become
% \begin{verbatim}
% \DeclareDocumentCommand \foo { > { \ReverseBoolean } s m }
% {
@@ -1955,7 +1955,7 @@
% to collect up each pair of optional tokens without \TeX{} helping out,
% and without counting anything. The code above will already have
% removed the leading opening token and a closing token, but the
-% wrong one. The aim is then to work through the the material grabbed
+% wrong one. The aim is then to work through the material grabbed
% so far and divide it up on each opening token, grabbing a closing
% token to match (thus working in pairs). Once there are no opening
% tokens, then there is a second check to see if there are any
@@ -2308,7 +2308,7 @@
% \begin{variable}{\l_@@_v_rest_of_signature_tl}
% \begin{variable}{\l_@@_v_arg_tl}
% The opening delimiter is never read verbatim, for consistency: if the
-% preceeding argument was optional and absent, then \TeX{} has already read
+% preceding argument was optional and absent, then \TeX{} has already read
% that token when looking for the optional argument. The first thing
% to check is that this delimiter is a character, and distinguish the
% case of a left brace (in that case, \cs{group_align_safe_end:}
@@ -2820,7 +2820,7 @@
%
% \begin{macro}[EXP]{\@@_expandable_grab_R_alt:w}
% \begin{macro}[EXP]{\@@_expandable_grab_R_alt_aux:NNnwNn}
-% When the delimiters are identical, nesting is not possble and a simplified
+% When the delimiters are identical, nesting is not possible and a simplified
% approach is used. The test concept here is the same as for the case where
% the delimiters are different.
% \begin{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx b/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx
index f8467ce2a14..4730ece2af6 100644
--- a/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx
+++ b/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx
@@ -41,7 +41,7 @@
%<*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/03/12]
+\RequirePackage{expl3}[2013/07/12]
%<package>\@ifpackagelater{expl3}{2013/03/12}
%<package> {}
%<package> {%
@@ -54,7 +54,7 @@
%<package> }%
%<package> \endinput
%<package> }
-\GetIdInfo$Id: xtemplate.dtx 4467 2013-03-12 08:29:05Z joseph $
+\GetIdInfo$Id: xtemplate.dtx 4544 2013-07-12 07:14:52Z joseph $
{L3 Experimental prototype document functions}
%</driver|package>
%<*driver>
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3dt/l3dt.sty b/Master/texmf-dist/tex/latex/l3experimental/l3dt/l3dt.sty
index fb5cc34221f..ace519666d8 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3dt/l3dt.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/l3dt/l3dt.sty
@@ -47,7 +47,7 @@
%% -----------------------------------------------------------------------
%%
\RequirePackage{expl3}
-\GetIdInfo$Id: l3dt.dtx 4420 2013-01-08 20:00:04Z joseph $
+\GetIdInfo$Id: l3dt.dtx 4482 2013-04-24 21:05:12Z joseph $
{L3 Experimental data tables}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3sort/l3sort.sty b/Master/texmf-dist/tex/latex/l3experimental/l3sort/l3sort.sty
index 21c29315228..71ce3d901e9 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 4339 2012-11-24 19:16:43Z joseph $
+\GetIdInfo$Id: l3sort.dtx 4491 2013-05-12 16:22:18Z bruno $
{L3 Experimental sorting functions}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -60,33 +60,6 @@
\int_new:N \l__sort_A_int
\int_new:N \l__sort_B_int
\int_new:N \l__sort_C_int
-\cs_new:Npn \tl_sort:nN #1#2 { \__sort_quick:nNn {#1} #2 { } }
-\cs_new:Npn \__sort_quick:nNn #1#2
- {
- \exp_after:wN \__sort_quick:wn
- \use_none:n #1 \__prg_break_point:
- \__sort_quick:nnNnn { } { } #2
- #1
- { \__prg_break_point: }
- \__prg_break_point:
- }
-\cs_new:Npn \__sort_quick:wn #1 \__prg_break_point: #2 {#2}
-\cs_new:Npn \__sort_quick:nnNnn #1#2#3#4#5
- {
- \__prg_break: #5
- \__sort_quick:nnNnwn {#1} {#2}
- \__prg_break_point:
- #3 {#4} {#5}
- { \__sort_quick:nnNnn {#1} { #2 {#5} } }
- { \__sort_quick:nnNnn { #1 {#5} } {#2} }
- #3 {#4}
- }
-\cs_new:Npn \__sort_quick:nnNnwn
- #1#2 \__prg_break_point: #3#4 #5 \__prg_break_point: #6
- {
- \__sort_quick:nNn {#2} #3
- { \__sort_quick:nNn {#1} #3 {#6} {#4} }
- }
\cs_new_protected:Npn \__sort_main:NNNnNn #1#2#3#4#5#6
{
\group_begin:
@@ -133,10 +106,10 @@
{ \__sort_toks:NNw \prg_do_nothing: \prg_do_nothing: 0 ; }
}
\cs_new_protected_nopar:Npn \clist_sort:Nn
- { \__sort_sort:NNn \tl_set:Nn }
+ { \__sort_clist:NNn \tl_set:Nn }
\cs_new_protected_nopar:Npn \clist_gsort:Nn
- { \__sort_sort:NNn \tl_gset:Nn }
-\cs_new_protected:Npn \__sort_sort:NNn #1#2#3
+ { \__sort_clist:NNn \tl_gset:Nn }
+\cs_new_protected:Npn \__sort_clist:NNn #1#2#3
{
\clist_if_empty:NF #2
{
@@ -232,6 +205,87 @@
\fi:
\__sort_merge_blocks_end:
}
+\cs_new:Npn \tl_sort:nN #1#2
+ {
+ \exp_not:f
+ {
+ \tl_if_blank:nF {#1}
+ {
+ \__sort_quick_prepare:Nnnn #2 { } { }
+ #1
+ { \__prg_break_point: \__sort_quick_prepare_end:NNNnw }
+ \q_stop
+ }
+ }
+ }
+\cs_new:Npn \__sort_quick_prepare:Nnnn #1#2#3#4
+ {
+ \__prg_break: #4 \__prg_break_point:
+ \__sort_quick_prepare:Nnnn #1 { #2 #3 } { #1 {#4} }
+ }
+\cs_new:Npn \__sort_quick_prepare_end:NNNnw #1#2#3#4#5 \q_stop
+ {
+ \__sort_quick_split:NnNn #4 \__sort_quick_end:nnTFNn { }
+ \q_mark { \__sort_quick_cleanup:w \exp_stop_f: }
+ \s__stop \q_stop
+ }
+\cs_new:Npn \__sort_quick_cleanup:w #1 \s__stop \q_stop {#1}
+\cs_new:Npn \__sort_quick_split:NnNn #1#2#3#4
+ {
+ #3 {#2} {#4} \__sort_quick_only_ii:NnnnnNn \__sort_quick_only_i:NnnnnNn
+ \__sort_quick_single_end:nnnwnw
+ { #3 {#4} } { } { } {#2}
+ }
+\cs_new:Npn \__sort_quick_only_i:NnnnnNn #1#2#3#4#5#6#7
+ {
+ #6 {#5} {#7} \__sort_quick_split_ii:NnnnnNn \__sort_quick_only_i:NnnnnNn
+ \__sort_quick_only_i_end:nnnwnw
+ { #6 {#7} } { #3 #2 } { } {#5}
+ }
+\cs_new:Npn \__sort_quick_only_ii:NnnnnNn #1#2#3#4#5#6#7
+ {
+ #6 {#5} {#7} \__sort_quick_only_ii:NnnnnNn \__sort_quick_split_i:NnnnnNn
+ \__sort_quick_only_ii_end:nnnwnw
+ { #6 {#7} } { } { #4 #2 } {#5}
+ }
+\cs_new:Npn \__sort_quick_split_i:NnnnnNn #1#2#3#4#5#6#7
+ {
+ #6 {#5} {#7} \__sort_quick_split_ii:NnnnnNn \__sort_quick_split_i:NnnnnNn
+ \__sort_quick_split_end:nnnwnw
+ { #6 {#7} } { #3 #2 } {#4} {#5}
+ }
+\cs_new:Npn \__sort_quick_split_ii:NnnnnNn #1#2#3#4#5#6#7
+ {
+ #6 {#5} {#7} \__sort_quick_split_ii:NnnnnNn \__sort_quick_split_i:NnnnnNn
+ \__sort_quick_split_end:nnnwnw
+ { #6 {#7} } {#3} { #4 #2 } {#5}
+ }
+\cs_new:Npn \__sort_quick_end:nnTFNn #1#2#3#4#5#6 {#5}
+\cs_new:Npn \__sort_quick_single_end:nnnwnw #1#2#3#4 \q_mark #5#6 \q_stop
+ { #5 {#3} #6 \q_stop }
+\cs_new:Npn \__sort_quick_only_i_end:nnnwnw #1#2#3#4 \q_mark #5#6 \q_stop
+ {
+ \__sort_quick_split:NnNn #1
+ \__sort_quick_end:nnTFNn { } \q_mark {#5}
+ {#3}
+ #6 \q_stop
+ }
+\cs_new:Npn \__sort_quick_only_ii_end:nnnwnw #1#2#3#4 \q_mark #5#6 \q_stop
+ {
+ \__sort_quick_split:NnNn #2
+ \__sort_quick_end:nnTFNn { } \q_mark { #5 {#3} }
+ #6 \q_stop
+ }
+\cs_new:Npn \__sort_quick_split_end:nnnwnw #1#2#3#4 \q_mark #5#6 \q_stop
+ {
+ \__sort_quick_split:NnNn #2 \__sort_quick_end:nnTFNn { } \q_mark
+ {
+ \__sort_quick_split:NnNn #1
+ \__sort_quick_end:nnTFNn { } \q_mark {#5}
+ {#3}
+ }
+ #6 \q_stop
+ }
\cs_new_protected:Npn \__sort_too_long_error:NNw #1#2 \fi:
{
\fi:
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 91a6eab725f..a06c2d882db 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 4455 2013-01-22 20:38:19Z bruno $
+\GetIdInfo$Id: l3regex.dtx 4482 2013-04-24 21:05:12Z joseph $
{L3 Experimental regular expressions}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex.sty
index 89f631f7e0b..f3438ed74f6 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 4455 2013-01-22 20:38:19Z bruno $
+\GetIdInfo$Id: l3regex.dtx 4482 2013-04-24 21:05:12Z joseph $
{L3 Experimental regular expressions}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty
index 5291a394382..122f0341a8e 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty
@@ -484,6 +484,23 @@
}
}
\group_end:
+\cs_new_protected_nopar:Npn \__str_convert_decode_clist:
+ {
+ \clist_set:No \g__str_result_tl \g__str_result_tl
+ \tl_gset:Nx \g__str_result_tl
+ {
+ \exp_args:No \clist_map_function:nN
+ \g__str_result_tl \__str_decode_clist_char:n
+ }
+ }
+\cs_new:Npn \__str_decode_clist_char:n #1
+ { #1 \s__tl \int_eval:n {#1} \s__tl }
+\cs_new_protected_nopar:Npn \__str_convert_encode_clist:
+ {
+ \__str_convert_gmap_internal:N \__str_encode_clist_char:n
+ \tl_gset:Nx \g__str_result_tl { \tl_tail:N \g__str_result_tl }
+ }
+\cs_new:Npn \__str_encode_clist_char:n #1 { , #1 }
\cs_new_protected:Npn \__str_declare_eight_bit_encoding:nnn #1#2#3
{
\tl_set:Nn \l__str_internal_tl {#1}
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str.sty
index 15d29def3e8..40b503280e3 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 4452 2013-01-20 10:18:32Z joseph $
+\GetIdInfo$Id: l3str.dtx 4482 2013-04-24 21:05:12Z joseph $
{L3 Experimental strings}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty b/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty
index a05256b4f44..ec016098bdd 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty
@@ -14,7 +14,7 @@
%% Do not distribute a modified version of this file.
%%
%% File: l3galley.dtx Copyright (C) 1999-2001, 2004-2009 Frank Mittelbach
-%% (C) 2010-2012 The LaTeX3 Project
+%% (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
@@ -48,7 +48,7 @@
%% -----------------------------------------------------------------------
%%
\RequirePackage{xparse}
-\GetIdInfo$Id: l3galley.dtx 4402 2013-01-08 08:59:44Z bruno $
+\GetIdInfo$Id: l3galley.dtx 4494 2013-05-24 06:27:01Z joseph $
{L3 Experimental galley code}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -486,7 +486,7 @@
{ \__galley_parshape_measure: }
}
{
- \prg_replicate:nn \g__galley_previous_par_lines_int
+ \prg_replicate:nn \g_galley_previous_par_lines_int
{
\seq_gpop:NN \g__galley_cutout_left_seq \l__galley_tmp_tl
\seq_gpop:NN \g__galley_cutout_right_seq \l__galley_tmp_tl
@@ -611,7 +611,7 @@
\int_compare:nNnTF \tex_parshape:D = \c_zero
{
\tl_put_right:Nn \l__galley_tmp_tl
- { \l__galley_total_left_margin_dim \l__galley_text_width_dim }
+ { \l__galley_total_left_margin_dim \l_galley_text_width_dim }
}
{
\tl_put_right:Nx \l__galley_tmp_tl
@@ -636,7 +636,7 @@
{
\dim_eval:n { \l__galley_total_left_margin_dim + ( #1 ) }
\c_space_tl
- \dim_eval:n { \l__galley_text_width_dim - ( #1 ) }
+ \dim_eval:n { \l_galley_text_width_dim - ( #1 ) }
\c_space_tl
}
{
@@ -652,10 +652,19 @@
\int_incr:N \l__galley_tmp_int
\tl_put_right:Nx \l__galley_tmp_tl
{
- \dim_eval:n { \etex_parshapeindent:D \l__galley_tmp_int }
- \c_space_tl
- \dim_eval:n { \etex_parshapelength:D \l__galley_tmp_int - ( #1 ) }
- \c_space_tl
+ \int_compare:nNnTF \l__galley_tmp_int > \tex_parshape:D
+ {
+ \dim_use:N \l__galley_total_left_margin_dim
+ \c_space_tl
+ \dim_eval:n { \l_galley_text_width_dim - ( #1 ) }
+ \c_space_tl
+ }
+ {
+ \dim_eval:n { \etex_parshapeindent:D \l__galley_tmp_int }
+ \c_space_tl
+ \dim_eval:n { \etex_parshapelength:D \l__galley_tmp_int - ( #1 ) }
+ \c_space_tl
+ }
}
}
\cs_new_protected:Npn \__galley_cutout_end:n #1
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
index 1685d6fc174..d8105f61edb 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/03/14}
-\def\ExplFileVersion{4469}
+\def\ExplFileDate{2013/07/12}
+\def\ExplFileVersion{4544}
\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 52e7a7f3735..703d134e38b 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 4428 2013-01-10 13:23:29Z bruno $
+\GetIdInfo$Id: l3basics.dtx 4521 2013-07-09 11:45:31Z joseph $
{L3 Basic definitions}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3box.sty b/Master/texmf-dist/tex/latex/l3kernel/l3box.sty
index af3070bcaaa..32f90af3a29 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3box.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3box.sty
@@ -46,7 +46,7 @@
%%
%% -----------------------------------------------------------------------
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3box.dtx 4411 2013-01-08 12:21:52Z bruno $
+\GetIdInfo$Id: l3box.dtx 4482 2013-04-24 21:05:12Z 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 109bf7a2733..586823f2c55 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3candidates.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3candidates.sty
@@ -13,7 +13,7 @@
%%
%% Do not distribute a modified version of this file.
%%
-%% File: l3candidates.dtx Copyright(C) 2012 The LaTeX3 Project
+%% File: l3candidates.dtx Copyright(C) 2012,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
@@ -47,7 +47,7 @@
%% -----------------------------------------------------------------------
%%
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3candidates.dtx 4468 2013-03-14 20:30:45Z joseph $
+\GetIdInfo$Id: l3candidates.dtx 4521 2013-07-09 11:45:31Z joseph $
{L3 Experimental additions to l3kernel}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -491,32 +491,6 @@
{ \__clist_if_empty_n:wNw }
}
\cs_new:Npn \__clist_if_empty_n:wNw #1 \q_mark #2#3 \q_stop {#2}
-\cs_new:Npn \clist_use:Nnnn #1#2#3#4
- {
- \clist_if_exist:NTF #1
- {
- \int_case:nnn { \clist_count:N #1 }
- {
- { 0 } { }
- { 1 } { \exp_after:wN \__clist_use:wwn #1 , , { } }
- { 2 } { \exp_after:wN \__clist_use:wwn #1 , {#2} }
- }
- {
- \exp_after:wN \__clist_use:nwwwwnwn
- \exp_after:wN { \exp_after:wN } #1 ,
- \q_mark , { \__clist_use:nwwwwnwn {#3} }
- \q_mark , { \__clist_use:nwwn {#4} }
- \q_stop { }
- }
- }
- { \__msg_kernel_expandable_error:nnn { kernel } { bad-variable } {#1} }
- }
-\cs_new:Npn \__clist_use:wwn #1 , #2 , #3 { \exp_not:n { #1 #3 #2 } }
-\cs_new:Npn \__clist_use:nwwwwnwn
- #1#2 , #3 , #4 , #5 \q_mark , #6#7 \q_stop #8
- { #6 {#3} , {#4} , #5 \q_mark , {#6} #7 \q_stop { #8 #1 #2 } }
-\cs_new:Npn \__clist_use:nwwn #1#2 , #3 \q_stop #4
- { \exp_not:n { #4 #1 #2 } }
\fp_new:N \l__coffin_sin_fp
\fp_new:N \l__coffin_cos_fp
\prop_new:N \l__coffin_bounding_prop
@@ -798,14 +772,11 @@
}
\cs_generate_variant:Nn \prop_map_tokens:Nn { c }
\cs_new:Npn \prop_get:Nn #1#2
- { \__prop_get:No #1 { \tl_to_str:n {#2} } }
-\cs_new:Npn \__prop_get:Nn #1#2
{
- \exp_last_unbraced:Nno \__prop_get_Nn:nwn {#2} #1
- \s__prop #2 \s__prop { }
+ \exp_last_unbraced:Noo \__prop_get_Nn:nwn { \tl_to_str:n {#2} } #1
+ \s__prop \tl_to_str:n {#2} \s__prop { }
\__prg_break_point:
}
-\cs_generate_variant:Nn \__prop_get:Nn { No }
\cs_new:Npn \__prop_get_Nn:nwn #1 \s__prop #2 \s__prop #3
{
\str_if_eq_x:nnTF {#1} {#2}
@@ -928,37 +899,17 @@
#1 #2 { #3 }
\__seq_pop_item_def:
}
-\cs_new:Npn \seq_use:Nnnn #1#2#3#4
+\cs_new_eq:NN \dim_to_pt:n \__dim_strip_pt:n
+\cs_new:Npn \dim_to_unit:nn #1#2
{
- \seq_if_exist:NTF #1
+ \dim_to_pt:n
{
- \int_case:nnn { \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} }
- }
- {
- \exp_after:wN \__seq_use:nwwwwnwn
- \exp_after:wN { \exp_after:wN } #1 \__seq_item:n
- \q_mark { \__seq_use:nwwwwnwn {#3} }
- \q_mark { \__seq_use:nwwn {#4} }
- \q_stop { }
- }
+ 1pt * \__dim_to_unit:n { \dim_to_pt:n {#1} pt }
+ / \__dim_to_unit:n { \dim_to_pt:n {#2} pt }
}
- { \__msg_kernel_expandable_error:nnn { kernel } { bad-variable } {#1} }
- }
-\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:nwwwwnwn
- #1 \__seq_item:n #2 \__seq_item:n #3 \__seq_item:n #4#5
- \q_mark #6#7 \q_stop #8
- {
- #6 \__seq_item:n {#3} \__seq_item:n {#4} #5
- \q_mark {#6} #7 \q_stop { #8 #1 #2 }
}
-\cs_new:Npn \__seq_use:nwwn #1 \__seq_item:n #2 #3 \q_stop #4
- { \exp_not:n { #4 #1 #2 } }
+\cs_new:Npn \__dim_to_unit:n #1
+ { \__int_value:w \__dim_eval:w #1 \__dim_eval_end: }
\cs_new:Npn \skip_split_finite_else_action:nnNN #1#2#3#4
{
\skip_if_finite:nTF {#1}
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3clist.sty b/Master/texmf-dist/tex/latex/l3kernel/l3clist.sty
index c06c5498149..2a216e4ff73 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 4414 2013-01-08 12:32:12Z bruno $
+\GetIdInfo$Id: l3clist.dtx 4500 2013-05-26 11:18:19Z bruno $
{L3 Comma separated lists}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -411,6 +411,36 @@
\exp_not:N \tl_if_blank:nF {#1} { + \c_one }
\exp_not:N \__clist_count:w \c_space_tl
}
+\cs_new:Npn \clist_use:Nnnn #1#2#3#4
+ {
+ \clist_if_exist:NTF #1
+ {
+ \int_case:nnn { \clist_count:N #1 }
+ {
+ { 0 } { }
+ { 1 } { \exp_after:wN \__clist_use:wwn #1 , , { } }
+ { 2 } { \exp_after:wN \__clist_use:wwn #1 , {#2} }
+ }
+ {
+ \exp_after:wN \__clist_use:nwwwwnwn
+ \exp_after:wN { \exp_after:wN } #1 ,
+ \q_mark , { \__clist_use:nwwwwnwn {#3} }
+ \q_mark , { \__clist_use:nwwn {#4} }
+ \q_stop { }
+ }
+ }
+ { \__msg_kernel_expandable_error:nnn { kernel } { bad-variable } {#1} }
+ }
+\cs_generate_variant:Nn \clist_use:Nnnn { c }
+\cs_new:Npn \__clist_use:wwn #1 , #2 , #3 { \exp_not:n { #1 #3 #2 } }
+\cs_new:Npn \__clist_use:nwwwwnwn
+ #1#2 , #3 , #4 , #5 \q_mark , #6#7 \q_stop #8
+ { #6 {#3} , {#4} , #5 \q_mark , {#6} #7 \q_stop { #8 #1 #2 } }
+\cs_new:Npn \__clist_use:nwwn #1#2 , #3 \q_stop #4
+ { \exp_not:n { #4 #1 #2 } }
+\cs_new:Npn \clist_use:Nn #1#2
+ { \clist_use:Nnnn #1 {#2} {#2} {#2} }
+\cs_generate_variant:Nn \clist_use:Nn { c }
\cs_new_protected:Npn \clist_show:N #1
{
\__msg_show_variable:Nnn #1 { clist }
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls b/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls
index 9fa07d959ef..d3dd89238cb 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls
@@ -4,8 +4,7 @@
%%
%% The original source files were:
%%
-%% l3doc.dtx (with options: `class,cfg')
-%%
+%% l3doc.dtx (with options: `class')
%%
%% EXPERIMENTAL CODE
%%
@@ -14,7 +13,6 @@
%%
%% 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
@@ -1459,51 +1457,6 @@
\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/l3dvipdfmx.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def
index 2924160ac17..bf00bdedecb 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def
@@ -47,16 +47,16 @@
%% -----------------------------------------------------------------------
%%
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3drivers.dtx 4280 2012-11-07 07:13:51Z joseph $
+\GetIdInfo$Id: l3drivers.dtx 4505 2013-06-28 22:06:04Z joseph $
{L3 Experimental drivers}
\ProvidesExplFile
{l3dvidpfmx.def}{\ExplFileDate}{\ExplFileVersion}
{L3 Experimental driver: dvipdfmx}
\__expl_package_check:
\cs_new_protected_nopar:Npn \__driver_graphic_state_save:
- { \tex_special:D { pdf:bcontent } }
+ { \tex_special:D { pdf:content~q } }
\cs_new_protected_nopar:Npn \__driver_graphic_state_restore:
- { \tex_special:D { pdf:econtent } }
+ { \tex_special:D { pdf:content~Q } }
\cs_new_protected:Npn \__driver_pdf_literal:n #1
{ \tex_special:D { pdf:content~ #1 } }
\cs_new_protected:Npn \__driver_pdf_literal_direct:n #1
@@ -72,8 +72,12 @@
\__dim_strip_bp:n { \box_ht:N #1 + \box_dp:N #1 } ~
re~W~n
}
+ \__driver_pdf_matrix:n { -1~0~0~-1 }
+ \__driver_graphic_state_save:
+ \__driver_pdf_matrix:n { -1~0~0~-1 }
\hbox_overlap_right:n { \box_use:N #1 }
\__driver_graphic_state_restore:
+ \__driver_graphic_state_restore:
\skip_horizontal:n { \box_wd:N #1 }
}
\cs_new_protected_nopar:Npn \__driver_box_rotate_begin:
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def
index fd499957e55..355f52bd4ad 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def
@@ -47,7 +47,7 @@
%% -----------------------------------------------------------------------
%%
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3drivers.dtx 4280 2012-11-07 07:13:51Z joseph $
+\GetIdInfo$Id: l3drivers.dtx 4505 2013-06-28 22:06:04Z joseph $
{L3 Experimental drivers}
\ProvidesExplFile
{l3dvips.def}{\ExplFileDate}{\ExplFileVersion}
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3expan.sty b/Master/texmf-dist/tex/latex/l3kernel/l3expan.sty
index efd3425ec59..69dc9b3593a 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 4458 2013-02-03 15:49:37Z bruno $
+\GetIdInfo$Id: l3expan.dtx 4521 2013-07-09 11:45:31Z joseph $
{L3 Argument expansion}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3file.sty b/Master/texmf-dist/tex/latex/l3kernel/l3file.sty
index f86225c08d8..16c7c74ede6 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 4446 2013-01-14 00:03:17Z bruno $
+\GetIdInfo$Id: l3file.dtx 4483 2013-05-01 10:57:41Z bruno $
{L3 File and I/O operations}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -199,7 +199,7 @@
{ \__ior_open:No #1 \l__file_internal_name_tl }
}
\prg_new_protected_conditional:Npnn \ior_open:Nn #1#2 { T , F , TF }
- { \__file_name_sanitize:nn {#2} { \__ior_open:NnTF #1 } }
+ { \__file_name_sanitize:nn {#2} { \__ior_open_aux:NnTF #1 } }
\cs_generate_variant:Nn \ior_open:NnT { c }
\cs_generate_variant:Nn \ior_open:NnF { c }
\cs_generate_variant:Nn \ior_open:NnTF { c }
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3fp.sty b/Master/texmf-dist/tex/latex/l3kernel/l3fp.sty
index 6bbe576f511..9b38f5dde9e 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3fp.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3fp.sty
@@ -59,7 +59,7 @@
%% -----------------------------------------------------------------------
%%
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3fp.dtx 4449 2013-01-19 23:55:05Z bruno $
+\GetIdInfo$Id: l3fp.dtx 4521 2013-07-09 11:45:31Z joseph $
{L3 Floating points}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3int.sty b/Master/texmf-dist/tex/latex/l3kernel/l3int.sty
index b104958c41f..fcff17590c0 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 4444 2013-01-13 20:27:20Z bruno $
+\GetIdInfo$Id: l3int.dtx 4482 2013-04-24 21:05:12Z joseph $
{L3 Integers}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3keys.sty b/Master/texmf-dist/tex/latex/l3kernel/l3keys.sty
index e232f8e1645..ab3bf0dcd66 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 4461 2013-02-24 18:55:17Z joseph $
+\GetIdInfo$Id: l3keys.dtx 4544 2013-07-12 07:14:52Z joseph $
{L3 Experimental key-value interfaces}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -198,8 +198,11 @@
\cs_if_exist:cTF { \c__keys_props_root_tl \l__keys_property_tl }
{ \__keys_define_key:n {#2} }
{
- \__msg_kernel_error:nnxx { kernel } { property-unknown }
- { \l__keys_property_tl } { \l_keys_path_tl }
+ \str_if_eq_x:nnF { \l__keys_property_tl } { .abort: }
+ {
+ \__msg_kernel_error:nnxx { kernel } { property-unknown }
+ { \l__keys_property_tl } { \l_keys_path_tl }
+ }
}
}
\cs_new_protected:Npn \__keys_property_find:n #1
@@ -207,7 +210,10 @@
\tl_set:Nx \l_keys_path_tl { \l__keys_module_tl / }
\tl_if_in:nnTF {#1} { . }
{ \__keys_property_find:w #1 \q_stop }
- { \__msg_kernel_error:nnx { kernel } { key-no-property } {#1} }
+ {
+ \__msg_kernel_error:nnx { kernel } { key-no-property } {#1}
+ \tl_set:Nn \l__keys_property_tl { .abort: }
+ }
}
\cs_new_protected:Npn \__keys_property_find:w #1 . #2 \q_stop
{
@@ -236,7 +242,7 @@
}
\cs_new_protected:Npn \__keys_define_key:w #1 : #2 \q_stop
{ \tl_if_empty:nTF {#2} }
-\cs_new:Npn \__keys_bool_set:NN #1#2
+\cs_new_protected:Npn \__keys_bool_set:Nn #1#2
{
\bool_if_exist:NF #1 { \bool_new:N #1 }
\__keys_choice_make:
@@ -251,7 +257,8 @@
}
\__keys_default_set:n { true }
}
-\cs_new:Npn \__keys_bool_set_inverse:NN #1#2
+\cs_generate_variant:Nn \__keys_bool_set:Nn { c }
+\cs_new_protected:Npn \__keys_bool_set_inverse:Nn #1#2
{
\bool_if_exist:NF #1 { \bool_new:N #1 }
\__keys_choice_make:
@@ -266,6 +273,7 @@
}
\__keys_default_set:n { true }
}
+\cs_generate_variant:Nn \__keys_bool_set_inverse:Nn { c }
\cs_new_protected_nopar:Npn \__keys_choice_make:
{
\__keys_cmd_set:nn { \l_keys_path_tl }
@@ -292,55 +300,12 @@
}
}
}
-\cs_new_protected:Npn \__keys_choices_generate:n #1
- {
- \cs_if_exist:cTF
- { \c__keys_vars_root_tl \l_keys_path_tl .choice~code }
- {
- \__keys_choice_make:
- \int_zero:N \l_keys_choice_int
- \clist_map_function:nN {#1} \__keys_choices_generate_aux:n
- }
- {
- \__msg_kernel_error:nnx { kernel }
- { generate-choices-before-code } { \l_keys_path_tl }
- }
- }
-\cs_new_protected:Npn \__keys_choices_generate_aux:n #1
- {
- \int_incr:N \l_keys_choice_int
- \__keys_cmd_set:nx { \l_keys_path_tl / #1 }
- {
- \tl_set:Nn \exp_not:N \l_keys_choice_tl {#1}
- \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 }
- }
- }
-\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 }
- {
- \tl_new:c
- { \c__keys_vars_root_tl \l_keys_path_tl .choice~code }
- }
- \tl_set:cn { \c__keys_vars_root_tl \l_keys_path_tl .choice~code }
- {#1}
- }
-\cs_generate_variant:Nn \__keys_choice_code_store:n { x }
\cs_new_protected:Npn \__keys_cmd_set:nn #1#2
{
\__keys_cmd_set:n {#1}
\cs_set:cpn { \c__keys_code_root_tl #1 } ##1 {#2}
}
-\cs_new_protected:Npn \__keys_cmd_set:nx #1#2
- {
- \__keys_cmd_set:n {#1}
- \cs_set:cpx { \c__keys_code_root_tl #1 } ##1 {#2}
- }
-\cs_generate_variant:Nn \__keys_cmd_set:nn { Vo }
+\cs_generate_variant:Nn \__keys_cmd_set:nn { nx , Vn , Vo }
\cs_new_protected:Npn \__keys_cmd_set:n #1
{
\tl_clear_new:c { \c__keys_vars_root_tl #1 .default }
@@ -349,25 +314,17 @@
}
\cs_new_protected:Npn \__keys_default_set:n #1
{ \tl_set:cn { \c__keys_vars_root_tl \l_keys_path_tl .default } {#1} }
-\cs_generate_variant:Nn \__keys_default_set:n { V }
\cs_new_protected:Npn \__keys_initialise:n #1
- {
- \use:x
- { \exp_after:wN \__keys_initialise:wn \l_keys_path_tl \q_stop {#1} }
- }
-\cs_generate_variant:Nn \__keys_initialise:n { V }
-\cs_new:Npn \__keys_initialise:wn #1 / #2 \q_stop #3
- { \keys_set:nn {#1} { #2 = \exp_not:n { {#3} } } }
+ { \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
+ { \keys_set:nn {#1} { #2 = {#3} } }
\cs_new_protected:Npn \__keys_meta_make:n #1
{
\__keys_cmd_set:Vo \l_keys_path_tl
{ \exp_after:wN \keys_set:nn \exp_after:wN { \l__keys_module_tl } {#1} }
}
-\cs_new_protected:Npn \__keys_meta_make:x #1
- {
- \__keys_cmd_set:nx { \l_keys_path_tl }
- { \exp_not:N \keys_set:nn { \l__keys_module_tl } {#1} }
- }
+\cs_new_protected:Npn \__keys_meta_make:nn #1#2
+ { \__keys_cmd_set:Vn \l_keys_path_tl { \keys_set:nn {#1} {#2} } }
\cs_new:Npn \__keys_multichoice_find:n #1
{ \clist_map_function:nN {#1} \__keys_choice_find:n }
\cs_new_protected_nopar:Npn \__keys_multichoice_make:
@@ -402,110 +359,127 @@
{ \c__keys_vars_root_tl \l_keys_path_tl .req }
{ c__keys_value_ #1 _tl }
}
-\cs_new_protected:Npn \__keys_variable_set:NnNN #1#2#3#4
+\cs_new_protected:Npn \__keys_variable_set:NnnN #1#2#3#4
{
\use:c { #2_if_exist:NF } #1 { \use:c { #2 _new:N } #1 }
\__keys_cmd_set:nx { \l_keys_path_tl }
- { \exp_not:c { #2 _ #3 set:N #4 } \exp_not:N #1 {##1} }
+ { \exp_not:c { #2 _ #3 set:N #4 } \exp_not:N #1 \exp_not:n { {##1} } }
}
-\cs_new_protected:Npn \__keys_variable_set:NnN #1#2#3
- { \__keys_variable_set:NnNN #1 {#2} { } #3 }
-\cs_generate_variant:Nn \__keys_variable_set:NnNN { c }
-\cs_generate_variant:Nn \__keys_variable_set:NnN { c }
+\cs_generate_variant:Nn \__keys_variable_set:NnnN { c }
\cs_new_protected:cpn { \c__keys_props_root_tl .bool_set:N } #1
- { \__keys_bool_set:NN #1 { } }
+ { \__keys_bool_set:Nn #1 { } }
+\cs_new_protected:cpn { \c__keys_props_root_tl .bool_set:c } #1
+ { \__keys_bool_set:cn {#1} { } }
\cs_new_protected:cpn { \c__keys_props_root_tl .bool_gset:N } #1
- { \__keys_bool_set:NN #1 g }
+ { \__keys_bool_set:Nn #1 { g } }
+\cs_new_protected:cpn { \c__keys_props_root_tl .bool_gset:c } #1
+ { \__keys_bool_set:cn {#1} { g } }
\cs_new_protected:cpn { \c__keys_props_root_tl .bool_set_inverse:N } #1
- { \__keys_bool_set_inverse:NN #1 { } }
+ { \__keys_bool_set_inverse:Nn #1 { } }
+\cs_new_protected:cpn { \c__keys_props_root_tl .bool_set_inverse:c } #1
+ { \__keys_bool_set_inverse:cn {#1} { } }
\cs_new_protected:cpn { \c__keys_props_root_tl .bool_gset_inverse:N } #1
- { \__keys_bool_set_inverse:NN #1 g }
+ { \__keys_bool_set_inverse:Nn #1 { g } }
+\cs_new_protected:cpn { \c__keys_props_root_tl .bool_gset_inverse:c } #1
+ { \__keys_bool_set_inverse:cn {#1} { g } }
\cs_new_protected_nopar:cpn { \c__keys_props_root_tl .choice: }
{ \__keys_choice_make: }
\cs_new_protected:cpn { \c__keys_props_root_tl .choices:nn } #1
{ \__keys_choices_make:nn #1 }
+\cs_new_protected:cpn { \c__keys_props_root_tl .choices:Vn } #1
+ { \exp_args:NV \__keys_choices_make:nn #1 }
+\cs_new_protected:cpn { \c__keys_props_root_tl .choices:on } #1
+ { \exp_args:No \__keys_choices_make:nn #1 }
+\cs_new_protected:cpn { \c__keys_props_root_tl .choices:xn } #1
+ { \exp_args:Nx \__keys_choices_make:nn #1 }
\cs_new_protected:cpn { \c__keys_props_root_tl .code:n } #1
{ \__keys_cmd_set:nn { \l_keys_path_tl } {#1} }
-\cs_new_protected:cpn { \c__keys_props_root_tl .code:x } #1
- { \__keys_cmd_set:nx { \l_keys_path_tl } {#1} }
-\cs_new_protected:cpn { \c__keys_props_root_tl .choice_code:n } #1
- { \__keys_choice_code_store:n {#1} }
-\cs_new_protected:cpn { \c__keys_props_root_tl .choice_code:x } #1
- { \__keys_choice_code_store:x {#1} }
\cs_new_protected:cpn { \c__keys_props_root_tl .clist_set:N } #1
- { \__keys_variable_set:NnN #1 { clist } n }
+ { \__keys_variable_set:NnnN #1 { clist } { } n }
\cs_new_protected:cpn { \c__keys_props_root_tl .clist_set:c } #1
- { \__keys_variable_set:cnN {#1} { clist } n }
+ { \__keys_variable_set:cnnN {#1} { clist } { } n }
\cs_new_protected:cpn { \c__keys_props_root_tl .clist_gset:N } #1
- { \__keys_variable_set:NnNN #1 { clist } g n }
+ { \__keys_variable_set:NnnN #1 { clist } { g } n }
\cs_new_protected:cpn { \c__keys_props_root_tl .clist_gset:c } #1
- { \__keys_variable_set:cnNN {#1} { clist } g n }
+ { \__keys_variable_set:cnnN {#1} { clist } { g } n }
\cs_new_protected:cpn { \c__keys_props_root_tl .default:n } #1
{ \__keys_default_set:n {#1} }
\cs_new_protected:cpn { \c__keys_props_root_tl .default:V } #1
- { \__keys_default_set:V #1 }
+ { \exp_args:NV \__keys_default_set:n #1 }
+\cs_new_protected:cpn { \c__keys_props_root_tl .default:o } #1
+ { \exp_args:No \__keys_default_set:n {#1} }
+\cs_new_protected:cpn { \c__keys_props_root_tl .default:x } #1
+ { \exp_args:Nx \__keys_default_set:n {#1} }
\cs_new_protected:cpn { \c__keys_props_root_tl .dim_set:N } #1
- { \__keys_variable_set:NnN #1 { dim } n }
+ { \__keys_variable_set:NnnN #1 { dim } { } n }
\cs_new_protected:cpn { \c__keys_props_root_tl .dim_set:c } #1
- { \__keys_variable_set:cnN {#1} { dim } n }
+ { \__keys_variable_set:cnnN {#1} { dim } { } n }
\cs_new_protected:cpn { \c__keys_props_root_tl .dim_gset:N } #1
- { \__keys_variable_set:NnNN #1 { dim } g n }
+ { \__keys_variable_set:NnnN #1 { dim } { g } n }
\cs_new_protected:cpn { \c__keys_props_root_tl .dim_gset:c } #1
- { \__keys_variable_set:cnNN {#1} { dim } g n }
+ { \__keys_variable_set:cnnN {#1} { dim } { g } n }
\cs_new_protected:cpn { \c__keys_props_root_tl .fp_set:N } #1
- { \__keys_variable_set:NnN #1 { fp } n }
+ { \__keys_variable_set:NnnN #1 { fp } { } n }
\cs_new_protected:cpn { \c__keys_props_root_tl .fp_set:c } #1
- { \__keys_variable_set:cnN {#1} { fp } n }
+ { \__keys_variable_set:cnnN {#1} { fp } { } n }
\cs_new_protected:cpn { \c__keys_props_root_tl .fp_gset:N } #1
- { \__keys_variable_set:NnNN #1 { fp } g n }
+ { \__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 .generate_choices:n } #1
- { \__keys_choices_generate:n {#1} }
+ { \__keys_variable_set:cnnN {#1} { fp } { g } n }
\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
- { \__keys_initialise:V #1 }
+ { \exp_args:NV \__keys_initialise:n #1 }
+\cs_new_protected:cpn { \c__keys_props_root_tl .initial:o } #1
+ { \exp_args:No \__keys_initialise:n {#1} }
+\cs_new_protected:cpn { \c__keys_props_root_tl .initial:x } #1
+ { \exp_args:Nx \__keys_initialise:n {#1} }
\cs_new_protected:cpn { \c__keys_props_root_tl .int_set:N } #1
- { \__keys_variable_set:NnN #1 { int } n }
+ { \__keys_variable_set:NnnN #1 { int } { } n }
\cs_new_protected:cpn { \c__keys_props_root_tl .int_set:c } #1
- { \__keys_variable_set:cnN {#1} { int } n }
+ { \__keys_variable_set:cnnN {#1} { int } { } n }
\cs_new_protected:cpn { \c__keys_props_root_tl .int_gset:N } #1
- { \__keys_variable_set:NnNN #1 { int } g n }
+ { \__keys_variable_set:NnnN #1 { int } { g } n }
\cs_new_protected:cpn { \c__keys_props_root_tl .int_gset:c } #1
- { \__keys_variable_set:cnNN {#1} { int } g n }
+ { \__keys_variable_set:cnnN {#1} { int } { g } n }
\cs_new_protected:cpn { \c__keys_props_root_tl .meta:n } #1
{ \__keys_meta_make:n {#1} }
-\cs_new_protected:cpn { \c__keys_props_root_tl .meta:x } #1
- { \__keys_meta_make:x {#1} }
+\cs_new_protected:cpn { \c__keys_props_root_tl .meta:nn } #1
+ { \__keys_meta_make:nn #1 }
\cs_new_protected_nopar:cpn { \c__keys_props_root_tl .multichoice: }
{ \__keys_multichoice_make: }
\cs_new_protected:cpn { \c__keys_props_root_tl .multichoices:nn } #1
{ \__keys_multichoices_make:nn #1 }
+\cs_new_protected:cpn { \c__keys_props_root_tl .multichoices:Vn } #1
+ { \exp_args:NV \__keys_multichoices_make:nn #1 }
+\cs_new_protected:cpn { \c__keys_props_root_tl .multichoices:on } #1
+ { \exp_args:No \__keys_multichoices_make:nn #1 }
+\cs_new_protected:cpn { \c__keys_props_root_tl .multichoices:xn } #1
+ { \exp_args:Nx \__keys_multichoices_make:nn #1 }
\cs_new_protected:cpn { \c__keys_props_root_tl .skip_set:N } #1
- { \__keys_variable_set:NnN #1 { skip } n }
+ { \__keys_variable_set:NnnN #1 { skip } { } n }
\cs_new_protected:cpn { \c__keys_props_root_tl .skip_set:c } #1
- { \__keys_variable_set:cnN {#1} { skip } n }
+ { \__keys_variable_set:cnnN {#1} { skip } { } n }
\cs_new_protected:cpn { \c__keys_props_root_tl .skip_gset:N } #1
- { \__keys_variable_set:NnNN #1 { skip } g n }
+ { \__keys_variable_set:NnnN #1 { skip } { g } n }
\cs_new_protected:cpn { \c__keys_props_root_tl .skip_gset:c } #1
- { \__keys_variable_set:cnNN {#1} { skip } g n }
+ { \__keys_variable_set:cnnN {#1} { skip } { g } n }
\cs_new_protected:cpn { \c__keys_props_root_tl .tl_set:N } #1
- { \__keys_variable_set:NnN #1 { tl } n }
+ { \__keys_variable_set:NnnN #1 { tl } { } n }
\cs_new_protected:cpn { \c__keys_props_root_tl .tl_set:c } #1
- { \__keys_variable_set:cnN {#1} { tl } n }
+ { \__keys_variable_set:cnnN {#1} { tl } { } n }
\cs_new_protected:cpn { \c__keys_props_root_tl .tl_set_x:N } #1
- { \__keys_variable_set:NnN #1 { tl } x }
+ { \__keys_variable_set:NnnN #1 { tl } { } x }
\cs_new_protected:cpn { \c__keys_props_root_tl .tl_set_x:c } #1
- { \__keys_variable_set:cnN {#1} { tl } x }
+ { \__keys_variable_set:cnnN {#1} { tl } { } x }
\cs_new_protected:cpn { \c__keys_props_root_tl .tl_gset:N } #1
- { \__keys_variable_set:NnNN #1 { tl } g n }
+ { \__keys_variable_set:NnnN #1 { tl } { g } n }
\cs_new_protected:cpn { \c__keys_props_root_tl .tl_gset:c } #1
- { \__keys_variable_set:cnNN {#1} { tl } g n }
+ { \__keys_variable_set:cnnN {#1} { tl } { g } n }
\cs_new_protected:cpn { \c__keys_props_root_tl .tl_gset_x:N } #1
- { \__keys_variable_set:NnNN #1 { tl } g x }
+ { \__keys_variable_set:NnnN #1 { tl } { g } x }
\cs_new_protected:cpn { \c__keys_props_root_tl .tl_gset_x:c } #1
- { \__keys_variable_set:cnNN {#1} { tl } g x }
+ { \__keys_variable_set:cnnN {#1} { tl } { g } x }
\cs_new_protected_nopar:cpn { \c__keys_props_root_tl .value_forbidden: }
{ \__keys_value_requirement:n { forbidden } }
\cs_new_protected_nopar:cpn { \c__keys_props_root_tl .value_required: }
@@ -530,7 +504,7 @@
\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}
- \clist_set_eq:NN #4 \l__keys_unknown_clist
+ \cs_set_eq:NN #4 \l__keys_unknown_clist
}
\cs_generate_variant:Nn \keys_set_known:nnN { nV , nv , no }
\cs_generate_variant:Nn \__keys_set_known:nnnN { o }
@@ -593,9 +567,9 @@
{ \prg_return_true: }
{ \prg_return_false: }
}
-\cs_new_nopar:Npn \__keys_execute:
+\cs_new_protected_nopar:Npn \__keys_execute:
{ \__keys_execute:nn { \l_keys_path_tl } { \__keys_execute_unknown: } }
-\cs_new_nopar:Npn \__keys_execute_unknown:
+\cs_new_protected_nopar:Npn \__keys_execute_unknown:
{
\__keys_execute:nn { \l__keys_module_tl / unknown }
{
@@ -604,7 +578,7 @@
}
}
\cs_new_eq:NN \__keys_execute_unknown_std: \__keys_execute_unknown:
-\cs_new_nopar:Npn \__keys_execute_unknown_alt:
+\cs_new_protected_nopar:Npn \__keys_execute_unknown_alt:
{
\clist_put_right:Nx \l__keys_unknown_clist
{
@@ -639,7 +613,7 @@
{ \prg_return_true: }
{ \prg_return_false: }
}
-\cs_new:Npn \keys_show:nn #1#2
+\cs_new_protected:Npn \keys_show:nn #1#2
{ \cs_show:c { \c__keys_code_root_tl #1 / \tl_to_str:n {#2} } }
\__msg_kernel_new:nnnn { kernel } { boolean-values-only }
{ Key~'#1'~accepts~boolean~values~only. }
@@ -650,20 +624,18 @@
The~key~'#1'~takes~a~limited~number~of~values.\\
The~input~given,~'#2',~is~not~on~the~list~accepted.
}
-\__msg_kernel_new:nnnn { kernel } { generate-choices-before-code }
- { No~code~available~to~generate~choices~for~key~'#1'. }
+\__msg_kernel_new:nnnn { kernel } { key-choice-unknown }
+ { Key~'#1'~accepts~only~a~fixed~set~of~choices. }
{
- \c_msg_coding_error_text_tl
- Before~using~.generate_choices:n~the~code~should~be~defined~
- with~'.choice_code:n'~or~'.choice_code:x'.
+ The~key~'#1'~only~accepts~predefined~values,~and~'#2'~is~not~one~of~these.
}
\__msg_kernel_new:nnnn { kernel } { key-no-property }
{ No~property~given~in~definition~of~key~'#1'. }
{
\c_msg_coding_error_text_tl
- Inside~\keys_define:nn each~key~name
- needs~a~property: \\
- ~ ~ #1 .<property> \\
+ Inside~\keys_define:nn each~key~name~
+ needs~a~property: \\ \\
+ \iow_indent:n { #1 .<property> } \\ \\
LaTeX~did~not~find~a~'.'~to~indicate~the~start~of~a~property.
}
\__msg_kernel_new:nnnn { kernel } { key-unknown }
@@ -676,7 +648,7 @@
{ The~property~'#1'~requires~a~value. }
{
\c_msg_coding_error_text_tl
- LaTeX~was~asked~to~set~property~'#2'~for~key~'#1'.\\
+ LaTeX~was~asked~to~set~property~'#1'~for~key~'#2'.\\
No~value~was~given~for~the~property,~and~one~is~required.
}
\__msg_kernel_new:nnnn { kernel } { property-unknown }
@@ -698,6 +670,57 @@
The~key~'#1'~must~have~a~value.\\
No~value~was~present:~the~key~will~be~ignored.
}
+\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 }
+ {
+ \tl_new:c
+ { \c__keys_vars_root_tl \l_keys_path_tl .choice~code }
+ }
+ \tl_set:cn { \c__keys_vars_root_tl \l_keys_path_tl .choice~code }
+ {#1}
+ }
+\cs_generate_variant:Nn \__keys_choice_code_store:n { x }
+\cs_new_protected:cpn { \c__keys_props_root_tl .choice_code:n } #1
+ { \__keys_choice_code_store:n {#1} }
+\cs_new_protected:cpn { \c__keys_props_root_tl .choice_code:x } #1
+ { \__keys_choice_code_store:x {#1} }
+\cs_new_protected:Npn \__keys_choices_generate:n #1
+ {
+ \cs_if_exist:cTF
+ { \c__keys_vars_root_tl \l_keys_path_tl .choice~code }
+ {
+ \__keys_choice_make:
+ \int_zero:N \l_keys_choice_int
+ \clist_map_function:nN {#1} \__keys_choices_generate_aux:n
+ }
+ {
+ \__msg_kernel_error:nnx { kernel }
+ { generate-choices-before-code } { \l_keys_path_tl }
+ }
+ }
+\cs_new_protected:Npn \__keys_choices_generate_aux:n #1
+ {
+ \int_incr:N \l_keys_choice_int
+ \__keys_cmd_set:nx { \l_keys_path_tl / #1 }
+ {
+ \tl_set:Nn \exp_not:N \l_keys_choice_tl {#1}
+ \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 }
+ }
+ }
+\__msg_kernel_new:nnnn { kernel } { generate-choices-before-code }
+ { No~code~available~to~generate~choices~for~key~'#1'. }
+ {
+ \c_msg_coding_error_text_tl
+ Before~using~.generate_choices:n~the~code~should~be~defined~
+ with~'.choice_code:n'~or~'.choice_code:x'.
+ }
+\cs_new_protected:cpn { \c__keys_props_root_tl .generate_choices:n } #1
+ { \__keys_choices_generate:n {#1} }
%%
%%
%% End of file `l3keys.sty'.
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def b/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def
index 1d31d48342c..377d6c31d84 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def
@@ -47,7 +47,7 @@
%% -----------------------------------------------------------------------
%%
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3drivers.dtx 4280 2012-11-07 07:13:51Z joseph $
+\GetIdInfo$Id: l3drivers.dtx 4505 2013-06-28 22:06:04Z joseph $
{L3 Experimental drivers}
\ProvidesExplFile
{l3pdfmode.def}{\ExplFileDate}{\ExplFileVersion}
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3prg.sty b/Master/texmf-dist/tex/latex/l3kernel/l3prg.sty
index 957a8300b4c..8bc31c71ee5 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 4459 2013-02-13 09:21:15Z will $
+\GetIdInfo$Id: l3prg.dtx 4482 2013-04-24 21:05:12Z joseph $
{L3 Control structures}
%%
\ProvidesExplPackage
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3quark.sty b/Master/texmf-dist/tex/latex/l3kernel/l3quark.sty
index 11ace1c7380..46447aae9a1 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 4268 2012-11-04 22:19:48Z joseph $
+\GetIdInfo$Id: l3quark.dtx 4521 2013-07-09 11:45:31Z joseph $
{L3 Quarks}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3seq.sty b/Master/texmf-dist/tex/latex/l3kernel/l3seq.sty
index b80717c08ec..80ee168e421 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 4434 2013-01-12 09:33:40Z bruno $
+\GetIdInfo$Id: l3seq.dtx 4500 2013-05-26 11:18:19Z bruno $
{L3 Sequences and stacks}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -391,6 +391,41 @@
}
\cs_new:Npn \__seq_count:n #1 { + \c_one }
\cs_generate_variant:Nn \seq_count:N { c }
+\cs_new:Npn \seq_use:Nnnn #1#2#3#4
+ {
+ \seq_if_exist:NTF #1
+ {
+ \int_case:nnn { \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} }
+ }
+ {
+ \exp_after:wN \__seq_use:nwwwwnwn
+ \exp_after:wN { \exp_after:wN } #1 \__seq_item:n
+ \q_mark { \__seq_use:nwwwwnwn {#3} }
+ \q_mark { \__seq_use:nwwn {#4} }
+ \q_stop { }
+ }
+ }
+ { \__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:nwwwwnwn
+ #1 \__seq_item:n #2 \__seq_item:n #3 \__seq_item:n #4#5
+ \q_mark #6#7 \q_stop #8
+ {
+ #6 \__seq_item:n {#3} \__seq_item:n {#4} #5
+ \q_mark {#6} #7 \q_stop { #8 #1 #2 }
+ }
+\cs_new:Npn \__seq_use:nwwn #1 \__seq_item:n #2 #3 \q_stop #4
+ { \exp_not:n { #4 #1 #2 } }
+\cs_new:Npn \seq_use:Nn #1#2
+ { \seq_use:Nnnn #1 {#2} {#2} {#2} }
+\cs_generate_variant:Nn \seq_use:Nn { c }
\cs_new_eq:NN \seq_push:Nn \seq_put_left:Nn
\cs_new_eq:NN \seq_push:NV \seq_put_left:NV
\cs_new_eq:NN \seq_push:Nv \seq_put_left:Nv
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3tl.sty b/Master/texmf-dist/tex/latex/l3kernel/l3tl.sty
index 28148389931..4cd85c60ac6 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 4415 2013-01-08 12:32:51Z bruno $
+\GetIdInfo$Id: l3tl.dtx 4482 2013-04-24 21:05:12Z joseph $
{L3 Token lists}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3token.sty b/Master/texmf-dist/tex/latex/l3kernel/l3token.sty
index 5dd39858b49..255da5c2d5e 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 4428 2013-01-10 13:23:29Z bruno $
+\GetIdInfo$Id: l3token.dtx 4482 2013-04-24 21:05:12Z joseph $
{L3 Experimental token manipulation}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def b/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def
index dceeb7d5585..0c0ba1fb2b4 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def
@@ -47,16 +47,16 @@
%% -----------------------------------------------------------------------
%%
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3drivers.dtx 4280 2012-11-07 07:13:51Z joseph $
+\GetIdInfo$Id: l3drivers.dtx 4505 2013-06-28 22:06:04Z joseph $
{L3 Experimental drivers}
\ProvidesExplFile
{l3xdvidpfmx.def}{\ExplFileDate}{\ExplFileVersion}
{L3 Experimental driver: xdvipdfmx}
\__expl_package_check:
\cs_new_protected_nopar:Npn \__driver_graphic_state_save:
- { \tex_special:D { pdf:bcontent } }
+ { \tex_special:D { pdf:content~q } }
\cs_new_protected_nopar:Npn \__driver_graphic_state_restore:
- { \tex_special:D { pdf:econtent } }
+ { \tex_special:D { pdf:content~Q } }
\cs_new_protected:Npn \__driver_pdf_literal:n #1
{ \tex_special:D { pdf:content~ #1 } }
\cs_new_protected:Npn \__driver_pdf_literal_direct:n #1
@@ -72,8 +72,12 @@
\__dim_strip_bp:n { \box_ht:N #1 + \box_dp:N #1 } ~
re~W~n
}
+ \__driver_pdf_matrix:n { -1~0~0~-1 }
+ \__driver_graphic_state_save:
+ \__driver_pdf_matrix:n { -1~0~0~-1 }
\hbox_overlap_right:n { \box_use:N #1 }
\__driver_graphic_state_restore:
+ \__driver_graphic_state_restore:
\skip_horizontal:n { \box_wd:N #1 }
}
\cs_new_protected_nopar:Npn \__driver_box_rotate_begin:
diff --git a/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty b/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty
index eff969849a0..dfa1f56700a 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/03/12]
-\@ifpackagelater{expl3}{2013/03/12}
+\RequirePackage{expl3}[2013/07/12]
+\@ifpackagelater{expl3}{2013/07/12}
{}
{%
\PackageError{l3keys2e}{Support package l3kernel too old}
@@ -59,7 +59,7 @@
}%
\endinput
}
-\GetIdInfo$Id: l3keys2e.dtx 4467 2013-03-12 08:29:05Z joseph $
+\GetIdInfo$Id: l3keys2e.dtx 4544 2013-07-12 07:14:52Z 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 fd2d7b22112..705265bc4f3 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/03/12]
-\@ifpackagelater{expl3}{2013/03/12}
+\RequirePackage{expl3}[2013/07/12]
+\@ifpackagelater{expl3}{2013/07/12}
{}
{%
\PackageError{xparse}{Support package l3kernel too old}
@@ -63,7 +63,7 @@
}%
\endinput
}
-\GetIdInfo$Id: xparse.dtx 4467 2013-03-12 08:29:05Z joseph $
+\GetIdInfo$Id: xparse.dtx 4544 2013-07-12 07:14:52Z 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 38767bd6e67..c561c724439 100644
--- a/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty
+++ b/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty
@@ -50,7 +50,7 @@
%%
%% -----------------------------------------------------------------------
%%
-\RequirePackage{expl3}[2013/03/12]
+\RequirePackage{expl3}[2013/07/12]
\@ifpackagelater{expl3}{2013/03/12}
{}
{%
@@ -63,7 +63,7 @@
}%
\endinput
}
-\GetIdInfo$Id: xtemplate.dtx 4467 2013-03-12 08:29:05Z joseph $
+\GetIdInfo$Id: xtemplate.dtx 4544 2013-07-12 07:14:52Z joseph $
{L3 Experimental prototype document functions}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds
index 5454220e443..c1b42d7cfb5 100755
--- a/Master/tlpkg/libexec/ctan2tds
+++ b/Master/tlpkg/libexec/ctan2tds
@@ -4512,11 +4512,11 @@ sub MAKEpst {
&dosource;
&dotex;
&dotype1;
- killfiles($standardclean);
+ &killfiles ($standardclean);
&killfiles ($moreclean{$package}, "more") if $moreclean{$package};
&SYSTEM("mkdir -p $DEST/tex/latex/$package");
&SYSTEM("mv $DEST/tex/generic/$package/*sty $DEST/tex/latex/$package");
- &SYSTEM("mv $DEST/doc/generic/$package/*cfg $DEST/tex/latex/$package")
+ &SYSTEM("mv $DEST/doc/generic/$package/*cfg $DEST/tex/latex/$package 2>/dev/null")
unless $package eq "pst-pad"; # its showexpl.cfg is for the doc
my $postaction = $posthook{$package};