summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
authorManuel Pégourié-Gonnard <mpg@elzevir.fr>2012-10-06 09:34:54 +0000
committerManuel Pégourié-Gonnard <mpg@elzevir.fr>2012-10-06 09:34:54 +0000
commit11eb9a3891b7dd3261bf06e2421e6ae87aba4153 (patch)
tree0a1ec8718e0c0ac641c4e7630e2278a438d9b11a /Master
parenta9a23194b1cababcf9c24e48937a726cb465813a (diff)
l3kernel update
git-svn-id: svn://tug.org/texlive/trunk@27898 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/expl3.pdfbin665019 -> 664363 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/interface3.pdfbin1257736 -> 1258953 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/interface3.tex89
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdfbin0 -> 449468 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdfbin270454 -> 273218 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex242
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdfbin220222 -> 220216 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex110
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/source3.pdfbin3848679 -> 3862940 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/makeindex/l3kernel/l3doc.ist72
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/expl3.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3.ins92
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3basics.dtx59
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx17
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3clist.dtx10
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3doc.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx3
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3file.dtx20
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3format.ins92
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx10
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx12
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp.dtx16
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3int.dtx86
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3keys.dtx46
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3msg.dtx96
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3names.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3prg.dtx10
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3prop.dtx8
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3seq.dtx8
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3skip.dtx147
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3tl.dtx117
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3.sty4
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3basics.sty24
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3candidates.sty17
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3clist.sty4
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3coffins.sty4
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3doc.cls53
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3file.sty11
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3fp.sty10
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3int.sty60
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3keys.sty26
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3msg.sty36
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3names.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3prg.sty6
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3prop.sty4
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3seq.sty4
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3skip.sty63
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3tl.sty51
51 files changed, 1733 insertions, 580 deletions
diff --git a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
index 54e01e470b8..b09b5a82170 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 50eb5626747..648b2223d55 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/interface3.tex b/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
new file mode 100644
index 00000000000..4c0a2761e92
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
@@ -0,0 +1,89 @@
+% \iffalse meta-comment
+%
+%% File: interfaces3.tex Copyright (C) 1990-2011 The LaTeX3 Project
+%%
+%% It may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this
+%% license or (at your option) any later version. The latest version
+%% of this license is in the file
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This file is part of the "l3kernel bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%%
+%% The released version of this bundle is available from CTAN.
+%%
+%% -----------------------------------------------------------------------
+%%
+%% The development version of the bundle can be found at
+%%
+%% http://www.latex-project.org/svnroot/experimental/trunk/
+%%
+%% for those people who are interested.
+%%
+%%%%%%%%%%%
+%% NOTE: %%
+%%%%%%%%%%%
+%%
+%% Snapshots taken from the repository represent work in progress and may
+%% not work or may contain conflicting material! We therefore ask
+%% people _not_ to put them into distributions, archives, etc. without
+%% prior consultation with the LaTeX3 Project.
+%%
+%% -----------------------------------------------------------------------
+%
+% \fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This document will typeset the LaTeX3 interface descriptions a single
+% document. This will produce quite a large file (more than 170 pages
+% currently).
+%
+% There is also a full version of the sources (source3.tex) which additionally
+% also typesets the command implementations.
+%
+% Do not forget to generate the index (as explained on the terminal output
+% near the end of the run)!
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\documentclass{l3doc}
+\listfiles
+
+\begin{document}
+
+\title{The \LaTeX3 Interfaces}
+\author{%
+ The \LaTeX3 Project\thanks
+ {%
+ E-mail:
+ \href{mailto:latex-team@latex-project.org}
+ {latex-team@latex-project.org}%
+ }%
+}
+
+\pagenumbering{roman}
+\maketitle
+
+%
+% First load all modules and typeset the documentation parts
+%
+
+\input{source3body} % all the individual modules
+
+\clearpage
+
+\begingroup
+ \def\endash{--}
+ \catcode`\-\active
+ \def-{\futurelet\temp\indexdash}
+ \def\indexdash{\ifx\temp-\endash\fi}
+ \DelayPrintIndex
+\endgroup
+
+\end{document}
+
+
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
new file mode 100644
index 00000000000..679405b4f62
--- /dev/null
+++ 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 797805c3110..1871f0ecadb 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
new file mode 100644
index 00000000000..6a3a9d122e6
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
@@ -0,0 +1,242 @@
+\iffalse meta-comment
+
+File l3styleguide.tex Copyright (C) 2011,2012 The LaTeX3 Project
+
+It may be distributed and/or modified under the conditions of the
+LaTeX Project Public License (LPPL), either version 1.3c of this
+license or (at your option) any later version. The latest version
+of this license is in the file
+
+ http://www.latex-project.org/lppl.txt
+
+This file is part of the "l3kernel bundle" (The Work in LPPL)
+and all files in that bundle must be distributed together.
+
+The released version of this bundle is available from CTAN.
+
+\fi
+
+\documentclass{l3doc}
+\usepackage{svn-multi}
+
+\svnid{$Id: l3styleguide.tex 2772 2011-09-07 15:07:41Z joseph $}
+\def\filedate{\svnfileyear/\svnfilemonth/\svnfileday}
+
+\title{%
+ The \LaTeX3 kernel: style guide for code authors%
+ \thanks
+ {%
+ This file describes v\svnfilerev,
+ last revised \filedate.
+ }%
+}
+\author{%
+ The \LaTeX3 Project\thanks
+ {%
+ E-mail:
+ \href{mailto:latex-team@latex-project.org}%
+ {latex-team@latex-project.org}%
+ }%
+}
+\date{Released \filedate}
+
+\begin{document}
+
+\maketitle
+
+\tableofcontents
+
+\section{Introduction}
+
+This document is intended as a style guide for authors of code and
+documentation for the \LaTeX3 kernel. It covers both aspects of coding
+style and the formatting of the sources. The aim of providing these
+guidelines is help ensure consistency of the code and sources from
+different authors. Experience suggests that in the long-term this helps
+with maintenance. There will of course be places where there are
+exceptions to these guidelines: common sense should always be
+applied!
+
+\section{Documentation style}
+
+\LaTeX3 source and documentation should be written using the document
+class \cls{l3doc} in \file{dtx} format. This class provides a number
+of logical mark up elements, which should be used where possible.
+In the main, this is standard \LaTeX{} practice, but there are a
+few points to highlight:
+\begin{itemize}
+ \item
+ Where possible, use \cs{cs} to mark up control sequences
+ rather than using a verbatim environment.
+ \item
+ Arguments which are given in braces should be marked using
+ \cs{Arg} when code-level functions are discussed, but using
+ \cs{marg} for document functions.
+ \item
+ The names \TeX{}, \LaTeX{}, \emph{etc}.\ use the normal logical mark
+ up followed by an empty group (|{}|), with the exception of |\LaTeX3|,
+ where the number should follow directly.
+ \item
+ Where in line verbatim text is used, it should be marked up
+ using the \verb=|...|= construct (\emph{i.e.}~vertical bars delimit
+ the verbatim text).
+ \item In line quotes should be marked up using the \cs{enquote}
+ function.
+ \item
+ Where numbers in the source have a mathematical meaning,
+ they should be included in math mode. Such in-line math mode
+ material should be marked up using |$...$| and \emph{not}
+ |\(...\)|.
+\end{itemize}
+
+Line length in the source files should to be under $80$
+characters where possible, as this helps keep everything on the screen
+when editing files. In the \file{dtx} format, documentation lines start
+with a \texttt{\%}, which is usually followed by a space to leave a
+\enquote{comment margin} at the start of each line.
+
+As with code indenting (see later), nested environments and arguments
+should be indented by (at least) two spaces to make the nature of the nesting
+clear. Thus for example a typical arrangement for the \env{function}
+environment might be
+\begin{verbatim*}
+\begin{function}{\seq_gclear:N, \seq_gclear:c}
+ \begin{syntax}
+ \cs{seq_gclear:N} \meta{sequence}
+ \end{syntax}
+ Clears all entries from the \meta{sequence} globally.
+\end{function}
+\end{verbatim*}
+The \enquote{outer} \verb*|% \begin{function}| should have the customary
+space after the |%| character at the start of the line.
+
+In general, a single \env{function} or \env{macro} environment should be
+used for a group of closely-related functions, for example argument
+specification variants. In such cases, a comma-separated list should be
+used, as shown in the preceding example.
+
+\section{Format of the code itself}
+
+The requirement for less than $80$ characters per line applies to the code
+itself as well as the surrounding documentation. A number of the general
+style principals for \LaTeX3 code apply: these are described in the following
+paragraph and an example is then given.
+
+With the exception of simple runs of parameter (|{#1}|, |#1#2|,
+\emph{etc.}), everything should divided up using spaces to make the code
+more readable. In general, these will be single spaces, but in some
+places it makes more sense to align parts of the code to emphasise
+similarity. (Tabs should not be used for introducing white space.)
+
+Each conceptually-separate step in a function should be on a separate
+line, to make the meaning clearer. Hence the \texttt{false} branch
+in the example uses two lines for the two auxiliary function uses.
+
+Within the definition, a two-space indent should be used to show each
+\enquote{level} of code. Thus in the example \cs{tl_if_empty:nTF} is
+indented by two spaces, but the two branches are indented by four
+spaces. Within the \texttt{false} branch, the need for multiple lines
+means that an additional two-space indent should be used to show that
+these lines are all part of the brace group.
+
+The result of these lay-out conventions is code which will in general
+look like the example:
+\begin{verbatim*}
+\cs_new:Npn \module_foo:nn #1#2
+ {
+ \tl_if_empty:nTF {#1}
+ { \module_foo_aux:n { X #2 } }
+ {
+ \module_foo_aux:nn {#1} {#2}
+ \module_foo_aux:n {#1#2}
+ }
+ }
+\end{verbatim*}
+
+\section{Code conventions}
+
+All code-level functions should be \enquote{long} if they accept any
+arguments, even if it seems \enquote{very unlikely} that a \cs{par} token
+will be passed. Thus \cs{cs_new_nopar:Npn} and so forth should only be used
+to create functions which accept no arguments at all.
+
+The expandability of each function should be well-defined. Functions which
+cannot be fully expanded must be \texttt{protected}. This means that expandable
+functions must themselves only contain expandable material. Functions which
+use any non-expandable material must be defined using \cs{cs_new_protected:Npn}
+or similar.
+
+When using \cs{cs_generate_variant:Nn}, group related variants together
+to make the pattern clearer. A common example is variants of a function
+which has an \texttt{N}-type first argument:
+\begin{verbatim}
+ \cs_generate_variant:Nn \foo:Nn { NV , No }
+ \cs_generate_variant:Nn \foo:Nn { c , cV , co }
+\end{verbatim}
+
+There are cases where omitting braces from \texttt{o}-type arguments
+is desirable for performance reasons. This should only be done if the
+argument is a single token, thus for example
+\begin{verbatim}
+ \tl_set:No \l_some_tl \l_some_other_tl
+\end{verbatim}
+remains clear and can be used where appropriate.
+
+\section{Private and internal functions}
+
+Private functions (those starting \cs{__}) should not be used between modules.
+The only exception is where a \enquote{family} of modules share some
+\enquote{internal} methods: this happens most obviously in the kernel itself.
+Any internal functions or variables \emph{must} be documented in the same way
+as public ones.
+
+The \pkg{l3docstrip} method should be used for internal functions in a module.
+This requires a line
+\begin{quote}
+ \ttfamily
+ \%<@@=\meta{module}>
+\end{quote}
+at the start of the source (\texttt{.dtx}) file, with internal functions
+then written in the form
+\begin{verbatim}
+ \cs_new_protected:Npn \@@_function:nn #1#2
+ ...
+\end{verbatim}
+
+\section{Auxiliary functions}
+
+In general, the team encourage the use of descriptive names in \LaTeX3 code.
+Thus many helper functions will have names which describe briefly what they do,
+rather than simply indicating that they are auxiliary to some higher-level
+function. However, there are places where one or more \texttt{aux} functions
+are required. Where possible, these should be differentiated by signature
+\begin{verbatim}
+ \cs_new_protected:Npn \@@_function:nn #1#2
+ {
+ ...
+ }
+ \cs_new_protected:Npn \@@_function_aux:nn #1#2
+ {
+ ...
+ }
+ \cs_new_protected:Npn \@@_function_aux:w #1#2 \q_stop
+ {
+ ...
+ }
+\end{verbatim}
+Where more than one auxiliary shares the same signature, the recommended naming
+scheme is \texttt{auxi}, \texttt{auxii} and so on.
+\begin{verbatim}
+ \cs_new_protected:Npn \@@_function_auxi:nn #1#2
+ {
+ ...
+ }
+ \cs_new_protected:Npn \@@_function_auxii:nn #1#2
+ {
+ ...
+ }
+\end{verbatim}
+The use of \texttt{aux_i}, \texttt{aux_ii}, \emph{etc.}\ is discouraged as this
+conflicts with the convention used by \cs{use_i:nn} and related functions.
+
+\end{document}
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
index c3fd0751fe7..57a5aa10866 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
new file mode 100644
index 00000000000..4dfc70e0e97
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
@@ -0,0 +1,110 @@
+\iffalse meta-comment
+
+File l3syntax-changes.tex Copyright (C) 2011-2012 The LaTeX3 Project
+
+It may be distributed and/or modified under the conditions of the
+LaTeX Project Public License (LPPL), either version 1.3c of this
+license or (at your option) any later version. The latest version
+of this license is in the file
+
+ http://www.latex-project.org/lppl.txt
+
+This file is part of the "l3kernel bundle" (The Work in LPPL)
+and all files in that bundle must be distributed together.
+
+The released version of this bundle is available from CTAN.
+
+\fi
+
+\documentclass{l3doc}
+
+\usepackage{svn-multi}
+
+\svnid{$Id: l3syntax-changes.tex 4048 2012-08-02 09:49:10Z joseph $}
+\def\filedate{\svnfileyear/\svnfilemonth/\svnfileday}
+
+\title{%
+ Syntax changes in \LaTeX3 functions
+ \thanks
+ {%
+ This file describes v\svnfilerev,
+ last revised \filedate.
+ }%
+}
+\author{%
+ The \LaTeX3 Project\thanks
+ {%
+ E-mail:
+ \href{mailto:latex-team@latex-project.org}%
+ {latex-team@latex-project.org}%
+ }%
+}
+\date{Released \filedate}
+
+\newcommand{\TF}{\textit{(TF)}}
+
+\begin{document}
+
+\maketitle
+
+This file lists functions whose syntax has changed after August 2011,
+with an approximate date.
+
+\section{August 2011}
+
+\begin{itemize}
+ \item \cs{tl_if_single:n\TF} recognized any non-zero number of
+ explicit spaces as \meta{true}, and did not ignore trailing spaces.
+ Now it is \meta{true} for
+ \[
+ \meta{optional spaces}
+ \meta{normal token or brace group}
+ \meta{optional spaces}.
+ \]
+ \item \cs{tl_reverse:n} stripped outer braces and lost unprotected spaces.
+ Now it keeps spaces, leaves unbraced single tokens unbraced, and
+ braced groups braced.
+ \item \cs{tl_trim_spaces:n} only removed one leading and trailing space.
+ Now removes recursively. Also, on the left it used to strip implicit
+ and explicit spaces with any character code. Now it strips only explicit
+ space characters $(32,10)$.
+\end{itemize}
+
+\section{September 2011}
+
+\begin{itemize}
+\item clist functions which receive an \texttt{n}-type comma list argument
+ now trim spaces from each item in the argument.
+\end{itemize}
+
+\section{June 2012}
+
+\begin{itemize}
+ \item Access to list functions now indexes from~$1$, not from~$0$.
+ This applies to multiple choices in the \pkg{l3keys} module and
+ the \cs{clist_item:Nn}, \cs{seq_item:Nn} and \cs{tl_item:Nn}
+ functions.
+ \item \cs{tl_trim_spaces:n} now requires a variable number of
+ expansions to fully expand, rather than exactly two. Of course,
+ \texttt{x}-type expansion still correctly evaluates this function.
+\end{itemize}
+
+\section{July 2012}
+
+\begin{itemize}
+ \item The \cs{tl_if_head_eq_meaning:nN}, \cs{tl_if_head_eq_catcode:nN}
+ and \cs{tl_if_head_eq_charcode:nN} conditionals now never match when
+ their first argument is empty.
+\end{itemize}
+
+\section{August 2012}
+
+\begin{itemize}
+ \item \cs{lua_now:x} is now a standard \texttt{x}-type expansion of
+ \cs{lua_now:n}, which does no expansion. Engine-level expansion is moved
+ to \cs{lua_now_x:n}, reflecting the fact that this is non-standard in the
+ same way as for example \cs{str_if_eq_x:nn(TF)}.
+\end{itemize}
+
+
+\end{document}
diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
index e90014d7b03..7feca1b1f0f 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3.tex b/Master/texmf-dist/doc/latex/l3kernel/source3.tex
new file mode 100644
index 00000000000..22c3c44048d
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/l3kernel/source3.tex
@@ -0,0 +1,106 @@
+% \iffalse meta-comment
+%
+%% File: source3.tex Copyright (C) 1990-2011 The LaTeX3 Project
+%%
+%% It may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this
+%% license or (at your option) any later version. The latest version
+%% of this license is in the file
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This file is part of the "l3kernel bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%%
+%% The released version of this bundle is available from CTAN.
+%%
+%% -----------------------------------------------------------------------
+%%
+%% The development version of the bundle can be found at
+%%
+%% http://www.latex-project.org/svnroot/experimental/trunk/
+%%
+%% for those people who are interested.
+%%
+%%%%%%%%%%%
+%% NOTE: %%
+%%%%%%%%%%%
+%%
+%% Snapshots taken from the repository represent work in progress and may
+%% not work or may contain conflicting material! We therefore ask
+%% people _not_ to put them into distributions, archives, etc. without
+%% prior consultation with the LaTeX3 Project.
+%%
+%% -----------------------------------------------------------------------
+%
+% \fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This document will typeset the LaTeX3 sources as a single document.
+% This will produce quite a large file (more than 780 pages).
+%
+% There is also a shorter version (interface3.tex) that only typesets the
+% command % interface descriptions.
+%
+% Do not forget to generate the index (as explained on the terminal output
+% near the end of the run)!
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentclass{l3doc}
+\listfiles
+
+\begin{document}
+
+\title{The \LaTeX3 Sources}
+\author{%
+ The \LaTeX3 Project\thanks
+ {%
+ E-mail:
+ \href{mailto:latex-team@latex-project.org}
+ {latex-team@latex-project.org}%
+ }%
+}
+
+\pagenumbering{roman}
+\maketitle
+
+%
+% First load all modules and typeset the documentation parts
+%
+
+\input{source3body} % all the individual modules
+
+%
+% Now reload all modules and typeset the implementation parts
+%
+
+\part{Implementation}
+
+\def\maketitle{}
+\EnableImplementation
+\DisableDocumentation
+\DocInputAgain
+
+\clearpage
+\pagestyle{headings}
+
+% Make TeX shut up.
+\hbadness=10000
+\newcount\hbadness
+\hfuzz=\maxdimen
+
+\PrintChanges
+\clearpage
+
+\begingroup
+ \def\endash{--}
+ \catcode`\-\active
+ \def-{\futurelet\temp\indexdash}
+ \def\indexdash{\ifx\temp-\endash\fi}
+
+ \DelayPrintIndex
+\endgroup
+
+\end{document}
diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3body.tex b/Master/texmf-dist/doc/latex/l3kernel/source3body.tex
new file mode 100644
index 00000000000..c5dbc33a7b3
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/l3kernel/source3body.tex
@@ -0,0 +1,448 @@
+% \iffalse meta-comment
+%
+%% File: source3body.tex Copyright (C) 1990-2012 The LaTeX3 Project
+%%
+%% It may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this
+%% license or (at your option) any later version. The latest version
+%% of this license is in the file
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This file is part of the "l3kernel bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%%
+%% The released version of this bundle is available from CTAN.
+%%
+%% -----------------------------------------------------------------------
+%%
+%% The development version of the bundle can be found at
+%%
+%% http://www.latex-project.org/svnroot/experimental/trunk/
+%%
+%% for those people who are interested.
+%%
+%%%%%%%%%%%
+%% NOTE: %%
+%%%%%%%%%%%
+%%
+%% Snapshots taken from the repository represent work in progress and may
+%% not work or may contain conflicting material! We therefore ask
+%% people _not_ to put them into distributions, archives, etc. without
+%% prior consultation with the LaTeX3 Project.
+%%
+%% -----------------------------------------------------------------------
+%
+% \fi
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This file is used by
+%
+% source3.tex % documentation including implementation
+%
+% interface3.tex % only interface documentation
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\begin{abstract}
+
+\setlength\parindent{0pt}
+\setlength\parskip{\baselineskip}
+
+\noindent
+This is the reference documentation for the \pkg{expl3}
+programming environment. The \pkg{expl3} modules set up an experimental
+naming scheme for \LaTeX{} commands, which allow the \LaTeX{} programmer
+to systematically name functions and variables, and specify the argument
+types of functions.
+
+The \TeX{} and \eTeX{} primitives are all given a new name according to
+these conventions. However, in the main direct use of the primitives is
+not required or encouraged: the \pkg{expl3} modules define an
+independent low-level \LaTeX3 programming language.
+
+At present, the \pkg{expl3} modules are designed to be loaded on top of
+\LaTeXe{}. In time, a \LaTeX3 format will be produced based on this code.
+This allows the code to be used in \LaTeXe{} packages \emph{now} while a
+stand-alone \LaTeX3 is developed.
+
+\begin{bfseries}
+ While \pkg{expl3} is still experimental, the bundle is now regarded as
+ broadly stable. The syntax conventions and functions provided are now
+ ready for wider use. There may still be changes to some functions, but
+ these will be minor when compared to the scope of \pkg{expl3}.
+
+ New modules will be added to the distributed version of \pkg{expl3} as
+ they reach maturity.
+\end{bfseries}
+
+\end{abstract}
+
+\clearpage
+
+{%
+ \def\\{:}% fix "newlines" in the ToC
+ \tableofcontents
+}
+
+\clearpage
+\pagenumbering{arabic}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Each of the following \DocInput lines includes a file with extension
+% .dtx. Each of these files may be typeset separately. For instance
+% pdflatex l3box.dtx
+% will typeset the source of the LaTeX3 box commands. If you use the
+% Makefile, the index will be generated automatically; e.g.,
+% make doc F=l3box
+%
+% If this file is processed, each of these separate dtx files will be
+% contained as a part of a single document.
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\makeatletter
+\def\partname{Part}
+\def\maketitle{\clearpage\part{\@title}}
+\let\thanks\@gobble
+\let\DelayPrintIndex\PrintIndex
+\let\PrintIndex\@empty
+\makeatother
+
+\part{Introduction to \pkg{expl3} and this document}
+
+This document is intended to act as a comprehensive reference manual
+for the \pkg{expl3} language. A general guide to the \LaTeX3
+programming language is found in \href{expl3.pdf}{expl3.pdf}.
+
+\section{Naming functions and variables}
+
+\LaTeX3 does not use \texttt{@} as a \enquote{letter} for defining
+internal macros. Instead, the symbols |_| and \texttt{:}
+are used in internal macro names to provide structure. The name of
+each \emph{function} is divided into logical units using \texttt{_},
+while \texttt{:} separates the \emph{name} of the function from the
+\emph{argument specifier} (\enquote{arg-spec}). This describes the arguments
+expected by the function. In most cases, each argument is represented
+by a single letter. The complete list of arg-spec letters for a function
+is referred to as the \emph{signature} of the function.
+
+Each function name starts with the \emph{module} to which it belongs.
+Thus apart from a small number of very basic functions, all \pkg{expl3}
+function names contain at least one underscore to divide the module
+name from the descriptive name of the function. For example, all
+functions concerned with comma lists are in module \texttt{clist} and
+begin \cs{clist_}.
+
+Every function must include an argument specifier. For functions which
+take no arguments, this will be blank and the function name will end
+\texttt{:}. Most functions take one or more arguments, and use the
+following argument specifiers:
+\begin{description}
+ \item[\texttt{D}] The \texttt{D} specifier means \emph{do not use}.
+ All of the \TeX{} primitives are initially \cs{let} to a \texttt{D}
+ name, and some are then given a second name. Only the kernel
+ team should use anything with a \texttt{D} specifier!
+ \item[\texttt{N} and \texttt{n}] These mean \emph{no manipulation},
+ of a single token for \texttt{N} and of a set of tokens given in
+ braces for \texttt{n}. Both pass the argument through exactly as
+ given. Usually, if you use a single token for an \texttt{n} argument,
+ all will be well.
+ \item[\texttt{c}] This means \emph{csname}, and indicates that the
+ argument will be turned into a csname before being used. So
+ So \cs{foo:c} |{ArgumentOne}| will act in the same way as \cs{foo:N}
+ \cs{ArgumentOne}.
+ \item[\texttt{V} and \texttt{v}] These mean \emph{value
+ of variable}. The \texttt{V} and \texttt{v} specifiers are used to
+ get the content of a variable without needing to worry about the
+ underlying \TeX{} structure containing the data. A \texttt{V}
+ argument will be a single token (similar to \texttt{N}), for example
+ \cs{foo:V} \cs{MyVariable}; on the other hand, using \texttt{v} a
+ csname is constructed first, and then the value is recovered, for
+ example \cs{foo:v} |{MyVariable}|.
+ \item[\texttt{o}] This means \emph{expansion once}. In general, the
+ \texttt{V} and \texttt{v} specifiers are favoured over \texttt{o}
+ for recovering stored information. However, \texttt{o} is useful
+ for correctly processing information with delimited arguments.
+ \item[\texttt{x}] The \texttt{x} specifier stands for \emph{exhaustive
+ expansion}: every token in the argument is fully expanded until only
+ unexpandable ones remain. The \TeX{} \tn{edef} primitive carries out
+ this type of expansion. Functions which feature an \texttt{x}-type
+ argument are in general \emph{not} expandable, unless specifically
+ noted.
+ \item[\texttt{f}] The \texttt{f} specifier stands for \emph{full
+ expansion}, and in contrast to \texttt{x} stops at the first
+ non-expandable item (reading the argument from left to right) without
+ trying to expand it. For example, when setting a token list
+ variable (a macro used for storage), the sequence
+ \begin{verbatim}
+ \tl_set:Nn \l_mya_tl { A }
+ \tl_set:Nn \l_myb_tl { B }
+ \tl_set:Nf \l_mya_tl { \l_mya_tl \l_myb_tl }
+ \end{verbatim}
+ will leave |\l_mya_tl| with the content |A\l_myb_tl|, as |A| cannot
+ be expanded and so terminates expansion before |\l_myb_tl| is considered.
+ \item[\texttt{T} and \texttt{F}] For logic tests, there are the branch
+ specifiers \texttt{T} (\emph{true}) and \texttt{F} (\emph{false}).
+ Both specifiers treat the input in the same way as \texttt{n} (no
+ change), but make the logic much easier to see.
+ \item[\texttt{p}] The letter \texttt{p} indicates \TeX{}
+ \emph{parameters}. Normally this will be used for delimited
+ functions as \pkg{expl3} provides better methods for creating simple
+ sequential arguments.
+ \item[\texttt{w}] Finally, there is the \texttt{w} specifier for
+ \emph{weird} arguments. This covers everything else, but mainly
+ applies to delimited values (where the argument must be terminated
+ by some arbitrary string).
+\end{description}
+Notice that the argument specifier describes how the argument is
+processed prior to being passed to the underlying function. For example,
+\cs{foo:c} will take its argument, convert it to a control sequence and
+pass it to \cs{foo:N}.
+
+Variables are named in a similar manner to functions, but begin with
+a single letter to define the type of variable:
+\begin{description}
+ \item[\texttt{c}] Constant: global parameters whose value should not
+ be changed.
+ \item[\texttt{g}] Parameters whose value should only be set globally.
+ \item[\texttt{l}] Parameters whose value should only be set locally.
+\end{description}
+Each variable name is then build up in a similar way to that of a
+function, typically starting with the module\footnote{The module names are
+ not used in case of generic scratch registers defined in the data
+ type modules, e.g., the
+ \texttt{int} module contains some scratch variables called \cs{l_tmpa_int},
+ \cs{l_tmpb_int}, and so on. In such a case adding the module name up front
+ to denote the module
+ and in the back to indicate the type, as in
+ \cs{l_int_tmpa_int} would be very unreadable.} name
+and then a descriptive part.
+Variables end with a short identifier to show the variable type:
+\begin{description}
+ \item[\texttt{bool}] Either true or false.
+ \item[\texttt{box}] Box register.
+ \item[\texttt{clist}] Comma separated list.
+ \item[\texttt{coffin}] a \enquote{box with handles} --- a higher-level data
+ type for carrying out |box| alignment operations.
+ \item[\texttt{dim}] \enquote{Rigid} lengths.
+ \item[\texttt{fp}] floating-point values;
+ \item[\texttt{int}] Integer-valued count register.
+ \item[\texttt{prop}] Property list.
+ \item[\texttt{seq}] \enquote{Sequence}: a data-type used to implement lists
+ (with access at both ends) and stacks.
+ \item[\texttt{skip}] \enquote{Rubber} lengths.
+ \item[\texttt{stream}] An input or output stream (for reading from or
+ writing to, respectively).
+ \item[\texttt{tl}] Token list variables: placeholder for a token list.
+\end{description}
+
+\subsection{Terminological inexactitude}
+
+A word of warning. In this document, and others referring to the \pkg{expl3}
+programming modules, we often refer to \enquote{variables} and
+\enquote{functions} as if they
+were actual constructs from a real programming language. In truth, \TeX{}
+is a macro processor, and functions are simply macros that may or may not take
+arguments and expand to their replacement text. Many of the common variables
+are \emph{also} macros, and if placed into the input stream will simply expand
+to their definition as well~--- a \enquote{function} with no arguments and a
+\enquote{token list variable} are in truth one and the same. On the other
+hand, some \enquote{variables} are actually registers that must be
+initialised and their values set and retrieved with specific functions.
+
+The conventions of the \pkg{expl3} code are designed to clearly separate the
+ideas of \enquote{macros that contain data} and
+\enquote{macros that contain code}, and a
+consistent wrapper is applied to all forms of \enquote{data} whether they be
+macros or
+actually registers. This means that sometimes we will use phrases like
+\enquote{the function returns a value}, when actually we just mean
+\enquote{the macro expands to something}. Similarly, the term
+\enquote{execute} might be used in place of \enquote{expand}
+or it might refer to the more specific case of
+\enquote{processing in \TeX's stomach}
+(if you are familiar with the \TeX{}book parlance).
+
+If in doubt, please ask; chances are we've been hasty in writing certain
+definitions and need to be told to tighten up our terminology.
+
+\section{Documentation conventions}
+
+This document is typeset with the experimental \pkg{l3doc} class;
+several conventions are used to help describe the features of the code.
+A number of conventions are used here to make the documentation clearer.
+
+Each group of related functions is given in a box. For a function with
+a \enquote{user} name, this might read:
+\begin{function}{\ExplSyntaxOn, \ExplSyntaxOff}
+ \begin{syntax}
+ \cs{ExplSyntaxOn} \dots{} \cs{ExplSyntaxOff}
+ \end{syntax}
+ The textual description of how the function works would appear here. The
+ syntax of the function is shown in mono-spaced text to the right of
+ the box. In this example, the function takes no arguments and so the
+ name of the function is simply reprinted.
+\end{function}
+
+For programming functions, which use \texttt{_} and \texttt{:} in their name
+there are a few additional conventions: If two related functions are given
+with identical names but different argument specifiers, these are termed
+\emph{variants} of each other, and the latter functions are printed in grey to
+show this more clearly. They will carry out the same function but will take
+different types of argument:
+\begin{function}{\seq_new:N, \seq_new:c}
+ \begin{syntax}
+ \cs{seq_new:N} \meta{sequence}
+ \end{syntax}
+ When a number of variants are described, the arguments are usually
+ illustrated only for the base function. Here, \meta{sequence} indicates
+ that \cs{seq_new:N} expects the name of a sequence. From the argument
+ specifier, \cs{seq_new:c} also expects a sequence name, but as a
+ name rather than as a control sequence. Each argument given in the
+ illustration should be described in the following text.
+\end{function}
+
+\paragraph{Fully expandable functions}
+\hypertarget{expstar}{Some functions are fully expandable},
+which allows it to be used within
+an \texttt{x}-type argument (in plain \TeX{} terms, inside an \cs{edef}),
+as well as within an \texttt{f}-type argument.
+These fully expandable functions are indicated in the documentation by
+a star:
+\begin{function}[EXP]{\cs_to_str:N}
+ \begin{syntax}
+ \cs{cs_to_str:N} \meta{cs}
+ \end{syntax}
+ As with other functions, some text should follow which explains how
+ the function works. Usually, only the star will indicate that the
+ function is expandable. In this case, the function expects a \meta{cs},
+ shorthand for a \meta{control sequence}.
+\end{function}
+
+\paragraph{Restricted expandable functions}
+\hypertarget{rexpstar}{A few functions are fully expandable} but cannot be fully expanded within
+an \texttt{f}-type argument. In this case a hollow star is used to indicate
+this:
+\begin{function}[rEXP]{\seq_map_function:NN}
+ \begin{syntax}
+ \cs{seq_map_function:NN} \meta{seq} \meta{function}
+ \end{syntax}
+\end{function}
+
+\paragraph{Conditional functions}
+\hypertarget{explTF}{Conditional (\texttt{if}) functions}
+are normally defined in three variants, with
+\texttt{T}, \texttt{F} and \texttt{TF} argument specifiers. This allows
+them to be used for different \enquote{true}/\enquote{false} branches,
+depending on
+which outcome the conditional is being used to test. To indicate this
+without repetition, this information is given in a shortened form:
+\begin{function}[EXP,TF]{\xetex_if_engine:}
+ \begin{syntax}
+ \cs{xetex_if_engine:TF} \Arg{true code} \Arg{false code}
+ \end{syntax}
+ The underlining and italic of \texttt{TF} indicates that
+ \cs{xetex_if_engine:T}, \cs{xetex_if_engine:F} and
+ \cs{xetex_if_engine:TF} are all available. Usually, the illustration
+ will use the \texttt{TF} variant, and so both \meta{true code}
+ and \meta{false code} will be shown. The two variant forms \texttt{T} and
+ \texttt{F} take only \meta{true code} and \meta{false code}, respectively.
+ Here, the star also shows that this function is expandable.
+ With some minor exceptions, \emph{all} conditional functions in the
+ \pkg{expl3} modules should be defined in this way.
+\end{function}
+
+Variables, constants and so on are described in a similar manner:
+\begin{variable}{\l_tmpa_tl}
+ A short piece of text will describe the variable: there is no
+ syntax illustration in this case.
+\end{variable}
+
+In some cases, the function is similar to one in \LaTeXe{} or plain \TeX{}.
+In these cases, the text will include an extra \enquote{\textbf{\TeX{}hackers
+note}} section:
+\begin{function}[EXP]{\token_to_str:N}
+ \begin{syntax}
+ \cs{token_to_str:N} \meta{token}
+ \end{syntax}
+ The normal description text.
+ \begin{texnote}
+ Detail for the experienced \TeX{} or \LaTeXe\ programmer. In this
+ case, it would point out that this function is the \TeX{} primitive
+ \cs{string}.
+ \end{texnote}
+\end{function}
+
+\section{Formal language conventions which apply generally}
+
+As this is a formal reference guide for \LaTeX3 programming, the descriptions
+of functions are intended to be reasonably \enquote{complete}. However, there
+is also a need to avoid repetition. Formal ideas which apply to general
+classes of function are therefore summarised here.
+
+For tests which have a \texttt{TF} argument specification, the test if
+evaluated to give a logically \texttt{TRUE} or \texttt{FALSE} result.
+Depending on this result, either the \meta{true code} or the \meta{false code}
+will be left in the input stream. In the case where the test is expandable,
+and a predicate (|_p|) variant is available, the logical value determined by
+the test is left in the input stream: this will typically be part of a larger
+logical construct.
+
+\section{\TeX{} concepts not supported by \LaTeX3{}}
+
+The \TeX{} concept of an \enquote{\cs{outer}} macro is \emph{not supported}
+at all by \LaTeX3{}. As such, the functions provided here may break when
+used on top of \LaTeXe{} if \cs{outer} tokens are used in the arguments.
+
+\DisableImplementation
+
+\DocInput{l3bootstrap.dtx}
+\DocInput{l3names.dtx}
+\DocInput{l3basics.dtx}
+\DocInput{l3expan.dtx}
+\DocInput{l3prg.dtx}
+\DocInput{l3quark.dtx}
+\DocInput{l3token.dtx}
+\DocInput{l3int.dtx}
+\DocInput{l3skip.dtx}
+\DocInput{l3tl.dtx}
+\DocInput{l3seq.dtx}
+\DocInput{l3clist.dtx}
+\DocInput{l3prop.dtx}
+\DocInput{l3box.dtx}
+\DocInput{l3coffins.dtx}
+\DocInput{l3color.dtx}
+\DocInput{l3msg.dtx}
+\DocInput{l3keys.dtx}
+\DocInput{l3file.dtx}
+\DocInput{l3fp.dtx}
+% To get the various submodules of l3fp to appear in the implementation
+% part only, they have to be added to the documentation list after typesetting
+% the 'user' part just for the main module.
+\ExplSyntaxOn
+\clist_gput_right:Nn \g_docinput_clist
+ {
+ l3fp-aux.dtx ,
+ l3fp-traps.dtx ,
+ l3fp-round.dtx ,
+ l3fp-parse.dtx ,
+ l3fp-logic.dtx ,
+ l3fp-basics.dtx ,
+ l3fp-extended.dtx ,
+ l3fp-expo.dtx ,
+ l3fp-trig.dtx ,
+ l3fp-convert.dtx ,
+ l3fp-assign.dtx ,
+ l3fp-old.dtx ,
+ }
+\ExplSyntaxOff
+\DocInput{l3luatex.dtx}
+
+\DocInput{l3candidates.dtx}
+
+\endinput
diff --git a/Master/texmf-dist/makeindex/l3kernel/l3doc.ist b/Master/texmf-dist/makeindex/l3kernel/l3doc.ist
new file mode 100644
index 00000000000..781c87e50f2
--- /dev/null
+++ b/Master/texmf-dist/makeindex/l3kernel/l3doc.ist
@@ -0,0 +1,72 @@
+%%
+%% This is file `l3doc.ist',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% l3doc.dtx (with options: `docist')
+%%
+%%
+%% EXPERIMENTAL CODE
+%%
+%% Do not distribute this file without also distributing the
+%% source files specified above.
+%%
+%% Do not distribute a modified version of this file.
+%%
+%%
+%% File: l3doc.dtx Copyright (C) 1990-2012 The LaTeX3 project
+%%
+%% It may be distributed and/or modified under the conditions of the
+%% LaTeX Project Public License (LPPL), either version 1.3c of this
+%% license or (at your option) any later version. The latest version
+%% of this license is in the file
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This file is part of the "l3kernel bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%%
+%% The released version of this bundle is available from CTAN.
+%%
+%% -----------------------------------------------------------------------
+%%
+%% The development version of the bundle can be found at
+%%
+%% http://www.latex-project.org/svnroot/experimental/trunk/
+%%
+%% for those people who are interested.
+%%
+%%%%%%%%%%%
+%% NOTE: %%
+%%%%%%%%%%%
+%%
+%% Snapshots taken from the repository represent work in progress and may
+%% not work or may contain conflicting material! We therefore ask
+%% people _not_ to put them into distributions, archives, etc. without
+%% prior consultation with the LaTeX3 Project.
+%%
+%% -----------------------------------------------------------------------
+actual '='
+quote '!'
+level '#'
+preamble
+"\n \\begin{theindex} \n \\makeatletter\\scan@allowedfalse\n"
+postamble
+"\n\n \\end{theindex}\n"
+item_x1 "\\efill \n \\subitem "
+item_x2 "\\efill \n \\subsubitem "
+delim_0 "\\pfill "
+delim_1 "\\pfill "
+delim_2 "\\pfill "
+lethead_prefix "{\\bfseries\\hfil "
+lethead_suffix "\\hfil}\\nopagebreak\n"
+lethead_flag 1
+heading_prefix "{\\bfseries\\hfil "
+heading_suffix "\\hfil}\\nopagebreak\n"
+headings_flag 1
+
+page_precedence "rnaA"
+%%
+%%
+%% End of file `l3doc.ist'.
diff --git a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
index 527411ab125..ccb816a9bf5 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{2012/09/05}
-\def\ExplFileVersion{4205}
+\def\ExplFileDate{2012/09/29}
+\def\ExplFileVersion{4249}
%</driver|package>
%<*driver>
\documentclass[full]{l3doc}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3.ins b/Master/texmf-dist/source/latex/l3kernel/l3.ins
deleted file mode 100644
index 0df5abf9424..00000000000
--- a/Master/texmf-dist/source/latex/l3kernel/l3.ins
+++ /dev/null
@@ -1,92 +0,0 @@
-\iffalse meta-comment
-
-File l3.ins Copyright (C) 2011,2012 The LaTeX3 Project
-
-It may be distributed and/or modified under the conditions of the
-LaTeX Project Public License (LPPL), either version 1.3c of this
-license or (at your option) any later version. The latest version
-of this license is in the file
-
- http://www.latex-project.org/lppl.txt
-
-This file is part of the "l3kernel bundle" (The Work in LPPL)
-and all files in that bundle must be distributed together.
-
-The released version of this bundle is available from CTAN.
-
-\fi
-
-\let\jobname\relax
-\input l3docstrip.dtx
-\askforoverwritefalse
-
-\preamble
-
-EXPERIMENTAL CODE
-
-Do not distribute this file without also distributing the
-source files specified above.
-
-Do not distribute a modified version of this file.
-
-\endpreamble
-% stop docstrip adding \endinput
-\postamble
-\endpostamble
-
-\keepsilent
-
-% ===== PACKAGE ONLY ======
-\generate{\file{expl3.sty} {\from{expl3.dtx} {package}}}
-% ========================
-\generate{\file{l3bootstrap.sty} {\from{l3bootstrap.dtx}{package}}}
-\generate{\file{l3names.sty} {\from{l3names.dtx} {package}}}
-\generate{\file{l3basics.sty} {\from{l3basics.dtx} {package}}}
-\generate{\file{l3expan.sty} {\from{l3expan.dtx} {package}}}
-\generate{\file{l3tl.sty} {\from{l3tl.dtx} {package}}}
-\generate{\file{l3seq.sty} {\from{l3seq.dtx} {package}}}
-\generate{\file{l3int.sty} {\from{l3int.dtx} {package}}}
-\generate{\file{l3quark.sty} {\from{l3quark.dtx} {package}}}
-\generate{\file{l3prg.sty} {\from{l3prg.dtx} {package}}}
-\generate{\file{l3clist.sty} {\from{l3clist.dtx} {package}}}
-\generate{\file{l3token.sty} {\from{l3token.dtx} {package}}}
-\generate{\file{l3prop.sty} {\from{l3prop.dtx} {package}}}
-\generate{\file{l3msg.sty} {\from{l3msg.dtx} {package}}}
-\generate{\file{l3file.sty} {\from{l3file.dtx} {package}}}
-\generate{\file{l3skip.sty} {\from{l3skip.dtx} {package}}}
-\generate{\file{l3keys.sty} {\from{l3keys.dtx} {package}}}
-\generate
- {%
- \file{l3fp.sty}
- {%
- \from{l3fp.dtx} {package}
- \from{l3fp-aux.dtx} {package}
- \from{l3fp-traps.dtx} {package}
- \from{l3fp-round.dtx} {package}
- \from{l3fp-parse.dtx} {package}
- \from{l3fp-logic.dtx} {package}
- \from{l3fp-basics.dtx} {package}
- \from{l3fp-extended.dtx}{package}
- \from{l3fp-expo.dtx} {package}
- \from{l3fp-trig.dtx} {package}
- \from{l3fp-convert.dtx} {package}
- \from{l3fp-assign.dtx} {package}
- \from{l3fp-old.dtx} {package}
- }%
- }
-\generate{\file{l3box.sty} {\from{l3box.dtx} {package}}}
-\generate{\file{l3coffins.sty} {\from{l3coffins.dtx} {package}}}
-\generate{\file{l3color.sty} {\from{l3color.dtx} {package}}}
-\generate{\file{l3luatex.sty} {\from{l3luatex.dtx} {package}}}
-\generate{\file{l3candidates.sty}{\from{l3candidates.dtx} {package}}}
-
-\generate{\file{l3doc.cls} {\from{l3doc.dtx} {class}}}
-\generate{\file{l3doc.ist} {\from{l3doc.dtx} {docist}}}
-
-\generate{\file{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 ac429fd8883..d38807ba1f6 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 4144 2012-08-27 19:37:16Z bruno $
+\GetIdInfo$Id: l3basics.dtx 4212 2012-09-09 12:24:04Z bruno $
{L3 Basic definitions}
%</driver|package>
%<*driver>
@@ -677,14 +677,15 @@
% \end{texnote}
% \end{function}
%
-% \begin{function}[updated = 2011-12-22]{\cs_show:N, \cs_show:c}
+% \begin{function}[updated = 2012-09-09]{\cs_show:N, \cs_show:c}
% \begin{syntax}
% \cs{cs_show:N} \meta{control sequence}
% \end{syntax}
% Displays the definition of the \meta{control sequence} on the
% terminal.
% \begin{texnote}
-% This is the \TeX{} primitive \tn{show}.
+% This is similar to the \TeX{} primitive \tn{show}, wrapped to a
+% fixed number of characters per line.
% \end{texnote}
% \end{function}
%
@@ -1299,7 +1300,7 @@
%
% \begin{function}{\__kernel_register_show:N, \__kernel_register_show:c}
% \begin{syntax}
-% \cs{\__kernel_register_show:N} \meta{register}
+% \cs{__kernel_register_show:N} \meta{register}
% \end{syntax}
% Used to show the contents of a \TeX{} register at the terminal, formatted
% such that internal parts of the mechanism are not visible.
@@ -1410,16 +1411,13 @@
% \end{macro}
%
% \begin{macro}[EXP]{\token_to_meaning:N, \token_to_str:N, \cs_meaning:N}
-% \begin{macro}{\cs_show:N}
% Examining a control sequence or token.
% \begin{macrocode}
\tex_let:D \token_to_meaning:N \tex_meaning:D
\tex_let:D \token_to_str:N \tex_string:D
\tex_let:D \cs_meaning:N \tex_meaning:D
-\tex_let:D \cs_show:N \tex_show:D
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
% \begin{macro}{\scan_stop:, \group_begin:, \group_end:}
% The next three are basic functions for which there also exist
@@ -1458,17 +1456,12 @@
% \end{macro}
%
% \begin{macro}[EXP]{\token_to_meaning:c, \token_to_str:c, \cs_meaning:c}
-% \begin{macro}{\cs_show:c}
% A small number of variants defined by hand.
% Some of the necessary functions
% (\cs{use_i:nn}, \cs{use_ii:nn}, and \cs{exp_args:NNc}) are not
% defined at that point yet, but will be defined before those variants
% are used. The \cs{cs_meaning:c} command must check for an undefined
-% control sequence to avoid defining it mistakenly. The
-% \cs{cs_show:c} command is \enquote{protected} because its action is
-% not expandable. Also, the conversion of its argument to a control
-% sequence is done within a group to avoid showing \tn{relax} for
-% undefined control sequences.
+% control sequence to avoid defining it mistakenly.
% \begin{macrocode}
\tex_def:D \token_to_str:c { \exp_args:Nc \token_to_str:N }
\tex_long:D \tex_def:D \cs_meaning:c #1
@@ -1482,11 +1475,8 @@
{ \tl_to_str:n {undefined} }
}
\tex_let:D \token_to_meaning:c = \cs_meaning:c
-\etex_protected:D \tex_def:D \cs_show:c
- { \group_begin: \exp_args:NNc \group_end: \cs_show:N }
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
% \subsection{Defining some constants}
%
@@ -2891,7 +2881,7 @@
% \end{macrocode}
% \end{macro}
%
-% \subsection{Diagnostic wrapper functions}
+% \subsection{Diagnostic functions}
%
% \begin{macro}[int]{\__kernel_register_show:N, \__kernel_register_show:c}
% Check that the variable exists, then apply the \tn{showthe} primitive to
@@ -2911,6 +2901,41 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\cs_show:N, \cs_show:c}
+% \begin{macro}[aux, EXP]{\__cs_show:www}
+% Some control sequences have a very long name or meaning. Thus,
+% simply using \TeX{}'s primitive \tn{show} could lead to overlong
+% lines. The output of this primitive is mimicked to some extent: a
+% line-break is added after the first colon in the meaning (this is
+% what \TeX{} does for macros and five |\...mark| primitives). Then
+% the re-built string is given to \cs{iow_wrap:nnnN} for
+% line-wrapping. The \cs{cs_show:c} command converts its argument to
+% a control sequence within a group to avoid showing \tn{relax} for
+% undefined control sequences.
+% \begin{macrocode}
+\group_begin:
+ \tex_lccode:D `? = `: \scan_stop:
+ \tex_catcode:D `? = 12 \scan_stop:
+\tex_lowercase:D
+ {
+ \group_end:
+ \cs_new_protected:Npn \cs_show:N #1
+ {
+ \__msg_show_variable:n
+ {
+ > ~ \token_to_str:N #1 =
+ \exp_after:wN \__cs_show:www \cs_meaning:N #1
+ \use_none:nn ? \prg_do_nothing:
+ }
+ }
+ \cs_new:Npn \__cs_show:www #1 ? { #1 ? \\ }
+ }
+\cs_new_protected_nopar:Npn \cs_show:c
+ { \group_begin: \exp_args:NNc \group_end: \cs_show:N }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
% \subsection{Engine specific definitions}
%
% \begin{macro}[pTF, EXP]
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
index e5c2ab164f4..12da7598665 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
@@ -1865,10 +1865,14 @@
}
\cs_new_protected:Npn \@@_find_corner_maxima_aux:nn #1#2
{
- \dim_set_min:Nn \l_@@_left_corner_dim {#1}
- \dim_set_max:Nn \l_@@_right_corner_dim {#1}
- \dim_set_min:Nn \l_@@_bottom_corner_dim {#2}
- \dim_set_max:Nn \l_@@_top_corner_dim {#2}
+ \dim_set:Nn \l_@@_left_corner_dim
+ { \dim_min:nn { \l_@@_left_corner_dim } {#1} }
+ \dim_set:Nn \l_@@_right_corner_dim
+ { \dim_max:nn { \l_@@_right_corner_dim } {#1} }
+ \dim_set:Nn \l_@@_bottom_corner_dim
+ { \dim_min:nn { \l_@@_bottom_corner_dim } {#2} }
+ \dim_set:Nn \l_@@_top_corner_dim
+ { \dim_max:nn { \l_@@_top_corner_dim } {#2} }
}
% \end{macrocode}
% \end{macro}
@@ -1887,7 +1891,10 @@
{ \@@_find_bounding_shift_aux:nn ##2 }
}
\cs_new_protected:Npn \@@_find_bounding_shift_aux:nn #1#2
- { \dim_set_min:Nn \l_@@_bounding_shift_dim {#1} }
+ {
+ \dim_set:Nn \l_@@_bounding_shift_dim
+ { \dim_min:nn { \l_@@_bounding_shift_dim } {#1} }
+ }
% \end{macrocode}
% \end{macro}
% \end{macro}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
index 948976f4110..0f76f18b72b 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 4102 2012-08-15 16:08:27Z bruno $
+\GetIdInfo$Id: l3clist.dtx 4212 2012-09-09 12:24:04Z bruno $
{L3 Comma separated lists}
%</driver|package>
%<*driver>
@@ -516,14 +516,14 @@
%
% \section{Viewing comma lists}
%
-% \begin{function}{\clist_show:N, \clist_show:c}
+% \begin{function}[updated = 2012-09-09]{\clist_show:N, \clist_show:c}
% \begin{syntax}
% \cs{clist_show:N} \meta{comma list}
% \end{syntax}
% Displays the entries in the \meta{comma list} in the terminal.
% \end{function}
%
-% \begin{function}{\clist_show:n}
+% \begin{function}[updated = 2012-09-09]{\clist_show:n}
% \begin{syntax}
% \cs{clist_show:n} \Arg{tokens}
% \end{syntax}
@@ -1357,14 +1357,14 @@
%
% \begin{macro}{\clist_show:N, \clist_show:c}
% \begin{macro}{\clist_show:n}
-% Apply the general \cs{__msg_show_variable:Nnx}. In the case
+% Apply the general \cs{__msg_show_variable:Nnn}. In the case
% of an \texttt{n}-type comma-list, first store it
% in a scratch variable, then show that variable:
% The message takes care of omitting its name.
% \begin{macrocode}
\cs_new_protected:Npn \clist_show:N #1
{
- \__msg_show_variable:Nnx #1 { clist }
+ \__msg_show_variable:Nnn #1 { clist }
{ \clist_map_function:NN #1 \__msg_show_item:n }
}
\cs_new_protected:Npn \clist_show:n #1
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
index 1c7f4836804..e6369d38bb5 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
@@ -36,7 +36,7 @@
%
%<*driver|package>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3coffins.dtx 4092 2012-08-14 14:04:41Z bruno $
+\GetIdInfo$Id: l3coffins.dtx 4212 2012-09-09 12:24:04Z bruno $
{L3 Coffin code layer}
%</driver|package>
%<*driver>
@@ -304,7 +304,7 @@
% both printed in the \meta{colour} specified.
% \end{function}
%
-% \begin{function}[updated = 2012-01-01]
+% \begin{function}[updated = 2012-09-09]
% {\coffin_show_structure:N, \coffin_show_structure:c}
% \begin{syntax}
% \cs{coffin_show_structure:N} \meta{coffin}
@@ -1676,7 +1676,7 @@
{
\@@_if_exist:NT #1
{
- \__msg_show_variable:Nnx #1 { coffins }
+ \__msg_show_variable:Nnn #1 { coffins }
{
\prop_map_function:cN
{ l_@@_poles_ \__int_value:w #1 _prop }
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx b/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
index bea9cf251ce..1a77c975255 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
@@ -78,7 +78,7 @@ Do not distribute a modified version of this file.
%</driver|class>
%
%<*driver|class>
-\GetIdInfo$Id: l3doc.dtx 4130 2012-08-20 21:30:22Z joseph $
+\GetIdInfo$Id: l3doc.dtx 4230 2012-09-24 21:44:28Z joseph $
{L3 Experimental documentation class}
%</driver|class>
%
@@ -2061,6 +2061,7 @@ Do not distribute a modified version of this file.
\clist_map_inline:nn {#1}
{
\clist_put_right:Nn \g_docinput_clist {##1}
+ \tl_gclear:N \g_@@_module_name_tl
\MakePercentIgnore
\input{##1}
\MakePercentComment
@@ -2078,6 +2079,7 @@ Do not distribute a modified version of this file.
\clist_map_inline:Nn \g_docinput_clist
{
\MakePercentIgnore
+ \tl_gclear:N \g_@@_module_name_tl
\input{##1}
\MakePercentComment
}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
index 623ae7c4fa9..df61cb4b0e4 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
@@ -53,6 +53,9 @@
%</gobble>
\def\filename{docstrip.dtx}
\documentclass[full]{l3doc}
+ \ExplSyntaxOn
+ \cs_set_eq:NN \__codedoc_replace_at_at:N \use_none:n
+ \ExplSyntaxOff
\begin{document}
\DocInput{\jobname.dtx}
\end{document}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
index 5011c868715..c9e689f06ca 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 4101 2012-08-15 16:05:33Z bruno $
+\GetIdInfo$Id: l3file.dtx 4212 2012-09-09 12:24:04Z bruno $
{L3 File and I/O operations}
%</driver|package>
%<*driver>
@@ -218,7 +218,7 @@
% to other programmers.
% \end{function}
%
-% \begin{function}{\ior_list_streams:, \iow_list_streams:}
+% \begin{function}[updated = 2012-09-09]{\ior_list_streams:, \iow_list_streams:}
% \begin{syntax}
% \cs{ior_list_streams:}
% \cs{iow_list_streams:}
@@ -313,7 +313,7 @@
% (\emph{cf.}~\cs{iow_shipout_x:Nn}).
% \end{function}
%
-% \begin{function}{\iow_shipout_x:Nn, \iow_shipout_x:Nx}
+% \begin{function}[updated = 2012-09-08]{\iow_shipout_x:Nn, \iow_shipout_x:Nx}
% \begin{syntax}
% \cs{iow_shipout_x:Nn} \meta{stream} \Arg{tokens}
% \end{syntax}
@@ -324,7 +324,7 @@
% these functions suitable for including material finalised during
% the page building process (such as the page number integer).
% \begin{texnote}
-% \cs{iow_shipout_x:Nn} is the \TeX{} primitive \tn{write} renamed.
+% This is a wrapper around the \TeX{} primitive \tn{write}.
% \end{texnote}
% \end{function}
%
@@ -1075,7 +1075,7 @@
\__msg_term:nnn { LaTeX / kernel }
{ \prop_if_empty:NTF #1 { show-no-stream } { show-open-streams } }
{#2}
- \__msg_show_variable:x
+ \__msg_show_variable:n
{ \prop_map_function:NN #1 \__msg_show_item_unbraced:nn }
}
% \end{macrocode}
@@ -1336,9 +1336,11 @@
% \subsubsection{Deferred writing}
%
% \begin{macro}{\iow_shipout_x:Nn, \iow_shipout_x:Nx}
-% First the easy part, this is the primitive.
+% First the easy part, this is the primitive, which expects its
+% argument to be braced.
% \begin{macrocode}
-\cs_new_eq:NN \iow_shipout_x:Nn \tex_write:D
+\cs_new_protected:Npn \iow_shipout_x:Nn #1#2
+ { \tex_write:D #1 {#2} }
\cs_generate_variant:Nn \iow_shipout_x:Nn { Nx }
% \end{macrocode}
% \end{macro}
@@ -1347,7 +1349,7 @@
% With \eTeX{} available deferred writing without expansion is easy.
% \begin{macrocode}
\cs_new_protected:Npn \iow_shipout:Nn #1#2
- { \iow_shipout_x:Nn #1 { \exp_not:n {#2} } }
+ { \tex_write:D #1 { \exp_not:n {#2} } }
\cs_generate_variant:Nn \iow_shipout:Nn { Nx }
% \end{macrocode}
% \end{macro}
@@ -1364,7 +1366,7 @@
% need to be doubled.
% \begin{macrocode}
\cs_new_protected:Npn \iow_now:Nn #1#2
- { \tex_immediate:D \iow_shipout_x:Nn #1 { \exp_not:n {#2} } }
+ { \tex_immediate:D \tex_write:D #1 { \exp_not:n {#2} } }
\cs_generate_variant:Nn \iow_now:Nn { Nx }
% \end{macrocode}
% \end{macro}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3format.ins b/Master/texmf-dist/source/latex/l3kernel/l3format.ins
deleted file mode 100644
index 76fe0ee3e76..00000000000
--- a/Master/texmf-dist/source/latex/l3kernel/l3format.ins
+++ /dev/null
@@ -1,92 +0,0 @@
-\iffalse meta-comment
-
-File l3format.ins Copyright (C) 2011,2012 The LaTeX3 Project
-
-It may be distributed and/or modified under the conditions of the
-LaTeX Project Public License (LPPL), either version 1.3c of this
-license or (at your option) any later version. The latest version
-of this license is in the file
-
- http://www.latex-project.org/lppl.txt
-
-This file is part of the "l3kernel bundle" (The Work in LPPL)
-and all files in that bundle must be distributed together.
-
-The released version of this bundle is available from CTAN.
-
-\fi
-
-\let\jobname\relax
-\input l3docstrip.dtx
-\askforoverwritefalse
-
-\preamble
-
-EXPERIMENTAL CODE
-
-Do not distribute this file without also distributing the
-source files specified above.
-
-Do not distribute a modified version of this file.
-
-\endpreamble
-% stop docstrip adding \endinput
-\postamble
-\endpostamble
-
-\keepsilent
-
-\generate
- {
- \file{l3format.ltx}
- {
- \from{l3bootstrap.dtx} {initex}
- \from{l3names.dtx} {initex}
- \from{l3basics.dtx} {initex}
- \from{l3expan.dtx} {initex}
- \from{l3tl.dtx} {initex}
- \from{l3seq.dtx} {initex}
- % ===== ===FORMAT ONLY =========
- \from{l3alloc.dtx} {initex}
- % ==============================
- \from{l3int.dtx} {initex}
- \from{l3quark.dtx} {initex}
- \from{l3prg.dtx} {initex}
- \from{l3clist.dtx} {initex}
- \from{l3token.dtx} {initex}
- \from{l3prop.dtx} {initex}
- \from{l3msg.dtx} {initex}
- \from{l3file.dtx} {initex}
- \from{l3skip.dtx} {initex}
- \from{l3keys.dtx} {initex}
- \from{l3fp.dtx} {initex}
- \from{l3fp-aux.dtx} {initex}
- \from{l3fp-traps.dtx} {initex}
- \from{l3fp-round.dtx} {initex}
- \from{l3fp-parse.dtx} {initex}
- \from{l3fp-logic.dtx} {initex}
- \from{l3fp-basics.dtx} {initex}
- \from{l3fp-extended.dtx}{initex}
- \from{l3fp-expo.dtx} {initex}
- \from{l3fp-trig.dtx} {initex}
- \from{l3fp-convert.dtx} {initex}
- \from{l3fp-assign.dtx} {initex}
- \from{l3fp-old.dtx} {initex}
- \from{l3box.dtx} {initex}
- \from{l3coffins.dtx} {initex}
- \from{l3color.dtx} {initex}
- \from{l3luatex.dtx} {initex}
- \from{l3candidates.dtx} {initex}
- % ======== FORMAT ONLY =========
- \from{l3final.dtx} {initex}
- % ==============================
- }
- }
-
-\generate{\file{l3dvips.ltx} {\from{l3drivers.dtx}{initex,dvips} }}
-\generate{\file{l3pdfmode.ltx} {\from{l3drivers.dtx}{initex,pdfmode} }}
-\generate{\file{l3xdvipdfmx.ltx}{\from{l3drivers.dtx}{initex,xdvipdfmx}}}
-
-\generate{\file{l3docstrip.tex}{\from{l3docstrip.dtx}{program}}}
-
-\endbatchfile \ No newline at end of file
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
index 142a3c5afac..c207d30abf5 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
@@ -36,7 +36,7 @@
%
%<*driver>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3fp-assign.dtx 4129 2012-08-20 20:38:28Z mittelba $
+\GetIdInfo$Id: l3fp-assign.dtx 4212 2012-09-09 12:24:04Z bruno $
{L3 Floating-point assignments}
\documentclass[full]{l3doc}
\begin{document}
@@ -183,20 +183,20 @@
%
% \begin{macro}{\fp_show:N, \fp_show:c, \fp_show:n}
% This shows the result of computing its argument. The
-% \cs{__msg_show_variable:x} auxiliary expects its input in a slightly odd
-% form, starting with |>|, and displays the rest.
+% \cs{__msg_show_variable:n} auxiliary expects its input in a slightly
+% odd form, starting with |>~|, and displays the rest.
% \begin{macrocode}
\cs_new_protected:Npn \fp_show:N #1
{
\fp_if_exist:NTF #1
- { \__msg_show_variable:x { > \fp_to_tl:N #1 } }
+ { \__msg_show_variable:n { > ~ \fp_to_tl:N #1 } }
{
\__msg_kernel_error:nnx { kernel } { variable-not-defined }
{ \token_to_str:N #1 }
}
}
\cs_new_protected:Npn \fp_show:n #1
- { \__msg_show_variable:x { > \fp_to_tl:n {#1} } }
+ { \__msg_show_variable:n { > ~ \fp_to_tl:n {#1} } }
\cs_generate_variant:Nn \fp_show:N { c }
% \end{macrocode}
% \end{macro}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
index 52fda439459..7bb9f89a507 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
@@ -36,7 +36,7 @@
%
%<*driver>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3fp-convert.dtx 4180 2012-08-31 16:44:34Z bruno $
+\GetIdInfo$Id: l3fp-convert.dtx 4234 2012-09-26 09:43:31Z bruno $
{L3 Floating-point conversion}
\documentclass[full]{l3doc}
\begin{document}
@@ -473,6 +473,16 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}[EXP]{\fp_max:nn, \fp_min:nn}
+% Similar to \cs{fp_abs:n}, for consistency with \cs{int_max:nn}, \emph{etc.}
+% \begin{macrocode}
+\cs_new:Npn \fp_max:nn #1#2
+ { \fp_to_decimal:n { max ( \@@_parse:n {#1} , \@@_parse:n {#2} ) } }
+\cs_new:Npn \fp_min:nn #1#2
+ { \fp_to_decimal:n { min ( \@@_parse:n {#1} , \@@_parse:n {#2} ) } }
+% \end{macrocode}
+% \end{macro}
+%
% \subsection{Convert an array of floating points to a comma list}
%
% \begin{macro}[int, EXP]{\@@_array_to_clist:n}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
index 5cf7c0ccf91..6eff317f94c 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 4151 2012-08-28 11:51:52Z bruno $
+\GetIdInfo$Id: l3fp.dtx 4234 2012-09-26 09:43:31Z bruno $
{L3 Floating points}
%</driver|package>
%<*driver>
@@ -981,7 +981,19 @@
% \cs{fp_eval:n} and leaves the absolute value of the result in the
% input stream. This function does not raise any exception beyond
% those raised when evaluating its argument. Within floating point
-% expressios, |abs()| can be used.
+% expressions, |abs()| can be used.
+% \end{function}
+%
+% \begin{function}[EXP, added = 2012-09-26, tested = m3fp-convert003]
+% {\fp_max:nn, \fp_min:nn}
+% \begin{syntax}
+% \cs{fp_max:nn} \Arg{fp expression 1} \Arg{fp expression 2}
+% \end{syntax}
+% Evaluates the \meta{floating point expressions} as described for
+% \cs{fp_eval:n} and leaves the resulting larger (\texttt{max}) or smaller
+% (\texttt{min}) value in the input stream. This function does not raise any
+% exception beyond those raised when evaluating its argument. Within
+% floating point expressions, |max()| and |min()| can be used.
% \end{function}
%
% \section{Disclaimer and roadmap}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
index 7a176c93588..e67616a2f7d 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 4121 2012-08-17 01:36:30Z bruno $
+\GetIdInfo$Id: l3int.dtx 4237 2012-09-26 10:18:58Z bruno $
{L3 Integers}
%</driver|package>
%<*driver>
@@ -93,7 +93,7 @@
% \tl_new:N \l_my_tl
% \tl_set:Nn \l_my_tl { 5 }
% \int_new:N \l_my_int
-% \int\set:Nn \l_my_int { 4 }
+% \int_set:Nn \l_my_int { 4 }
% \int_eval:n { \l_my_tl + \l_my_int * 3 - ( 3 + 4 * 5 ) }
% \end{verbatim}
% both evaluate to \( -6 \). The \Arg{integer expression} may
@@ -105,7 +105,7 @@
% suitable termination if used in a \TeX{}-style integer assignment.
% \end{function}
%
-% \begin{function}[EXP]{\int_abs:n}
+% \begin{function}[EXP, updated = 2012-09-26]{\int_abs:n}
% \begin{syntax}
% \cs{int_abs:n} \Arg{integer expression}
% \end{syntax}
@@ -115,7 +115,7 @@
% expansions.
% \end{function}
%
-% \begin{function}[EXP]{\int_div_round:nn}
+% \begin{function}[EXP, updated = 2012-09-26]{\int_div_round:nn}
% \begin{syntax}
% \cs{int_div_round:nn} \Arg{intexpr_1} \Arg{intexpr_2}
% \end{syntax}
@@ -138,7 +138,7 @@
% \meta{integer denotation} after two expansions.
% \end{function}
%
-% \begin{function}[EXP]{\int_max:nn, \int_min:nn}
+% \begin{function}[EXP, updated = 2012-09-26]{\int_max:nn, \int_min:nn}
% \begin{syntax}
% \cs{int_max:nn} \Arg{intexpr_1} \Arg{intexpr_2}
% \cs{int_min:nn} \Arg{intexpr_1} \Arg{intexpr_2}
@@ -149,7 +149,7 @@
% expansions.
% \end{function}
%
-% \begin{function}[EXP]{\int_mod:nn}
+% \begin{function}[EXP, updated = 2012-09-26]{\int_mod:nn}
% \begin{syntax}
% \cs{int_mod:nn} \Arg{intexpr_1} \Arg{intexpr_2}
% \end{syntax}
@@ -941,48 +941,56 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\int_max:nn}
+% \begin{macro}[EXP]{\int_abs:n}
+% \begin{macro}[aux, EXP]{\@@_abs:N}
% \UnitTested
-% \begin{macro}{\int_min:nn}
+% \begin{macro}[EXP]{\int_max:nn}
+% \begin{macro}[EXP]{\int_min:nn}
+% \begin{macro}[aux, EXP]{\@@_maxmin:wwN}
% \UnitTested
-% \begin{macro}{\int_abs:n}
% \UnitTested
-% Functions for $\min$, $\max$, and absolute value.
+% Functions for $\min$, $\max$, and absolute value with only one
+% evaluation. The absolute value is obtained by removing a leading
+% sign if any. All three functions expand in two steps.
% \begin{macrocode}
\cs_new:Npn \int_abs:n #1
{
- \@@_value:w
- \if_int_compare:w \@@_eval:w #1 < \c_zero
- -
- \fi:
- \@@_eval:w #1 \@@_eval_end:
+ \@@_value:w \exp_after:wN \@@_abs:N
+ \int_use:N \@@_eval:w #1 \@@_eval_end:
+ \exp_stop_f:
}
-\cs_new:Npn \int_max:nn #1#2
+\cs_new:Npn \@@_abs:N #1
+ { \if_meaning:w - #1 \else: \exp_after:wN #1 \fi: }
+\cs_set:Npn \int_max:nn #1#2
{
- \@@_value:w \@@_eval:w
- \if_int_compare:w
- \@@_eval:w #1 > \@@_eval:w #2 \@@_eval_end:
- #1
- \else:
- #2
- \fi:
- \@@_eval_end:
+ \@@_value:w \exp_after:wN \@@_maxmin:wwN
+ \int_use:N \@@_eval:w #1 \exp_after:wN ;
+ \int_use:N \@@_eval:w #2 ;
+ >
+ \exp_stop_f:
}
-\cs_new:Npn \int_min:nn #1#2
+\cs_set:Npn \int_min:nn #1#2
{
- \@@_value:w \@@_eval:w
- \if_int_compare:w
- \@@_eval:w #1 < \@@_eval:w #2 \@@_eval_end:
- #1
- \else:
- #2
- \fi:
- \@@_eval_end:
+ \@@_value:w \exp_after:wN \@@_maxmin:wwN
+ \int_use:N \@@_eval:w #1 \exp_after:wN ;
+ \int_use:N \@@_eval:w #2 ;
+ <
+ \exp_stop_f:
+ }
+\cs_new:Npn \@@_maxmin:wwN #1 ; #2 ; #3
+ {
+ \if_int_compare:w #1 #3 #2 ~
+ #1
+ \else:
+ #2
+ \fi:
}
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
+% \end{macro}
+% \end{macro}
%
% \begin{macro}[EXP]{\int_div_truncate:nn}
% \UnitTested
@@ -991,6 +999,7 @@
% \begin{macro}[EXP]{\int_mod:nn}
% \UnitTested
% \begin{macro}[aux, EXP]{\@@_div_truncate:NwNw}
+% \begin{macro}[aux, EXP]{\@@_mod:ww}
% As \cs{@@_eval:w} rounds the result of a division we also provide a
% version that truncates the result. We use an auxiliary to make sure
% numerator and denominator are only evaluated once: this comes in
@@ -1028,21 +1037,26 @@
% \end{macrocode}
% For the sake of completeness:
% \begin{macrocode}
-\cs_new:Npn \int_div_round:nn #1#2 { \int_eval:n { ( #1 ) / ( #2 ) } }
+\cs_new:Npn \int_div_round:nn #1#2
+ { \@@_value:w \@@_eval:w ( #1 ) / ( #2 ) \@@_eval_end: }
% \end{macrocode}
% Finally there's the modulus operation.
% \begin{macrocode}
\cs_new:Npn \int_mod:nn #1#2
{
- \@@_value:w \@@_eval:w
- #1 - \int_div_truncate:nn {#1} {#2} * ( #2 )
+ \@@_value:w \@@_eval:w \exp_after:wN \@@_mod:ww
+ \@@_value:w \@@_eval:w #1 \exp_after:wN ;
+ \@@_value:w \@@_eval:w #2 ;
\@@_eval_end:
}
+\cs_new:Npn \@@_mod:ww #1; #2;
+ { #1 - ( \@@_div_truncate:NwNw #1 ; #2 ; ) * #2 }
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \subsection{Creating and initialising integers}
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
index dea8b1923a9..c24027b488a 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 3991 2012-07-16 19:00:35Z joseph $
+\GetIdInfo$Id: l3keys.dtx 4248 2012-09-29 19:55:27Z joseph $
{L3 Experimental key-value interfaces}
%</driver|package>
%<*driver>
@@ -786,7 +786,7 @@
\tl_replace_all:Nnn \l_@@_sanitise_tl { , } { 9 }
\tl_clear:N \l_@@_parse_tl
\exp_after:wN \@@_parse_elt:w \exp_after:wN
- \q_no_value \l_@@_sanitise_tl 9 \q_nil 9
+ \q_nil \l_@@_sanitise_tl 9 \q_recursion_tail 9 \q_recursion_stop
\exp_after:wN \group_end:
\l_@@_parse_tl
}
@@ -795,22 +795,20 @@
% \end{macro}
%
% \begin{macro}{\@@_parse_elt:w}
-% Each item to be parsed will have \cs{q_no_value} added to the front.
+% Each item to be parsed will have \cs{q_nil} added to the front.
% Hence the blank test here can always be used to find a totally
% empty argument. If this is the case, the system loops round. If there
-% is something to parse, there is a check for the \cs{q_nil} marker
-% and if not a hand-off.
+% is something to parse, there is a check for the end of the input before
+% handing off.
% \begin{macrocode}
\cs_new_protected:Npn \@@_parse_elt:w #1 ,
{
\tl_if_blank:oTF { \use_none:n #1 }
- { \@@_parse_elt:w \q_no_value }
+ { \@@_parse_elt:w \q_nil }
{
- \quark_if_nil:oF { \use_ii:nn #1 }
- {
- \@@_split_key_value:w #1 = = \q_stop
- \@@_parse_elt:w \q_no_value
- }
+ \quark_if_recursion_tail_stop:o { \use_ii:nn #1 }
+ \@@_split_key_value:w #1 = = \q_stop
+ \@@_parse_elt:w \q_nil
}
}
% \end{macrocode}
@@ -829,7 +827,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_split_key_value:w #1 = #2 \q_stop
{
- \@@_split_key:w #1 \q_stop
+ \@@_split_key:n {#1}
\str_if_eq:nnTF {#2} { = }
{
\tl_put_right:Nx \l_@@_parse_tl
@@ -851,18 +849,28 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\@@_split_key:w}
-% The aim here is to remove spaces and also exactly one set of braces.
-% There is also a quark to remove, hence the \cs{use_none:n} appearing before
-% application of \cs{tl_trim_spaces:n}.
+% \begin{macro}{\@@_split_key:n}
+% \begin{macro}[aux]{\@@_split_key:w}
+% There are two possible cases here. The first case is that |#1| is
+% surrounded by braces, in which case the |\use_none:nnn #1 \q_nil \q_nil|
+% will yield \cs{q_nil}. There, we can remove the leading \cs{q_nil}, the
+% braces and any spaces around the outside with \cs{use_ii:nnn}. On the
+% other hand, if there are no braces then the second branch removes the
+% leading \cs{q_nil} and any surrounding spaces. (This code does not have
+% to cover the case with no key, as that's already taken out above.)
% \begin{macrocode}
-\cs_new_protected:Npn \@@_split_key:w #1 \q_stop
+\cs_new_protected:Npn \@@_split_key:n #1
{
- \tl_set:Nx \l_@@_key_tl
- { \exp_after:wN \tl_trim_spaces:n \exp_after:wN { \use_none:n #1 } }
+ \str_if_eq_x:nnTF
+ { \exp_not:N \q_nil } { \exp_not:o { \use_none:nnn #1 \q_nil \q_nil } }
+ { \tl_set:Nx \l_@@_key_tl { \exp_not:o { \use_ii:nnn #1 \q_nil } } }
+ { \@@_split_key:w #1 \q_stop }
}
+\cs_new_protected:Npn \@@_split_key:w \q_nil #1 \q_stop
+ { \tl_set:Nx \l_@@_key_tl { \tl_trim_spaces:n {#1} } }
% \end{macrocode}
% \end{macro}
+% \end{macro}
%
% \begin{macro}{\@@_split_value:w}
% Here the value has to be separated from the equals signs and the
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
index a1e30326917..3d72db5db51 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3msg.dtx 4147 2012-08-28 10:27:33Z bruno $
+\GetIdInfo$Id: l3msg.dtx 4212 2012-09-09 12:24:04Z bruno $
{L3 Messages}
%</driver|package>
%<*driver>
@@ -723,37 +723,37 @@
% completely.
% \end{function}
%
-% \begin{function}[updated = 2012-08-14]
-% {\__msg_show_variable:Nnn, \__msg_show_variable:Nnx}
+% \begin{function}[updated = 2012-09-09]{\__msg_show_variable:Nnn}
% \begin{syntax}
% \cs{__msg_show_variable:Nnn} \meta{variable} \Arg{type} \Arg{formatted content}
% \end{syntax}
-% Displays the \meta{formatted content} of the \meta{variable} of \meta{type}
-% in the terminal. The \meta{formatted content} will typically be generated
-% by \texttt{x}-type expansion using the \cs{__msg_show_variable:Nnx} variant:
-% the nature of the formatting is dependent on the calling module.
-% The \meta{formatted content} must be a string, either empty or
-% containing |>|; everything until the first |>| will be removed.
+% Displays the \meta{formatted content} of the \meta{variable} of
+% \meta{type} in the terminal. The \meta{formatted content} will be
+% processed as the first argument in a call to \cs{iow_wrap:nnnN},
+% hence |\\|, \verb*|\ | and other formatting sequences can be used.
+% Once expanded and processed, the \meta{formatted content} must
+% either be empty or contain |>|; everything until the first |>| will
+% be removed.
% \end{function}
%
-% \begin{function}{\__msg_show_variable:n, \__msg_show_variable:x}
+% \begin{function}[updated = 2012-09-09]{\__msg_show_variable:n}
% \begin{syntax}
-% \cs{__msg_show_variable:n} \Arg{formatted string}
+% \cs{__msg_show_variable:n} \Arg{formatted text}
% \end{syntax}
-% Shows the \meta{formatted string} on the terminal. After expansion,
-% unless it is empty, the \meta{formatted string} must contain |>|,
-% and the part of \meta{formatted string} before the first |>| is
+% Shows the \meta{formatted text} on the terminal. After expansion,
+% unless it is empty, the \meta{formatted text} must contain |>|,
+% and the part of \meta{formatted text} before the first |>| is
% removed. Failure to do so causes low-level \TeX{} errors.
% \end{function}
%
-% \begin{function}
+% \begin{function}[updated = 2012-09-09]
% {\__msg_show_item:n, \__msg_show_item:nn, \__msg_show_item_unbraced:nn}
% \begin{syntax}
% \cs{__msg_show_item:n} \meta{item}
% \cs{__msg_show_item:nn} \meta{item-key} \meta{item-value}
% \end{syntax}
% Auxiliary functions used within the argument of
-% \cs{__msg_show_variable:Nnx} to format variable items correctly for
+% \cs{__msg_show_variable:Nnn} to format variable items correctly for
% display. The \cs{__msg_show_item:n} version is used for simple lists,
% the \cs{__msg_show_item:nn} and \cs{__msg_show_item_unbraced:nn} versions
% for key--value like data structures.
@@ -2038,57 +2038,59 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}[int]{\@@_show_variable:Nnn, \@@_show_variable:Nnx}
-% \begin{macro}[int]{\@@_show_variable:n, \@@_show_variable:x}
-% \begin{macro}[aux,EXP]{\@@_show_variable:w}
-% The arguments of \cs{@@_show_variable:Nnx} are
+% \begin{macro}[int]{\@@_show_variable:Nnn}
+% \begin{macro}[int]{\@@_show_variable:n}
+% \begin{macro}[aux]{\@@_show_variable_aux:n}
+% \begin{macro}[aux, EXP]{\@@_show_variable_aux:w}
+% The arguments of \cs{@@_show_variable:Nnn} are
% \begin{itemize}
% \item The \meta{variable} to be shown.
-% \item The \texttt{TF} emptiness conditional for that type of variables.
% \item The type of the variable.
% \item A mapping of the form \cs{seq_map_function:NN} \meta{variable}
% \cs{@@_show_item:n}, which produces the formatted string.
% \end{itemize}
-% We remove a new line and \verb*|> | from the first item using
-% a \texttt{w}-type auxiliary, and the fact that \texttt{f}-expansion
-% removes a space. To avoid a low-level \TeX{} error if there is
-% an empty argument, a simple test is used to keep the output
-% \enquote{clean}. The odd \cs{exp_after:wN} which expands the closing
-% brace improves the output slightly.
+% As for \cs{__kernel_register_show:N}, check that the variable is
+% defined. If it is, output the introductory message, then show the
+% contents |#3| using \cs{@@_show_variable:n}. This wraps the
+% contents (with leading \verb*|> |) to a fixed number of characters
+% per line. The expansion of |#3| may either be empty or start with
+% \verb*|> |. A leading |>|, if present, is removed using a
+% \texttt{w}-type auxiliary, as well as a space following it (via
+% \texttt{f}-expansion). Note that we cannot remove the space as a
+% delimiter for the \texttt{w}-type auxiliary, because a line-break
+% may be taken there, and the space would then disappear. Finally,
+% the resulting token list \cs{l_@@_internal_tl} is displayed to the
+% terminal, with an odd \cs{exp_after:wN} which expands the closing
+% brace to improve the output slightly.
% \begin{macrocode}
\cs_new_protected:Npn \@@_show_variable:Nnn #1#2#3
{
\cs_if_exist:NTF #1
{
\@@_term:nnn { LaTeX / kernel } { show- #2 } {#1}
- \@@_show_variable:x { \tl_to_str:n {#3} }
+ \@@_show_variable:n {#3}
}
{
\@@_kernel_error:nnx { kernel } { variable-not-defined }
{ \token_to_str:N #1 }
}
}
-\cs_generate_variant:Nn \@@_show_variable:Nnn { Nnx }
\cs_new_protected:Npn \@@_show_variable:n #1
+ { \iow_wrap:nnnN {#1} { } { } \@@_show_variable_aux:n }
+\cs_new_protected:Npn \@@_show_variable_aux:n #1
{
- \tl_set:Nn \l_@@_internal_tl {#1}
- \tl_if_empty:NTF \l_@@_internal_tl
- { \etex_showtokens:D \exp_after:wN { } }
- {
- \exp_args:Nf \etex_showtokens:D
- {
- \exp_after:wN \exp_after:wN
- \exp_after:wN \@@_show_variable:w
- \exp_after:wN \l_@@_internal_tl
- }
- }
+ \tl_if_empty:nTF {#1}
+ { \tl_clear:N \l_@@_internal_tl }
+ { \tl_set:Nf \l_@@_internal_tl { \@@_show_variable_aux:w #1 } }
+ \etex_showtokens:D \exp_after:wN \exp_after:wN \exp_after:wN
+ { \exp_after:wN \l_@@_internal_tl }
}
-\cs_generate_variant:Nn \@@_show_variable:n { x }
-\cs_new:Npn \@@_show_variable:w #1 > { }
+\cs_new:Npn \@@_show_variable_aux:w #1 > { }
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \begin{macro}[int,EXP]{\@@_show_item:n}
% \begin{macro}[int,EXP]{\@@_show_item:nn}
@@ -2098,17 +2100,17 @@
% \begin{macrocode}
\cs_new:Npn \@@_show_item:n #1
{
- \iow_newline: > \c_space_tl \c_space_tl { \exp_not:n {#1} }
+ \\ > \ \ \{ \tl_to_str:n {#1} \}
}
\cs_new:Npn \@@_show_item:nn #1#2
{
- \iow_newline: > \c_space_tl \c_space_tl { \exp_not:n {#1} }
- \c_space_tl \c_space_tl => \c_space_tl \c_space_tl { \exp_not:n {#2} }
+ \\ > \ \ \{ \tl_to_str:n {#1} \}
+ \ \ => \ \ \{ \tl_to_str:n {#2} \}
}
\cs_new:Npn \@@_show_item_unbraced:nn #1#2
{
- \iow_newline: > \c_space_tl \c_space_tl \exp_not:n {#1}
- \c_space_tl \c_space_tl => \c_space_tl \c_space_tl \exp_not:n {#2}
+ \\ > \ \ \tl_to_str:n {#1}
+ \ \ => \ \ \tl_to_str:n {#2}
}
% \end{macrocode}
% \end{macro}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
index a77f3103063..228c317ead3 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
@@ -35,7 +35,7 @@
%
%<*package>
\RequirePackage{l3bootstrap}[2012/07/15]
-\GetIdInfo$Id: l3names.dtx 3990 2012-07-16 07:46:03Z joseph $
+\GetIdInfo$Id: l3names.dtx 4230 2012-09-24 21:44:28Z joseph $
{L3 Namespace for primitives}
%</package>
%<*driver>
@@ -603,7 +603,7 @@
% \begin{macrocode}
\tex_endgroup:D
% \end{macrocode}
-%
+%
% \LaTeXe{} will have moved a few primitives, so these are sorted out.
% \begin{macrocode}
%<*package>
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
index 0c81f7f9951..c7fcb2a2790 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 4114 2012-08-16 01:57:02Z bruno $
+\GetIdInfo$Id: l3prg.dtx 4212 2012-09-09 12:24:04Z bruno $
{L3 Control structures}
%</driver|package>
%<*driver>
@@ -835,8 +835,8 @@
%
% \begin{macro}{\bool_show:N, \bool_show:c, \bool_show:n}
% Show the truth value of the boolean, as \texttt{true} or
-% \texttt{false}. We use \cs{__msg_show_variable:n} to get a better output;
-% this function requires its argument to start with |>|.
+% \texttt{false}. We use \cs{__msg_show_variable:n} to get a better
+% output; this function requires its argument to start with |>~|.
% \begin{macrocode}
\cs_new_protected:Npn \bool_show:N #1
{
@@ -850,8 +850,8 @@
\cs_new_protected:Npn \bool_show:n #1
{
\bool_if:nTF {#1}
- { \__msg_show_variable:n { > true } }
- { \__msg_show_variable:n { > false } }
+ { \__msg_show_variable:n { > ~ true } }
+ { \__msg_show_variable:n { > ~ false } }
}
\cs_generate_variant:Nn \bool_show:N { c }
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
index 81db3df7b8b..d8bec5ee50d 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3prop.dtx 4190 2012-09-03 00:23:31Z bruno $
+\GetIdInfo$Id: l3prop.dtx 4212 2012-09-09 12:24:04Z bruno $
{L3 Property lists}
%</driver|package>
%<*driver>
@@ -401,7 +401,7 @@
%
% \section{Viewing property lists}
%
-% \begin{function}{\prop_show:N, \prop_show:c}
+% \begin{function}[updated = 2012-09-09]{\prop_show:N, \prop_show:c}
% \begin{syntax}
% \cs{prop_show:N} \meta{property list}
% \end{syntax}
@@ -1026,13 +1026,13 @@
% \subsection{Viewing property lists}
%
% \begin{macro}[tested = m3show001]{\prop_show:N, \prop_show:c}
-% Apply the general \cs{__msg_show_variable:Nnx}. Contrarily
+% Apply the general \cs{__msg_show_variable:Nnn}. Contrarily
% to sequences and comma lists, we use \cs{__msg_show_item:nn}
% to format both the key and the value for each pair.
% \begin{macrocode}
\cs_new_protected:Npn \prop_show:N #1
{
- \__msg_show_variable:Nnx #1 { prop }
+ \__msg_show_variable:Nnn #1 { prop }
{ \prop_map_function:NN #1 \__msg_show_item:nn }
}
\cs_generate_variant:Nn \prop_show:N { c }
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
index 596d6b832cd..1a3d34eeaac 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 4092 2012-08-14 14:04:41Z bruno $
+\GetIdInfo$Id: l3seq.dtx 4212 2012-09-09 12:24:04Z bruno $
{L3 Sequences and stacks}
%</driver|package>
%<*driver>
@@ -651,7 +651,7 @@
%
% \section{Viewing sequences}
%
-% \begin{function}{\seq_show:N, \seq_show:c}
+% \begin{function}[updated = 2012-09-09]{\seq_show:N, \seq_show:c}
% \begin{syntax}
% \cs{seq_show:N} \meta{sequence}
% \end{syntax}
@@ -1551,11 +1551,11 @@
%
% \begin{macro}{\seq_show:N, \seq_show:c}
% \UnitTested
-% Apply the general \cs{__msg_show_variable:Nnx}.
+% Apply the general \cs{__msg_show_variable:Nnn}.
% \begin{macrocode}
\cs_new_protected:Npn \seq_show:N #1
{
- \__msg_show_variable:Nnx #1 { seq }
+ \__msg_show_variable:Nnn #1 { seq }
{ \seq_map_function:NN #1 \__msg_show_item:n }
}
\cs_generate_variant:Nn \seq_show:N { c }
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
index 911fe7571f0..24fd5bf3fe8 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
@@ -36,7 +36,7 @@
%
%<*driver|package>
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3skip.dtx 4121 2012-08-17 01:36:30Z bruno $
+\GetIdInfo$Id: l3skip.dtx 4235 2012-09-26 09:48:18Z bruno $
{L3 Dimensions and skips}
%</driver|package>
%<*driver>
@@ -156,26 +156,6 @@
% \meta{dimension_2}.
% \end{function}
%
-% \begin{function}[updated = 2012-02-06]
-% {\dim_set_max:Nn, \dim_set_max:cn, \dim_gset_max:Nn, \dim_gset_max:cn}
-% \begin{syntax}
-% \cs{dim_set_max:Nn} \meta{dimension} \Arg{dimension expression}
-% \end{syntax}
-% Compares the current value of the \meta{dimension} with that of the
-% \meta{dimension expression}, and sets the \meta{dimension} to the
-% larger of these two value.
-% \end{function}
-%
-% \begin{function}[updated = 2012-02-06]
-% {\dim_set_min:Nn, \dim_set_min:cn, \dim_gset_min:Nn, \dim_gset_min:cn}
-% \begin{syntax}
-% \cs{dim_set_min:Nn} \meta{dimension} \Arg{dimension expression}
-% \end{syntax}
-% Compares the current value of the \meta{dimension} with that of the
-% \meta{dimension expression}, and sets the \meta{dimension} to the
-% smaller of these two value.
-% \end{function}
-%
% \begin{function}[updated = 2011-10-22]
% {\dim_sub:Nn, \dim_sub:cn, \dim_gsub:Nn, \dim_gsub:cn}
% \begin{syntax}
@@ -187,15 +167,26 @@
%
% \section{Utilities for dimension calculations}
%
-% \begin{function}[updated = 2011-10-22, EXP]{\dim_abs:n}
+% \begin{function}[updated = 2012-09-26, EXP]{\dim_abs:n}
% \begin{syntax}
% \cs{dim_abs:n} \Arg{dimexpr}
% \end{syntax}
% Converts the \meta{dimexpr} to its absolute value, leaving the result
-% in the input stream as an \meta{dimension denotation}.
+% in the input stream as a \meta{dimension denotation}.
+% \end{function}
+%
+% \begin{function}[added = 2012-09-09, updated = 2012-09-26, EXP]
+% {\dim_max:nn, \dim_min:nn}
+% \begin{syntax}
+% \cs{dim_max:nn} \Arg{dimexpr_1} \Arg{dimexpr_2}
+% \cs{dim_min:nn} \Arg{dimexpr_1} \Arg{dimexpr_2}
+% \end{syntax}
+% Evaluates the two \meta{dimension expressions} and leaves either the
+% maximum or minimum value in the input stream as appropriate, as a
+% \meta{dimension denotation}.
% \end{function}
%
-% \begin{function}[updated = 2011-10-22, EXP]{\dim_ratio:nn}
+% \begin{function}[updated = 2011-10-22, rEXP]{\dim_ratio:nn}
% \begin{syntax}
% \cs{dim_ratio:nn} \Arg{dimexpr_1} \Arg{dimexpr_2}
% \end{syntax}
@@ -1039,35 +1030,6 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\dim_set_max:Nn, \dim_set_max:cn}
-% \begin{macro}{\dim_set_min:Nn, \dim_set_min:cn}
-% \begin{macro}{\dim_gset_max:Nn, \dim_gset_max:cn}
-% \begin{macro}{\dim_gset_min:Nn, \dim_gset_min:cn}
-% \begin{macro}[aux]{\@@_set_max:NNNn}
-% Setting maximum and minimum values is simply a case of so build-in
-% comparison. This only applies to dimensions as skips are not ordered.
-% \begin{macrocode}
-\cs_new_protected_nopar:Npn \dim_set_max:Nn
- { \@@_set_max:NNNn < \dim_set:Nn }
-\cs_new_protected_nopar:Npn \dim_gset_max:Nn
- { \@@_set_max:NNNn < \dim_gset:Nn }
-\cs_new_protected_nopar:Npn \dim_set_min:Nn
- { \@@_set_max:NNNn > \dim_set:Nn }
-\cs_new_protected_nopar:Npn \dim_gset_min:Nn
- { \@@_set_max:NNNn > \dim_gset:Nn }
-\cs_new_protected:Npn \@@_set_max:NNNn #1#2#3#4
- { \dim_compare:nNnT {#3} #1 {#4} { #2 #3 {#4} } }
-\cs_generate_variant:Nn \dim_set_max:Nn { c }
-\cs_generate_variant:Nn \dim_gset_max:Nn { c }
-\cs_generate_variant:Nn \dim_set_min:Nn { c }
-\cs_generate_variant:Nn \dim_gset_min:Nn { c }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
% \begin{macro}{\dim_add:Nn, \dim_add:cn}
% \begin{macro}{\dim_gadd:Nn, \dim_gadd:cn}
% \begin{macro}{\dim_sub:Nn, \dim_sub:cn}
@@ -1092,23 +1054,54 @@
%
% \subsection{Utilities for dimension calculations}
%
-% \begin{macro}{\dim_abs:n}
-% Similar to the \cs{int_abs:n} function, but here an additional
-% \meta{dimexpr} is needed as \TeX{} won't simply tidy up an additional
-% |-| for us.
+% \begin{macro}[EXP]{\dim_abs:n}
+% \begin{macro}[aux, EXP]{\@@_abs:N}
+% \UnitTested
+% \begin{macro}[EXP]{\dim_max:nn}
+% \begin{macro}[EXP]{\dim_min:nn}
+% \begin{macro}[aux, EXP]{\@@_maxmin:wwN}
+% \UnitTested
+% \UnitTested
+% Functions for $\min$, $\max$, and absolute value with only one evaluation.
+% The absolute value is evaluated by removing a leading~|-| if present.
% \begin{macrocode}
\cs_new:Npn \dim_abs:n #1
{
- \dim_use:N
- \@@_eval:w
- \if_dim:w \@@_eval:w #1 < \c_zero_dim
- -
- \fi:
- \@@_eval:w #1 \@@_eval_end:
+ \exp_after:wN \@@_abs:N
+ \dim_use:N \@@_eval:w #1 \@@_eval_end:
+ }
+\cs_new:Npn \@@_abs:N #1
+ { \if_meaning:w - #1 \else: \exp_after:wN #1 \fi: }
+\cs_set:Npn \dim_max:nn #1#2
+ {
+ \dim_use:N \@@_eval:w \exp_after:wN \@@_maxmin:wwN
+ \dim_use:N \@@_eval:w #1 \exp_after:wN ;
+ \dim_use:N \@@_eval:w #2 ;
+ >
\@@_eval_end:
}
+\cs_set:Npn \dim_min:nn #1#2
+ {
+ \dim_use:N \@@_eval:w \exp_after:wN \@@_maxmin:wwN
+ \dim_use:N \@@_eval:w #1 \exp_after:wN ;
+ \dim_use:N \@@_eval:w #2 ;
+ <
+ \@@_eval_end:
+ }
+\cs_new:Npn \@@_maxmin:wwN #1 ; #2 ; #3
+ {
+ \if_dim:w #1 #3 #2 ~
+ #1
+ \else:
+ #2
+ \fi:
+ }
% \end{macrocode}
% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
%
% \begin{macro}{\dim_ratio:nn}
% \begin{macro}[aux]{\@@_ratio:n}
@@ -1884,6 +1877,34 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\dim_set_max:Nn, \dim_set_max:cn}
+% \begin{macro}{\dim_set_min:Nn, \dim_set_min:cn}
+% \begin{macro}{\dim_gset_max:Nn, \dim_gset_max:cn}
+% \begin{macro}{\dim_gset_min:Nn, \dim_gset_min:cn}
+% \begin{macro}[aux]{\@@_set_max:NNNn}
+% Deprecated on 2012-09-09 for removal after 2012-12-31.
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \dim_set_max:Nn
+ { \@@_set_max:NNNn < \dim_set:Nn }
+\cs_new_protected_nopar:Npn \dim_gset_max:Nn
+ { \@@_set_max:NNNn < \dim_gset:Nn }
+\cs_new_protected_nopar:Npn \dim_set_min:Nn
+ { \@@_set_max:NNNn > \dim_set:Nn }
+\cs_new_protected_nopar:Npn \dim_gset_min:Nn
+ { \@@_set_max:NNNn > \dim_gset:Nn }
+\cs_new_protected:Npn \@@_set_max:NNNn #1#2#3#4
+ { \dim_compare:nNnT {#3} #1 {#4} { #2 #3 {#4} } }
+\cs_generate_variant:Nn \dim_set_max:Nn { c }
+\cs_generate_variant:Nn \dim_gset_max:Nn { c }
+\cs_generate_variant:Nn \dim_set_min:Nn { c }
+\cs_generate_variant:Nn \dim_gset_min:Nn { c }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
% \begin{macrocode}
%</initex|package>
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
index b4ae4118b33..b48cbcd1854 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 4201 2012-09-05 08:00:54Z joseph $
+\GetIdInfo$Id: l3tl.dtx 4244 2012-09-28 22:46:36Z bruno $
{L3 Token lists}
%</driver|package>
%<*driver>
@@ -352,35 +352,31 @@
%
% \section{Reassigning token list character codes}
%
-% \begin{function}{\tl_to_lowercase:n}
+% \begin{function}[updated = 2012-09-08]{\tl_to_lowercase:n}
% \begin{syntax}
% \cs{tl_to_lowercase:n} \Arg{tokens}
% \end{syntax}
-% Works through all of the \meta{tokens}, replacing each character
+% Works through all of the \meta{tokens}, replacing each character token
% with the lower case equivalent as defined by \cs{char_set_lccode:nn}.
% Characters with no defined lower case character code are left
% unchanged. This process does not alter the category code assigned
% to the \meta{tokens}.
% \begin{texnote}
-% This is the \TeX{} primitive \tn{lowercase} renamed. As a result,
-% its argument \emph{must} be given within braces, and this function
-% takes place on execution and not on expansion.
+% This is a wrapper around the \TeX{} primitive \tn{lowercase}.
% \end{texnote}
% \end{function}
%
-% \begin{function}{\tl_to_uppercase:n}
+% \begin{function}[updated = 2012-09-08]{\tl_to_uppercase:n}
% \begin{syntax}
% \cs{tl_to_uppercase:n} \Arg{tokens}
% \end{syntax}
-% Works through all of the \meta{tokens}, replacing each character
+% Works through all of the \meta{tokens}, replacing each character token
% with the upper case equivalent as defined by \cs{char_set_uccode:nn}.
-% Characters with no defined lower case character code are left
+% Characters with no defined upper case character code are left
% unchanged. This process does not alter the category code assigned
% to the \meta{tokens}.
% \begin{texnote}
-% This is the \TeX{} primitive \tn{uppercase} renamed. As a result,
-% its argument \emph{must} be given within braces, and this function
-% takes place on execution and not on expansion.
+% This is a wrapper around the \TeX{} primitive \tn{uppercase}.
% \end{texnote}
% \end{function}
%
@@ -784,7 +780,7 @@
% Functions which deal with either only the very first item (balanced
% text or single normal token) in a token list, or the remaining tokens.
%
-% \begin{function}[updated = 2012-02-08, EXP]
+% \begin{function}[updated = 2012-09-09, EXP]
% {\tl_head:N, \tl_head:n, \tl_head:V, \tl_head:v, \tl_head:f}
% \begin{syntax}
% \cs{tl_head:n} \Arg{token list}
@@ -809,8 +805,7 @@
% \end{verbatim}
% yields \verb*| ab|.
% A blank \meta{token list} (see \cs{tl_if_blank:nTF}) will result in
-% \cs{tl_head:n} leaving nothing in the input stream. The \meta{token list}
-% should not contain the marker \cs{q_stop}.
+% \cs{tl_head:n} leaving nothing in the input stream.
% \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
@@ -960,24 +955,25 @@
%
% \section{Viewing token lists}
%
-% \begin{function}{\tl_show:N, \tl_show:c}
+% \begin{function}[updated = 2012-09-09]{\tl_show:N, \tl_show:c}
% \begin{syntax}
% \cs{tl_show:N} \meta{tl~var}
% \end{syntax}
% Displays the content of the \meta{tl~var} on the terminal.
% \begin{texnote}
-% \cs{tl_show:N} is the \TeX{} primitive \tn{show}.
+% This is similar to the \TeX{} primitive \tn{show}, wrapped to a
+% fixed number of characters per line.
% \end{texnote}
% \end{function}
%
-% \begin{function}{\tl_show:n}
+% \begin{function}[updated = 2012-09-09]{\tl_show:n}
% \begin{syntax}
% \cs{tl_show:n} \meta{token list}
% \end{syntax}
% Displays the \meta{token list} on the terminal.
% \begin{texnote}
-% \cs{tl_show:n} is the \eTeX{} primitive \tn{showtokens}.
-% Hence its argument \emph{must} be given within braces.
+% This is similar to the \eTeX{} primitive \tn{showtokens}, wrapped
+% to a fixed number of characters per line.
% \end{texnote}
% \end{function}
%
@@ -1428,10 +1424,13 @@
%
% \begin{macro}{\tl_to_lowercase:n}
% \begin{macro}{\tl_to_uppercase:n}
-% Just some names for a few primitives.
+% Just some names for a few primitives: we take care or wrapping the
+% argument in braces.
% \begin{macrocode}
-\cs_new_eq:NN \tl_to_lowercase:n \tex_lowercase:D
-\cs_new_eq:NN \tl_to_uppercase:n \tex_uppercase:D
+\cs_new_protected:Npn \tl_to_lowercase:n #1
+ { \tex_lowercase:D {#1} }
+\cs_new_protected:Npn \tl_to_uppercase:n #1
+ { \tex_uppercase:D {#1} }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -1696,15 +1695,15 @@
% \end{macro}
%
% \begin{macro}[TF]{\tl_if_eq:nn}
-% \begin{variable}{\l_tl_internal_a_tl, \l_tl_internal_b_tl}
+% \begin{variable}{\l_@@_internal_a_tl, \l_@@_internal_b_tl}
% A simple store and compare routine.
% \begin{macrocode}
\prg_new_protected_conditional:Npnn \tl_if_eq:nn #1#2 { T , F , TF }
{
\group_begin:
- \tl_set:Nn \l_tl_internal_a_tl {#1}
- \tl_set:Nn \l_tl_internal_b_tl {#2}
- \if_meaning:w \l_tl_internal_a_tl \l_tl_internal_b_tl
+ \tl_set:Nn \l_@@_internal_a_tl {#1}
+ \tl_set:Nn \l_@@_internal_b_tl {#2}
+ \if_meaning:w \l_@@_internal_a_tl \l_@@_internal_b_tl
\group_end:
\prg_return_true:
\else:
@@ -1712,8 +1711,8 @@
\prg_return_false:
\fi:
}
-\tl_new:N \l_tl_internal_a_tl
-\tl_new:N \l_tl_internal_b_tl
+\tl_new:N \l_@@_internal_a_tl
+\tl_new:N \l_@@_internal_b_tl
% \end{macrocode}
% \end{variable}
% \end{macro}
@@ -2224,18 +2223,42 @@
%
% \subsection{The first token from a token list}
%
-% \begin{macro}{\tl_head:w}
% \begin{macro}{\tl_head:N, \tl_head:n, \tl_head:V, \tl_head:v, \tl_head:f}
+% \begin{macro}[aux]{\@@_head_i:nw, \@@_head_ii:nw}
+% \begin{macro}{\tl_head:w}
% \begin{macro}{\tl_tail:N, \tl_tail:n, \tl_tail:V, \tl_tail:v, \tl_tail:f}
% Finding the head of a token list expandably will always strip braces, which
% is fine as this is consistent with for example mapping to a list. The
-% empty brace groups in \cs{tl_head:n} ensure that a blank argument gives an
-% empty result. The result is returned within the \tn{unexpanded} primitive.
+% empty brace groups in \cs{tl_head:n} ensure that a blank argument gives an
+% empty result. The result is returned within the \tn{unexpanded} primitive.
+% The approach here is to use \cs{if_false:} to allow us to use |}| as
+% the closing delimiter: this is the only safe choice, as any other token
+% would not be able to parse it's own code. Using a marker, we can see if
+% what we are grabbing is exactly the marker, or there is anything else to
+% deal with. Is there is, there is a loop. If not, tidy up and leave the
+% item in the output stream. More detail in
+% \url{http://tex.stackexchange.com/a/70168}.
% \begin{macrocode}
-\cs_new:Npn \tl_head:w #1#2 \q_stop {#1}
\cs_new:Npn \tl_head:n #1
- { \etex_unexpanded:D \exp_after:wN { \tl_head:w #1 { } \q_stop } }
+ {
+ \etex_unexpanded:D
+ \if_false: { \fi: \@@_head_i:nw #1 { } \q_stop }
+ }
+\cs_new:Npn \@@_head_i:nw #1#2 \q_stop
+ { \exp_after:wN \@@_head_ii:nw \exp_after:wN { \if_false: } \fi: {#1} }
+\cs_new:Npn \@@_head_ii:nw #1
+ {
+ \exp_after:wN \if_meaning:w \exp_after:wN \q_nil
+ \tl_to_str:n \exp_after:wN { \use_none:n #1 } \q_nil
+ \exp_after:wN \use_i:nn
+ \else:
+ \exp_after:wN \use_ii:nn
+ \fi:
+ {#1}
+ { \if_false: { \fi: \@@_head_i:nw #1 } }
+ }
\cs_generate_variant:Nn \tl_head:n { V , v , f }
+\cs_new:Npn \tl_head:w #1#2 \q_stop {#1}
\cs_new_nopar:Npn \tl_head:N { \exp_args:No \tl_head:n }
% \end{macrocode}
% To corrected leave the tail of a token list, it's important \emph{not} to
@@ -2266,6 +2289,7 @@
% \end{macro}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \begin{macro}{\str_head:n, \str_tail:n}
% \begin{macro}[aux]{\__str_head:w}
@@ -2514,18 +2538,31 @@
% \subsection{Viewing token lists}
%
% \begin{macro}{\tl_show:N, \tl_show:c}
-% Showing token list variables is done directly: at the moment do not
-% worry if they are defined.
+% Showing token list variables is done after checking that the
+% variable is defined (see \cs{__kernel_register_show:N}.
% \begin{macrocode}
-\cs_new_protected:Npn \tl_show:N #1 { \cs_show:N #1 }
+\cs_new_protected:Npn \tl_show:N #1
+ {
+ \cs_if_exist:NTF #1
+ { \cs_show:N #1 }
+ {
+ \__msg_kernel_error:nnx { kernel } { variable-not-defined }
+ { \token_to_str:N #1 }
+ }
+ }
\cs_generate_variant:Nn \tl_show:N { c }
% \end{macrocode}
%\end{macro}
%
% \begin{macro}{\tl_show:n}
-% For literal token lists, life is easy.
-% \begin{macrocode}
-\cs_new_eq:NN \tl_show:n \etex_showtokens:D
+% The \cs{__msg_show_variable:n} internal function performs
+% line-wrapping, removes a leading \verb*|> |, then shows the result
+% using the \cs{etex_showtokens:D} primitive. Since \cs{tl_to_str:n}
+% is expanded within the line-wrapping code, the escape character is
+% always a backslash.
+% \begin{macrocode}
+\cs_new_protected:Npn \tl_show:n #1
+ { \__msg_show_variable:n { > ~ \tl_to_str:n {#1} } }
% \end{macrocode}
%\end{macro}
%
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
index d18bfd8148c..0991128f880 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{2012/09/05}
-\def\ExplFileVersion{4205}
+\def\ExplFileDate{2012/09/29}
+\def\ExplFileVersion{4249}
\RequirePackage{etex}
\reserveinserts{32}
\ProvidesExplPackage
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3basics.sty b/Master/texmf-dist/tex/latex/l3kernel/l3basics.sty
index d9dfc41083c..e9dc558a962 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 4144 2012-08-27 19:37:16Z bruno $
+\GetIdInfo$Id: l3basics.dtx 4212 2012-09-09 12:24:04Z bruno $
{L3 Basic definitions}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -75,7 +75,6 @@
\tex_let:D \token_to_meaning:N \tex_meaning:D
\tex_let:D \token_to_str:N \tex_string:D
\tex_let:D \cs_meaning:N \tex_meaning:D
-\tex_let:D \cs_show:N \tex_show:D
\tex_let:D \scan_stop: \tex_relax:D
\tex_let:D \group_begin: \tex_begingroup:D
\tex_let:D \group_end: \tex_endgroup:D
@@ -98,8 +97,6 @@
{ \tl_to_str:n {undefined} }
}
\tex_let:D \token_to_meaning:c = \cs_meaning:c
-\etex_protected:D \tex_def:D \cs_show:c
- { \group_begin: \exp_args:NNc \group_end: \cs_show:N }
\tex_let:D \c_minus_one \m@ne
\tex_chardef:D \c_sixteen = 16 ~
\tex_chardef:D \c_zero = 0 ~
@@ -739,6 +736,25 @@
}
\cs_new_protected_nopar:Npn \__kernel_register_show:c
{ \exp_args:Nc \__kernel_register_show:N }
+\group_begin:
+ \tex_lccode:D `? = `: \scan_stop:
+ \tex_catcode:D `? = 12 \scan_stop:
+\tex_lowercase:D
+ {
+ \group_end:
+ \cs_new_protected:Npn \cs_show:N #1
+ {
+ \__msg_show_variable:n
+ {
+ > ~ \token_to_str:N #1 =
+ \exp_after:wN \__cs_show:www \cs_meaning:N #1
+ \use_none:nn ? \prg_do_nothing:
+ }
+ }
+ \cs_new:Npn \__cs_show:www #1 ? { #1 ? \\ }
+ }
+\cs_new_protected_nopar:Npn \cs_show:c
+ { \group_begin: \exp_args:NNc \group_end: \cs_show:N }
\cs_new_eq:NN \luatex_if_engine:T \use_none:n
\cs_new_eq:NN \luatex_if_engine:F \use:n
\cs_new_eq:NN \luatex_if_engine:TF \use_ii:nn
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3candidates.sty b/Master/texmf-dist/tex/latex/l3kernel/l3candidates.sty
index 6ee3e3a018b..433ff506d60 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3candidates.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3candidates.sty
@@ -578,10 +578,14 @@
}
\cs_new_protected:Npn \__coffin_find_corner_maxima_aux:nn #1#2
{
- \dim_set_min:Nn \l__coffin_left_corner_dim {#1}
- \dim_set_max:Nn \l__coffin_right_corner_dim {#1}
- \dim_set_min:Nn \l__coffin_bottom_corner_dim {#2}
- \dim_set_max:Nn \l__coffin_top_corner_dim {#2}
+ \dim_set:Nn \l__coffin_left_corner_dim
+ { \dim_min:nn { \l__coffin_left_corner_dim } {#1} }
+ \dim_set:Nn \l__coffin_right_corner_dim
+ { \dim_max:nn { \l__coffin_right_corner_dim } {#1} }
+ \dim_set:Nn \l__coffin_bottom_corner_dim
+ { \dim_min:nn { \l__coffin_bottom_corner_dim } {#2} }
+ \dim_set:Nn \l__coffin_top_corner_dim
+ { \dim_max:nn { \l__coffin_top_corner_dim } {#2} }
}
\cs_new_protected_nopar:Npn \__coffin_find_bounding_shift:
{
@@ -590,7 +594,10 @@
{ \__coffin_find_bounding_shift_aux:nn ##2 }
}
\cs_new_protected:Npn \__coffin_find_bounding_shift_aux:nn #1#2
- { \dim_set_min:Nn \l__coffin_bounding_shift_dim {#1} }
+ {
+ \dim_set:Nn \l__coffin_bounding_shift_dim
+ { \dim_min:nn { \l__coffin_bounding_shift_dim } {#1} }
+ }
\cs_new_protected:Npn \__coffin_shift_corner:Nnnn #1#2#3#4
{
\prop_put:cnx { l__coffin_corners_ \__int_value:w #1 _ prop } {#2}
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3clist.sty b/Master/texmf-dist/tex/latex/l3kernel/l3clist.sty
index 18cee384adc..284830694db 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 4102 2012-08-15 16:08:27Z bruno $
+\GetIdInfo$Id: l3clist.dtx 4212 2012-09-09 12:24:04Z bruno $
{L3 Comma separated lists}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -419,7 +419,7 @@
}
\cs_new_protected:Npn \clist_show:N #1
{
- \__msg_show_variable:Nnx #1 { clist }
+ \__msg_show_variable:Nnn #1 { clist }
{ \clist_map_function:NN #1 \__msg_show_item:n }
}
\cs_new_protected:Npn \clist_show:n #1
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3coffins.sty b/Master/texmf-dist/tex/latex/l3kernel/l3coffins.sty
index 1b8d88d4761..a3743a477ad 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3coffins.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3coffins.sty
@@ -47,7 +47,7 @@
%% -----------------------------------------------------------------------
%%
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3coffins.dtx 4092 2012-08-14 14:04:41Z bruno $
+\GetIdInfo$Id: l3coffins.dtx 4212 2012-09-09 12:24:04Z bruno $
{L3 Coffin code layer}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -807,7 +807,7 @@
{
\__coffin_if_exist:NT #1
{
- \__msg_show_variable:Nnx #1 { coffins }
+ \__msg_show_variable:Nnn #1 { coffins }
{
\prop_map_function:cN
{ l__coffin_poles_ \__int_value:w #1 _prop }
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls b/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls
index 81daef1452a..b75f0c5779c 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls
@@ -4,7 +4,8 @@
%%
%% The original source files were:
%%
-%% l3doc.dtx (with options: `class')
+%% l3doc.dtx (with options: `class,cfg')
+%%
%%
%% EXPERIMENTAL CODE
%%
@@ -13,6 +14,7 @@
%%
%% Do not distribute a modified version of this file.
%%
+%%
%% File: l3doc.dtx Copyright (C) 1990-2012 The LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
@@ -50,7 +52,7 @@
\let \fileversionOld \ExplFileVersion
\let \filedescriptionOld \ExplFileDescription
\RequirePackage{expl3,xparse,calc}
-\GetIdInfo$Id: l3doc.dtx 4130 2012-08-20 21:30:22Z joseph $
+\GetIdInfo$Id: l3doc.dtx 4230 2012-09-24 21:44:28Z joseph $
{L3 Experimental documentation class}
\ProvidesExplClass
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -1173,6 +1175,7 @@
\clist_map_inline:nn {#1}
{
\clist_put_right:Nn \g_docinput_clist {##1}
+ \tl_gclear:N \g__codedoc_module_name_tl
\MakePercentIgnore
\input{##1}
\MakePercentComment
@@ -1183,6 +1186,7 @@
\clist_map_inline:Nn \g_docinput_clist
{
\MakePercentIgnore
+ \tl_gclear:N \g__codedoc_module_name_tl
\input{##1}
\MakePercentComment
}
@@ -1446,6 +1450,51 @@
\DisableCrossrefs
\OnlyDescription
}
+\tl_new:N \Team
+\tl_set:Nn \Team
+ {
+ The~\LaTeX3~Project\thanks
+ {
+ Frank~Mittelbach,~Denys~Duchier,~Chris~Rowley,~
+ Rainer~Sch\"opf,~Johannes~Braams,~Michael~Downes,~
+ David~Carlisle,~Alan~Jeffrey,~Morten~H\o{}gholm,~Thomas~Lotze,~
+ Javier~Bezos,~Will~Robertson,~Joseph~Wright,~Bruno~Le~Floch
+ }
+ }
+\NewDocumentCommand{\ExplMakeTitle}{mm}
+ {
+ \title
+ {
+ The~\pkg{#1}~package \\ #2
+ \thanks
+ {
+ This~file~describes~v\ExplFileVersion,~
+ last~revised~\ExplFileDate.
+ }
+ }
+ \author
+ {
+ The~\LaTeX3~Project\thanks{E-mail:~
+ \href{mailto:latex-l@listserv.uni-heidelberg.de}
+ {latex-l@listserv.uni-heidelberg.de}}
+ }
+ \date{Released~\ExplFileDate}
+ \maketitle
+ }
+\DeclareDocumentCommand\ie{}{\emph{i.e.}}
+\DeclareDocumentCommand\eg{}{\emph{e.g.}}
+\DeclareDocumentCommand\Ie{}{\emph{I.e.}}
+\DeclareDocumentCommand\Eg{}{\emph{E.g.}}
+\AtBeginDocument
+ {
+ \clist_map_inline:nn
+ {
+ asin, acos, atan, acot,
+ asinh, acosh, atanh, acoth, round, floor, ceil
+ }
+ { \exp_args:Nc \DeclareMathOperator{#1}{#1} }
+ }
+\NewDocumentCommand { \nan } { } { \text { \texttt { nan } } }
%%
%%
%% End of file `l3doc.cls'.
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3file.sty b/Master/texmf-dist/tex/latex/l3kernel/l3file.sty
index 44e02bdff7c..b3c04f68873 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 4101 2012-08-15 16:05:33Z bruno $
+\GetIdInfo$Id: l3file.dtx 4212 2012-09-09 12:24:04Z bruno $
{L3 File and I/O operations}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -307,7 +307,7 @@
\__msg_term:nnn { LaTeX / kernel }
{ \prop_if_empty:NTF #1 { show-no-stream } { show-open-streams } }
{#2}
- \__msg_show_variable:x
+ \__msg_show_variable:n
{ \prop_map_function:NN #1 \__msg_show_item_unbraced:nn }
}
\cs_new_eq:NN \if_eof:w \tex_ifeof:D
@@ -420,13 +420,14 @@
\cs_new_protected_nopar:Npn \iow_list_streams:
{ \__iow_list_streams:Nn \g__iow_streams_prop { output } }
\cs_new_eq:NN \__iow_list_streams:Nn \__ior_list_streams:Nn
-\cs_new_eq:NN \iow_shipout_x:Nn \tex_write:D
+\cs_new_protected:Npn \iow_shipout_x:Nn #1#2
+ { \tex_write:D #1 {#2} }
\cs_generate_variant:Nn \iow_shipout_x:Nn { Nx }
\cs_new_protected:Npn \iow_shipout:Nn #1#2
- { \iow_shipout_x:Nn #1 { \exp_not:n {#2} } }
+ { \tex_write:D #1 { \exp_not:n {#2} } }
\cs_generate_variant:Nn \iow_shipout:Nn { Nx }
\cs_new_protected:Npn \iow_now:Nn #1#2
- { \tex_immediate:D \iow_shipout_x:Nn #1 { \exp_not:n {#2} } }
+ { \tex_immediate:D \tex_write:D #1 { \exp_not:n {#2} } }
\cs_generate_variant:Nn \iow_now:Nn { Nx }
\cs_set_protected_nopar:Npn \iow_log:x { \iow_now:Nx \c_log_iow }
\cs_new_protected_nopar:Npn \iow_log:n { \iow_now:Nn \c_log_iow }
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3fp.sty b/Master/texmf-dist/tex/latex/l3kernel/l3fp.sty
index eac513e519c..6c9d3b3bc2e 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 4151 2012-08-28 11:51:52Z bruno $
+\GetIdInfo$Id: l3fp.dtx 4234 2012-09-26 09:43:31Z bruno $
{L3 Floating points}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -4419,6 +4419,10 @@
\cs_new_eq:NN \fp_eval:n \fp_to_decimal:n
\cs_new:Npn \fp_abs:n #1
{ \fp_to_decimal:n { abs \__fp_parse:n {#1} } }
+\cs_new:Npn \fp_max:nn #1#2
+ { \fp_to_decimal:n { max ( \__fp_parse:n {#1} , \__fp_parse:n {#2} ) } }
+\cs_new:Npn \fp_min:nn #1#2
+ { \fp_to_decimal:n { min ( \__fp_parse:n {#1} , \__fp_parse:n {#2} ) } }
\cs_new:Npn \__fp_array_to_clist:n #1
{
\tl_if_empty:nF {#1}
@@ -4516,14 +4520,14 @@
\cs_new_protected:Npn \fp_show:N #1
{
\fp_if_exist:NTF #1
- { \__msg_show_variable:x { > \fp_to_tl:N #1 } }
+ { \__msg_show_variable:n { > ~ \fp_to_tl:N #1 } }
{
\__msg_kernel_error:nnx { kernel } { variable-not-defined }
{ \token_to_str:N #1 }
}
}
\cs_new_protected:Npn \fp_show:n #1
- { \__msg_show_variable:x { > \fp_to_tl:n {#1} } }
+ { \__msg_show_variable:n { > ~ \fp_to_tl:n {#1} } }
\cs_generate_variant:Nn \fp_show:N { c }
\fp_const:Nn \c_e_fp { 2.718 2818 2845 9045 }
\fp_const:Nn \c_one_fp { 1 }
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3int.sty b/Master/texmf-dist/tex/latex/l3kernel/l3int.sty
index 25667fc8c75..cd2ab964888 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 4121 2012-08-17 01:36:30Z bruno $
+\GetIdInfo$Id: l3int.dtx 4237 2012-09-26 10:18:58Z bruno $
{L3 Integers}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -59,33 +59,35 @@
\cs_new:Npn \int_eval:n #1 { \__int_value:w \__int_eval:w #1 \__int_eval_end: }
\cs_new:Npn \int_abs:n #1
{
- \__int_value:w
- \if_int_compare:w \__int_eval:w #1 < \c_zero
- -
- \fi:
- \__int_eval:w #1 \__int_eval_end:
+ \__int_value:w \exp_after:wN \__int_abs:N
+ \int_use:N \__int_eval:w #1 \__int_eval_end:
+ \exp_stop_f:
}
-\cs_new:Npn \int_max:nn #1#2
+\cs_new:Npn \__int_abs:N #1
+ { \if_meaning:w - #1 \else: \exp_after:wN #1 \fi: }
+\cs_set:Npn \int_max:nn #1#2
{
- \__int_value:w \__int_eval:w
- \if_int_compare:w
- \__int_eval:w #1 > \__int_eval:w #2 \__int_eval_end:
- #1
- \else:
- #2
- \fi:
- \__int_eval_end:
+ \__int_value:w \exp_after:wN \__int_maxmin:wwN
+ \int_use:N \__int_eval:w #1 \exp_after:wN ;
+ \int_use:N \__int_eval:w #2 ;
+ >
+ \exp_stop_f:
}
-\cs_new:Npn \int_min:nn #1#2
+\cs_set:Npn \int_min:nn #1#2
{
- \__int_value:w \__int_eval:w
- \if_int_compare:w
- \__int_eval:w #1 < \__int_eval:w #2 \__int_eval_end:
- #1
- \else:
- #2
- \fi:
- \__int_eval_end:
+ \__int_value:w \exp_after:wN \__int_maxmin:wwN
+ \int_use:N \__int_eval:w #1 \exp_after:wN ;
+ \int_use:N \__int_eval:w #2 ;
+ <
+ \exp_stop_f:
+ }
+\cs_new:Npn \__int_maxmin:wwN #1 ; #2 ; #3
+ {
+ \if_int_compare:w #1 #3 #2 ~
+ #1
+ \else:
+ #2
+ \fi:
}
\cs_new:Npn \int_div_truncate:nn #1#2
{
@@ -108,13 +110,17 @@
\fi:
/ #3#4
}
-\cs_new:Npn \int_div_round:nn #1#2 { \int_eval:n { ( #1 ) / ( #2 ) } }
+\cs_new:Npn \int_div_round:nn #1#2
+ { \__int_value:w \__int_eval:w ( #1 ) / ( #2 ) \__int_eval_end: }
\cs_new:Npn \int_mod:nn #1#2
{
- \__int_value:w \__int_eval:w
- #1 - \int_div_truncate:nn {#1} {#2} * ( #2 )
+ \__int_value:w \__int_eval:w \exp_after:wN \__int_mod:ww
+ \__int_value:w \__int_eval:w #1 \exp_after:wN ;
+ \__int_value:w \__int_eval:w #2 ;
\__int_eval_end:
}
+\cs_new:Npn \__int_mod:ww #1; #2;
+ { #1 - ( \__int_div_truncate:NwNw #1 ; #2 ; ) * #2 }
\cs_new_protected:Npn \int_new:N #1
{
\__chk_if_free_cs:N #1
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3keys.sty b/Master/texmf-dist/tex/latex/l3kernel/l3keys.sty
index 673001477d5..82dc4a656f7 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 3991 2012-07-16 19:00:35Z joseph $
+\GetIdInfo$Id: l3keys.dtx 4248 2012-09-29 19:55:27Z joseph $
{L3 Experimental key-value interfaces}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -73,7 +73,7 @@
\tl_replace_all:Nnn \l__keyval_sanitise_tl { , } { 9 }
\tl_clear:N \l__keyval_parse_tl
\exp_after:wN \__keyval_parse_elt:w \exp_after:wN
- \q_no_value \l__keyval_sanitise_tl 9 \q_nil 9
+ \q_nil \l__keyval_sanitise_tl 9 \q_recursion_tail 9 \q_recursion_stop
\exp_after:wN \group_end:
\l__keyval_parse_tl
}
@@ -81,18 +81,16 @@
\cs_new_protected:Npn \__keyval_parse_elt:w #1 ,
{
\tl_if_blank:oTF { \use_none:n #1 }
- { \__keyval_parse_elt:w \q_no_value }
+ { \__keyval_parse_elt:w \q_nil }
{
- \quark_if_nil:oF { \use_ii:nn #1 }
- {
- \__keyval_split_key_value:w #1 = = \q_stop
- \__keyval_parse_elt:w \q_no_value
- }
+ \quark_if_recursion_tail_stop:o { \use_ii:nn #1 }
+ \__keyval_split_key_value:w #1 = = \q_stop
+ \__keyval_parse_elt:w \q_nil
}
}
\cs_new_protected:Npn \__keyval_split_key_value:w #1 = #2 \q_stop
{
- \__keyval_split_key:w #1 \q_stop
+ \__keyval_split_key:n {#1}
\str_if_eq:nnTF {#2} { = }
{
\tl_put_right:Nx \l__keyval_parse_tl
@@ -110,11 +108,15 @@
}
\cs_new:Npn \__keyval_split_key_value:wTF #1 = #2#3 \q_stop
{ \tl_if_head_eq_meaning:nNTF {#3} \q_no_value }
-\cs_new_protected:Npn \__keyval_split_key:w #1 \q_stop
+\cs_new_protected:Npn \__keyval_split_key:n #1
{
- \tl_set:Nx \l__keyval_key_tl
- { \exp_after:wN \tl_trim_spaces:n \exp_after:wN { \use_none:n #1 } }
+ \str_if_eq_x:nnTF
+ { \exp_not:N \q_nil } { \exp_not:o { \use_none:nnn #1 \q_nil \q_nil } }
+ { \tl_set:Nx \l__keyval_key_tl { \exp_not:o { \use_ii:nnn #1 \q_nil } } }
+ { \__keyval_split_key:w #1 \q_stop }
}
+\cs_new_protected:Npn \__keyval_split_key:w \q_nil #1 \q_stop
+ { \tl_set:Nx \l__keyval_key_tl { \tl_trim_spaces:n {#1} } }
\cs_new_protected:Npn \__keyval_split_value:w #1 = =
{
\tl_put_right:Nx \l__keyval_parse_tl
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3msg.sty b/Master/texmf-dist/tex/latex/l3kernel/l3msg.sty
index 0d717006172..584b54ac427 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3msg.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3msg.sty
@@ -46,7 +46,7 @@
%%
%% -----------------------------------------------------------------------
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3msg.dtx 4147 2012-08-28 10:27:33Z bruno $
+\GetIdInfo$Id: l3msg.dtx 4212 2012-09-09 12:24:04Z bruno $
{L3 Messages}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -744,43 +744,37 @@
\cs_if_exist:NTF #1
{
\__msg_term:nnn { LaTeX / kernel } { show- #2 } {#1}
- \__msg_show_variable:x { \tl_to_str:n {#3} }
+ \__msg_show_variable:n {#3}
}
{
\__msg_kernel_error:nnx { kernel } { variable-not-defined }
{ \token_to_str:N #1 }
}
}
-\cs_generate_variant:Nn \__msg_show_variable:Nnn { Nnx }
\cs_new_protected:Npn \__msg_show_variable:n #1
+ { \iow_wrap:nnnN {#1} { } { } \__msg_show_variable_aux:n }
+\cs_new_protected:Npn \__msg_show_variable_aux:n #1
{
- \tl_set:Nn \l__msg_internal_tl {#1}
- \tl_if_empty:NTF \l__msg_internal_tl
- { \etex_showtokens:D \exp_after:wN { } }
- {
- \exp_args:Nf \etex_showtokens:D
- {
- \exp_after:wN \exp_after:wN
- \exp_after:wN \__msg_show_variable:w
- \exp_after:wN \l__msg_internal_tl
- }
- }
+ \tl_if_empty:nTF {#1}
+ { \tl_clear:N \l__msg_internal_tl }
+ { \tl_set:Nf \l__msg_internal_tl { \__msg_show_variable_aux:w #1 } }
+ \etex_showtokens:D \exp_after:wN \exp_after:wN \exp_after:wN
+ { \exp_after:wN \l__msg_internal_tl }
}
-\cs_generate_variant:Nn \__msg_show_variable:n { x }
-\cs_new:Npn \__msg_show_variable:w #1 > { }
+\cs_new:Npn \__msg_show_variable_aux:w #1 > { }
\cs_new:Npn \__msg_show_item:n #1
{
- \iow_newline: > \c_space_tl \c_space_tl { \exp_not:n {#1} }
+ \\ > \ \ \{ \tl_to_str:n {#1} \}
}
\cs_new:Npn \__msg_show_item:nn #1#2
{
- \iow_newline: > \c_space_tl \c_space_tl { \exp_not:n {#1} }
- \c_space_tl \c_space_tl => \c_space_tl \c_space_tl { \exp_not:n {#2} }
+ \\ > \ \ \{ \tl_to_str:n {#1} \}
+ \ \ => \ \ \{ \tl_to_str:n {#2} \}
}
\cs_new:Npn \__msg_show_item_unbraced:nn #1#2
{
- \iow_newline: > \c_space_tl \c_space_tl \exp_not:n {#1}
- \c_space_tl \c_space_tl => \c_space_tl \c_space_tl \exp_not:n {#2}
+ \\ > \ \ \tl_to_str:n {#1}
+ \ \ => \ \ \tl_to_str:n {#2}
}
\cs_new_nopar:Npn \msg_newline: { ^^J }
\cs_new_nopar:Npn \msg_two_newlines: { ^^J ^^J }
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3names.sty b/Master/texmf-dist/tex/latex/l3kernel/l3names.sty
index 660aa9e659b..7c12c601af2 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3names.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3names.sty
@@ -46,7 +46,7 @@
%%
%% -----------------------------------------------------------------------
\RequirePackage{l3bootstrap}[2012/07/15]
-\GetIdInfo$Id: l3names.dtx 3990 2012-07-16 07:46:03Z joseph $
+\GetIdInfo$Id: l3names.dtx 4230 2012-09-24 21:44:28Z joseph $
{L3 Namespace for primitives}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3prg.sty b/Master/texmf-dist/tex/latex/l3kernel/l3prg.sty
index 93ef25ee4b6..0b719688663 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 4114 2012-08-16 01:57:02Z bruno $
+\GetIdInfo$Id: l3prg.dtx 4212 2012-09-09 12:24:04Z bruno $
{L3 Control structures}
%%
\ProvidesExplPackage
@@ -106,8 +106,8 @@
\cs_new_protected:Npn \bool_show:n #1
{
\bool_if:nTF {#1}
- { \__msg_show_variable:n { > true } }
- { \__msg_show_variable:n { > false } }
+ { \__msg_show_variable:n { > ~ true } }
+ { \__msg_show_variable:n { > ~ false } }
}
\cs_generate_variant:Nn \bool_show:N { c }
\bool_new:N \l_tmpa_bool
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3prop.sty b/Master/texmf-dist/tex/latex/l3kernel/l3prop.sty
index e9ecb340822..916ff713332 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3prop.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3prop.sty
@@ -46,7 +46,7 @@
%%
%% -----------------------------------------------------------------------
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3prop.dtx 4190 2012-09-03 00:23:31Z bruno $
+\GetIdInfo$Id: l3prop.dtx 4212 2012-09-09 12:24:04Z bruno $
{L3 Property lists}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -295,7 +295,7 @@
{ \__prg_map_break:Nn \prop_map_break: }
\cs_new_protected:Npn \prop_show:N #1
{
- \__msg_show_variable:Nnx #1 { prop }
+ \__msg_show_variable:Nnn #1 { prop }
{ \prop_map_function:NN #1 \__msg_show_item:nn }
}
\cs_generate_variant:Nn \prop_show:N { c }
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3seq.sty b/Master/texmf-dist/tex/latex/l3kernel/l3seq.sty
index 58e3b205359..1a59d7c4911 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 4092 2012-08-14 14:04:41Z bruno $
+\GetIdInfo$Id: l3seq.dtx 4212 2012-09-09 12:24:04Z bruno $
{L3 Sequences and stacks}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -433,7 +433,7 @@
\prg_new_eq_conditional:NNn \seq_gpop:cN \seq_gpop_left:cN { T , F , TF }
\cs_new_protected:Npn \seq_show:N #1
{
- \__msg_show_variable:Nnx #1 { seq }
+ \__msg_show_variable:Nnn #1 { seq }
{ \seq_map_function:NN #1 \__msg_show_item:n }
}
\cs_generate_variant:Nn \seq_show:N { c }
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3skip.sty b/Master/texmf-dist/tex/latex/l3kernel/l3skip.sty
index adbdbc68d8c..4e7c82c333a 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3skip.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3skip.sty
@@ -47,7 +47,7 @@
%%
%% -----------------------------------------------------------------------
\RequirePackage{l3bootstrap}
-\GetIdInfo$Id: l3skip.dtx 4121 2012-08-17 01:36:30Z bruno $
+\GetIdInfo$Id: l3skip.dtx 4235 2012-09-26 09:48:18Z bruno $
{L3 Dimensions and skips}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -96,20 +96,6 @@
\cs_new_protected:Npn \dim_gset_eq:NN #1#2 { \tex_global:D #1 = #2 }
\cs_generate_variant:Nn \dim_gset_eq:NN { c }
\cs_generate_variant:Nn \dim_gset_eq:NN { Nc , cc }
-\cs_new_protected_nopar:Npn \dim_set_max:Nn
- { \__dim_set_max:NNNn < \dim_set:Nn }
-\cs_new_protected_nopar:Npn \dim_gset_max:Nn
- { \__dim_set_max:NNNn < \dim_gset:Nn }
-\cs_new_protected_nopar:Npn \dim_set_min:Nn
- { \__dim_set_max:NNNn > \dim_set:Nn }
-\cs_new_protected_nopar:Npn \dim_gset_min:Nn
- { \__dim_set_max:NNNn > \dim_gset:Nn }
-\cs_new_protected:Npn \__dim_set_max:NNNn #1#2#3#4
- { \dim_compare:nNnT {#3} #1 {#4} { #2 #3 {#4} } }
-\cs_generate_variant:Nn \dim_set_max:Nn { c }
-\cs_generate_variant:Nn \dim_gset_max:Nn { c }
-\cs_generate_variant:Nn \dim_set_min:Nn { c }
-\cs_generate_variant:Nn \dim_gset_min:Nn { c }
\cs_new_protected:Npn \dim_add:Nn #1#2
{ \tex_advance:D #1 by \__dim_eval:w #2 \__dim_eval_end: }
\cs_new_protected:Npn \dim_gadd:Nn { \tex_global:D \dim_add:Nn }
@@ -122,14 +108,35 @@
\cs_generate_variant:Nn \dim_gsub:Nn { c }
\cs_new:Npn \dim_abs:n #1
{
- \dim_use:N
- \__dim_eval:w
- \if_dim:w \__dim_eval:w #1 < \c_zero_dim
- -
- \fi:
- \__dim_eval:w #1 \__dim_eval_end:
+ \exp_after:wN \__dim_abs:N
+ \dim_use:N \__dim_eval:w #1 \__dim_eval_end:
+ }
+\cs_new:Npn \__dim_abs:N #1
+ { \if_meaning:w - #1 \else: \exp_after:wN #1 \fi: }
+\cs_set:Npn \dim_max:nn #1#2
+ {
+ \dim_use:N \__dim_eval:w \exp_after:wN \__dim_maxmin:wwN
+ \dim_use:N \__dim_eval:w #1 \exp_after:wN ;
+ \dim_use:N \__dim_eval:w #2 ;
+ >
+ \__dim_eval_end:
+ }
+\cs_set:Npn \dim_min:nn #1#2
+ {
+ \dim_use:N \__dim_eval:w \exp_after:wN \__dim_maxmin:wwN
+ \dim_use:N \__dim_eval:w #1 \exp_after:wN ;
+ \dim_use:N \__dim_eval:w #2 ;
+ <
\__dim_eval_end:
}
+\cs_new:Npn \__dim_maxmin:wwN #1 ; #2 ; #3
+ {
+ \if_dim:w #1 #3 #2 ~
+ #1
+ \else:
+ #2
+ \fi:
+ }
\cs_new:Npn \dim_ratio:nn #1#2
{ \__dim_ratio:n {#1} / \__dim_ratio:n {#2} }
\cs_new:Npn \__dim_ratio:n #1
@@ -441,6 +448,20 @@
\cs_new_eq:NN \prg_case_dim:nnn \dim_case:nnn
\cs_new_eq:NN \dim_eval:w \__dim_eval:w
\cs_new_eq:NN \dim_eval_end: \__dim_eval_end:
+\cs_new_protected_nopar:Npn \dim_set_max:Nn
+ { \__dim_set_max:NNNn < \dim_set:Nn }
+\cs_new_protected_nopar:Npn \dim_gset_max:Nn
+ { \__dim_set_max:NNNn < \dim_gset:Nn }
+\cs_new_protected_nopar:Npn \dim_set_min:Nn
+ { \__dim_set_max:NNNn > \dim_set:Nn }
+\cs_new_protected_nopar:Npn \dim_gset_min:Nn
+ { \__dim_set_max:NNNn > \dim_gset:Nn }
+\cs_new_protected:Npn \__dim_set_max:NNNn #1#2#3#4
+ { \dim_compare:nNnT {#3} #1 {#4} { #2 #3 {#4} } }
+\cs_generate_variant:Nn \dim_set_max:Nn { c }
+\cs_generate_variant:Nn \dim_gset_max:Nn { c }
+\cs_generate_variant:Nn \dim_set_min:Nn { c }
+\cs_generate_variant:Nn \dim_gset_min:Nn { c }
%%
%%
%% End of file `l3skip.sty'.
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3tl.sty b/Master/texmf-dist/tex/latex/l3kernel/l3tl.sty
index 8a8d89bb904..ef644d3dfd6 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 4201 2012-09-05 08:00:54Z joseph $
+\GetIdInfo$Id: l3tl.dtx 4244 2012-09-28 22:46:36Z bruno $
{L3 Token lists}
\ProvidesExplPackage
{\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
@@ -216,8 +216,10 @@
\cs_generate_variant:Nn \tl_set_rescan:Nnn { c , cno , cnx }
\cs_generate_variant:Nn \tl_gset_rescan:Nnn { Nno , Nnx }
\cs_generate_variant:Nn \tl_gset_rescan:Nnn { c , cno }
-\cs_new_eq:NN \tl_to_lowercase:n \tex_lowercase:D
-\cs_new_eq:NN \tl_to_uppercase:n \tex_uppercase:D
+\cs_new_protected:Npn \tl_to_lowercase:n #1
+ { \tex_lowercase:D {#1} }
+\cs_new_protected:Npn \tl_to_uppercase:n #1
+ { \tex_uppercase:D {#1} }
\cs_new_protected_nopar:Npn \tl_replace_once:Nnn
{ \__tl_replace:NNNnn \__tl_replace_once: \tl_set:Nx }
\cs_new_protected_nopar:Npn \tl_greplace_once:Nnn
@@ -340,9 +342,9 @@
\prg_new_protected_conditional:Npnn \tl_if_eq:nn #1#2 { T , F , TF }
{
\group_begin:
- \tl_set:Nn \l_tl_internal_a_tl {#1}
- \tl_set:Nn \l_tl_internal_b_tl {#2}
- \if_meaning:w \l_tl_internal_a_tl \l_tl_internal_b_tl
+ \tl_set:Nn \l__tl_internal_a_tl {#1}
+ \tl_set:Nn \l__tl_internal_b_tl {#2}
+ \if_meaning:w \l__tl_internal_a_tl \l__tl_internal_b_tl
\group_end:
\prg_return_true:
\else:
@@ -350,8 +352,8 @@
\prg_return_false:
\fi:
}
-\tl_new:N \l_tl_internal_a_tl
-\tl_new:N \l_tl_internal_b_tl
+\tl_new:N \l__tl_internal_a_tl
+\tl_new:N \l__tl_internal_b_tl
\cs_new_protected_nopar:Npn \tl_if_in:NnT { \exp_args:No \tl_if_in:nnT }
\cs_new_protected_nopar:Npn \tl_if_in:NnF { \exp_args:No \tl_if_in:nnF }
\cs_new_protected_nopar:Npn \tl_if_in:NnTF { \exp_args:No \tl_if_in:nnTF }
@@ -588,10 +590,26 @@
{ \tl_gset:Nx #1 { \exp_args:No \tl_reverse:n { #1 } } }
\cs_generate_variant:Nn \tl_reverse:N { c }
\cs_generate_variant:Nn \tl_greverse:N { c }
-\cs_new:Npn \tl_head:w #1#2 \q_stop {#1}
\cs_new:Npn \tl_head:n #1
- { \etex_unexpanded:D \exp_after:wN { \tl_head:w #1 { } \q_stop } }
+ {
+ \etex_unexpanded:D
+ \if_false: { \fi: \__tl_head_i:nw #1 { } \q_stop }
+ }
+\cs_new:Npn \__tl_head_i:nw #1#2 \q_stop
+ { \exp_after:wN \__tl_head_ii:nw \exp_after:wN { \if_false: } \fi: {#1} }
+\cs_new:Npn \__tl_head_ii:nw #1
+ {
+ \exp_after:wN \if_meaning:w \exp_after:wN \q_nil
+ \tl_to_str:n \exp_after:wN { \use_none:n #1 } \q_nil
+ \exp_after:wN \use_i:nn
+ \else:
+ \exp_after:wN \use_ii:nn
+ \fi:
+ {#1}
+ { \if_false: { \fi: \__tl_head_i:nw #1 } }
+ }
\cs_generate_variant:Nn \tl_head:n { V , v , f }
+\cs_new:Npn \tl_head:w #1#2 \q_stop {#1}
\cs_new_nopar:Npn \tl_head:N { \exp_args:No \tl_head:n }
\cs_new:Npn \tl_tail:n #1
{
@@ -723,9 +741,18 @@
{ \exp_after:wN \c_zero \exp_after:wN \prg_return_false: }
\exp_after:wN \use_none:n \exp_after:wN { \if_false: } \fi:
}
-\cs_new_protected:Npn \tl_show:N #1 { \cs_show:N #1 }
+\cs_new_protected:Npn \tl_show:N #1
+ {
+ \cs_if_exist:NTF #1
+ { \cs_show:N #1 }
+ {
+ \__msg_kernel_error:nnx { kernel } { variable-not-defined }
+ { \token_to_str:N #1 }
+ }
+ }
\cs_generate_variant:Nn \tl_show:N { c }
-\cs_new_eq:NN \tl_show:n \etex_showtokens:D
+\cs_new_protected:Npn \tl_show:n #1
+ { \__msg_show_variable:n { > ~ \tl_to_str:n {#1} } }
\tl_new:N \g_tmpa_tl
\tl_new:N \g_tmpb_tl
\tl_new:N \l_tmpa_tl