From 3c2f50b92407533aabaef1823006032eedd6ef90 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Tue, 17 Jun 2014 22:32:09 +0000 Subject: l3 git-svn-id: svn://tug.org/texlive/trunk@34268 c570f23f-e606-0410-a88d-b1316a301751 --- .../doc/latex/l3experimental/l3sort/l3sort.pdf | Bin 556065 -> 373380 bytes .../doc/latex/l3experimental/l3str/l3flag.pdf | Bin 390106 -> 298791 bytes .../doc/latex/l3experimental/l3str/l3regex.pdf | Bin 978454 -> 425957 bytes .../latex/l3experimental/l3str/l3str-convert.pdf | Bin 780968 -> 436805 bytes .../latex/l3experimental/l3str/l3str-format.pdf | Bin 568770 -> 363097 bytes .../doc/latex/l3experimental/l3str/l3str.pdf | Bin 608537 -> 444571 bytes .../latex/l3experimental/l3str/l3tl-analysis.pdf | Bin 520457 -> 336810 bytes .../doc/latex/l3experimental/l3str/l3tl-build.pdf | Bin 468383 -> 378341 bytes .../doc/latex/l3experimental/xcoffins/xcoffins.pdf | Bin 490713 -> 376688 bytes .../doc/latex/l3experimental/xgalley/l3galley.pdf | Bin 680986 -> 378948 bytes .../doc/latex/l3experimental/xgalley/xgalley.pdf | Bin 576301 -> 291205 bytes Master/texmf-dist/doc/latex/l3kernel/expl3.pdf | Bin 689512 -> 557977 bytes .../texmf-dist/doc/latex/l3kernel/interface3.pdf | Bin 1304307 -> 1290442 bytes .../texmf-dist/doc/latex/l3kernel/interface3.tex | 89 --- .../texmf-dist/doc/latex/l3kernel/l3docstrip.pdf | Bin 451369 -> 268241 bytes .../texmf-dist/doc/latex/l3kernel/l3styleguide.pdf | Bin 273228 -> 273238 bytes .../texmf-dist/doc/latex/l3kernel/l3styleguide.tex | 242 ------ .../doc/latex/l3kernel/l3syntax-changes.pdf | Bin 220218 -> 220226 bytes .../doc/latex/l3kernel/l3syntax-changes.tex | 110 --- Master/texmf-dist/doc/latex/l3kernel/source3.pdf | Bin 4052259 -> 2416466 bytes Master/texmf-dist/doc/latex/l3kernel/source3.tex | 106 --- .../texmf-dist/doc/latex/l3kernel/source3body.tex | 449 ----------- .../latex/l3packages/l3keys2e/l3keys2e-demo.tex | 43 ++ .../doc/latex/l3packages/l3keys2e/l3keys2e.pdf | Bin 475912 -> 319020 bytes .../doc/latex/l3packages/xfrac/xfrac.pdf | Bin 634688 -> 394764 bytes .../doc/latex/l3packages/xparse/xparse.pdf | Bin 451855 -> 452141 bytes .../doc/latex/l3packages/xtemplate/xtemplate.pdf | Bin 401032 -> 401198 bytes Master/texmf-dist/makeindex/l3kernel/l3doc.ist | 72 -- .../source/latex/l3experimental/l3str/l3flag.dtx | 2 +- .../source/latex/l3experimental/l3str/l3regex.dtx | 213 +++--- .../latex/l3experimental/l3str/l3str-convert.dtx | 8 +- .../latex/l3experimental/l3str/l3str-format.dtx | 2 +- .../source/latex/l3experimental/l3str/l3str.dtx | 4 +- .../latex/l3experimental/l3str/l3tl-analysis.dtx | 2 +- .../latex/l3experimental/l3str/l3tl-build.dtx | 2 +- Master/texmf-dist/source/latex/l3kernel/expl3.dtx | 133 ++-- .../source/latex/l3kernel/interface3.tex | 89 +++ Master/texmf-dist/source/latex/l3kernel/l3.ins | 96 +++ .../texmf-dist/source/latex/l3kernel/l3basics.dtx | 65 +- .../source/latex/l3kernel/l3bootstrap.dtx | 146 ++-- Master/texmf-dist/source/latex/l3kernel/l3box.dtx | 6 +- .../source/latex/l3kernel/l3candidates.dtx | 153 +--- .../texmf-dist/source/latex/l3kernel/l3coffins.dtx | 6 +- Master/texmf-dist/source/latex/l3kernel/l3file.dtx | 54 +- .../texmf-dist/source/latex/l3kernel/l3format.ins | 90 +++ .../texmf-dist/source/latex/l3kernel/l3fp-expo.dtx | 4 +- .../texmf-dist/source/latex/l3kernel/l3fp-old.dtx | 288 ------- .../source/latex/l3kernel/l3fp-parse.dtx | 163 ++-- Master/texmf-dist/source/latex/l3kernel/l3int.dtx | 95 ++- Master/texmf-dist/source/latex/l3kernel/l3keys.dtx | 125 ++-- .../texmf-dist/source/latex/l3kernel/l3luatex.dtx | 501 ------------- Master/texmf-dist/source/latex/l3kernel/l3msg.dtx | 98 +-- .../texmf-dist/source/latex/l3kernel/l3names.dtx | 27 +- .../texmf-dist/source/latex/l3kernel/l3quark.dtx | 34 +- Master/texmf-dist/source/latex/l3kernel/l3skip.dtx | 44 +- .../source/latex/l3kernel/l3styleguide.tex | 242 ++++++ .../source/latex/l3kernel/l3syntax-changes.tex | 110 +++ Master/texmf-dist/source/latex/l3kernel/l3tl.dtx | 106 +-- .../texmf-dist/source/latex/l3kernel/l3token.dtx | 4 +- .../texmf-dist/source/latex/l3kernel/source3.tex | 106 +++ .../source/latex/l3packages/l3keys2e/l3keys2e.dtx | 6 +- .../source/latex/l3packages/xparse/xparse.dtx | 20 +- .../latex/l3packages/xtemplate/xtemplate.dtx | 32 +- .../tex/latex/l3experimental/l3str/l3flag.sty | 2 +- .../latex/l3experimental/l3str/l3regex-trace.sty | 233 +++--- .../tex/latex/l3experimental/l3str/l3regex.sty | 201 ++--- .../latex/l3experimental/l3str/l3str-convert.sty | 3 +- .../latex/l3experimental/l3str/l3str-format.sty | 2 +- .../tex/latex/l3experimental/l3str/l3str.sty | 4 +- .../latex/l3experimental/l3str/l3tl-analysis.sty | 2 +- .../tex/latex/l3experimental/l3str/l3tl-build.sty | 2 +- .../texmf-dist/tex/latex/l3kernel/expl3-code.tex | 830 +++++++-------------- .../tex/latex/l3kernel/expl3-generic.tex | 16 +- Master/texmf-dist/tex/latex/l3kernel/expl3.sty | 107 ++- Master/texmf-dist/tex/latex/l3kernel/l3doc.cls | 49 +- .../tex/latex/l3packages/l3keys2e/l3keys2e.sty | 6 +- .../tex/latex/l3packages/xparse/xparse.sty | 20 +- .../tex/latex/l3packages/xtemplate/xtemplate.sty | 32 +- 78 files changed, 2233 insertions(+), 3463 deletions(-) delete mode 100644 Master/texmf-dist/doc/latex/l3kernel/interface3.tex delete mode 100644 Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex delete mode 100644 Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex delete mode 100644 Master/texmf-dist/doc/latex/l3kernel/source3.tex delete mode 100644 Master/texmf-dist/doc/latex/l3kernel/source3body.tex create mode 100644 Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e-demo.tex delete mode 100644 Master/texmf-dist/makeindex/l3kernel/l3doc.ist create mode 100644 Master/texmf-dist/source/latex/l3kernel/interface3.tex create mode 100644 Master/texmf-dist/source/latex/l3kernel/l3.ins create mode 100644 Master/texmf-dist/source/latex/l3kernel/l3format.ins delete mode 100644 Master/texmf-dist/source/latex/l3kernel/l3fp-old.dtx delete mode 100644 Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx create mode 100644 Master/texmf-dist/source/latex/l3kernel/l3styleguide.tex create mode 100644 Master/texmf-dist/source/latex/l3kernel/l3syntax-changes.tex create mode 100644 Master/texmf-dist/source/latex/l3kernel/source3.tex diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3sort/l3sort.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3sort/l3sort.pdf index 2d13600253c..2ba3058a11e 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/l3sort/l3sort.pdf and b/Master/texmf-dist/doc/latex/l3experimental/l3sort/l3sort.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3flag.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3flag.pdf index ba3080926ea..1966e3c615d 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3flag.pdf and b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3flag.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3regex.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3regex.pdf index b6d7e816a0a..007114a0b8d 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3regex.pdf and b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3regex.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf index c19352318f4..51b6bf61a2b 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf and b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf index 36768afa9ce..ccd2b5d57ce 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf and b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str.pdf index 5f9189602d7..06700c4083b 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str.pdf and b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-analysis.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-analysis.pdf index 51c3eb094ec..e92e6fc8b55 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-analysis.pdf and b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-analysis.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-build.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-build.pdf index a7c41132eaa..9613aa08e98 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-build.pdf and b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3tl-build.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf b/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf index 1b6e0b9e9fd..1c89df07ad6 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf and b/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf b/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf index 292f302707a..742b7cb413b 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf and b/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf b/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf index dbcad691583..25fd3f3697a 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf and b/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf index 8e4d51e335d..785ffd00c2a 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf and b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf index 8d8df4f8fd9..d4316b9f2ad 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf and b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/interface3.tex b/Master/texmf-dist/doc/latex/l3kernel/interface3.tex deleted file mode 100644 index 4c0a2761e92..00000000000 --- a/Master/texmf-dist/doc/latex/l3kernel/interface3.tex +++ /dev/null @@ -1,89 +0,0 @@ -% \iffalse meta-comment -% -%% File: interfaces3.tex Copyright (C) 1990-2011 The LaTeX3 Project -%% -%% It may be distributed and/or modified under the conditions of the -%% LaTeX Project Public License (LPPL), either version 1.3c of this -%% license or (at your option) any later version. The latest version -%% of this license is in the file -%% -%% http://www.latex-project.org/lppl.txt -%% -%% This file is part of the "l3kernel bundle" (The Work in LPPL) -%% and all files in that bundle must be distributed together. -%% -%% The released version of this bundle is available from CTAN. -%% -%% ----------------------------------------------------------------------- -%% -%% The development version of the bundle can be found at -%% -%% http://www.latex-project.org/svnroot/experimental/trunk/ -%% -%% for those people who are interested. -%% -%%%%%%%%%%% -%% NOTE: %% -%%%%%%%%%%% -%% -%% Snapshots taken from the repository represent work in progress and may -%% not work or may contain conflicting material! We therefore ask -%% people _not_ to put them into distributions, archives, etc. without -%% prior consultation with the LaTeX3 Project. -%% -%% ----------------------------------------------------------------------- -% -% \fi - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% This document will typeset the LaTeX3 interface descriptions a single -% document. This will produce quite a large file (more than 170 pages -% currently). -% -% There is also a full version of the sources (source3.tex) which additionally -% also typesets the command implementations. -% -% Do not forget to generate the index (as explained on the terminal output -% near the end of the run)! -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -\documentclass{l3doc} -\listfiles - -\begin{document} - -\title{The \LaTeX3 Interfaces} -\author{% - The \LaTeX3 Project\thanks - {% - E-mail: - \href{mailto:latex-team@latex-project.org} - {latex-team@latex-project.org}% - }% -} - -\pagenumbering{roman} -\maketitle - -% -% First load all modules and typeset the documentation parts -% - -\input{source3body} % all the individual modules - -\clearpage - -\begingroup - \def\endash{--} - \catcode`\-\active - \def-{\futurelet\temp\indexdash} - \def\indexdash{\ifx\temp-\endash\fi} - \DelayPrintIndex -\endgroup - -\end{document} - - diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf index bee0b277eb5..48050eb8aac 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf and b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf index c74c81b5e09..64418b5e6f6 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf and b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex deleted file mode 100644 index 6a3a9d122e6..00000000000 --- a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex +++ /dev/null @@ -1,242 +0,0 @@ -\iffalse meta-comment - -File l3styleguide.tex Copyright (C) 2011,2012 The LaTeX3 Project - -It may be distributed and/or modified under the conditions of the -LaTeX Project Public License (LPPL), either version 1.3c of this -license or (at your option) any later version. The latest version -of this license is in the file - - http://www.latex-project.org/lppl.txt - -This file is part of the "l3kernel bundle" (The Work in LPPL) -and all files in that bundle must be distributed together. - -The released version of this bundle is available from CTAN. - -\fi - -\documentclass{l3doc} -\usepackage{svn-multi} - -\svnid{$Id: l3styleguide.tex 2772 2011-09-07 15:07:41Z joseph $} -\def\filedate{\svnfileyear/\svnfilemonth/\svnfileday} - -\title{% - The \LaTeX3 kernel: style guide for code authors% - \thanks - {% - This file describes v\svnfilerev, - last revised \filedate. - }% -} -\author{% - The \LaTeX3 Project\thanks - {% - E-mail: - \href{mailto:latex-team@latex-project.org}% - {latex-team@latex-project.org}% - }% -} -\date{Released \filedate} - -\begin{document} - -\maketitle - -\tableofcontents - -\section{Introduction} - -This document is intended as a style guide for authors of code and -documentation for the \LaTeX3 kernel. It covers both aspects of coding -style and the formatting of the sources. The aim of providing these -guidelines is help ensure consistency of the code and sources from -different authors. Experience suggests that in the long-term this helps -with maintenance. There will of course be places where there are -exceptions to these guidelines: common sense should always be -applied! - -\section{Documentation style} - -\LaTeX3 source and documentation should be written using the document -class \cls{l3doc} in \file{dtx} format. This class provides a number -of logical mark up elements, which should be used where possible. -In the main, this is standard \LaTeX{} practice, but there are a -few points to highlight: -\begin{itemize} - \item - Where possible, use \cs{cs} to mark up control sequences - rather than using a verbatim environment. - \item - Arguments which are given in braces should be marked using - \cs{Arg} when code-level functions are discussed, but using - \cs{marg} for document functions. - \item - The names \TeX{}, \LaTeX{}, \emph{etc}.\ use the normal logical mark - up followed by an empty group (|{}|), with the exception of |\LaTeX3|, - where the number should follow directly. - \item - Where in line verbatim text is used, it should be marked up - using the \verb=|...|= construct (\emph{i.e.}~vertical bars delimit - the verbatim text). - \item In line quotes should be marked up using the \cs{enquote} - function. - \item - Where numbers in the source have a mathematical meaning, - they should be included in math mode. Such in-line math mode - material should be marked up using |$...$| and \emph{not} - |\(...\)|. -\end{itemize} - -Line length in the source files should to be under $80$ -characters where possible, as this helps keep everything on the screen -when editing files. In the \file{dtx} format, documentation lines start -with a \texttt{\%}, which is usually followed by a space to leave a -\enquote{comment margin} at the start of each line. - -As with code indenting (see later), nested environments and arguments -should be indented by (at least) two spaces to make the nature of the nesting -clear. Thus for example a typical arrangement for the \env{function} -environment might be -\begin{verbatim*} -\begin{function}{\seq_gclear:N, \seq_gclear:c} - \begin{syntax} - \cs{seq_gclear:N} \meta{sequence} - \end{syntax} - Clears all entries from the \meta{sequence} globally. -\end{function} -\end{verbatim*} -The \enquote{outer} \verb*|% \begin{function}| should have the customary -space after the |%| character at the start of the line. - -In general, a single \env{function} or \env{macro} environment should be -used for a group of closely-related functions, for example argument -specification variants. In such cases, a comma-separated list should be -used, as shown in the preceding example. - -\section{Format of the code itself} - -The requirement for less than $80$ characters per line applies to the code -itself as well as the surrounding documentation. A number of the general -style principals for \LaTeX3 code apply: these are described in the following -paragraph and an example is then given. - -With the exception of simple runs of parameter (|{#1}|, |#1#2|, -\emph{etc.}), everything should divided up using spaces to make the code -more readable. In general, these will be single spaces, but in some -places it makes more sense to align parts of the code to emphasise -similarity. (Tabs should not be used for introducing white space.) - -Each conceptually-separate step in a function should be on a separate -line, to make the meaning clearer. Hence the \texttt{false} branch -in the example uses two lines for the two auxiliary function uses. - -Within the definition, a two-space indent should be used to show each -\enquote{level} of code. Thus in the example \cs{tl_if_empty:nTF} is -indented by two spaces, but the two branches are indented by four -spaces. Within the \texttt{false} branch, the need for multiple lines -means that an additional two-space indent should be used to show that -these lines are all part of the brace group. - -The result of these lay-out conventions is code which will in general -look like the example: -\begin{verbatim*} -\cs_new:Npn \module_foo:nn #1#2 - { - \tl_if_empty:nTF {#1} - { \module_foo_aux:n { X #2 } } - { - \module_foo_aux:nn {#1} {#2} - \module_foo_aux:n {#1#2} - } - } -\end{verbatim*} - -\section{Code conventions} - -All code-level functions should be \enquote{long} if they accept any -arguments, even if it seems \enquote{very unlikely} that a \cs{par} token -will be passed. Thus \cs{cs_new_nopar:Npn} and so forth should only be used -to create functions which accept no arguments at all. - -The expandability of each function should be well-defined. Functions which -cannot be fully expanded must be \texttt{protected}. This means that expandable -functions must themselves only contain expandable material. Functions which -use any non-expandable material must be defined using \cs{cs_new_protected:Npn} -or similar. - -When using \cs{cs_generate_variant:Nn}, group related variants together -to make the pattern clearer. A common example is variants of a function -which has an \texttt{N}-type first argument: -\begin{verbatim} - \cs_generate_variant:Nn \foo:Nn { NV , No } - \cs_generate_variant:Nn \foo:Nn { c , cV , co } -\end{verbatim} - -There are cases where omitting braces from \texttt{o}-type arguments -is desirable for performance reasons. This should only be done if the -argument is a single token, thus for example -\begin{verbatim} - \tl_set:No \l_some_tl \l_some_other_tl -\end{verbatim} -remains clear and can be used where appropriate. - -\section{Private and internal functions} - -Private functions (those starting \cs{__}) should not be used between modules. -The only exception is where a \enquote{family} of modules share some -\enquote{internal} methods: this happens most obviously in the kernel itself. -Any internal functions or variables \emph{must} be documented in the same way -as public ones. - -The \pkg{l3docstrip} method should be used for internal functions in a module. -This requires a line -\begin{quote} - \ttfamily - \%<@@=\meta{module}> -\end{quote} -at the start of the source (\texttt{.dtx}) file, with internal functions -then written in the form -\begin{verbatim} - \cs_new_protected:Npn \@@_function:nn #1#2 - ... -\end{verbatim} - -\section{Auxiliary functions} - -In general, the team encourage the use of descriptive names in \LaTeX3 code. -Thus many helper functions will have names which describe briefly what they do, -rather than simply indicating that they are auxiliary to some higher-level -function. However, there are places where one or more \texttt{aux} functions -are required. Where possible, these should be differentiated by signature -\begin{verbatim} - \cs_new_protected:Npn \@@_function:nn #1#2 - { - ... - } - \cs_new_protected:Npn \@@_function_aux:nn #1#2 - { - ... - } - \cs_new_protected:Npn \@@_function_aux:w #1#2 \q_stop - { - ... - } -\end{verbatim} -Where more than one auxiliary shares the same signature, the recommended naming -scheme is \texttt{auxi}, \texttt{auxii} and so on. -\begin{verbatim} - \cs_new_protected:Npn \@@_function_auxi:nn #1#2 - { - ... - } - \cs_new_protected:Npn \@@_function_auxii:nn #1#2 - { - ... - } -\end{verbatim} -The use of \texttt{aux_i}, \texttt{aux_ii}, \emph{etc.}\ is discouraged as this -conflicts with the convention used by \cs{use_i:nn} and related functions. - -\end{document} diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf index 15cea2500aa..7770755746a 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf and b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex deleted file mode 100644 index 4dfc70e0e97..00000000000 --- a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex +++ /dev/null @@ -1,110 +0,0 @@ -\iffalse meta-comment - -File l3syntax-changes.tex Copyright (C) 2011-2012 The LaTeX3 Project - -It may be distributed and/or modified under the conditions of the -LaTeX Project Public License (LPPL), either version 1.3c of this -license or (at your option) any later version. The latest version -of this license is in the file - - http://www.latex-project.org/lppl.txt - -This file is part of the "l3kernel bundle" (The Work in LPPL) -and all files in that bundle must be distributed together. - -The released version of this bundle is available from CTAN. - -\fi - -\documentclass{l3doc} - -\usepackage{svn-multi} - -\svnid{$Id: l3syntax-changes.tex 4048 2012-08-02 09:49:10Z joseph $} -\def\filedate{\svnfileyear/\svnfilemonth/\svnfileday} - -\title{% - Syntax changes in \LaTeX3 functions - \thanks - {% - This file describes v\svnfilerev, - last revised \filedate. - }% -} -\author{% - The \LaTeX3 Project\thanks - {% - E-mail: - \href{mailto:latex-team@latex-project.org}% - {latex-team@latex-project.org}% - }% -} -\date{Released \filedate} - -\newcommand{\TF}{\textit{(TF)}} - -\begin{document} - -\maketitle - -This file lists functions whose syntax has changed after August 2011, -with an approximate date. - -\section{August 2011} - -\begin{itemize} - \item \cs{tl_if_single:n\TF} recognized any non-zero number of - explicit spaces as \meta{true}, and did not ignore trailing spaces. - Now it is \meta{true} for - \[ - \meta{optional spaces} - \meta{normal token or brace group} - \meta{optional spaces}. - \] - \item \cs{tl_reverse:n} stripped outer braces and lost unprotected spaces. - Now it keeps spaces, leaves unbraced single tokens unbraced, and - braced groups braced. - \item \cs{tl_trim_spaces:n} only removed one leading and trailing space. - Now removes recursively. Also, on the left it used to strip implicit - and explicit spaces with any character code. Now it strips only explicit - space characters $(32,10)$. -\end{itemize} - -\section{September 2011} - -\begin{itemize} -\item clist functions which receive an \texttt{n}-type comma list argument - now trim spaces from each item in the argument. -\end{itemize} - -\section{June 2012} - -\begin{itemize} - \item Access to list functions now indexes from~$1$, not from~$0$. - This applies to multiple choices in the \pkg{l3keys} module and - the \cs{clist_item:Nn}, \cs{seq_item:Nn} and \cs{tl_item:Nn} - functions. - \item \cs{tl_trim_spaces:n} now requires a variable number of - expansions to fully expand, rather than exactly two. Of course, - \texttt{x}-type expansion still correctly evaluates this function. -\end{itemize} - -\section{July 2012} - -\begin{itemize} - \item The \cs{tl_if_head_eq_meaning:nN}, \cs{tl_if_head_eq_catcode:nN} - and \cs{tl_if_head_eq_charcode:nN} conditionals now never match when - their first argument is empty. -\end{itemize} - -\section{August 2012} - -\begin{itemize} - \item \cs{lua_now:x} is now a standard \texttt{x}-type expansion of - \cs{lua_now:n}, which does no expansion. Engine-level expansion is moved - to \cs{lua_now_x:n}, reflecting the fact that this is non-standard in the - same way as for example \cs{str_if_eq_x:nn(TF)}. -\end{itemize} - - -\end{document} diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf index 0a3e63cf52f..d3dabd6131f 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf and b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3.tex b/Master/texmf-dist/doc/latex/l3kernel/source3.tex deleted file mode 100644 index 22c3c44048d..00000000000 --- a/Master/texmf-dist/doc/latex/l3kernel/source3.tex +++ /dev/null @@ -1,106 +0,0 @@ -% \iffalse meta-comment -% -%% File: source3.tex Copyright (C) 1990-2011 The LaTeX3 Project -%% -%% It may be distributed and/or modified under the conditions of the -%% LaTeX Project Public License (LPPL), either version 1.3c of this -%% license or (at your option) any later version. The latest version -%% of this license is in the file -%% -%% http://www.latex-project.org/lppl.txt -%% -%% This file is part of the "l3kernel bundle" (The Work in LPPL) -%% and all files in that bundle must be distributed together. -%% -%% The released version of this bundle is available from CTAN. -%% -%% ----------------------------------------------------------------------- -%% -%% The development version of the bundle can be found at -%% -%% http://www.latex-project.org/svnroot/experimental/trunk/ -%% -%% for those people who are interested. -%% -%%%%%%%%%%% -%% NOTE: %% -%%%%%%%%%%% -%% -%% Snapshots taken from the repository represent work in progress and may -%% not work or may contain conflicting material! We therefore ask -%% people _not_ to put them into distributions, archives, etc. without -%% prior consultation with the LaTeX3 Project. -%% -%% ----------------------------------------------------------------------- -% -% \fi - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% This document will typeset the LaTeX3 sources as a single document. -% This will produce quite a large file (more than 780 pages). -% -% There is also a shorter version (interface3.tex) that only typesets the -% command % interface descriptions. -% -% Do not forget to generate the index (as explained on the terminal output -% near the end of the run)! -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\documentclass{l3doc} -\listfiles - -\begin{document} - -\title{The \LaTeX3 Sources} -\author{% - The \LaTeX3 Project\thanks - {% - E-mail: - \href{mailto:latex-team@latex-project.org} - {latex-team@latex-project.org}% - }% -} - -\pagenumbering{roman} -\maketitle - -% -% First load all modules and typeset the documentation parts -% - -\input{source3body} % all the individual modules - -% -% Now reload all modules and typeset the implementation parts -% - -\part{Implementation} - -\def\maketitle{} -\EnableImplementation -\DisableDocumentation -\DocInputAgain - -\clearpage -\pagestyle{headings} - -% Make TeX shut up. -\hbadness=10000 -\newcount\hbadness -\hfuzz=\maxdimen - -\PrintChanges -\clearpage - -\begingroup - \def\endash{--} - \catcode`\-\active - \def-{\futurelet\temp\indexdash} - \def\indexdash{\ifx\temp-\endash\fi} - - \DelayPrintIndex -\endgroup - -\end{document} diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3body.tex b/Master/texmf-dist/doc/latex/l3kernel/source3body.tex deleted file mode 100644 index 92ab1fdf1d9..00000000000 --- a/Master/texmf-dist/doc/latex/l3kernel/source3body.tex +++ /dev/null @@ -1,449 +0,0 @@ -% \iffalse meta-comment -% -%% File: source3body.tex Copyright (C) 1990-2012 The LaTeX3 Project -%% -%% It may be distributed and/or modified under the conditions of the -%% LaTeX Project Public License (LPPL), either version 1.3c of this -%% license or (at your option) any later version. The latest version -%% of this license is in the file -%% -%% http://www.latex-project.org/lppl.txt -%% -%% This file is part of the "l3kernel bundle" (The Work in LPPL) -%% and all files in that bundle must be distributed together. -%% -%% The released version of this bundle is available from CTAN. -%% -%% ----------------------------------------------------------------------- -%% -%% The development version of the bundle can be found at -%% -%% http://www.latex-project.org/svnroot/experimental/trunk/ -%% -%% for those people who are interested. -%% -%%%%%%%%%%% -%% NOTE: %% -%%%%%%%%%%% -%% -%% Snapshots taken from the repository represent work in progress and may -%% not work or may contain conflicting material! We therefore ask -%% people _not_ to put them into distributions, archives, etc. without -%% prior consultation with the LaTeX3 Project. -%% -%% ----------------------------------------------------------------------- -% -% \fi - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% This file is used by -% -% source3.tex % documentation including implementation -% -% interface3.tex % only interface documentation -% -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -\begin{abstract} - -\setlength\parindent{0pt} -\setlength\parskip{\baselineskip} - -\noindent -This is the reference documentation for the \pkg{expl3} -programming environment. The \pkg{expl3} modules set up an experimental -naming scheme for \LaTeX{} commands, which allow the \LaTeX{} programmer -to systematically name functions and variables, and specify the argument -types of functions. - -The \TeX{} and \eTeX{} primitives are all given a new name according to -these conventions. However, in the main direct use of the primitives is -not required or encouraged: the \pkg{expl3} modules define an -independent low-level \LaTeX3 programming language. - -At present, the \pkg{expl3} modules are designed to be loaded on top of -\LaTeXe{}. In time, a \LaTeX3 format will be produced based on this code. -This allows the code to be used in \LaTeXe{} packages \emph{now} while a -stand-alone \LaTeX3 is developed. - -\begin{bfseries} - While \pkg{expl3} is still experimental, the bundle is now regarded as - broadly stable. The syntax conventions and functions provided are now - ready for wider use. There may still be changes to some functions, but - these will be minor when compared to the scope of \pkg{expl3}. - - New modules will be added to the distributed version of \pkg{expl3} as - they reach maturity. -\end{bfseries} - -\end{abstract} - -\clearpage - -{% - \def\\{:}% fix "newlines" in the ToC - \tableofcontents -} - -\clearpage -\pagenumbering{arabic} - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% Each of the following \DocInput lines includes a file with extension -% .dtx. Each of these files may be typeset separately. For instance -% pdflatex l3box.dtx -% will typeset the source of the LaTeX3 box commands. If you use the -% Makefile, the index will be generated automatically; e.g., -% make doc F=l3box -% -% If this file is processed, each of these separate dtx files will be -% contained as a part of a single document. -% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\makeatletter -\def\partname{Part} -\def\maketitle{\clearpage\part{\@title}} -\let\thanks\@gobble -\let\DelayPrintIndex\PrintIndex -\let\PrintIndex\@empty -\makeatother - -\part{Introduction to \pkg{expl3} and this document} - -This document is intended to act as a comprehensive reference manual -for the \pkg{expl3} language. A general guide to the \LaTeX3 -programming language is found in \href{expl3.pdf}{expl3.pdf}. - -\section{Naming functions and variables} - -\LaTeX3 does not use \texttt{@} as a \enquote{letter} for defining -internal macros. Instead, the symbols |_| and \texttt{:} -are used in internal macro names to provide structure. The name of -each \emph{function} is divided into logical units using \texttt{_}, -while \texttt{:} separates the \emph{name} of the function from the -\emph{argument specifier} (\enquote{arg-spec}). This describes the arguments -expected by the function. In most cases, each argument is represented -by a single letter. The complete list of arg-spec letters for a function -is referred to as the \emph{signature} of the function. - -Each function name starts with the \emph{module} to which it belongs. -Thus apart from a small number of very basic functions, all \pkg{expl3} -function names contain at least one underscore to divide the module -name from the descriptive name of the function. For example, all -functions concerned with comma lists are in module \texttt{clist} and -begin \cs{clist_}. - -Every function must include an argument specifier. For functions which -take no arguments, this will be blank and the function name will end -\texttt{:}. Most functions take one or more arguments, and use the -following argument specifiers: -\begin{description} - \item[\texttt{D}] The \texttt{D} specifier means \emph{do not use}. - All of the \TeX{} primitives are initially \cs{let} to a \texttt{D} - name, and some are then given a second name. Only the kernel - team should use anything with a \texttt{D} specifier! - \item[\texttt{N} and \texttt{n}] These mean \emph{no manipulation}, - of a single token for \texttt{N} and of a set of tokens given in - braces for \texttt{n}. Both pass the argument through exactly as - given. Usually, if you use a single token for an \texttt{n} argument, - all will be well. - \item[\texttt{c}] This means \emph{csname}, and indicates that the - argument will be turned into a csname before being used. So - So \cs{foo:c} |{ArgumentOne}| will act in the same way as \cs{foo:N} - \cs{ArgumentOne}. - \item[\texttt{V} and \texttt{v}] These mean \emph{value - of variable}. The \texttt{V} and \texttt{v} specifiers are used to - get the content of a variable without needing to worry about the - underlying \TeX{} structure containing the data. A \texttt{V} - argument will be a single token (similar to \texttt{N}), for example - \cs{foo:V} \cs{MyVariable}; on the other hand, using \texttt{v} a - csname is constructed first, and then the value is recovered, for - example \cs{foo:v} |{MyVariable}|. - \item[\texttt{o}] This means \emph{expansion once}. In general, the - \texttt{V} and \texttt{v} specifiers are favoured over \texttt{o} - for recovering stored information. However, \texttt{o} is useful - for correctly processing information with delimited arguments. - \item[\texttt{x}] The \texttt{x} specifier stands for \emph{exhaustive - expansion}: every token in the argument is fully expanded until only - unexpandable ones remain. The \TeX{} \tn{edef} primitive carries out - this type of expansion. Functions which feature an \texttt{x}-type - argument are in general \emph{not} expandable, unless specifically - noted. - \item[\texttt{f}] The \texttt{f} specifier stands for \emph{full - expansion}, and in contrast to \texttt{x} stops at the first - non-expandable item (reading the argument from left to right) without - trying to expand it. For example, when setting a token list - variable (a macro used for storage), the sequence - \begin{verbatim} - \tl_set:Nn \l_mya_tl { A } - \tl_set:Nn \l_myb_tl { B } - \tl_set:Nf \l_mya_tl { \l_mya_tl \l_myb_tl } - \end{verbatim} - will leave |\l_mya_tl| with the content |A\l_myb_tl|, as |A| cannot - be expanded and so terminates expansion before |\l_myb_tl| is considered. - \item[\texttt{T} and \texttt{F}] For logic tests, there are the branch - specifiers \texttt{T} (\emph{true}) and \texttt{F} (\emph{false}). - Both specifiers treat the input in the same way as \texttt{n} (no - change), but make the logic much easier to see. - \item[\texttt{p}] The letter \texttt{p} indicates \TeX{} - \emph{parameters}. Normally this will be used for delimited - functions as \pkg{expl3} provides better methods for creating simple - sequential arguments. - \item[\texttt{w}] Finally, there is the \texttt{w} specifier for - \emph{weird} arguments. This covers everything else, but mainly - applies to delimited values (where the argument must be terminated - by some arbitrary string). -\end{description} -Notice that the argument specifier describes how the argument is -processed prior to being passed to the underlying function. For example, -\cs{foo:c} will take its argument, convert it to a control sequence and -pass it to \cs{foo:N}. - -Variables are named in a similar manner to functions, but begin with -a single letter to define the type of variable: -\begin{description} - \item[\texttt{c}] Constant: global parameters whose value should not - be changed. - \item[\texttt{g}] Parameters whose value should only be set globally. - \item[\texttt{l}] Parameters whose value should only be set locally. -\end{description} -Each variable name is then build up in a similar way to that of a -function, typically starting with the module\footnote{The module names are - not used in case of generic scratch registers defined in the data - type modules, e.g., the - \texttt{int} module contains some scratch variables called \cs{l_tmpa_int}, - \cs{l_tmpb_int}, and so on. In such a case adding the module name up front - to denote the module - and in the back to indicate the type, as in - \cs{l_int_tmpa_int} would be very unreadable.} name -and then a descriptive part. -Variables end with a short identifier to show the variable type: -\begin{description} - \item[\texttt{bool}] Either true or false. - \item[\texttt{box}] Box register. - \item[\texttt{clist}] Comma separated list. - \item[\texttt{coffin}] a \enquote{box with handles} --- a higher-level data - type for carrying out |box| alignment operations. - \item[\texttt{dim}] \enquote{Rigid} lengths. - \item[\texttt{fp}] floating-point values; - \item[\texttt{int}] Integer-valued count register. - \item[\texttt{prop}] Property list. - \item[\texttt{seq}] \enquote{Sequence}: a data-type used to implement lists - (with access at both ends) and stacks. - \item[\texttt{skip}] \enquote{Rubber} lengths. - \item[\texttt{stream}] An input or output stream (for reading from or - writing to, respectively). - \item[\texttt{tl}] Token list variables: placeholder for a token list. -\end{description} - -\subsection{Terminological inexactitude} - -A word of warning. In this document, and others referring to the \pkg{expl3} -programming modules, we often refer to \enquote{variables} and -\enquote{functions} as if they -were actual constructs from a real programming language. In truth, \TeX{} -is a macro processor, and functions are simply macros that may or may not take -arguments and expand to their replacement text. Many of the common variables -are \emph{also} macros, and if placed into the input stream will simply expand -to their definition as well~--- a \enquote{function} with no arguments and a -\enquote{token list variable} are in truth one and the same. On the other -hand, some \enquote{variables} are actually registers that must be -initialised and their values set and retrieved with specific functions. - -The conventions of the \pkg{expl3} code are designed to clearly separate the -ideas of \enquote{macros that contain data} and -\enquote{macros that contain code}, and a -consistent wrapper is applied to all forms of \enquote{data} whether they be -macros or -actually registers. This means that sometimes we will use phrases like -\enquote{the function returns a value}, when actually we just mean -\enquote{the macro expands to something}. Similarly, the term -\enquote{execute} might be used in place of \enquote{expand} -or it might refer to the more specific case of -\enquote{processing in \TeX's stomach} -(if you are familiar with the \TeX{}book parlance). - -If in doubt, please ask; chances are we've been hasty in writing certain -definitions and need to be told to tighten up our terminology. - -\section{Documentation conventions} - -This document is typeset with the experimental \pkg{l3doc} class; -several conventions are used to help describe the features of the code. -A number of conventions are used here to make the documentation clearer. - -Each group of related functions is given in a box. For a function with -a \enquote{user} name, this might read: -\begin{function}{\ExplSyntaxOn, \ExplSyntaxOff} - \begin{syntax} - \cs{ExplSyntaxOn} \dots{} \cs{ExplSyntaxOff} - \end{syntax} - The textual description of how the function works would appear here. The - syntax of the function is shown in mono-spaced text to the right of - the box. In this example, the function takes no arguments and so the - name of the function is simply reprinted. -\end{function} - -For programming functions, which use \texttt{_} and \texttt{:} in their name -there are a few additional conventions: If two related functions are given -with identical names but different argument specifiers, these are termed -\emph{variants} of each other, and the latter functions are printed in grey to -show this more clearly. They will carry out the same function but will take -different types of argument: -\begin{function}{\seq_new:N, \seq_new:c} - \begin{syntax} - \cs{seq_new:N} \meta{sequence} - \end{syntax} - When a number of variants are described, the arguments are usually - illustrated only for the base function. Here, \meta{sequence} indicates - that \cs{seq_new:N} expects the name of a sequence. From the argument - specifier, \cs{seq_new:c} also expects a sequence name, but as a - name rather than as a control sequence. Each argument given in the - illustration should be described in the following text. -\end{function} - -\paragraph{Fully expandable functions} -\hypertarget{expstar}{Some functions are fully expandable}, -which allows it to be used within -an \texttt{x}-type argument (in plain \TeX{} terms, inside an \cs{edef}), -as well as within an \texttt{f}-type argument. -These fully expandable functions are indicated in the documentation by -a star: -\begin{function}[EXP]{\cs_to_str:N} - \begin{syntax} - \cs{cs_to_str:N} \meta{cs} - \end{syntax} - As with other functions, some text should follow which explains how - the function works. Usually, only the star will indicate that the - function is expandable. In this case, the function expects a \meta{cs}, - shorthand for a \meta{control sequence}. -\end{function} - -\paragraph{Restricted expandable functions} -\hypertarget{rexpstar}{A few functions are fully expandable} but cannot be fully expanded within -an \texttt{f}-type argument. In this case a hollow star is used to indicate -this: -\begin{function}[rEXP]{\seq_map_function:NN} - \begin{syntax} - \cs{seq_map_function:NN} \meta{seq} \meta{function} - \end{syntax} -\end{function} - -\paragraph{Conditional functions} -\hypertarget{explTF}{Conditional (\texttt{if}) functions} -are normally defined in three variants, with -\texttt{T}, \texttt{F} and \texttt{TF} argument specifiers. This allows -them to be used for different \enquote{true}/\enquote{false} branches, -depending on -which outcome the conditional is being used to test. To indicate this -without repetition, this information is given in a shortened form: -\begin{function}[EXP,TF]{\xetex_if_engine:} - \begin{syntax} - \cs{xetex_if_engine:TF} \Arg{true code} \Arg{false code} - \end{syntax} - The underlining and italic of \texttt{TF} indicates that - \cs{xetex_if_engine:T}, \cs{xetex_if_engine:F} and - \cs{xetex_if_engine:TF} are all available. Usually, the illustration - will use the \texttt{TF} variant, and so both \meta{true code} - and \meta{false code} will be shown. The two variant forms \texttt{T} and - \texttt{F} take only \meta{true code} and \meta{false code}, respectively. - Here, the star also shows that this function is expandable. - With some minor exceptions, \emph{all} conditional functions in the - \pkg{expl3} modules should be defined in this way. -\end{function} - -Variables, constants and so on are described in a similar manner: -\begin{variable}{\l_tmpa_tl} - A short piece of text will describe the variable: there is no - syntax illustration in this case. -\end{variable} - -In some cases, the function is similar to one in \LaTeXe{} or plain \TeX{}. -In these cases, the text will include an extra \enquote{\textbf{\TeX{}hackers -note}} section: -\begin{function}[EXP]{\token_to_str:N} - \begin{syntax} - \cs{token_to_str:N} \meta{token} - \end{syntax} - The normal description text. - \begin{texnote} - Detail for the experienced \TeX{} or \LaTeXe\ programmer. In this - case, it would point out that this function is the \TeX{} primitive - \cs{string}. - \end{texnote} -\end{function} - -\section{Formal language conventions which apply generally} - -As this is a formal reference guide for \LaTeX3 programming, the descriptions -of functions are intended to be reasonably \enquote{complete}. However, there -is also a need to avoid repetition. Formal ideas which apply to general -classes of function are therefore summarised here. - -For tests which have a \texttt{TF} argument specification, the test if -evaluated to give a logically \texttt{TRUE} or \texttt{FALSE} result. -Depending on this result, either the \meta{true code} or the \meta{false code} -will be left in the input stream. In the case where the test is expandable, -and a predicate (|_p|) variant is available, the logical value determined by -the test is left in the input stream: this will typically be part of a larger -logical construct. - -\section{\TeX{} concepts not supported by \LaTeX3{}} - -The \TeX{} concept of an \enquote{\cs{outer}} macro is \emph{not supported} -at all by \LaTeX3{}. As such, the functions provided here may break when -used on top of \LaTeXe{} if \cs{outer} tokens are used in the arguments. - -\DisableImplementation - -\DocInput{l3bootstrap.dtx} -\DocInput{l3names.dtx} -\DocInput{l3basics.dtx} -\DocInput{l3expan.dtx} -\DocInput{l3prg.dtx} -\DocInput{l3quark.dtx} -\DocInput{l3token.dtx} -\DocInput{l3int.dtx} -\DocInput{l3skip.dtx} -\DocInput{l3tl.dtx} -\DocInput{l3seq.dtx} -\DocInput{l3clist.dtx} -\DocInput{l3prop.dtx} -\DocInput{l3box.dtx} -\DocInput{l3coffins.dtx} -\DocInput{l3color.dtx} -\DocInput{l3msg.dtx} -\DocInput{l3keys.dtx} -\DocInput{l3file.dtx} -\DocInput{l3fp.dtx} -% To get the various submodules of l3fp to appear in the implementation -% part only, they have to be added to the documentation list after typesetting -% the 'user' part just for the main module. -\ExplSyntaxOn -\clist_gput_right:Nn \g_docinput_clist - { - l3fp-aux.dtx , - l3fp-traps.dtx , - l3fp-round.dtx , - l3fp-parse.dtx , - l3fp-logic.dtx , - l3fp-basics.dtx , - l3fp-extended.dtx , - l3fp-expo.dtx , - l3fp-trig.dtx , - l3fp-convert.dtx , - l3fp-assign.dtx , - l3fp-old.dtx , - } -\ExplSyntaxOff -\DocInput{l3luatex.dtx} - -\DocInput{l3candidates.dtx} -\DocInput{l3drivers.dtx} - -\endinput diff --git a/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e-demo.tex b/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e-demo.tex new file mode 100644 index 00000000000..fda8fa40ff1 --- /dev/null +++ b/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e-demo.tex @@ -0,0 +1,43 @@ +% This file demonstrates the use of the l3keys2e module to allow +% LaTeX3 keyvals (created using l3keys) to be used as LaTeX2e +% package or class options. +% + +% First, create a class +\begin{filecontents}{l3keys2e-class.cls} + \LoadClass{article} + \RequirePackage{l3keys2e} + \ProvidesExplClass{l3keys2e-class}{0000/00/00}{0.0}{test} + \keys_define:nn { test1 } { + option1 .code:n = {\wlog{You~gave~`#1'~for~option1}} + } + \ProcessKeysOptions { test1 } +\end{filecontents} + +% Load the class with some options. +% The class itself recognises `option1', leaving `option2' and +% `option3' as global optons which are not yet used. +\documentclass[option1=check,option2=more stuff,option3=unused] + {l3keys2e-class} + +%Now create a package +\begin{filecontents}{l3keys2e-package.sty} + \RequirePackage{l3keys2e} + \ProvidesExplPackage{l3keys2e-package}{0000/00/00}{0.0}{test} + \keys_define:nn { test2 } { + option1 .code:n = {\wlog{You~gave~`#1'~for~option1~(again)}}, + option2 .code:n = {\wlog{You~gave~`#1'~for~option2}}, + option4 .code:n = {\wlog{You~gave~`#1'~for~option4}}, + } + \ProcessKeysOptions { test2 } +\end{filecontents} + +% Load the package. +\usepackage[option4={extra stuff},option5=undefined!] + {l3keys2e-package} + +\begin{document} +% The log should show that option3 is an unused global option, and that +% option5 is not known by the l3keys2e-demo package. Everything else +% should simply be listed in the log. +\end{document} diff --git a/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf b/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf index 34665dc874b..b554504edf1 100644 Binary files a/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf and b/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf b/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf index 65e3b946f7f..cb0e56c7879 100644 Binary files a/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf and b/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf b/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf index 92fd8031b13..b6918a4e18d 100644 Binary files a/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf and b/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf b/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf index eb1ac41c75a..b2585409aa4 100644 Binary files a/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf and b/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf differ diff --git a/Master/texmf-dist/makeindex/l3kernel/l3doc.ist b/Master/texmf-dist/makeindex/l3kernel/l3doc.ist deleted file mode 100644 index aec04b79c46..00000000000 --- a/Master/texmf-dist/makeindex/l3kernel/l3doc.ist +++ /dev/null @@ -1,72 +0,0 @@ -%% -%% This is file `l3doc.ist', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% l3doc.dtx (with options: `docist') -%% -%% -%% EXPERIMENTAL CODE -%% -%% Do not distribute this file without also distributing the -%% source files specified above. -%% -%% Do not distribute a modified version of this file. -%% -%% -%% File: l3doc.dtx Copyright (C) 1990-2014 The LaTeX3 project -%% -%% It may be distributed and/or modified under the conditions of the -%% LaTeX Project Public License (LPPL), either version 1.3c of this -%% license or (at your option) any later version. The latest version -%% of this license is in the file -%% -%% http://www.latex-project.org/lppl.txt -%% -%% This file is part of the "l3kernel bundle" (The Work in LPPL) -%% and all files in that bundle must be distributed together. -%% -%% The released version of this bundle is available from CTAN. -%% -%% ----------------------------------------------------------------------- -%% -%% The development version of the bundle can be found at -%% -%% http://www.latex-project.org/svnroot/experimental/trunk/ -%% -%% for those people who are interested. -%% -%%%%%%%%%%% -%% NOTE: %% -%%%%%%%%%%% -%% -%% Snapshots taken from the repository represent work in progress and may -%% not work or may contain conflicting material! We therefore ask -%% people _not_ to put them into distributions, archives, etc. without -%% prior consultation with the LaTeX3 Project. -%% -%% ----------------------------------------------------------------------- -actual '=' -quote '!' -level '#' -preamble -"\n \\begin{theindex} \n \\makeatletter\\scan@allowedfalse\n" -postamble -"\n\n \\end{theindex}\n" -item_x1 "\\efill \n \\subitem " -item_x2 "\\efill \n \\subsubitem " -delim_0 "\\pfill " -delim_1 "\\pfill " -delim_2 "\\pfill " -lethead_prefix "{\\bfseries\\hfil " -lethead_suffix "\\hfil}\\nopagebreak\n" -lethead_flag 1 -heading_prefix "{\\bfseries\\hfil " -heading_suffix "\\hfil}\\nopagebreak\n" -headings_flag 1 - -page_precedence "rnaA" -%% -%% -%% End of file `l3doc.ist'. diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3flag.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3flag.dtx index 64d23d43896..57a2aed221e 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3flag.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3flag.dtx @@ -35,7 +35,7 @@ % %<*driver|package> \RequirePackage{expl3} -\GetIdInfo$Id: l3flag.dtx 3039 2011-12-08 09:22:35Z bruno $ +\GetIdInfo$Id: l3flag.dtx 4745 2014-05-06 10:41:27Z joseph $ {L3 Experimental flags} % %<*driver> diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx index 8e61c59d187..00eeafe26e1 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3regex.dtx @@ -35,7 +35,7 @@ % %<*driver|package> \RequirePackage{expl3} -\GetIdInfo$Id: l3regex.dtx 4623 2013-12-14 13:53:40Z bruno $ +\GetIdInfo$Id: l3regex.dtx 5067 2014-06-06 16:51:35Z bruno $ {L3 Experimental regular expressions} % %<*driver> @@ -589,7 +589,6 @@ % % Additional error-checking to come. % \begin{itemize} -% \item Detect that a trailing |\c|\meta{category} is an invalid regex. % \item Currently, |a{\x34}| is recognized as |a{4}|. % \item Cleaner error reporting in the replacement phase. % \item Add tracing information. @@ -598,6 +597,8 @@ % \item Find out whether the fact that |\W| and friends match the % end-marker leads to bugs. Possibly update \cs{__regex_item_reverse:n}. % \item Enforce that |\cC| can only be followed by a match-all dot. +% \item The empty cs should be matched by |\c{}|, not by +% |\c{csname.?endcsname\s?}|. % \end{itemize} % % Code improvements to come. @@ -1396,7 +1397,7 @@ % \end{macro} % \end{macro} % -% \begin{macro}[aux]{\@@_escape_x_test:N} +% \begin{macro}[aux]{\@@_escape_x_test:N, \@@_escape_x_testii:N} % Find out whether the first character is a left brace (allowing any % number of hexadecimal digits), or not (allowing up to two % hexadecimal digits). We need to check for the end-of-string marker. @@ -1410,12 +1411,12 @@ \if_charcode:w \c_space_token #1 \exp_after:wN \@@_escape_x_test:N \else: - \exp_after:wN \@@_escape_x_test_two:N + \exp_after:wN \@@_escape_x_testii:N \exp_after:wN #1 \fi: } } -\cs_new:Npn \@@_escape_x_test_two:N #1 +\cs_new:Npn \@@_escape_x_testii:N #1 { \if_charcode:w \c_left_brace_str #1 \exp_after:wN \@@_escape_x_loop:N @@ -1443,32 +1444,39 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}[aux]{\@@_escape_x_loop:N} +% \begin{macro}[aux]{\@@_escape_x_loop:N, \@@_escape_x_loop_error:} % Grab hexadecimal digits, skip spaces, and at the end, check that % there is a right brace, otherwise raise an error outside the % assignment. % \begin{macrocode} \cs_new:Npn \@@_escape_x_loop:N #1 { - \__str_hexadecimal_use:NTF #1 - { \@@_escape_x_loop:N } + \str_if_eq_x:nnTF {#1} { break } + { ; \@@_escape_x_loop_error:n { } {#1} } { - \token_if_eq_charcode:NNTF \c_space_token #1 + \__str_hexadecimal_use:NTF #1 { \@@_escape_x_loop:N } { - ; - \exp_after:wN \token_if_eq_charcode:NNTF \c_right_brace_str #1 - { \@@_escape_loop:N } + \token_if_eq_charcode:NNTF \c_space_token #1 + { \@@_escape_x_loop:N } { - \if_false: { \fi: } - \__tl_build_one:o \l_@@_internal_b_tl - \__msg_kernel_error:nn { regex } { x-missing-rbrace } {#1} - \tl_set:Nx \l_@@_internal_b_tl - { \if_false: } \fi: \@@_escape_loop:N #1 + ; + \exp_after:wN + \token_if_eq_charcode:NNTF \c_right_brace_str #1 + { \@@_escape_loop:N } + { \@@_escape_x_loop_error:n {#1} } } } } } +\cs_new:Npn \@@_escape_x_loop_error:n #1 + { + \if_false: { \fi: } + \__tl_build_one:o \l_@@_internal_b_tl + \__msg_kernel_error:nnx { regex } { x-missing-rbrace } {#1} + \tl_set:Nx \l_@@_internal_b_tl + { \if_false: } \fi: \@@_escape_loop:N #1 + } % \end{macrocode} % \end{macro} % @@ -1916,7 +1924,10 @@ % alphanumerics, and raw characters, interpreting |\a|, |\x| and other % sequences. The $4$ trailing \cs{prg_do_nothing:} are needed because % some functions defined later look up to $4$ tokens ahead. Before -% ending, make sure that any |\c{...}| is properly closed. +% ending, make sure that any |\c{...}| is properly closed. No need to +% check that brackets are closed properly since \cs{@@_compile_end:} +% does that. However, catch the case of a trailing |\cL| +% construction. % \begin{macrocode} \cs_new_protected:Npn \@@_compile:n #1 { @@ -1936,6 +1947,8 @@ { #1 } \prg_do_nothing: \prg_do_nothing: \prg_do_nothing: \prg_do_nothing: + \int_compare:nNnT \l_@@_mode_int = \c_two + { \__msg_kernel_error:nn { regex } { c-trailing } } \int_compare:nNnT \l_@@_mode_int < \c_zero { \__msg_kernel_error:nn { regex } { c-missing-rbrace } @@ -2662,7 +2675,7 @@ { @@_compile_special_group_\token_to_str:N #4 :w } { \__msg_kernel_warning:nnx { regex } { special-group-unknown } - { (? \token_to_str:N #4 } + { (? #4 } \@@_compile_group_begin:N \@@_group:nnnN \@@_compile_raw:N ? #3 #4 } @@ -5672,35 +5685,36 @@ % Messages for the preparsing phase. % \begin{macrocode} \__msg_kernel_new:nnnn { regex } { trailing-backslash } - { Trailing~escape~character~\iow_char:N\\. } + { Trailing~escape~character~`\iow_char:N\\'. } { A~regular~expression~or~its~replacement~text~ends~with~ - the~escape~character~\iow_char:N\\.~It~will~be~ignored. + the~escape~character~`\iow_char:N\\'.~It~will~be~ignored. } \__msg_kernel_new:nnnn { regex } { x-missing-rbrace } - { Missing~closing~brace~in~\iow_char:N\\x~hexadecimal~sequence. } + { Missing~closing~brace~in~`\iow_char:N\\x'~hexadecimal~sequence. } { You~wrote~something~like~ - `\iow_char:N\\x\{\int_to_hexadecimal:n{#1}'.~ + `\iow_char:N\\x\{...#1'.~ The~closing~brace~is~missing. } \__msg_kernel_new:nnnn { regex } { x-overflow } - { Character~code~'#1'~too~large~in~\iow_char:N\\x~hexadecimal~sequence. } + { Character~code~`#1'~too~large~in~`\iow_char:N\\x'~hexadecimal~sequence. } { You~wrote~something~like~ `\iow_char:N\\x\{\int_to_hexadecimal:n{#1}\}'.~ - The~character~code~'#1'~is~larger~than~\int_use:N \c_max_char_int. + The~character~code~#1~is~larger~than~ + the~maximum~value~\int_use:N \c_max_char_int. } % \end{macrocode} % % Invalid quantifier. % \begin{macrocode} \__msg_kernel_new:nnnn { regex } { invalid-quantifier } - { Braced~quantifier~'#1'~may~not~be~followed~by~'#2'. } + { Braced~quantifier~`#1'~may~not~be~followed~by~`#2'. } { - The~character~'#2'~is~invalid~in~the~braced~quantifier~'#1'.~ - The~only~valid~quantifiers~are~'*',~'?',~'+',~'{}',~ - '{,}'~and~'{,}',~followed~or~not~by~'?'. + The~character~`#2'~is~invalid~in~the~braced~quantifier~`#1'.~ + The~only~valid~quantifiers~are~`*',~`?',~`+',~`{}',~ + `{,}'~and~`{,}',~optionally~followed~by~`?'. } % \end{macrocode} % @@ -5711,17 +5725,17 @@ { Missing~right~bracket~inserted~in~regular~expression. } { LaTeX~was~given~a~regular~expression~where~a~character~class~ - was~started~with~'[',~but~the~matching~']'~is~missing. + was~started~with~`[',~but~the~matching~`]'~is~missing. } \__msg_kernel_new:nnnn { regex } { missing-rparen } { - Missing~right~parenthes\int_compare:nTF{#1=1}{i}{e}s~ + Missing~right~ + \int_compare:nTF { #1 = 1 } { parenthesis } { parentheses } ~ inserted~in~regular~expression. } { - LaTeX~was~given~a~regular~expression~with~\int_eval:n{#1}~ - more~left~parenthes\int_compare:nTF{#1=1}{i}{e}s~than~right~ - parenthes\int_compare:nTF{#1=1}{i}{e}s. + LaTeX~was~given~a~regular~expression~with~\int_eval:n {#1} ~ + more~left~parentheses~than~right~parentheses. } \__msg_kernel_new:nnnn { regex } { extra-rparen } { Extra~right~parenthesis~ignored~in~regular~expression. } @@ -5735,7 +5749,7 @@ % \begin{macrocode} \__msg_kernel_new:nnnn { regex } { bad-escape } { - Invalid~escape~\c_backslash_str #1~ + Invalid~escape~`\iow_char:N\\#1'~ \@@_if_in_cs:TF { within~a~control~sequence. } { \@@_if_in_class:TF @@ -5744,16 +5758,16 @@ } } { - The~escape~sequence~\iow_char:N\\#1~may~not~appear~ + The~escape~sequence~`\iow_char:N\\#1'~may~not~appear~ \@@_if_in_cs:TF { within~a~control~sequence~test~introduced~by~ - \iow_char:N\\c\iow_char:N\{. + `\iow_char:N\\c\iow_char:N\{'. } { \@@_if_in_class:TF { within~a~character~class~ } - { following~a~category~test~such~as~\iow_char:N\\cL~ } + { following~a~category~test~such~as~`\iow_char:N\\cL'~ } because~it~does~not~match~exactly~one~character. } } @@ -5762,90 +5776,96 @@ % Range errors. % \begin{macrocode} \__msg_kernel_new:nnnn { regex } { range-missing-end } - { Invalid~end-point~for~range~'#1-#2'~in~character~class. } + { Invalid~end-point~for~range~`#1-#2'~in~character~class. } { - The~end-point~'#2'~of~the~range~'#1-#2'~may~not~serve~as~an~ + The~end-point~`#2'~of~the~range~`#1-#2'~may~not~serve~as~an~ end-point~for~a~range:~alphanumeric~characters~should~not~be~ escaped,~and~non-alphanumeric~characters~should~be~escaped. } \__msg_kernel_new:nnnn { regex } { range-backwards } - { Range~[#1-#2]~out~of~order~in~character~class. } + { Range~`[#1-#2]'~out~of~order~in~character~class. } { - In~ranges~of~characters~[x-y]~appearing~in~character~classes,~ + In~ranges~of~characters~`[x-y]'~appearing~in~character~classes,~ the~first~character~code~must~not~be~larger~than~the~second.~ - Here,~#1~has~character~code~\int_eval:n {`#1},~while~#2~has~ - character~code~\int_eval:n {`#2}. + Here,~`#1'~has~character~code~\int_eval:n {`#1},~while~ + `#2'~has~character~code~\int_eval:n {`#2}. } % \end{macrocode} % % Errors related to |\c| and |\u|. % \begin{macrocode} \__msg_kernel_new:nnnn { regex } { c-bad-mode } - { Invalid~nested~\iow_char:N\\c~escape~in~regular~expression. } + { Invalid~nested~`\iow_char:N\\c'~escape~in~regular~expression. } { - The~\iow_char:N\\c~escape~cannot~be~used~within~ - a~control~sequence~test~'\iow_char:N\\c{...}'.~ - To~combine~several~category~tests,~use~'\iow_char:N\\c[...]'. + The~`\iow_char:N\\c'~escape~cannot~be~used~within~ + a~control~sequence~test~`\iow_char:N\\c{...}'.~ + To~combine~several~category~tests,~use~`\iow_char:N\\c[...]'. } \__msg_kernel_new:nnnn { regex } { c-missing-rbrace } - { Missing~right~brace~inserted~for~\iow_char:N\\c~escape. } + { Missing~right~brace~inserted~for~`\iow_char:N\\c'~escape. } { LaTeX~was~given~a~regular~expression~where~a~ - '\iow_char:N\\c\iow_char:N\{...'~construction~was~not~ended~ - with~a~closing~brace~'\iow_char:N\}'. + `\iow_char:N\\c\iow_char:N\{...'~construction~was~not~ended~ + with~a~closing~brace~`\iow_char:N\}'. } \__msg_kernel_new:nnnn { regex } { c-missing-rbrack } - { Missing~right~bracket~inserted~for~\iow_char:N\\c~escape. } + { Missing~right~bracket~inserted~for~`\iow_char:N\\c'~escape. } { - A~construction~'\iow_char:N\\c[...'~appears~in~a~ - regular~expression,~but~the~closing~']'~is~not~present. + A~construction~`\iow_char:N\\c[...'~appears~in~a~ + regular~expression,~but~the~closing~`]'~is~not~present. } \__msg_kernel_new:nnnn { regex } { c-missing-category } - { Invalid~character~'#1'~following~\iow_char:N\\c~escape. } + { Invalid~character~`#1'~following~`\iow_char:N\\c'~escape. } { - In~regular~expressions,~the~\iow_char:N\\c~escape~sequence~ + In~regular~expressions,~the~`\iow_char:N\\c'~escape~sequence~ may~only~be~followed~by~a~left~brace,~a~left~bracket,~or~a~ capital~letter~representing~a~character~category,~namely~ - one~of~ABCDELMOPSTU. + one~of~`ABCDELMOPSTU'. + } +\__msg_kernel_new:nnnn { regex } { c-trailing } + { Trailing~category~code~escape~`\iow_char:N\\c'... } + { + A~regular~expression~ends~with~`\iow_char:N\\c'~followed~ + by~a~letter.~It~will~be~ignored. } \__msg_kernel_new:nnnn { regex } { u-missing-lbrace } - { Missing~left~brace~following~\iow_char:N\\u~escape. } + { Missing~left~brace~following~`\iow_char:N\\u'~escape. } { - The~\iow_char:N\\u~escape~sequence~must~be~followed~by~ + The~`\iow_char:N\\u'~escape~sequence~must~be~followed~by~ a~brace~group~with~the~name~of~the~variable~to~use. } \__msg_kernel_new:nnnn { regex } { u-missing-rbrace } - { Missing~right~brace~inserted~for~\iow_char:N\\u~escape. } + { Missing~right~brace~inserted~for~`\iow_char:N\\u'~escape. } { LaTeX~ \str_if_eq_x:nnTF { } {#2} { reached~the~end~of~the~string~ } - { encountered~an~escaped~alphanumeric~character '\iow_char:N\\#2'~ } - when~parsing~the~argument~of~an~'\iow_char:N\\u\iow_char:N\{...\}'~escape. + { encountered~an~escaped~alphanumeric~character `\iow_char:N\\#2'~ } + when~parsing~the~argument~of~an~`\iow_char:N\\u\iow_char:N\{...\}'~escape. } % \end{macrocode} % % Errors when encountering the \textsc{posix} syntax |[:...:]|. % \begin{macrocode} \__msg_kernel_new:nnnn { regex } { posix-unsupported } - { POSIX~collating~element~'[#1 ~ #1]'~not~supported. } + { POSIX~collating~element~`[#1 ~ #1]'~not~supported. } { - The~[.foo.]~and~[=bar=]~syntaxes~have~a~special~meaning~in~POSIX~ - regular~expressions.~This~is~not~supported~by~LaTeX.~Maybe~you~ - forgot~to~escape~a~left~bracket~in~a~character~class? + The~`[.foo.]'~and~`[=bar=]'~syntaxes~have~a~special~meaning~ + in~POSIX~regular~expressions.~This~is~not~supported~by~LaTeX.~ + Maybe~you~forgot~to~escape~a~left~bracket~in~a~character~class? } \__msg_kernel_new:nnnn { regex } { posix-unknown } - { POSIX~class~[:#1:]~unknown. } + { POSIX~class~`[:#1:]'~unknown. } { - [:#1:]~is~not~among~the~known~POSIX~classes~ - [:alnum:],~[:alpha:],~[:ascii:],~[:blank:],~ - [:cntrl:],~[:digit:],~[:graph:],~[:lower:],~ - [:print:],~[:punct:],~[:space:],~[:upper:],~ - [:word:],~and~[:xdigit:]. + `[:#1:]'~is~not~among~the~known~POSIX~classes~ + `[:alnum:]',~`[:alpha:]',~`[:ascii:]',~`[:blank:]',~ + `[:cntrl:]',~`[:digit:]',~`[:graph:]',~`[:lower:]',~ + `[:print:]',~`[:punct:]',~`[:space:]',~`[:upper:]',~ + `[:word:]',~and~`[:xdigit:]'. } \__msg_kernel_new:nnnn { regex } { posix-missing-close } - { Missing~closing~':]'~for~POSIX~class. } - { The~POSIX~syntax~'#1'~must~be~followed~by~':]',~not~'#2'. } + { Missing~closing~`:]'~for~POSIX~class. } + { The~POSIX~syntax~`#1'~must~be~followed~by~`:]',~not~`#2'. } % \end{macrocode} % % In various cases, the result of a \pkg{l3regex} operation can leave us @@ -5867,59 +5887,68 @@ \__msg_kernel_new:nnnn { regex } { unknown-option } { Unknown~option~`#1'~for~regular~expressions. } { - The~only~available~option~is~'case-insensitive',~toggled~by~ - '(?i)'~and~'(?-i)'. + The~only~available~option~is~`case-insensitive',~toggled~by~ + `(?i)'~and~`(?-i)'. + } +\__msg_kernel_new:nnnn { regex } { special-group-unknown } + { Unknown~special~group~`#1~...'~in~a~regular~expression. } + { + The~only~valid~constructions~starting~with~`(?'~are~ + `(?:~...~)',~`(?|~...~)',~`(?i)',~and~`(?-i)'. } % \end{macrocode} % % Errors in the replacement text. % \begin{macrocode} \__msg_kernel_new:nnnn { regex } { replacement-c } - { Misused~\iow_char:N\\c~command~in~a~replacement~text. } + { Misused~`\iow_char:N\\c'~command~in~a~replacement~text. } { - In~a~replacement~text,~the~\iow_char:N\\c~escape~sequence~ - can~be~followed~by~one~of~the~letters~ABCDELMOPSTU~ - or~a~brace~group,~not~by~'#1'. + In~a~replacement~text,~the~`\iow_char:N\\c'~escape~sequence~ + can~be~followed~by~one~of~the~letters~`ABCDELMOPSTU'~ + or~a~brace~group,~not~by~`#1'. } \__msg_kernel_new:nnnn { regex } { replacement-u } - { Misused~\iow_char:N\\u~command~in~a~replacement~text. } + { Misused~`\iow_char:N\\u'~command~in~a~replacement~text. } { - In~a~replacement~text,~the~\iow_char:N\\u~escape~sequence~ + In~a~replacement~text,~the~`\iow_char:N\\u'~escape~sequence~ must~be~~followed~by~a~brace~group~holding~the~name~of~the~ variable~to~use. } \__msg_kernel_new:nnnn { regex } { replacement-g } - { Missing~brace~for~the~\iow_char:N\\g~construction~in~a~replacement~text. } + { + Missing~brace~for~the~`\iow_char:N\\g'~construction~ + in~a~replacement~text. + } { In~the~replacement~text~for~a~regular~expression~search,~ - submatches~are~represented~either~as~\iow_char:N \\g{dd..d},~ - or~\\d,~where~`d'~are~single~digits.~Here,~a~brace~is~missing. + submatches~are~represented~either~as~`\iow_char:N \\g{dd..d}',~ + or~`\\d',~where~`d'~are~single~digits.~Here,~a~brace~is~missing. } \__msg_kernel_new:nnnn { regex } { replacement-catcode-end } { - Missing~character~for~the~\iow_char:N\\c~ + Missing~character~for~the~`\iow_char:N\\c'~ construction~in~a~replacement~text. } { - In~a~replacement~text,~the~\iow_char:N\\c~escape~sequence~ - can~be~followed~by~one~of~the~letters~ABCDELMOPSTU~representing~ + In~a~replacement~text,~the~`\iow_char:N\\c'~escape~sequence~ + can~be~followed~by~one~of~the~letters~`ABCDELMOPSTU'~representing~ the~character~category.~Then,~a~character~must~follow.~LaTeX~ reached~the~end~of~the~replacement~when~looking~for~that. } \__msg_kernel_new:nnnn { regex } { replacement-null-space } { TeX~cannot~build~a~space~token~with~character~code~0. } { - You~asked~for~a~character~token~with~category~'space',~ + You~asked~for~a~character~token~with~category~space,~ and~character~code~0,~for~instance~through~ - '\iow_char:N\\cS\iow_char:N\\x00'.~ + `\iow_char:N\\cS\iow_char:N\\x00'.~ This~specific~case~is~impossible~and~will~be~replaced~ by~a~normal~space. } \__msg_kernel_new:nnnn { regex } { replacement-missing-rbrace } { Missing~right~brace~inserted~in~replacement~text. } { - There~were~\int_use:N \l_@@_replacement_csnames_int \ - missing~right~braces. + There~ \int_compare:nTF { #1 = 1 } { was } { were } ~ #1~ + missing~right~\int_compare:nTF { #1 = 1 } { brace } { braces } . } % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx index 02b7a6cfc0e..5e35c5029d4 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx @@ -35,7 +35,7 @@ % %<*driver|package> \RequirePackage{expl3} -\GetIdInfo$Id: l3str-convert.dtx 4339 2013-01-08 10:22:00Z bruno $ +\GetIdInfo$Id: l3str-convert.dtx 5028 2014-06-03 17:04:19Z bruno $ {L3 Experimental string encoding conversions} % %<*driver> @@ -253,6 +253,11 @@ % % Encoding/escaping-related tasks. % \begin{itemize} +% \item In \XeTeX{}/\LuaTeX{}, would it be better to use the +% |^^^^....| approach to build a string from a given list of +% character codes? Namely, within a group, assign |0-9a-f| and all +% characters we want to category ``other'', then assign~|^| the +% category superscript, and use \tn{scantokens}. % \item Change \cs{str_set_convert:Nnnn} to expand its last two % arguments. % \item Describe the internal format in the code comments. Refuse code @@ -1166,7 +1171,6 @@ { \cs_new_protected_nopar:Npn \@@_convert_encode_: { - \int_zero:N \l__tl_build_offset_int \__tl_gbuild_x:Nw \g_@@_result_tl \exp_after:wN \@@_encode_native_loop:w \g_@@_result_tl \s__tl { \q_stop \__prg_break: } \s__tl diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx index 22a78320431..24d50400ac3 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx @@ -35,7 +35,7 @@ % %<*driver|package> \RequirePackage{expl3} -\GetIdInfo$Id: l3str-format.dtx 3940 2012-07-09 00:41:44Z bruno $ +\GetIdInfo$Id: l3str-format.dtx 4745 2014-05-06 10:41:27Z joseph $ {L3 Experimental string formatting} % %<*driver> diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.dtx index 17c2b53a187..09d44a5f28c 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.dtx @@ -35,7 +35,7 @@ % %<*driver|package> \RequirePackage{expl3} -\GetIdInfo$Id: l3str.dtx 4728 2014-05-04 13:25:37Z joseph $ +\GetIdInfo$Id: l3str.dtx 4889 2014-05-26 19:59:25Z joseph $ {L3 Experimental strings} % %<*driver> @@ -981,7 +981,7 @@ % \begin{macrocode} \prg_new_conditional:Npnn \str_if_eq:NN #1#2 { p , TF , T , F } { - \if_int_compare:w \pdftex_strcmp:D { \tl_to_str:N #1 } { \tl_to_str:N #2 } + \if_int_compare:w \__str_if_eq_x:nn { \tl_to_str:N #1 } { \tl_to_str:N #2 } = \c_zero \prg_return_true: \else: \prg_return_false: \fi: } % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-analysis.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-analysis.dtx index b9e5bbd087e..69a198da208 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-analysis.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-analysis.dtx @@ -35,7 +35,7 @@ % %<*driver|package> \RequirePackage{expl3} -\GetIdInfo$Id: l3tl-analysis.dtx 3039 2011-12-08 09:22:35Z bruno $ +\GetIdInfo$Id: l3tl-analysis.dtx 4745 2014-05-06 10:41:27Z joseph $ {L3 Experimental token lists analysis} % %<*driver> diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx index 5c4787cc5aa..a64e2937d12 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3tl-build.dtx @@ -35,7 +35,7 @@ % %<*driver|package> \RequirePackage{expl3} -\GetIdInfo$Id: l3tl-build.dtx 3039 2011-12-08 09:22:35Z bruno $ +\GetIdInfo$Id: l3tl-build.dtx 4745 2014-05-06 10:41:27Z joseph $ {L3 Experimental token list construction} % %<*driver> diff --git a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx index 9a757ce9240..a36906f5137 100644 --- a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx @@ -36,8 +36,8 @@ %<*driver|generic|package> \def\ExplFileName{expl3} \def\ExplFileDescription{L3 programming layer} -\def\ExplFileDate{2014/05/20} -\def\ExplFileVersion{4814} +\def\ExplFileDate{2014/06/10} +\def\ExplFileVersion{5105} % %<*driver> \documentclass[full]{l3doc} @@ -946,10 +946,10 @@ % Selects the driver to be used for color, graphics and related operations that % are driver-dependent. Options available are % \begin{itemize}[font = \texttt] -% \item[latex2e] Use the \pkg{graphics} package to select the driver, rather -% than \LaTeX3 code. This is the standard setting. % \item[auto] Let \LaTeX3 determine the correct driver. With DVI output, this -% will select the \texttt{dvips} back-end. +% will select the \texttt{dvips} back-end. This is the standard setting. +% \item[latex2e] Use the \pkg{graphics} package to select the driver, rather +% than \LaTeX3 code. % \item[dvips] Use the \texttt{dvips} driver. % \item[dvipdfmx] Use the \texttt{dvipdfmx} driver. % \item[pdfmode] Use the \texttt{pdfmode} driver (direct PDF output from @@ -1156,13 +1156,6 @@ ] % \end{macrocode} % -% For handling driver options the \pkg{ifpdf} package will be needed. To -% avoid issues during package loading, it's most convenient to load this before -% setting up any of the code environment. -% \begin{macrocode} -\RequirePackage{ifpdf} -% \end{macrocode} -% % \begin{macro}[aux]{\expl@create@bool@option} % \begin{variable}[int] % { @@ -1253,6 +1246,7 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}[int, TF]{\__expl_if_pdf:} % \begin{variable}[int]{\l__expl_driver_tl} % \begin{variable}[int]{\l__expl_native_drivers_bool} % With the code now loaded, options can be handled using a real key--value @@ -1268,19 +1262,35 @@ active~engine.~LaTeX3~will~use~the~'#2'~driver~instead. } \tl_new:N \l__expl_driver_tl +\bool_if:nTF + { + \cs_if_exist_p:N \pdftex_pdfoutput:D + && \int_compare_p:nNn \pdftex_pdfoutput:D > \c_zero + } + { + \cs_new_eq:NN \__expl_if_pdf:T \use:n + \cs_new_eq:NN \__expl_if_pdf:F \use_none:n + \cs_new_eq:NN \__expl_if_pdf:TF \use_i:nn + } + { + \cs_new_eq:NN \__expl_if_pdf:T \use_none:n + \cs_new_eq:NN \__expl_if_pdf:F \use:n + \cs_new_eq:NN \__expl_if_pdf:TF \use_ii:nn + } \keys_define:nn { expl } { driver .choice:, driver / auto .code:n = { - \xetex_if_engine:TF - { \tl_set:Nn \l__expl_driver_tl { xdvipdfmx } } + \tl_set:Nx \l__expl_driver_tl { - \ifpdf - \tl_set:Nn \l__expl_driver_tl { pdfmode } - \else - \tl_set:Nn \l__expl_driver_tl { dvips } - \fi + \xetex_if_engine:TF + { xdvipdfmx } + { + \__expl_if_pdf:TF + { pdfmode } + { dvips } + } } }, driver / dvipdfmx .code:n = @@ -1290,14 +1300,15 @@ { \__msg_kernel_error:nnnn { expl } { wrong-driver } { dvipdfmx } { xdvipdfmx } - \tl_set:Nn \l__expl_driver_tl { xdvipdmx } + \tl_set:Nn \l__expl_driver_tl { xdvipdfmx } } { - \ifpdf - \__msg_kernel_error:nnnn { expl } { wrong-driver } - { dvipdfmx } { pdfmode } - \tl_set:Nn \l__expl_driver_tl { pdfmode } - \fi + \__expl_if_pdf:T + { + \__msg_kernel_error:nnnn { expl } { wrong-driver } + { dvipdfmx } { pdfmode } + \tl_set:Nn \l__expl_driver_tl { pdfmode } + } } }, driver / dvips .code:n = @@ -1310,11 +1321,12 @@ \tl_set:Nn \l__expl_driver_tl { xdvipdfmx } } { - \ifpdf - \__msg_kernel_error:nnnn { expl } { wrong-driver } - { dvips } { pdfmode } - \tl_set:Nn \l__expl_driver_tl { pdfmode } - \fi + \__expl_if_pdf:T + { + \__msg_kernel_error:nnnn { expl } { wrong-driver } + { dvips } { pdfmode } + \tl_set:Nn \l__expl_driver_tl { pdfmode } + } } }, driver / latex2e .code:n = @@ -1329,12 +1341,12 @@ \tl_set:Nn \l__expl_driver_tl { xdvipdfmx } } { - \ifpdf - \else - \__msg_kernel_error:nnnn { expl } { wrong-driver } - { pdfmode } { dvips } - \tl_set:Nn \l__expl_driver_tl { dvips } - \fi + \__expl_if_pdf:F + { + \__msg_kernel_error:nnnn { expl } { wrong-driver } + { pdfmode } { dvips } + \tl_set:Nn \l__expl_driver_tl { dvips } + } } }, driver / xdvipdfmx .code:n = @@ -1342,18 +1354,20 @@ \tl_set:Nn \l__expl_driver_tl { xdvipdfmx } \xetex_if_engine:F { - \ifpdf - \__msg_kernel_error:nnnn { expl } { wrong-driver } - { xdvipdfmx } { pdfmode } - \tl_set:Nn \l__expl_driver_tl { pdfmode } - \else - \__msg_kernel_error:nnnn { expl } { wrong-driver } - { xdvipdfmx } { dvips } - \tl_set:Nn \l__expl_driver_tl { dvips } - \fi + \__expl_if_pdf:TF + { + \__msg_kernel_error:nnnn { expl } { wrong-driver } + { xdvipdfmx } { pdfmode } + \tl_set:Nn \l__expl_driver_tl { pdfmode } + } + { + \__msg_kernel_error:nnnn { expl } { wrong-driver } + { xdvipdfmx } { dvips } + \tl_set:Nn \l__expl_driver_tl { dvips } + } } }, - driver .initial:n = { latex2e } , + driver .initial:n = { auto } , native-drivers .choice:, native-drivers .default:n = { true }, native-drivers / false .meta:n = { driver = latex2e }, @@ -1371,6 +1385,7 @@ % \end{macrocode} % \end{variable} % \end{variable} +% \end{macro} % % \begin{macro} % { @@ -1446,8 +1461,17 @@ % loader, \cs{ProvidesExplFile} is temporarily redefined here. % \begin{macrocode} { - \cs_set_protected:Npn \ProvidesExplFile #1#2#3#4 - { \ProvidesFile {#1} [ #2~v#3~#4 ] } + \cs_set_protected:Npn \ProvidesExplFile + { + \group_begin: + \char_set_catcode_space:n { `\ } + \ProvidesExplFileAux + } + \cs_set_protected:Npn \ProvidesExplFileAux #1#2#3#4 + { + \group_end: + \ProvidesFile {#1} [ #2~v#3~#4 ] + } \tl_const:Nn \c__expl_def_ext_tl { def } \@onefilewithoptions { l3 \l__expl_driver_tl } [ ] [ ] \c__expl_def_ext_tl \cs_set_protected:Npn \ProvidesExplFile #1#2#3#4 @@ -1455,6 +1479,7 @@ \ProvidesFile {#1} [ #2~v#3~#4 ] \ExplSyntaxOn } + \cs_undefine:N \ProvidesExplFileAux } % \end{macrocode} % \end{variable} @@ -1649,11 +1674,13 @@ \xetex_if_engine:TF { xdvipdfmx } { - \ifpdf - pdfmode - \else - dvips - \fi + \bool_if:nTF + { + \cs_if_exist_p:N \pdftex_pdfoutput:D + && \int_compare_p:nNn \pdftex_pdfoutput:D > \c_zero + } + { pdfmode } + { dvips } } .def \scan_stop: \cs_undefine:N \ProvidesExplFile diff --git a/Master/texmf-dist/source/latex/l3kernel/interface3.tex b/Master/texmf-dist/source/latex/l3kernel/interface3.tex new file mode 100644 index 00000000000..4c0a2761e92 --- /dev/null +++ b/Master/texmf-dist/source/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/source/latex/l3kernel/l3.ins b/Master/texmf-dist/source/latex/l3kernel/l3.ins new file mode 100644 index 00000000000..72b9fa583c3 --- /dev/null +++ b/Master/texmf-dist/source/latex/l3kernel/l3.ins @@ -0,0 +1,96 @@ +\iffalse meta-comment + +File l3.ins Copyright (C) 2011,2012,2014 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{expl3-code.tex} + { + % ======== PACKAGE ONLY ======== + \from{expl3.dtx} {package} + % ============================== + \from{l3bootstrap.dtx} {package} + \from{l3names.dtx} {package} + \from{l3basics.dtx} {package} + \from{l3expan.dtx} {package} + \from{l3tl.dtx} {package} + \from{l3seq.dtx} {package} + \from{l3int.dtx} {package} + \from{l3quark.dtx} {package} + \from{l3prg.dtx} {package} + \from{l3clist.dtx} {package} + \from{l3token.dtx} {package} + \from{l3prop.dtx} {package} + \from{l3msg.dtx} {package} + \from{l3file.dtx} {package} + \from{l3skip.dtx} {package} + \from{l3keys.dtx} {package} + \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{l3box.dtx} {package} + \from{l3coffins.dtx} {package} + \from{l3color.dtx} {package} + \from{l3candidates.dtx} {package} + } + } + +\generate{\file{expl3.sty} {\from{expl3.dtx} {package,loader}}} +\generate{\file{expl3-generic.tex}{\from{expl3.dtx} {generic,loader}}} + +\generate{\file{l3doc.cls} {\from{l3doc.dtx} {class}}} +\generate{\file{l3doc.ist} {\from{l3doc.dtx} {docist}}} + +\generate{\file{l3dvipdfmx.def} {\from{l3drivers.dtx} {package,dvipdfmx} }} +\generate{\file{l3dvips.def} {\from{l3drivers.dtx} {package,dvips} }} +\generate{\file{l3pdfmode.def} {\from{l3drivers.dtx} {package,pdfmode} }} +\generate{\file{l3xdvipdfmx.def} {\from{l3drivers.dtx} {package,xdvipdfmx}}} + +\generate{\file{l3docstrip.tex} {\from{l3docstrip.dtx} {program}}} + +\generate{\file{l3names.def} {\from{l3names.dtx} {names}}} + +\endbatchfile diff --git a/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx index 54fcf80009b..339eb9eacb1 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx @@ -37,7 +37,7 @@ \documentclass[full]{l3doc} % %<*driver|package> -\GetIdInfo$Id: l3basics.dtx 4728 2014-05-04 13:25:37Z joseph $ +\GetIdInfo$Id: l3basics.dtx 5033 2014-06-04 05:32:44Z joseph $ {L3 Basic definitions} % %<*driver> @@ -1367,7 +1367,7 @@ % such that internal parts of the mechanism are not visible. % \end{function} % -% \begin{function}{\__prg_case_end:nw} +% \begin{function}[EXP]{\__prg_case_end:nw} % \begin{syntax} % \cs{__prg_case_end:nw} \Arg{code} \meta{tokens} \cs{q_mark} \Arg{true code} \cs{q_mark} \Arg{false code} \cs{q_stop} % \end{syntax} @@ -1377,8 +1377,18 @@ % case (if one is found) and either the \texttt{true code} or % \texttt{false code} for the over all outcome, as appropriate. % \end{function} +% +% \begin{function}[EXP]{\__str_if_eq_x:nn} +% \begin{syntax} +% \cs{__str_if_eq_x:nn} \Arg{tl_1} \Arg{tl_2} +% \end{syntax} +% Compares the full expansion of two \meta{token lists} on a character by +% character basis, and is \texttt{true} if the two lists contain the same +% characters in the same order. Leaves |0| in the input stream if the +% condition is true, and |+1| or |-1| otherwise. +% \end{function} % -% \begin{function}{\__str_if_eq_x_return:nn} +% \begin{function}[EXP]{\__str_if_eq_x_return:nn} % \begin{syntax} % \cs{__str_if_eq_x_return:nn} \Arg{tl_1} \Arg{tl_2} % \end{syntax} @@ -2506,6 +2516,7 @@ % \cs_new_protected_nopar:Npn , \cs_new_protected_nopar:Npx , % \cs_new_protected:Npn , \cs_new_protected:Npx % } +% \begin{macro}[int]{\__cs_tmp:w} % Function which check that the control sequence is free before % defining it. % \begin{macrocode} @@ -2527,6 +2538,7 @@ \__cs_tmp:w \cs_new_protected:Npx \cs_gset_protected:Npx % \end{macrocode} % \end{macro} +% \end{macro} % % \begin{macro} % { @@ -3063,6 +3075,47 @@ % \end{macro} % % \subsection{String comparisons} +% +% \begin{macro}[int, EXP]{\__str_if_eq_x:nn} +% \begin{macro}[aux, EXP]{\__str_escape_x:n} +% String comparisons rely on the primitive \cs{(pdf)strcmp} if available: +% \LuaTeX{} does not have it, so emulation is required. As the net result +% is that we do not \emph{always} use the primitive, the correct approach +% is to wrap up in a function with defined behaviour. That's done by +% providing a wrapper and then redefining in the \LuaTeX{} case. Note that +% the necessary Lua code is covered in \pkg{l3boostrap}: long-term this may +% need to go into a separate Lua file, but at present it's somewhere that +% spaces are not skipped for ease-of-input. The need to detokenize and force +% expansion of input arises from the case where a |#| token is used in the +% input, \emph{e.g.}~|\__str_if_eq_x:nn {#} { \tl_to_str:n {#} }|, which +% otherwise will fail as \cs{luatex_luaescapestring:D} does not double +% such tokens. +% \begin{macrocode} +\cs_new:Npn \__str_if_eq_x:nn #1#2 { \pdftex_strcmp:D {#1} {#2} } +\luatex_if_engine:T + { + \cs_set:Npn \__str_if_eq_x:nn #1#2 + { + \luatex_directlua:D + { + l3kernel.strcmp + ( + " \__str_escape_x:n {#1} " , + " \__str_escape_x:n {#2} " + ) + } + } + \cs_new:Npn \__str_escape_x:n #1 + { + \luatex_luaescapestring:D + { + \etex_detokenize:D \exp_after:wN { \luatex_expanded:D {#1} } + } + } + } +% \end{macrocode} +% \end{macro} +% \end{macro} % % \begin{macro}[pTF, EXP]{\str_if_eq:nn, \str_if_eq_x:nn} % Modern engines provide a direct way of comparing two token lists, @@ -3073,13 +3126,13 @@ % \begin{macrocode} \prg_new_conditional:Npnn \str_if_eq:nn #1#2 { p , T , F , TF } { - \if_int_compare:w \pdftex_strcmp:D { \exp_not:n {#1} } { \exp_not:n {#2} } + \if_int_compare:w \__str_if_eq_x:nn { \exp_not:n {#1} } { \exp_not:n {#2} } = \c_zero \prg_return_true: \else: \prg_return_false: \fi: } \prg_new_conditional:Npnn \str_if_eq_x:nn #1#2 { p , T , F , TF } { - \if_int_compare:w \pdftex_strcmp:D {#1} {#2} = \c_zero + \if_int_compare:w \__str_if_eq_x:nn {#1} {#2} = \c_zero \prg_return_true: \else: \prg_return_false: \fi: } % \end{macrocode} @@ -3093,7 +3146,7 @@ % \begin{macrocode} \cs_new:Npn \__str_if_eq_x_return:nn #1 #2 { - \if_int_compare:w \pdftex_strcmp:D {#1} {#2} = \c_zero + \if_int_compare:w \__str_if_eq_x:nn {#1} {#2} = \c_zero \prg_return_true: \else: \prg_return_false: diff --git a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx index 9e27324cbc1..4ff6c7dd5cf 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx @@ -145,7 +145,7 @@ % \end{macro} % \end{macro} % \end{macro} -\GetIdInfo$Id: l3bootstrap.dtx 4782 2014-05-16 22:12:19Z joseph $ +\GetIdInfo$Id: l3bootstrap.dtx 4889 2014-05-26 19:59:25Z joseph $ {L3 Bootstrap code} % %<*driver> @@ -241,15 +241,6 @@ % % \subsection{Internal functions and variables} % -% \begin{function}{\__expl_package_check:} -% \begin{syntax} -% \cs{__expl_package_check:} -% \end{syntax} -% Used to ensure that all parts of \pkg{expl3} are loaded together -% (\emph{i.e.}~as part of \pkg{expl3}). Issues an error if a kernel package -% is loaded independently of the bundle. -% \end{function} -% % \begin{variable}{\l__kernel_expl_bool} % A boolean which records the current code syntax status: \texttt{true} if % currently inside a code environment. This variable should only be @@ -297,6 +288,7 @@ %<*initex> \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname directlua\endcsname\relax +\else \directlua{tex.enableprimitives ('', tex.extraprimitives ( ))} \fi % @@ -314,23 +306,21 @@ \fi % \end{macrocode} % -% \begin{macro}{\expl_pdfstrcmp} % If \LuaTeX{} is in use then no primitive \cs{(pdf)strcmp} is available. -% However, it can be emulated using some Lua code. Since this is not -% the primitive, we do not use a misleading name: instead, a temporary -% version is set up as \cs{expl_pdfstrcmp}. The latter is then picked up -% and moved to the correct place by \pkg{l3names}. In earlier versions of +% However, it can be emulated using some Lua code. In earlier versions of % the code, the \pkg{pdftexcmds} package was loaded to do this task. However, % that raises some issues in \enquote{generic} (it fails with Con\TeX{}t -% MkIV), and also adds a hardly-needed dependency. -% -% Note that \LuaTeX{} prior to version $0.36$ is not supported by -% \pkg{expl3}: here that means simply skipping the definition, which will -% then be picked up later. This definition may need to be done twice: one -% \enquote{now} and once at the start of every job. The latter can occur -% in package mode if for example a custom format is being constructed. -% To achieve this while not requiring a separate file, the Lua code is saved -% into a macro then used twice. +% MkIV), and also adds a hardly-needed dependency. Note that \LuaTeX{} +% prior to version $0.36$ is not supported by \pkg{expl3}: here that means +% simply skipping the definition, which will then be picked up later. This +% definition may need to be done twice: one \enquote{now} and once at the +% start of every job. The latter can occur in package mode if for example a +% custom format is being constructed. To achieve this while not requiring a +% separate file, the Lua code is saved into a macro then used twice. +% (In the long term, the Lua code here may be best moved to a separate +% file.) +% +% No macro definition is given just yet: that is left until \pkg{l3basics}. % \begin{macrocode} \begingroup \expandafter\ifx\csname directlua\endcsname\relax @@ -369,29 +359,16 @@ \expandafter\luatex_directlua:D\expandafter{\tempa}% } \fi - \long\gdef\expl_pdfstrcmp#1#2% - {% - \luatex_directlua:D - {% - l3kernel.strcmp - ( - "\luatex_luaescapestring:D {#1}" , - "\luatex_luaescapestring:D {#2}" - ) - }% - } \fi \fi \endgroup % \end{macrocode} -% \end{macro} % % \subsection{Engine requirements} % % The code currently requires functionality equivalent to \tn{pdfstrcmp} % in addition to \eTeX{}. This is picked up by testing for the \cs{pdfstrcmp} -% primitive or emulation as \cs{expl_pdfstrcmp}, as the \eTeX{} primitives -% must be available if it is. +% primitive or a version of \LuaTeX{} capable of emulating it. % \begin{macrocode} \begingroup \def\next{\endgroup} @@ -408,46 +385,48 @@ \LineBreak }% \expandafter\ifx\csname pdfstrcmp\endcsname\relax - \catcode`\_=11 % - \expandafter\ifx\csname expl_pdfstrcmp\endcsname\relax + \expandafter\ifx\csname directlua\endcsname\relax + \else + \ifnum\luatexversion<36 % %<*initex> - \def\LineBreak{^^J}% - \edef\next - {% - \newlinechar`\noexpand\^^J\relax - \errhelp - {% - \LongText - For pdfTeX and XeTeX the '-etex' command-line switch is also - needed.\LineBreak - \LineBreak - Format building will abort!\LineBreak - }% - \errmessage{\ShortText}% - \endgroup - \noexpand\end - }% + \def\LineBreak{^^J}% + \edef\next + {% + \newlinechar`\noexpand\^^J\relax + \errhelp + {% + \LongText + For pdfTeX and XeTeX the '-etex' command-line switch is also + needed.\LineBreak + \LineBreak + Format building will abort!\LineBreak + }% + \errmessage{\ShortText}% + \endgroup + \noexpand\end + }% % %<*package> - \def\LineBreak{\noexpand\MessageBreak}% - \expandafter\ifx\csname PackageError\endcsname\relax - \def\LineBreak{^^J}% - \begingroup - \def\PackageError#1#2#3% - {% - \endgroup - \errhelp{#3}% - \errmessage{#1 Error: #2!} - }% - \fi - \edef\next - {% - \noexpand\PackageError{expl3}{\ShortText} - {\LongText Loading of expl3 will abort!}% - \endgroup - \noexpand\endinput - }% + \def\LineBreak{\noexpand\MessageBreak}% + \expandafter\ifx\csname PackageError\endcsname\relax + \def\LineBreak{^^J}% + \begingroup + \def\PackageError#1#2#3% + {% + \endgroup + \errhelp{#3}% + \errmessage{#1 Error: #2!} + }% + \fi + \edef\next + {% + \noexpand\PackageError{expl3}{\ShortText} + {\LongText Loading of expl3 will abort!}% + \endgroup + \noexpand\endinput + }% % + \fi \fi \fi \next @@ -492,25 +471,6 @@ % % \end{macrocode} % -% If \LuaTeX{} is in use there are more allocators to create. Con\TeX{}t -% already does that, so skip any loading in that case: this is done using the -% \cs{newattribute} allocator. Otherwise, there is a need for a test to -% differentiate between \LaTeXe{} and plain. -% \begin{macrocode} -%<*package> -\ifdefined\directlua - \ifdefined\newattribute - \else - \ifdefined\RequirePackage - \RequirePackage{luatex} - \else - \input luatex.sty % - \fi - \fi -\fi -% -% \end{macrocode} -% % \subsection{The \LaTeX3 code environment} % % The code environment is now set up. diff --git a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx index 6c481ee323f..3ca5609396d 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx @@ -37,7 +37,7 @@ \documentclass[full]{l3doc} % %<*driver|package> -\GetIdInfo$Id: l3box.dtx 4728 2014-05-04 13:25:37Z joseph $ +\GetIdInfo$Id: l3box.dtx 4974 2014-05-31 18:28:43Z mittelba $ {L3 Experimental boxes} % %<*driver> @@ -341,14 +341,14 @@ % % \begin{function}[added = 2012-05-11]{\box_log:N, \box_log:c} % \begin{syntax} -% \cs{box_show:N} \meta{box} +% \cs{box_log:N} \meta{box} % \end{syntax} % Writes full details of the content of the \meta{box} to the log. % \end{function} % % \begin{function}[added = 2012-05-11]{\box_log:Nnn, \box_log:cnn} % \begin{syntax} -% \cs{box_show:Nnn} \meta{box} \meta{intexpr_1} \meta{intexpr_2} +% \cs{box_log:Nnn} \meta{box} \meta{intexpr_1} \meta{intexpr_2} % \end{syntax} % Writes the contents of \meta{box} to the log, showing the first % \meta{intexpr_1} items of the box, and descending into \meta{intexpr_2} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx index 2c77af11e46..a65e95aaca8 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx @@ -38,7 +38,7 @@ \documentclass[full]{l3doc} % %<*driver|package> -\GetIdInfo$Id: l3candidates.dtx 4734 2014-05-04 21:48:49Z joseph $ +\GetIdInfo$Id: l3candidates.dtx 4972 2014-05-31 16:42:18Z bruno $ {L3 Experimental additions to l3kernel} % %<*driver> @@ -78,28 +78,6 @@ % the kernel. We encourage programmers to test them out and report back on % the \texttt{LaTeX-L} mailing list. % -% \section{Additions to \pkg{l3basics}} -% -% \begin{function}[EXP,TF]{\cs_if_exist_use:N, \cs_if_exist_use:c} -% \begin{syntax} -% \cs{cs_if_exist_use:NTF} \meta{control sequence} \Arg{true code} \Arg{false code} -% \end{syntax} -% If the \meta{control sequence} exists, leave it in the input stream, -% followed by the \meta{true code} (unbraced). Otherwise, leave the -% \meta{false} code in the input stream. For example, -% \begin{verbatim} -% \cs_set:Npn \mypkg_use_character:N #1 -% { \cs_if_exist_use:cF { mypkg_#1:n } { \mypkg_default:N #1 } } -% \end{verbatim} -% calls the function |\mypkg_#1:n| if it exists, and falls back to -% a default action otherwise. This could also be done (more slowly) -% using \cs{str_case_x:nnn}. -% \begin{texnote} -% The \texttt{c} variants do not introduce the \meta{control sequence} -% in the hash table if it is not there. -% \end{texnote} -% \end{function} -% % \section{Additions to \pkg{l3box}} % % \subsection{Affine transformations} @@ -120,8 +98,10 @@ % the box. The updated \meta{box} will be an hbox, irrespective of the nature % of the \meta{box} before the resizing is applied. Negative sizes will % cause the material in the \meta{box} to be reversed in direction, but the -% reference point of the \meta{box} will be unchanged. The resizing applies -% within the current \TeX{} group level. +% reference point of the \meta{box} will be unchanged. +% Thus negative $y$-sizes will result in a box a depth dependent on the +% height of the original box a height dependent on the depth. +% The resizing applies within the current \TeX{} group level. % \end{function} % % \begin{function} @@ -136,8 +116,10 @@ % The updated \meta{box} will be an hbox, irrespective of the nature % of the \meta{box} before the resizing is applied. A negative size will % cause the material in the \meta{box} to be reversed in direction, but the -% reference point of the \meta{box} will be unchanged. The resizing applies -% within the current \TeX{} group level. +% reference point of the \meta{box} will be unchanged. +% Thus negative $y$-sizes will result in a box a depth dependent on the +% height of the original box a height dependent on the depth. +% The resizing applies within the current \TeX{} group level. % \end{function} % % \begin{function}{\box_resize_to_wd:Nn, \box_resize_to_wd:cn} @@ -149,8 +131,10 @@ % The updated \meta{box} will be an hbox, irrespective of the nature % of the \meta{box} before the resizing is applied. A negative size will % cause the material in the \meta{box} to be reversed in direction, but the -% reference point of the \meta{box} will be unchanged. The resizing applies -% within the current \TeX{} group level. +% reference point of the \meta{box} will be unchanged. +% Thus negative $y$-sizes will result in a box a depth dependent on the +% height of the original box a height dependent on the depth. +% The resizing applies within the current \TeX{} group level. % \end{function} % % \begin{function}{\box_rotate:Nn, \box_rotate:cn} @@ -176,7 +160,9 @@ % of the nature of the \meta{box} before the scaling is applied. Negative % scalings will cause the material in the \meta{box} to be reversed in % direction, but the reference point of the \meta{box} will be unchanged. -% The scaling applies within the current \TeX{} group level. +% Thus negative $y$-scales will result in a box a depth dependent on the +% height of the original box a height dependent on the depth. +% The resizing applies within the current \TeX{} group level. % \end{function} % % \subsection{Viewing part of a box} @@ -457,76 +443,6 @@ % before being assigned to the \meta{floating point variable}. % \end{function} % -% \begin{function}[EXP]{\fp_function:Nw} -% \begin{syntax} -% \cs{fp_eval:n} -% ~~|{| -% ~~~~\cs{fp_function:Nw} \meta{function} -% ~~~~~~|(| \meta{fpexpr_1} |,| \ldots{} |,| \meta{fpexpr_n} |)| -% ~~|}| -% \end{syntax} -% Finds one or more arguments \meta{fpexpr_1} \ldots{} \meta{fpexpr_n} -% following the \meta{function}, and evaluate them. Then calls the -% \meta{function} followed by a single brace group containing -% \Arg{result_1} \ldots{} \Arg{result_n}. For instance, -% \begin{verbatim} -% \cs_new_nopar:Npn \mypkg_log:w -% { \fp_function:Nw \__mypkg_log:n } -% \cs_new:Npn \__mypkg_log:n #1 -% { -% \int_case:nnF { \tl_count:n {#1} } -% { -% { 1 } { \__mypkg_log_aux:nn #1 { 10 } } -% { 2 } { \__mypkg_log_aux:nn #1 } -% } -% { \ERROR \c_nan_fp } -% } -% \cs_new:Npn \__mypkg_log_aux:nn #1#2 { ln(#1) / ln(#2) } -% \fp_show:n { \mypkg_log:w (8, 2) + \mypkg_log:w (1e17) } -% \end{verbatim} -% shows $20 = \log_2(8) + \log(10^{17})$. The function |\mypkg_log:w| -% behaves like other built-in functions such as |ln|, but allows $1$ -% or~$2$ arguments, and computes either the base~$10$ logarithm or the -% logarithm of the first argument in a base given by the second -% argument. Checking the number of arguments is acheived by -% |\__mypkg_log:n|, which provides the default base~$10$ when there is -% only one argument. The computation itself is done by -% |\__mypkg_log_aux:nn|. -% \end{function} -% -% \begin{function}{\fp_new_function:Npn} -% \begin{syntax} -% \cs{fp_new_function:Npn} \meta{function} \meta{parameters} \Arg{code} -% \cs{fp_eval:n} |{| \meta{function} |(| \meta{fpexpr_1} |,| \ldots{} |,| \meta{fpexpr_n} |)| |}| -% \end{syntax} -% Defines the \meta{function} for use within floating point -% expressions, expecting some \meta{parameters}, and evaluating the -% \meta{code}, which must be expandable. When the \meta{function} -% appears in a floating point expression, arguments \meta{fpexpr_1}, -% \ldots{}, \meta{fpexpr_n} are found and evaluated in the same way as -% for built-in functions such as~|max|. If the number of arguments -% matches the number of \meta{parameters}, the arguments replace |#1|, -% \ldots{}, |#|$n$ in the \meta{code}, which is then evaluated to -% produce a floating point result. Otherwise, the result is -% \texttt{nan} after an error. The \meta{parameter text} must not -% contain delimited arguments, that is, it must be empty or one of -% |#1|, |#1#2|, |#1#2#3|, \ldots{} |#1#2#3#4#5#6#7#8#9|. The -% arguments replacing parameters in the \meta{code} are internal -% floating point numbers; operations such as |#1^2| thus correctly -% take into account the sign of~|#1|. For instance, -% \begin{verbatim} -% \fp_new_function:Npn \mypkg_sqrt:w #1 { #1^.5 } -% \fp_new_function:Npn \mypkg_veclen:w #1#2 -% { \mypkg_sqrt:w ( #1^2 + #2^2 ) } -% \fp_show:n { \mypkg_veclen:w ( 42 / 7 , 2 * 4 - 0 ) } -% \end{verbatim} -% shows~$10$. In the example, |\mypkg_veclen:w| receives the -% arguments $6=42/7$ and~$8=2\times 4-0$, thus expands to -% |\mypkg_sqrt:w ( 6^2 + 8^2 )|, then |\mypkg_sqrt:w| receives -% $100=6^2+8^2$ as an argument, and evaluates the square root $10 = -% 100^{0.5}$. -% \end{function} -% % \section{Additions to \pkg{l3prop}} % % \begin{function}[rEXP] @@ -664,7 +580,8 @@ % % \section{Additions to \pkg{l3skip}} % -% \begin{function}[added = 2013-05-06, EXP]{\dim_to_pt:n} +% \begin{function}[added = 2013-05-06, updated=2014-05-31, EXP] +% {\dim_to_pt:n} % \begin{syntax} % \cs{dim_to_pt:n} \Arg{dimexpr} % \end{syntax} @@ -674,16 +591,16 @@ % places. If the decimal part of the result is zero, it is omitted, % together with the decimal marker. % -% If the \meta{dimension expression} contains additional tokens such -% as redundant units, these will be ignored, so for example +% For example % \begin{verbatim} -% \dim_to_pt:n { 1 bp pt } +% \dim_to_pt:n { 1 bp } % \end{verbatim} % leaves |1.00374| in the input stream, \emph{i.e.}~the magnitude of % one \enquote{big point} when converted to points. % \end{function} % -% \begin{function}[added = 2013-05-06, EXP]{\dim_to_unit:nn} +% \begin{function}[added = 2013-05-06, updated=2014-05-31, EXP] +% {\dim_to_unit:nn} % \begin{syntax} % \cs{dim_to_unit:nn} \Arg{dimexpr_1} \Arg{dimexpr_2} % \end{syntax} @@ -693,10 +610,9 @@ % to four or five decimal places. If the decimal part of the result % is zero, it is omitted, together with the decimal marker. % -% If the \meta{dimension expressions} contain additional tokens such -% as redundant units, these will be ignored, so for example +% For example % \begin{verbatim} -% \dim_to_unit:nn { 1 bp pt } { 1 mm } +% \dim_to_unit:nn { 1 bp } { 1 mm } % \end{verbatim} % leaves |0.35277| in the input stream, \emph{i.e.}~the magnitude of % one \enquote{big point} when converted to millimeters. @@ -1311,8 +1227,15 @@ % \end{macrocode} % The new height and depth can be applied directly. % \begin{macrocode} - \box_set_ht:Nn \l_@@_internal_box { \l_@@_top_new_dim } - \box_set_dp:Nn \l_@@_internal_box { \l_@@_bottom_new_dim } + \fp_compare:nNnTF \l_@@_scale_y_fp > \c_zero_fp + { + \box_set_ht:Nn \l_@@_internal_box { \l_@@_top_new_dim } + \box_set_dp:Nn \l_@@_internal_box { -\l_@@_bottom_new_dim } + } + { + \box_set_dp:Nn \l_@@_internal_box { \l_@@_top_new_dim } + \box_set_ht:Nn \l_@@_internal_box { -\l_@@_bottom_new_dim } + } % \end{macrocode} % Things are not quite as obvious for the width, as the reference point % needs to remain unchanged. For positive scaling factors resizing the @@ -2528,7 +2451,6 @@ % \end{macro} % % \begin{macro}[EXP]{\dim_to_unit:nn} -% \begin{macro}[aux, EXP]{\@@_to_unit:n} % An analog of \cs{dim_ratio:nn} that produces a decimal number as its % result, rather than a rational fraction for use within dimension % expressions. The naive implementation as @@ -2543,15 +2465,14 @@ { \dim_to_pt:n { - 1pt * \@@_to_unit:n { \dim_to_pt:n {#1} pt } - / \@@_to_unit:n { \dim_to_pt:n {#2} pt } + 1pt * + \dim_ratio:nn + { \dim_to_pt:n {#1} pt } + { \dim_to_pt:n {#2} pt } } } -\cs_new:Npn \@@_to_unit:n #1 - { \__int_value:w \@@_eval:w #1 \@@_eval_end: } % \end{macrocode} % \end{macro} -% \end{macro} % % \begin{macrocode} %<@@=skip> diff --git a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx index f9c0d414665..c81c35070d3 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx @@ -38,7 +38,7 @@ \documentclass[full]{l3doc} % %<*driver|package> -\GetIdInfo$Id: l3coffins.dtx 4728 2014-05-04 13:25:37Z joseph $ +\GetIdInfo$Id: l3coffins.dtx 4899 2014-05-28 20:13:51Z joseph $ {L3 Coffin code layer} % %<*driver> @@ -1687,7 +1687,7 @@ \__msg_kernel_new:nnnn { kernel } { no-pole-intersection } { No~intersection~between~coffin~poles. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl LaTeX~was~asked~to~find~the~intersection~between~two~poles,~ but~they~do~not~have~a~unique~meeting~point:~ the~value~(0~pt,~0~pt)~will~be~used. @@ -1698,7 +1698,7 @@ \__msg_kernel_new:nnnn { kernel } { unknown-coffin-pole } { Pole~'#1'~unknown~for~coffin~'#2'. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl LaTeX~was~asked~to~find~a~typesetting~pole~for~a~coffin,~ but~either~the~coffin~does~not~exist~or~the~pole~name~is~wrong. } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx index 45bb0ec7adf..2c9210f8d76 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx @@ -37,7 +37,7 @@ \documentclass[full]{l3doc} % %<*driver|package> -\GetIdInfo$Id: l3file.dtx 4737 2014-05-05 07:37:48Z joseph $ +\GetIdInfo$Id: l3file.dtx 4890 2014-05-26 20:59:31Z joseph $ {L3 File and I/O operations} % %<*driver> @@ -83,8 +83,9 @@ % may contain both literal items and expandable content, which should on % full expansion be the desired file name. Any active characters (as % declared in \cs{l_char_active_seq}) will \emph{not} be expanded, -% allowing the direct use of these in file names. -% Spaces are not allowed in file names. +% allowing the direct use of these in file names. File names will be quoted +% using |"| tokens if they contain spaces: as a result, |"| tokens are +% \emph{not} permitted in file names. % % \section{File operation functions} % @@ -500,7 +501,7 @@ % % \subsection{Internal file functions and variables} % -% \begin{variable}{\l__file_internal_name_ior} +% \begin{variable}{\g__file_internal_ior} % Used to test for the existence of files when opening. % \end{variable} % @@ -638,9 +639,13 @@ % \end{macrocode} % \end{variable} % -% \begin{macro}[aux]{\@@_name_sanitize:nn} +% \begin{macro}[int]{\@@_name_sanitize:nn} +% \begin{macro}[int, aux]{\@@_name_sanitize_aux:n} % For converting a token list to a string where active characters are treated -% as strings from the start. +% as strings from the start. The logic to the quoting normalisation is the +% same as used by \texttt{lualatexquotejobname}: check for balanced |"|, and +% assuming they balance strip all of them out before quoting the entire name +% if it contains spaces. % \begin{macrocode} \cs_new_protected:Npn \@@_name_sanitize:nn #1#2 { @@ -650,20 +655,42 @@ \tl_set:Nx \l_@@_internal_name_tl {#1} \tl_set:Nx \l_@@_internal_name_tl { \tl_to_str:N \l_@@_internal_name_tl } - \tl_if_in:NnT \l_@@_internal_name_tl { ~ } + \int_compare:nNnTF { - \__msg_kernel_error:nnx { kernel } { space-in-file-name } - { \l_@@_internal_name_tl } - \tl_remove_all:Nn \l_@@_internal_name_tl { ~ } + \int_mod:nn + { + 0 \tl_map_function:NN \l_@@_internal_name_tl + \@@_name_sanitize_aux:n + } + \c_two } + = \c_zero + { + \tl_remove_all:Nn \l_@@_internal_name_tl { " } + \tl_if_in:NnT \l_@@_internal_name_tl { ~ } + { + \tl_set:Nx \l_@@_internal_name_tl + { " \exp_not:V \l_@@_internal_name_tl " } + } + } + { + \__msg_kernel_error:nnx { kernel } { unbalanced-quote-in-filename } + { \l_@@_internal_name_tl } + } \use:x { \group_end: \exp_not:n {#2} { \l_@@_internal_name_tl } } } +\cs_new:Npn \@@_name_sanitize_aux:n #1 + { + \str_if_eq:nnT {#1} { " } + { + \c_one } + } % \end{macrocode} % \end{macro} +% \end{macro} % % \begin{macro}{\file_add_path:nN} % \begin{macro}[aux]{\@@_add_path:nN, \@@_add_path_search:nN} @@ -1710,11 +1737,10 @@ All~16~are~currently~in~use,~and~something~wanted~to~open~ another~one. } -\__msg_kernel_new:nnnn { kernel } { space-in-file-name } - { Space~in~file~name~'#1'. } +\__msg_kernel_new:nnnn { kernel } { unbalanced-quote-in-filename } + { Unbalanced~quotes~in~file~name~'#1'. } { - Spaces~are~not~permitted~in~files~loaded~by~LaTeX: \\ - Further~errors~may~follow! + File~names~must~contain~balanced~numbers~of~quotes~("). } % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3format.ins b/Master/texmf-dist/source/latex/l3kernel/l3format.ins new file mode 100644 index 00000000000..defd3b714c3 --- /dev/null +++ b/Master/texmf-dist/source/latex/l3kernel/l3format.ins @@ -0,0 +1,90 @@ +\iffalse meta-comment + +File l3format.ins Copyright (C) 2011,2012,2014 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{l3box.dtx} {initex} + \from{l3coffins.dtx} {initex} + \from{l3color.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-expo.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx index 8c834488183..ec7ac32602d 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx @@ -36,7 +36,7 @@ % %<*driver> \documentclass[full]{l3doc} -\GetIdInfo$Id: l3fp-expo.dtx 4712 2014-04-30 08:17:49Z joseph $ +\GetIdInfo$Id: l3fp-expo.dtx 4889 2014-05-26 19:59:25Z joseph $ {L3 Floating-point exponential-related functions} \begin{document} \DocInput{\jobname.dtx} @@ -988,7 +988,7 @@ % \begin{macrocode} \cs_new:Npn \@@_pow_normal:ww \s_@@ \@@_chk:w 1 #1#2#3; \s_@@ \@@_chk:w #4#5 { - \if_int_compare:w \pdftex_strcmp:D { #2 #3 } + \if_int_compare:w \__str_if_eq_x:nn { #2 #3 } { 1 {1000} {0000} {0000} {0000} } = \c_zero \if_int_compare:w #4 #1 = 32 \exp_stop_f: \exp_after:wN \@@_case_return_ii_o:ww diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-old.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-old.dtx deleted file mode 100644 index 229840bfcf1..00000000000 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-old.dtx +++ /dev/null @@ -1,288 +0,0 @@ -% \iffalse meta-comment -% -%% File: l3fp-old.dtx Copyright (C) 2012,2014 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 Team. -%% -%% ----------------------------------------------------------------------- -%% -% -%<*driver> -\documentclass[full]{l3doc} -\GetIdInfo$Id: l3fp-old.dtx 4712 2014-04-30 08:17:49Z joseph $ - {L3 Experimental floating-points (old)} -\begin{document} - \DocInput{\jobname.dtx} -\end{document} -% -% \fi -% -% \title{^^A -% The \pkg{l3fp-old} package\\ Floating-points (old)^^A -% \thanks{This file describes v\ExplFileVersion, -% last revised \ExplFileDate.}^^A -% } -% -% \author{^^A -% The \LaTeX3 Project\thanks -% {^^A -% E-mail: -% \href{mailto:latex-team@latex-project.org} -% {latex-team@latex-project.org}^^A -% }^^A -% } -% -% \date{Released \ExplFileDate} -% -% \maketitle -% -% \begin{documentation} -% -% \end{documentation} -% -% \begin{implementation} -% -% \section{\pkg{l3fp-old} implementation} -% -% \begin{macrocode} -%<*initex|package> -% \end{macrocode} -% -% \begin{macrocode} -%<@@=fp> -% \end{macrocode} -% -% \subsection{Compatibility} -% -% \begin{variable}{\c_undefined_fp} -% The old floating point number \cs{c_undefined_fp} is now implemented -% as a \texttt{nan}. -% \begin{macrocode} -\fp_const:Nn \c_undefined_fp { nan } -% \end{macrocode} -% \end{variable} -% -% \begin{macro}[pTF]{\fp_if_undefined:N} -% An old floating point is undefined if it is \texttt{inf} or -% \texttt{nan}, \emph{i.e.}, if its type is $2$ or $3$. -% \begin{macrocode} -\prg_new_conditional:Npnn \fp_if_undefined:N #1 { p , T , F , TF } - { \exp_after:wN \@@_if_undefined:w #1 } -\cs_new:Npn \@@_if_undefined:w \s_@@ \@@_chk:w #1#2; - { - \if_int_compare:w #1 > \c_one - \prg_return_true: \else: \prg_return_false: \fi: - } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}[pTF]{\fp_if_zero:N} -% An old floating point is zero if it is $\pm 0$, \emph{i.e.}, its -% type is $0$. -% \begin{macrocode} -\prg_new_conditional:Npnn \fp_if_zero:N #1 { p , T , F , TF } - { \exp_after:wN \@@_if_zero:w #1 } -\cs_new:Npn \@@_if_zero:w \s_@@ \@@_chk:w #1#2; - { \if_meaning:w #1 0 \prg_return_true: \else: \prg_return_false: \fi: } -% \end{macrocode} -% \end{macro} -% -% \begin{macro} -% { -% \fp_abs:N , \fp_abs:c , \fp_gabs:N , \fp_gabs:c , -% \fp_neg:N , \fp_neg:c , \fp_gneg:N , \fp_gneg:c , -% } -% \begin{macro}[aux]{\@@_abs:NNN} -% Simply expand the floating point variable to feed it to -% \cs{@@_abs_o:w} or \cs{@@_-_o:w}, expanded within an expanding -% token list assignment. The \cs{prg_do_nothing:} is not necessary, -% but it reminds us more clearly that \cs{@@_abs_o:w} and -% \cs{@@_-_o:w} expand after their result. -% \begin{macrocode} -\cs_new_protected_nopar:Npn \fp_abs:N { \@@_abs:NNN \tl_set:Nx \@@_abs_o:w } -\cs_new_protected_nopar:Npn \fp_gabs:N { \@@_abs:NNN \tl_gset:Nx \@@_abs_o:w } -\cs_new_protected_nopar:Npx \fp_neg:N - { - \exp_not:N \@@_abs:NNN - \exp_not:N \tl_set:Nx - \exp_not:c { @@_-_o:w } - } -\cs_new_protected_nopar:Npx \fp_gneg:N - { - \exp_not:N \@@_abs:NNN - \exp_not:N \tl_gset:Nx - \exp_not:c { @@_-_o:w } - } -\cs_new_protected:Npn \@@_abs:NNN #1#2#3 - { #1 #3 { \exp_after:wN #2 #3 \prg_do_nothing: } } -\cs_generate_variant:Nn \fp_abs:N { c } -\cs_generate_variant:Nn \fp_gabs:N { c } -\cs_generate_variant:Nn \fp_neg:N { c } -\cs_generate_variant:Nn \fp_gneg:N { c } -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro} -% { -% \fp_mul:Nn, \fp_mul:cn, \fp_gmul:Nn, \fp_gmul:cn, -% \fp_div:Nn, \fp_div:cn, \fp_gdiv:Nn, \fp_gdiv:cn, -% \fp_pow:Nn, \fp_pow:cn, \fp_gpow:Nn, \fp_gpow:cn, -% } -% \begin{macro}[aux]{\@@_mul:NNNn} -% See \cs{fp_add:Nn} for details. -% \begin{macrocode} -\cs_new_protected_nopar:Npn \fp_mul:Nn { \@@_mul:NNNn \fp_set:Nn * } -\cs_new_protected_nopar:Npn \fp_gmul:Nn { \@@_mul:NNNn \fp_gset:Nn * } -\cs_new_protected_nopar:Npn \fp_div:Nn { \@@_mul:NNNn \fp_set:Nn / } -\cs_new_protected_nopar:Npn \fp_gdiv:Nn { \@@_mul:NNNn \fp_gset:Nn / } -\cs_new_protected_nopar:Npn \fp_pow:Nn { \@@_mul:NNNn \fp_set:Nn ^ } -\cs_new_protected_nopar:Npn \fp_gpow:Nn { \@@_mul:NNNn \fp_gset:Nn ^ } -\cs_new_protected:Npn \@@_mul:NNNn #1#2#3#4 - { #1 #3 { #3 #2 \@@_parse:n {#4} } } -\cs_generate_variant:Nn \fp_mul:Nn { c } -\cs_generate_variant:Nn \fp_gmul:Nn { c } -\cs_generate_variant:Nn \fp_div:Nn { c } -\cs_generate_variant:Nn \fp_gdiv:Nn { c } -\cs_generate_variant:Nn \fp_pow:Nn { c } -\cs_generate_variant:Nn \fp_gpow:Nn { c } -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro} -% { -% \fp_exp:Nn, \fp_exp:cn, \fp_gexp:Nn, \fp_gexp:cn, -% \fp_ln:Nn , \fp_ln:cn , \fp_gln:Nn , \fp_gln:cn , -% \fp_sin:Nn, \fp_sin:cn, \fp_gsin:Nn, \fp_gsin:cn, -% \fp_cos:Nn, \fp_cos:cn, \fp_gcos:Nn, \fp_gcos:cn, -% \fp_tan:Nn, \fp_tan:cn, \fp_gtan:Nn, \fp_gtan:cn, -% } -% \begin{macro}[aux] -% {\@@_assign_to:nNNNn, \@@_assign_to_i:wNNNn, \@@_assign_to_ii:NnNNN} -% Here, an added twist is that each value computed by these expensive -% unary operations is stored as a constant floating point number. -% \begin{macrocode} -\cs_set_protected:Npn \@@_tmp:w #1#2#3#4#5 - { - \cs_new_protected_nopar:Npn #1 { #5 {#4} \tl_set_eq:NN #3 } - \cs_new_protected_nopar:Npn #2 { #5 {#4} \tl_gset_eq:NN #3 } - \cs_generate_variant:Nn #1 { c } - \cs_generate_variant:Nn #2 { c } - } -\@@_tmp:w \fp_exp:Nn \fp_gexp:Nn \@@_exp_o:w {exp} \@@_assign_to:nNNNn -\@@_tmp:w \fp_ln:Nn \fp_gln:Nn \@@_ln_o:w {ln } \@@_assign_to:nNNNn -\@@_tmp:w \fp_sin:Nn \fp_gsin:Nn \@@_sin_o:w {sin} \@@_assign_to:nNNNn -\@@_tmp:w \fp_cos:Nn \fp_gcos:Nn \@@_cos_o:w {cos} \@@_assign_to:nNNNn -\@@_tmp:w \fp_tan:Nn \fp_gtan:Nn \@@_tan_o:w {tan} \@@_assign_to:nNNNn -\cs_new_protected:Npn \@@_assign_to:nNNNn #1#2#3#4#5 - { - \exp_after:wN \@@_assign_to_i:wNNNn - \tex_romannumeral:D -`0 \@@_parse:n {#5} {#1} #2#3#4 - } -\cs_new_protected:Npn \@@_assign_to_i:wNNNn \s_@@ \@@_chk:w #1#2#3; #4 - { - \exp_args:Nc \@@_assign_to_ii:NnNNN - { c_@@_ #4 [ #1 # 2 \if_meaning:w 1 #1 #3 \fi: ] _fp } - { #1#2#3 } - } -\cs_new_protected:Npn \@@_assign_to_ii:NnNNN #1#2#3#4#5 - { - \cs_if_exist:NF #1 - { \tl_const:Nx #1 { #4 \s_@@ \@@_chk:w #2; } } - #3 #5 #1 - } -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}[TF]{\fp_compare:NNN} -% Comparisons used to be easier between floating points stored in -% variables. No more. -% \begin{macrocode} -\cs_new_protected_nopar:Npn \fp_compare:NNNTF { \fp_compare:nNnTF } -\cs_new_protected_nopar:Npn \fp_compare:NNNT { \fp_compare:nNnT } -\cs_new_protected_nopar:Npn \fp_compare:NNNF { \fp_compare:nNnF } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\fp_round_places:Nn, \fp_ground_places:Nn} -% \begin{macro}[aux]{\@@_round_places:NNn} -% Rounding to a given number of places is easy, since it is provided -% by the \pkg{l3fp-round} module. -% \begin{macrocode} -\cs_new_protected_nopar:Npn \fp_round_places:Nn - { \@@_round_places:NNn \tl_set:Nx } -\cs_new_protected_nopar:Npn \fp_ground_places:Nn - { \@@_round_places:NNn \tl_gset:Nx } -\cs_new_protected:Npn \@@_round_places:NNn #1#2#3 - { - #1 #2 - { - \exp_after:wN \exp_after:wN - \exp_after:wN \@@_round:Nwn - \exp_after:wN \exp_after:wN - \exp_after:wN \@@_round_to_nearest:NNN - \exp_after:wN #2 - \exp_after:wN { \int_use:N \__int_eval:w #3 } - } - } -\cs_generate_variant:Nn \fp_round_places:Nn { c } -\cs_generate_variant:Nn \fp_ground_places:Nn { c } -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\fp_round_figures:Nn, \fp_ground_figures:Nn} -% Rounding to a given number of figures is the same as rounding to a -% number of places, after shifting by the exponent of the argument. -% \begin{macrocode} -\cs_new_protected:Npn \fp_round_figures:Nn #1#2 - { - \@@_round_places:NNn \tl_set:Nx #1 - { #2 - \exp_after:wN \@@_exponent:w #1 } - } -\cs_new_protected:Npn \fp_ground_figures:Nn #1#2 - { - \@@_round_places:NNn \tl_gset:Nx #1 - { #2 - \exp_after:wN \@@_exponent:w #1 } - } -\cs_generate_variant:Nn \fp_round_figures:Nn { c } -\cs_generate_variant:Nn \fp_ground_figures:Nn { c } -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -% -% \end{macrocode} -% -% \end{implementation} -% -% \PrintIndex diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx index 755d9020d82..f0cdec7ffbb 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx @@ -36,7 +36,7 @@ % %<*driver> \documentclass[full]{l3doc} -\GetIdInfo$Id: l3fp-parse.dtx 4728 2014-05-04 13:25:37Z joseph $ +\GetIdInfo$Id: l3fp-parse.dtx 4975 2014-05-31 19:26:32Z bruno $ {L3 Floating-point expression parsing} \begin{document} \DocInput{\jobname.dtx} @@ -474,7 +474,7 @@ % \begin{itemize} % \item % \item If the next token is a control sequence, it could be the -% end-marker \cs{s_@@_mark}, which has the lowest precedence, and +% special marker \cs{s_@@_mark}, and % otherwise it is a case of juxtaposing numbers, such as % |2\c_three|, with an implied multiplication. % \item If the next token is a letter, it is also a case of @@ -1646,7 +1646,7 @@ \if_catcode:w \scan_stop: \exp_not:N #1 \if_meaning:w \scan_stop: #1 \if_int_compare:w - \pdftex_strcmp:D { \s_@@ } { \exp_not:N #1 } = \c_zero + \__str_if_eq_x:nn { \s_@@ } { \exp_not:N #1 } = \c_zero 0 \__msg_kernel_expandable_error:nnn { kernel } { fp-after-e } { floating~point~ } @@ -1659,7 +1659,7 @@ \fi: \else: \if_int_compare:w - \pdftex_strcmp:D { \__int_value:w #1 } { \tex_the:D #1 } + \__str_if_eq_x:nn { \__int_value:w #1 } { \tex_the:D #1 } = \c_zero \__int_value:w #1 \else: @@ -2039,8 +2039,12 @@ % Start a \tn{romannumeral} expansion so that \cs{@@_parse:n} expands % in two steps. The \cs{@@_parse_operand:Nw} function will perform % computations until reaching an operation with precedence -% \cs{c_minus_one} or less. Then stop the initial expansion with -% \cs{c_zero}. +% \cs{c_minus_one} or less, namely, the end of the expression. The +% marker \cs{s_@@_mark} indicates that the next token is an already +% parsed version of an infix operator, and \cs{@@_parse_infix_end:N} +% has infinitely negative precedence. Finally, clean up a +% (well-defined) set of extra tokens and stop the initial expansion +% with \cs{c_zero}. % \begin{macrocode} \cs_new:Npn \@@_parse:n #1 { @@ -2048,11 +2052,12 @@ \exp_after:wN \@@_parse_after:ww \tex_romannumeral:D \@@_parse_operand:Nw \c_minus_one - \@@_parse_expand:w #1 \s_@@_mark + \@@_parse_expand:w #1 + \s_@@_mark \@@_parse_infix_end:N \s_@@_stop } \cs_new:Npn \@@_parse_after:ww - #1@ \@@_parse_infix_end:N \s_@@_mark \s_@@_stop + #1@ \@@_parse_infix_end:N \s_@@_stop { \c_zero #1 } % \end{macrocode} % \end{macro} @@ -2111,10 +2116,10 @@ { \if_catcode:w \scan_stop: \exp_not:N #2 \if_int_compare:w - \pdftex_strcmp:D { \s_@@_mark } { \exp_not:N #2 } + \__str_if_eq_x:nn { \s_@@_mark } { \exp_not:N #2 } = \c_zero \exp_after:wN \exp_after:wN - \exp_after:wN \@@_parse_infix_end:N + \exp_after:wN \@@_parse_infix_mark:NNN \else: \exp_after:wN \exp_after:wN \exp_after:wN \@@_parse_infix_juxtapose:N @@ -2158,6 +2163,16 @@ % % \subsubsection{Closing parentheses and commas} % +% \begin{macro}[aux, EXP]{\@@_parse_infix_mark:NNN} +% As an infix operator, \cs{s_@@_mark} means that the next +% token~(|#3|) has already gone through \cs{@@_parse_infix:NN} and +% should be provided the precedence~|#1|. The scan mark~|#2| is +% discarded. +% \begin{macrocode} +\cs_new:Npn \@@_parse_infix_mark:NNN #1#2#3 { #3 #1 } +% \end{macrocode} +% \end{macro} +% % \begin{macro}[aux, EXP]{\@@_parse_infix_end:N} % This one is a little bit odd: force every previous operator to end, % regardless of the precedence. @@ -2571,41 +2586,56 @@ % \subsection{Candidate: defining new \pkg{l3fp} functions} % % \begin{macro}[EXP]{\fp_function:Nw} -% This relies on the definition of the null character as a prefix -% operator with very specific semantics. +% Parse the argument of the function~|#1| using +% \cs{@@_parse_operand:Nw} with a precedence of~$16$, and pass the +% function and argument to \cs{@@_function_apply:nw}. % \begin{macrocode} -\group_begin: - \char_set_catcode_other:N \^^@ - \cs_new:Npn \fp_function:Nw #1 { ^^@ ; { \exp_after:wN #1 } } -\group_end: +\cs_new:Npn \fp_function:Nw #1 + { + \exp_after:wN \@@_function_apply:nw + \exp_after:wN #1 + \tex_romannumeral:D + \@@_parse_operand:Nw \c_sixteen \@@_parse_expand:w + } % \end{macrocode} % \end{macro} % % \begin{macro}{\fp_new_function:Npn} +% \begin{macro}[aux]{\@@_new_function:NNnnn, \@@_new_function:Ncfnn} % \begin{macro}[aux]{\@@_function_args:Nwn} -% This relies on the definition of the null character as a prefix -% operator with very specific semantics. -% \begin{macrocode} -\group_begin: - \char_set_catcode_other:N \^^@ - \cs_new_protected:Npn \fp_new_function:Npn #1#2# - { - \cs_new:Npx #1 - { - ^^@ ; - { - \exp_not:N \exp_after:wN - \exp_not:N \@@_function_args:Nwn - \exp_not:N \exp_after:wN - \exp_not:c { @@_user_ \cs_to_str:N #1 } - \exp_not:N \__int_value:w - \int_eval:n { \tl_count:n {#2} / \c_two } - \exp_not:N \exp_after:wN ; - } - } - \cs_new:cpn { @@_user_ \cs_to_str:N #1 } #2 - } -\group_end: +% Save the code provided by the user in the control sequence +% |\__fp_user_#1|. Define |#1| to call \cs{@@_function_apply:nw} +% after parsing one operand using \cs{@@_parse_operand:Nw} with +% precedence~$16$. The auxiliary \cs{@@_function_args:Nwn} receives +% the user function and the number of arguments (half of the number of +% tokens in the parameter text~|#2|), followed by the operand (as a +% token list of floating points). It checks the number of arguments, +% and applies the user function to the arguments (without the outer +% brace group). +% \begin{macrocode} +\cs_new_protected:Npn \fp_new_function:Npn #1#2# + { + \@@_new_function:Ncfnn #1 + { @@_user_ \cs_to_str:N #1 } + { \int_eval:n { \tl_count:n {#2} / \c_two } } + {#2} + } +\cs_new_protected:Npn \@@_new_function:NNnnn #1#2#3#4#5 + { + \cs_new_nopar:Npn #1 + { + \exp_after:wN \@@_function_apply:nw \exp_after:wN + { + \exp_after:wN \@@_function_args:Nwn + \exp_after:wN #2 + \__int_value:w #3 \exp_after:wN ; \exp_after:wN + } + \tex_romannumeral:D + \@@_parse_operand:Nw \c_sixteen \@@_parse_expand:w + } + \cs_new:Npn #2 #4 {#5} + } +\cs_generate_variant:Nn \@@_new_function:NNnnn { Ncf } \cs_new:Npn \@@_function_args:Nwn #1#2; #3 { \int_compare:nNnTF { \tl_count:n {#3} } = {#2} @@ -2619,49 +2649,44 @@ % \end{macrocode} % \end{macro} % \end{macro} -% -% \begingroup\catcode`\^^@=12\relax % ^^A hack -% \begin{macro}[EXP, aux]{\@@_parse_prefix_^^@:Nw} -% \begin{macrocode} -\group_begin: - \char_set_catcode_other:N \^^@ - \cs_new:cpn { @@_parse_prefix_ ^^@ :Nw } #1 ; #2 - { - \exp_after:wN \@@_function_apply:NnwN - \exp_after:wN #1 - \exp_after:wN { #2 \exp_after:wN } - \tex_romannumeral:D - \@@_parse_operand:Nw \c_sixteen \@@_parse_expand:w - } -\group_end: -% \end{macrocode} % \end{macro} -% \endgroup % % \begin{macro}[aux, EXP] % { -% \@@_function_apply:NnwN, +% \@@_function_apply:nw, % \@@_function_store:wwNwnn, % \@@_function_store_end:wnnn % } -% \begin{macrocode} -\cs_new:Npn \@@_function_apply:NnwN #1#2#3@#4 - { - \exp_after:wN \@@_exp_after_array_f:w - \tex_romannumeral:D -`0 - \@@_function_store:wwNwnn #3 - \s_@@_mark \@@_function_store:wwNwnn ; - \s_@@_mark \@@_function_store_end:wnnn - \s_@@_stop { } { } {#2} - \s_@@_stop - #4 #1 +% The auxiliary \cs{@@_function_apply:nw} is called after parsing an +% operand, so it receives some code~|#1|, then the operand ending +% with~|@|, then a function such as \cs{@@_parse_infix_+:N} (but not +% always of this form, see comparisons for instance). Package the +% operand (an array) into a token list with floating point items: this +% is the role of \cs{@@_function_store:wwNwnn} and +% \cs{@@_function_store_end:wnnn}. Then apply \cs{@@_parse:n} to the +% code~|#1| followed by a brace group with this token list. This +% results in a floating point result, which will correctly be parsed +% as the next operand of whatever was looking for one. The trailing +% \cs{s_@@_mark} is used as a special infix operator to indicate that +% the next token has already gone through \cs{@@_parse_infix:NN}. +% \begin{macrocode} +\cs_new:Npn \@@_function_apply:nw #1#2 @ + { + \@@_parse:n + { + \@@_function_store:wwNwnn #2 + \s_@@_mark \@@_function_store:wwNwnn ; + \s_@@_mark \@@_function_store_end:wnnn + \s_@@_stop { } { } {#1} + } + \s_@@_mark } \cs_new:Npn \@@_function_store:wwNwnn #1; #2 \s_@@_mark #3#4 \s_@@_stop #5#6 { #3 #2 \s_@@_mark #3#4 \s_@@_stop { #5 #6 } { { #1; } } } \cs_new:Npn \@@_function_store_end:wnnn #1 \s_@@_stop #2#3#4 - { \@@_parse:n { #4 {#2} } } + { #4 {#2} } % \end{macrocode} % \end{macro} % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx index c5b6d966ae5..5cf8a36cd56 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx @@ -37,7 +37,7 @@ \documentclass[full]{l3doc} % %<*driver|package> -\GetIdInfo$Id: l3int.dtx 4776 2014-05-16 14:46:44Z joseph $ +\GetIdInfo$Id: l3int.dtx 4966 2014-05-31 00:44:34Z bruno $ {L3 Integers} % %<*driver> @@ -121,8 +121,8 @@ % \cs{int_div_round:nn} \Arg{intexpr_1} \Arg{intexpr_2} % \end{syntax} % Evaluates the two \meta{integer expressions} as described earlier, -% then calculates the result of dividing the first value by the -% second, rounding any remainder. Ties are rounded away from zero. +% then divides the first value by the second, and rounds the result +% to the closest integer. Ties are rounded away from zero. % Note that this is identical to using % |/| directly in an \meta{integer expression}. The result is left in % the input stream as an \meta{integer denotation} after two expansions. @@ -133,8 +133,8 @@ % \cs{int_div_truncate:nn} \Arg{intexpr_1} \Arg{intexpr_2} % \end{syntax} % Evaluates the two \meta{integer expressions} as described earlier, -% then calculates the result of dividing the first value by the -% second, truncating any remainder. Note that division using |/| +% then divides the first value by the second, and rounds the result +% towards zero. Note that division using |/| % rounds the result. The result is left in the input stream as an % \meta{integer denotation} after two expansions. % \end{function} @@ -156,8 +156,12 @@ % \end{syntax} % Evaluates the two \meta{integer expressions} as described earlier, % then calculates the integer remainder of dividing the first -% expression by the second. This is left in the input stream as an -% \meta{integer denotation} after two expansions. +% expression by the second. This is obtained by subtracting +% \cs{int_div_truncate:nn} \Arg{intexpr_1} \Arg{intexpr_2} times +% \meta{intexpr_2} from \meta{intexpr_1}. Thus, the result has the +% same sign as \meta{intexpr_1} and its absolute value is strictly +% less than that of \meta{intexpr_2}. The result is left in the input +% stream as an \meta{integer denotation} after two expansions. % \end{function} % % \section{Creating and initialising integers} @@ -488,7 +492,7 @@ % % \section{Integer step functions} % -% \begin{function}[added = 2012-06-04, updated = 2012-06-29, rEXP] +% \begin{function}[added = 2012-06-04, updated = 2014-05-30, rEXP] % {\int_step_function:nnnN} % \begin{syntax} % \cs{int_step_function:nnnN} \Arg{initial value} \Arg{step} \Arg{final value} \meta{function} @@ -497,7 +501,11 @@ % and \meta{final value}, all of which should be integer expressions. % The \meta{function} is then placed in front of each \meta{value} % from the \meta{initial value} to the \meta{final value} in turn -% (using \meta{step} between each \meta{value}). Thus \meta{function} +% (using \meta{step} between each \meta{value}). The \meta{step} must +% be non-zero. If the \meta{step} is positive, the loop stops when +% the \meta{value} becomes larger than the \meta{final value}. If the +% \meta{step} is negative, the loop stops when the \meta{value} +% becomes smaller than the \meta{final value}. The \meta{function} % should absorb one numerical argument. For example % \begin{verbatim} % \cs_set:Npn \my_func:n #1 { [I~saw~#1] \quad } @@ -513,20 +521,21 @@ % \end{quote} % \end{function} % -% \begin{function}[added = 2012-06-04, updated = 2012-06-29] +% \begin{function}[added = 2012-06-04, updated = 2014-05-30] % {\int_step_inline:nnnn} % \begin{syntax} % \cs{int_step_inline:nnnn} \Arg{initial value} \Arg{step} \Arg{final value} \Arg{code} % \end{syntax} % This function first evaluates the \meta{initial value}, \meta{step} % and \meta{final value}, all of which should be integer expressions. -% The \meta{code} is then placed in front of each \meta{value} -% from the \meta{initial value} to the \meta{final value} in turn -% (using \meta{step} between each \meta{value}). Thus the \meta{code} -% should define a function of one argument (|#1|). +% Then for each \meta{value} from the \meta{initial value} to the +% \meta{final value} in turn (using \meta{step} between each +% \meta{value}), the \meta{code} is inserted into the input stream +% with |#1| replaced by the current \meta{value}. Thus the +% \meta{code} should define a function of one argument~(|#1|). % \end{function} % -% \begin{function}[added = 2012-06-04, updated = 2012-06-29] +% \begin{function}[added = 2012-06-04, updated = 2014-05-30] % {\int_step_variable:nnnNn} % \begin{syntax} % \cs{int_step_variable:nnnNn} \\ @@ -534,9 +543,11 @@ % \end{syntax} % This function first evaluates the \meta{initial value}, \meta{step} % and \meta{final value}, all of which should be integer expressions. -% The \meta{code} is inserted into the input stream, with the -% \meta{tl~var} defined as the current \meta{value}. Thus the -% \meta{code} should make use of the \meta{tl~var}. +% Then for each \meta{value} from the \meta{initial value} to the +% \meta{final value} in turn (using \meta{step} between each +% \meta{value}), the \meta{code} is inserted into the input stream, +% with the \meta{tl~var} defined as the current \meta{value}. Thus +% the \meta{code} should make use of the \meta{tl~var}. % \end{function} % % \section{Formatting integers} @@ -920,11 +931,19 @@ % % \TestFiles{m3int001,m3int002,m3int03} % +% \begin{variable}{\c_max_register_int} +% Done in \pkg{l3basics}. +% \end{variable} +% % \begin{macro}{\@@_to_roman:w} % \begin{macro}{\if_int_compare:w} % Done in \pkg{l3basics}. % \end{macro} % \end{macro} +% +% \begin{macro}{\or:} +% Done in \pkg{l3basics}. +% \end{macro} % % \begin{macro}{\@@_value:w} % \begin{macro}{\@@_eval:w} @@ -1286,7 +1305,7 @@ % % \subsection{Integer expression conditionals} % -% \begin{macro}[aux, EXP]{\__prg_compare_error:, \__prg_compare_error:NNw} +% \begin{macro}[int, EXP]{\__prg_compare_error:, \__prg_compare_error:Nw} % Those functions are used for comparison tests which use a simple % syntax where only one set of braces is required and additional % operators such as |!=| and |>=| are supported. The tests first @@ -1383,7 +1402,8 @@ % the argument becomes non-positive: its roman numeral representation % is then empty. Then probe the first two tokens with % \cs{@@_compare:NNw} to determine the relation symbol, building a -% control sequence from it. All the extended forms have an extra |=| +% control sequence from it (\cs{token_to_str:N} gives better errors if +% |#1| is not a character). All the extended forms have an extra |=| % hence the test for that as a second token. If the relation symbol % is unknown, then the control sequence is turned by \TeX{} into % \cs{scan_stop:}, ignored thanks to \tn{unexpanded}, and @@ -1398,7 +1418,12 @@ \cs_new:Npn \@@_compare:NNw #1#2#3 \q_mark { \etex_unexpanded:D - \use:c { @@_compare_ #1 \if_meaning:w = #2 = \fi: :NNw } + \use:c + { + @@_compare_ \token_to_str:N #1 + \if_meaning:w = #2 = \fi: + :NNw + } \__prg_compare_error:Nw #1 } % \end{macrocode} @@ -1633,26 +1658,34 @@ % \subsection{Integer step functions} % % \begin{macro}{\int_step_function:nnnN} -% \begin{macro}[aux]{\@@_step:NnnnN} +% \begin{macro}[aux]{\@@_step:wwwN, \@@_step:NnnnN} +% Before all else, evaluate the initial value, step, and final value. % Repeating a function by steps first needs a check on the direction -% of the steps. After that, do the function for the start value -% then step and loop around. It would be more symmetrical to test -% for a step size of zero before checking the sign, but we optimize -% for the most frequent case (positive step). +% of the steps. After that, do the function for the start value then +% step and loop around. It would be more symmetrical to test for a +% step size of zero before checking the sign, but we optimize for the +% most frequent case (positive step). % \begin{macrocode} -\cs_new:Npn \int_step_function:nnnN #1#2#3#4 +\cs_new:Npn \int_step_function:nnnN #1#2#3 + { + \exp_after:wN \@@_step:wwwN + \int_use:N \@@_eval:w #1 \exp_after:wN ; + \int_use:N \@@_eval:w #2 \exp_after:wN ; + \int_use:N \@@_eval:w #3 ; + } +\cs_new:Npn \@@_step:wwwN #1; #2; #3; #4 { \int_compare:nNnTF {#2} > \c_zero - { \exp_args:NNf \@@_step:NnnnN > } + { \@@_step:NnnnN > } { \int_compare:nNnTF {#2} = \c_zero { \__msg_kernel_expandable_error:nnn { kernel } { zero-step } {#4} \use_none:nnnn } - { \exp_args:NNf \@@_step:NnnnN < } + { \@@_step:NnnnN < } } - { \int_eval:n {#1} } {#2} {#3} #4 + {#1} {#2} {#3} #4 } \cs_new:Npn \@@_step:NnnnN #1#2#3#4#5 { @@ -1829,7 +1862,7 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\int_to_base:nn} +% \begin{macro}{\int_to_base:nn, \int_to_Base:nn} % \UnitTested % \begin{macro}[aux]{\@@_to_base:nn, \@@_to_Base:nn, % \@@_to_base:nnN,\@@_to_Base:nnN,\@@_to_base:nnnN,\@@_to_Base:nnnN} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx index 4aa9f0d1692..b13c1a32ff0 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx @@ -37,7 +37,7 @@ \documentclass[full]{l3doc} % %<*driver|package> -\GetIdInfo$Id: l3keys.dtx 4753 2014-05-08 20:12:49Z joseph $ +\GetIdInfo$Id: l3keys.dtx 5093 2014-06-08 20:33:14Z joseph $ {L3 Key-value interfaces} % %<*driver> @@ -1312,32 +1312,76 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}[int]{\@@_choice_make:} +% \begin{macro}[int]{\@@_choice_make:, \@@_multichoice_make:} +% \begin{macro}[int]{\@@_choice_make:N} +% \begin{macro}[aux]{\@@_choice_make_aux:N} +% \begin{macro}[aux]{\@@_parent:n, \@@_parent:o} +% \begin{macro}[aux]{\@@_parent:wn} % To make a choice from a key, two steps: set the code, and set the -% unknown key. +% unknown key. There is one point to watch here: choice keys cannot be +% nested! As multichoices and choices are essentially the same bar one +% function, the code is given together. % \begin{macrocode} \cs_new_protected_nopar:Npn \@@_choice_make: + { \@@_choice_make:N \@@_choice_find:n } +\cs_new_protected_nopar:Npn \@@_multichoice_make: + { \@@_choice_make:N \@@_multichoice_find:n } +\cs_new_protected_nopar:Npn \@@_choice_make:N #1 + { + \prop_if_exist:cTF { \c_@@_info_root_tl \@@_parent:o \l_keys_path_tl } + { + \prop_get:cnNTF { \c_@@_info_root_tl \@@_parent:o \l_keys_path_tl } + { choice } \l_keys_value_tl + { + \__msg_kernel_error:nnxx { kernel } { nested-choice-key } + { \l_keys_path_tl } { \@@_parent:o \l_keys_path_tl } + } + { \@@_choice_make_aux:N #1 } + } + { \@@_choice_make_aux:N #1 } + } +\cs_new_protected_nopar:Npn \@@_choice_make_aux:N #1 { - \@@_cmd_set:nn { \l_keys_path_tl } - { \@@_choice_find:n {##1} } + \@@_cmd_set:nn { \l_keys_path_tl } { #1 {##1} } + \prop_put:cnn { \c__keys_info_root_tl \l_keys_path_tl } { choice } + { true } \@@_cmd_set:nn { \l_keys_path_tl / unknown } { \__msg_kernel_error:nnxx { kernel } { key-choice-unknown } { \l_keys_path_tl } {##1} } } +\cs_new:Npn \@@_parent:n #1 + { \@@_parent:wn #1 / / \q_stop { } } +\cs_generate_variant:Nn \@@_parent:n { o } +\cs_new:Npn \@@_parent:wn #1 / #2 / #3 \q_stop #4 + { + \tl_if_blank:nTF {#2} + { \use_none:n #4 } + { + \@@_parent:wn #2 / #3 \q_stop { #4 / #1 } + } + } % \end{macrocode} % \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} % -% \begin{macro}[int]{\@@_choices_make:nn} +% \begin{macro}[int]{\@@_choices_make:nn, \@@_multichoices_make:nn} +% \begin{macro}[aux]{\@@_choices_make:Nnn} % Auto-generating choices means setting up the root key as a choice, then % defining each choice in turn. % \begin{macrocode} -\cs_new_protected:Npn \@@_choices_make:nn #1#2 +\cs_new_protected_nopar:Npn \@@_choices_make:nn + { \@@_choices_make:Nnn \@@_choice_make: } +\cs_new_protected_nopar:Npn \@@_multichoices_make:nn + { \@@_choices_make:Nnn \@@_multichoice_make: } +\cs_new_protected:Npn \@@_choices_make:Nnn #1#2#3 { - \@@_choice_make: + #1 \int_zero:N \l_keys_choice_int - \clist_map_inline:nn {#1} + \clist_map_inline:nn {#2} { \int_incr:N \l_keys_choice_int \@@_cmd_set:nx { \l_keys_path_tl / ##1 } @@ -1345,12 +1389,13 @@ \tl_set:Nn \exp_not:N \l_keys_choice_tl {##1} \int_set:Nn \exp_not:N \l_keys_choice_int { \int_use:N \l_keys_choice_int } - \exp_not:n {#2} + \exp_not:n {#3} } } } % \end{macrocode} % \end{macro} +% \end{macro} % % \begin{macro}[int] % {\@@_cmd_set:nn, \@@_cmd_set:nx, \@@_cmd_set:Vn, \@@_cmd_set:Vo} @@ -1423,47 +1468,6 @@ % \end{macro} % \end{macro} % -% \begin{macro}[int]{\@@_multichoice_find:n} -% \begin{macro}[int]{\@@_multichoice_make:} -% \begin{macro}[int]{\@@_multichoices_make:nn} -% Choices where several values can be selected are very similar to normal -% exclusive choices. There is just a slight change in implementation to -% map across a comma-separated list. This then requires that the appropriate -% set up takes place elsewhere. -% \begin{macrocode} -\cs_new:Npn \@@_multichoice_find:n #1 - { \clist_map_function:nN {#1} \@@_choice_find:n } -\cs_new_protected_nopar:Npn \@@_multichoice_make: - { - \@@_cmd_set:nn { \l_keys_path_tl } - { \@@_multichoice_find:n {##1} } - \@@_cmd_set:nn { \l_keys_path_tl / unknown } - { - \__msg_kernel_error:nnxx { kernel } { key-choice-unknown } - { \l_keys_path_tl } {##1} - } - } -\cs_new_protected:Npn \@@_multichoices_make:nn #1#2 - { - \@@_multichoice_make: - \int_zero:N \l_keys_choice_int - \clist_map_inline:nn {#1} - { - \int_incr:N \l_keys_choice_int - \@@_cmd_set:nx { \l_keys_path_tl / ##1 } - { - \tl_set:Nn \exp_not:N \l_keys_choice_tl {##1} - \int_set:Nn \exp_not:N \l_keys_choice_int - { \int_use:N \l_keys_choice_int } - \exp_not:n {#2} - } - } - } -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% % \begin{macro}[int]{\@@_value_requirement:n} % Values can be required or forbidden by having the appropriate marker % set. First, both the required and forbidden ones are clear, just in case! @@ -2079,17 +2083,22 @@ % \end{macro} % % \begin{macro}[int, EXP]{\@@_choice_find:n} +% \begin{macro}[int, EXP]{\@@_multichoice_find:n} % Executing a choice has two parts. First, try the choice given, then % if that fails call the unknown key. That will exist, as it is created % when a choice is first made. So there is no need for any escape code. +% For multiple choices, the same code ends up used in a mapping. % \begin{macrocode} \cs_new:Npn \@@_choice_find:n #1 { \@@_execute:nn { \l_keys_path_tl / \tl_to_str:n {#1} } { \@@_execute:nn { \l_keys_path_tl / unknown } { } } } +\cs_new:Npn \@@_multichoice_find:n #1 + { \clist_map_function:nN {#1} \@@_choice_find:n } % \end{macrocode} % \end{macro} +% \end{macro} % % \subsection{Utilities} % @@ -2146,7 +2155,7 @@ \__msg_kernel_new:nnnn { kernel } { key-no-property } { No~property~given~in~definition~of~key~'#1'. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl Inside~\keys_define:nn each~key~name~ needs~a~property: \\ \\ \iow_indent:n { #1 . } \\ \\ @@ -2158,17 +2167,23 @@ The~module~'#2'~does~not~have~a~key~called~#1'.\\ Check~that~you~have~spelled~the~key~name~correctly. } +\__msg_kernel_new:nnnn { kernel } { nested-choice-key } + { Attempt~to~define~'#1'~as~a~nested~choice~key. } + { + The~key~'#1'~cannot~be~defined~as~a~choice~as~the~parent~key~'#2'~is~ + itself~a~choice. + } \__msg_kernel_new:nnnn { kernel } { property-requires-value } { The~property~'#1'~requires~a~value. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl LaTeX~was~asked~to~set~property~'#1'~for~key~'#2'.\\ No~value~was~given~for~the~property,~and~one~is~required. } \__msg_kernel_new:nnnn { kernel } { property-unknown } { The~key~property~'#1'~is~unknown. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl LaTeX~has~been~asked~to~set~the~property~'#1'~for~key~'#2':~ this~property~is~not~defined. } @@ -2240,7 +2255,7 @@ \__msg_kernel_new:nnnn { kernel } { generate-choices-before-code } { No~code~available~to~generate~choices~for~key~'#1'. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl Before~using~.generate_choices:n~the~code~should~be~defined~ with~'.choice_code:n'~or~'.choice_code:x'. } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx b/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx deleted file mode 100644 index ccecf9c4f48..00000000000 --- a/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx +++ /dev/null @@ -1,501 +0,0 @@ -% \iffalse meta-comment -% -%% File: l3luatex.dtx Copyright (C) 2010-2014 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. -%% -%% ----------------------------------------------------------------------- -% -%<*driver> -\documentclass[full]{l3doc} -% -%<*driver|package> -\GetIdInfo$Id: l3luatex.dtx 4712 2014-04-30 08:17:49Z joseph $ - {L3 Experimental LuaTeX-specific functions} -% -%<*driver> -\begin{document} - \DocInput{\jobname.dtx} -\end{document} -% -% \fi -% -% \title{^^A -% The \pkg{l3luatex} package\\ LuaTeX-specific functions^^A -% \thanks{This file describes v\ExplFileVersion, -% last revised \ExplFileDate.}^^A -% } -% -% \author{^^A -% The \LaTeX3 Project\thanks -% {^^A -% E-mail: -% \href{mailto:latex-team@latex-project.org} -% {latex-team@latex-project.org}^^A -% }^^A -% } -% -% \date{Released \ExplFileDate} -% -% \maketitle -% -% \begin{documentation} -% -% \section{Breaking out to \Lua{}} -% -% The \LuaTeX{} engine provides access to the \Lua{} programming language, -% and with it access to the \enquote{internals} of \TeX{}. In order to use -% this within the framework provided here, a family of functions is -% available. When used with \pdfTeX{} or \XeTeX{} these will raise an -% error: use \cs{luatex_if_engine:T} to avoid this. Details of coding -% the \LuaTeX{} engine are detailed in the \LuaTeX{} manual. -% -% \begin{function}[EXP, updated = 2012-08-02]{\lua_now:n, \lua_now:x} -% \begin{syntax} -% \cs{lua_now:n} \Arg{token list} -% \end{syntax} -% The \meta{token list} is first tokenized by \TeX{}, which will include -% converting line ends to spaces in the usual \TeX{} manner and which -% respects currently-applicable \TeX{} category codes. The resulting -% \meta{\Lua{} input} is passed to the \Lua{} interpreter for processing. -% Each \cs{lua_now:n} block is treated by \Lua{} as a separate chunk. -% The \Lua{} interpreter will execute the \meta{\Lua{} input} immediately, -% and in an expandable manner. -% \end{function} -% -% \begin{function}[EXP, added = 2012-08-02]{\lua_now_x:n, \lua_now_x:x} -% \begin{syntax} -% \cs{lua_now_x:n} \Arg{token list} -% \end{syntax} -% The \meta{token list} is first tokenized and expanded by \TeX{}, which -% will include converting line ends to spaces in the usual \TeX{} manner and -% which respects currently-applicable \TeX{} category codes. The resulting -% \meta{\Lua{} input} is passed to the \Lua{} interpreter for processing. -% Each \cs{lua_now_x:n} block is treated by \Lua{} as a separate chunk. -% The \Lua{} interpreter will execute the \meta{\Lua{} input} immediately, -% and in an expandable manner. -% \begin{texnote} -% \cs{lua_now_x:n} is the \LuaTeX{} primitive \tn{directlua} renamed. -% \end{texnote} -% \end{function} -% -% \begin{function}{\lua_shipout:n, \lua_shipout:x} -% \begin{syntax} -% \cs{lua_shipout:n} \Arg{token list} -% \end{syntax} -% The \meta{token list} is first tokenized by \TeX{}, which will include -% converting line ends to spaces in the usual \TeX{} manner and which -% respects currently-applicable \TeX{} category codes. The resulting -% \meta{\Lua{} input} is passed to the \Lua{} interpreter when the -% current page is finalised (\emph{i.e.}~at shipout). Each -% \cs{lua_shipout:n} block is treated by \Lua{} as a separate chunk. -% The \Lua{} interpreter will execute the \meta{\Lua{} input} during the -% page-building routine: no \TeX{} expansion of the \meta{\Lua{} input} -% will occur at this stage. -% \begin{texnote} -% At a \TeX{} level, the \meta{\Lua{} input} is stored as a -% \enquote{whatsit}. -% \end{texnote} -% \end{function} -% -% \begin{function}{\lua_shipout_x:n, \lua_shipout_x:x} -% \begin{syntax} -% \cs{lua_shipout:n} \Arg{token list} -% \end{syntax} -% The \meta{token list} is first tokenized by \TeX{}, which will include -% converting line ends to spaces in the usual \TeX{} manner and which -% respects currently-applicable \TeX{} category codes. The resulting -% \meta{\Lua{} input} is passed to the \Lua{} interpreter when the -% current page is finalised (\emph{i.e.}~at shipout). Each -% \cs{lua_shipout:n} block is treated by \Lua{} as a separate chunk. -% The \Lua{} interpreter will execute the \meta{\Lua{} input} during the -% page-building routine: the \meta{\Lua{} input} is expanded during this -% process in addition to any expansion when the argument was read. This -% makes these functions suitable for including material finalised -% during the page building process (such as the page number). -% \begin{texnote} -% \cs{lua_shipout_x:n} is the \LuaTeX{} primitive \tn{latelua} -% named using the \LaTeX3 scheme. -% -% At a \TeX{} level, the \meta{\Lua{} input} is stored as a -% \enquote{whatsit}. -% \end{texnote} -% \end{function} -% -% \section{Category code tables} -% -% As well as providing methods to break out into \Lua{}, there are -% places where additional \LaTeX3 functions are provided by the -% \LuaTeX{} engine. In particular, \LuaTeX{} provides category code -% tables. These can be used to ensure that a set of category codes -% are in force in a more robust way than is possible with other -% engines. These are therefore used by \cs{ExplSyntaxOn} and -% \pkg{ExplSyntaxOff} when using the \LuaTeX{} engine. -% -% \begin{function}{\cctab_new:N} -% \begin{syntax} -% \cs{cctab_new:N} \meta{category code table} -% \end{syntax} -% Creates a new category code table, initially with the codes as -% used by \IniTeX{}. -% \end{function} -% -% \begin{function}{\cctab_gset:Nn} -% \begin{syntax} -% \cs{cctab_gset:Nn} \meta{category code table} \Arg{category code set up} -% \end{syntax} -% Sets the \meta{category code table} to apply the category codes -% which apply when the prevailing r{\'e}gime is modified by the -% \meta{category code set up}. Thus within a standard code block -% the starting point will be the code applied by \cs{c_code_cctab}. -% The assignment of the table is global: the underlying primitive does -% not respect grouping. -% \end{function} -% -% \begin{function}{\cctab_begin:N} -% \begin{syntax} -% \cs{cctab_begin:N} \meta{category code table} -% \end{syntax} -% Switches the category codes in force to those stored in the -% \meta{category code table}. The prevailing codes before the -% function is called are added to a stack, for use with -% \cs{cctab_end:}. -% \end{function} -% -% \begin{function}{\cctab_end:} -% \begin{syntax} -% \cs{cctab_end:} -% \end{syntax} -% Ends the scope of a \meta{category code table} started using -% \cs{cctab_begin:N}, retuning the codes to those in force before the -% matching \cs{cctab_begin:N} was used. -% \end{function} -% -% \begin{variable}{\c_code_cctab} -% Category code table for the code environment. This does not include -% setting the behaviour of the line-end character, which is only -% altered by \cs{ExplSyntaxOn}. -% \end{variable} -% -% \begin{variable}{\c_document_cctab} -% Category code table for a standard \LaTeX{} document. This does not -% include setting the behaviour of the line-end character, which is -% only altered by \cs{ExplSyntaxOff}. -% \end{variable} -% -% \begin{variable}{\c_initex_cctab} -% Category code table as set up by \IniTeX{}. -% \end{variable} -% -% \begin{variable}{\c_other_cctab} -% Category code table where all characters have category code $12$ -% (other). -% \end{variable} -% -% \begin{variable}{\c_str_cctab} -% Category code table where all characters have category code $12$ -% (other) with the exception of spaces, which have category code -% $10$ (space). -% \end{variable} -% -% \end{documentation} -% -% \begin{implementation} -% -% \section{\pkg{l3luatex} implementation} -% -% \begin{macrocode} -%<*initex|package> -% \end{macrocode} -% -% \begin{macro}{\lua_now_x:n, \lua_now_x:x} -% \begin{macro}{\lua_now:n, \lua_now:x} -% \begin{macro}{\lua_shipout_x:n, \lua_shipout_x:x} -% \begin{macro}{\lua_shipout:n, \lua_shipout:x} -% When \LuaTeX{} is in use, this is all a question of primitives with new -% names. On the other hand, for \pdfTeX{} and \XeTeX{} the argument should -% be removed from the input stream before issuing an error. This is -% expandable, using \cs{__msg_kernel_expandable_error:nnn} -% as done for \texttt{V}-type expansion in \pkg{l3expan}. -% \begin{macrocode} -\luatex_if_engine:TF - { - \cs_new_eq:NN \lua_now_x:n \luatex_directlua:D - \cs_new_eq:NN \lua_shipout_x:n \luatex_latelua:D - } - { - \cs_new:Npn \lua_now_x:n #1 - { - \__msg_kernel_expandable_error:nnn - { kernel } { bad-engine } { \lua_now_x:n } - } - \cs_new_protected:Npn \lua_shipout_x:n #1 - { - \__msg_kernel_expandable_error:nnn - { kernel } { bad-engine } { \lua_shipout_x:n } - } - } -\cs_generate_variant:Nn \lua_now_x:n { x } -\cs_new:Npn \lua_now:n #1 - { \lua_now_x:n { \exp_not:n {#1} } } -\cs_generate_variant:Nn \lua_now:n { x } -\cs_generate_variant:Nn \lua_shipout_x:n { x } -\cs_new_protected:Npn \lua_shipout:n #1 - { \lua_shipout_x:n { \exp_not:n {#1} } } -\cs_generate_variant:Nn \lua_shipout:n { x } -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \subsection{Category code tables} -% -% \begin{macrocode} -%<@@=cctab> -% \end{macrocode} -% -% \begin{variable}{\g_@@_allocate_int} -% \begin{variable}{\g_@@_stack_int} -% \begin{variable}{\g_@@_stack_seq} -% To allocate category code tables, both the read-only and stack -% tables need to be followed. There is also a sequence stack for the -% dynamic tables themselves. -% \begin{macrocode} -\int_new:N \g_@@_allocate_int -\int_set:Nn \g_@@_allocate_int { \c_minus_one } -\int_new:N \g_@@_stack_int -\seq_new:N \g_@@_stack_seq -% \end{macrocode} -% \end{variable} -% \end{variable} -% \end{variable} -% -% \begin{macro}{\cctab_new:N} -% Creating a new category code table is done slightly differently -% from other registers. Low-numbered tables are more efficiently-stored -% than high-numbered ones. There is also a need to have a stack of -% flexible tables as well as the set of read-only ones. To satisfy both -% of these requirements, odd numbered tables are used for read-only -% tables, and even ones for the stack. Here, therefore, the odd numbers -% are allocated. -% \begin{macrocode} -\cs_new_protected:Npn \cctab_new:N #1 - { - \__chk_if_free_cs:N #1 - \int_gadd:Nn \g_@@_allocate_int { \c_two } - \int_compare:nNnTF - \g_@@_allocate_int < { \c_max_register_int + \c_one } - { - \tex_global:D \tex_chardef:D #1 \g_@@_allocate_int - \luatex_initcatcodetable:D #1 - } - { \__msg_kernel_fatal:nnx { kernel } { out-of-registers } { cctab } } - } -\luatex_if_engine:F - { - \cs_set_protected:Npn \cctab_new:N #1 - { - \__msg_kernel_error:nnx { kernel } { bad-engine } - { \exp_not:N \cctab_new:N } - } - } -%<*package> -\luatex_if_engine:T - { - \cs_set_protected:Npn \cctab_new:N #1 - { - \__chk_if_free_cs:N #1 - \newcatcodetable #1 - \luatex_initcatcodetable:D #1 - } - } -% -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\cctab_begin:N} -% \begin{macro}{\cctab_end:} -% \begin{variable}{\l_@@_internal_tl} -% The aim here is to ensure that the saved tables are read-only. This is -% done by using a stack of tables which are not read only, and actually -% having them as \enquote{in use} copies. -% \begin{macrocode} -\cs_new_protected:Npn \cctab_begin:N #1 - { - \seq_gpush:Nx \g_@@_stack_seq { \tex_the:D \luatex_catcodetable:D } - \luatex_catcodetable:D #1 - \int_gadd:Nn \g_@@_stack_int { \c_two } - \int_compare:nNnT \g_@@_stack_int > \c_max_register_int - { \__msg_kernel_fatal:nn { kernel } { cctab-stack-full } } - \luatex_savecatcodetable:D \g_@@_stack_int - \luatex_catcodetable:D \g_@@_stack_int - } -\cs_new_protected_nopar:Npn \cctab_end: - { - \int_gsub:Nn \g_@@_stack_int { \c_two } - \seq_if_empty:NTF \g_@@_stack_seq - { \tl_set:Nn \l_@@_internal_tl { 0 } } - { \seq_gpop:NN \g_@@_stack_seq \l_@@_internal_tl } - \luatex_catcodetable:D \l_@@_internal_tl \scan_stop: - } -\luatex_if_engine:F - { - \cs_set_protected:Npn \cctab_begin:N #1 - { - \__msg_kernel_error:nnxx { kernel } { bad-engine } - { \exp_not:N \cctab_begin:N } {#1} - } - \cs_set_protected_nopar:Npn \cctab_end: - { - \__msg_kernel_error:nnx { kernel } { bad-engine } - { \exp_not:N \cctab_end: } - } - } -%<*package> -\luatex_if_engine:T - { - \cs_set_protected:Npn \cctab_begin:N #1 { \BeginCatcodeRegime #1 } - \cs_set_protected_nopar:Npn \cctab_end: { \EndCatcodeRegime } - } -% -\tl_new:N \l_@@_internal_tl -% \end{macrocode} -% \end{variable} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\cctab_gset:Nn} -% Category code tables are always global, so only one version is needed. -% The set up here is simple, and means that at the point of use there is -% no need to worry about escaping category codes. -% \begin{macrocode} -\cs_new_protected:Npn \cctab_gset:Nn #1#2 - { - \group_begin: - #2 - \luatex_savecatcodetable:D #1 - \group_end: - } -\luatex_if_engine:F - { - \cs_set_protected:Npn \cctab_gset:Nn #1#2 - { - \__msg_kernel_error:nnxx { kernel } { bad-engine } - { \exp_not:N \cctab_gset:Nn } { #1 {#2} } - } - } -% \end{macrocode} -% \end{macro} -% -% \begin{variable}{\c_code_cctab} -% \begin{variable}{\c_document_cctab} -% \begin{variable}{\c_initex_cctab} -% \begin{variable}{\c_other_cctab} -% \begin{variable}{\c_str_cctab} -% Creating category code tables is easy using the function above. -% The \texttt{other} and \texttt{string} ones are done by completely -% ignoring the existing codes as this makes life a lot less complex. The -% table for \pkg{expl3} category codes is always needed, whereas when in -% package mode the rest can be copied from the existing \LaTeXe{} package -% \pkg{luatex}. -% \begin{macrocode} -\luatex_if_engine:T - { - \cctab_new:N \c_code_cctab - \cctab_gset:Nn \c_code_cctab { } - } -%<*package> -\luatex_if_engine:T - { - \cs_new_eq:NN \c_document_cctab \CatcodeTableLaTeX - \cs_new_eq:NN \c_initex_cctab \CatcodeTableIniTeX - \cs_new_eq:NN \c_other_cctab \CatcodeTableOther - \cs_new_eq:NN \c_str_cctab \CatcodeTableString - } -% -%<*initex> -\luatex_if_engine:T - { - \cctab_new:N \c_document_cctab - \cctab_new:N \c_other_cctab - \cctab_new:N \c_str_cctab - \cctab_gset:Nn \c_document_cctab - { - \char_set_catcode_space:n { 9 } - \char_set_catcode_space:n { 32 } - \char_set_catcode_other:n { 58 } - \char_set_catcode_math_subscript:n { 95 } - \char_set_catcode_active:n { 126 } - } - \cctab_gset:Nn \c_other_cctab - { - \int_step_inline:nnnn { 0 } { 1 } { 127 } - { \char_set_catcode_other:n {#1} } - } - \cctab_gset:Nn \c_str_cctab - { - \int_step_inline:nnnn { 0 } { 1 } { 127 } - { \char_set_catcode_other:n {#1} } - \char_set_catcode_space:n { 32 } - } - } -% -% \end{macrocode} -% \end{variable} -% \end{variable} -% \end{variable} -% \end{variable} -% \end{variable} -% -% \subsection{Messages} -% -% \begin{macrocode} -\__msg_kernel_new:nnnn { kernel } { bad-engine } - { LuaTeX~engine~not~in~use!~Ignoring~#1. } - { - The~feature~you~are~using~is~only~available~ - with~the~LuaTeX~engine.~LaTeX3~ignored~`#1#2'. - } -\__msg_kernel_new:nnnn { kernel } { cctab-stack-full } - { The~category~code~table~stack~is~exhausted. } - { - LaTeX~has~been~asked~to~switch~to~a~new~category~code~table,~ - but~there~is~no~more~space~to~do~this! - } -% \end{macrocode} -% -% \begin{macrocode} -% -% \end{macrocode} -% -%\end{implementation} -% -%\PrintIndex diff --git a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx index 44a558917aa..1adc34d8e17 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx @@ -37,7 +37,7 @@ \documentclass[full]{l3doc} % %<*driver|package> -\GetIdInfo$Id: l3msg.dtx 4728 2014-05-04 13:25:37Z joseph $ +\GetIdInfo$Id: l3msg.dtx 4943 2014-05-30 17:26:32Z bruno $ {L3 Messages} % %<*driver> @@ -759,6 +759,14 @@ % the \cs{__msg_show_item:nn} and \cs{__msg_show_item_unbraced:nn} versions % for key--value like data structures. % \end{function} +% +% \begin{variable}{\c__msg_coding_error_text_tl} +% The text +% \begin{verbatim} +% This is a coding error. +% \end{verbatim} +% used by kernel functions when erroneous programming input is encountered. +% \end{variable} % % \end{documentation} % @@ -878,45 +886,45 @@ % % \begin{variable} % { -% \c_msg_coding_error_text_tl , -% \c_msg_continue_text_tl , -% \c_msg_critical_text_tl , -% \c_msg_fatal_text_tl , -% \c_msg_help_text_tl , -% \c_msg_no_info_text_tl , -% \c_msg_on_line_text_tl , -% \c_msg_return_text_tl , -% \c_msg_trouble_text_tl +% \c_@@_coding_error_text_tl , +% \c_@@_continue_text_tl , +% \c_@@_critical_text_tl , +% \c_@@_fatal_text_tl , +% \c_@@_help_text_tl , +% \c_@@_no_info_text_tl , +% \c_@@_on_line_text_tl , +% \c_@@_return_text_tl , +% \c_@@_trouble_text_tl % } % Simple pieces of text for messages. % \begin{macrocode} -\tl_const:Nn \c_msg_coding_error_text_tl +\tl_const:Nn \c_@@_coding_error_text_tl { This~is~a~coding~error. \\ \\ } -\tl_const:Nn \c_msg_continue_text_tl +\tl_const:Nn \c_@@_continue_text_tl { Type~~to~continue } -\tl_const:Nn \c_msg_critical_text_tl - { Reading~the~current~file~will~stop. } -\tl_const:Nn \c_msg_fatal_text_tl +\tl_const:Nn \c_@@_critical_text_tl + { Reading~the~current~file~'\g_file_current_name_tl'~will~stop. } +\tl_const:Nn \c_@@_fatal_text_tl { This~is~a~fatal~error:~LaTeX~will~abort. } -\tl_const:Nn \c_msg_help_text_tl +\tl_const:Nn \c_@@_help_text_tl { For~immediate~help~type~H~ } -\tl_const:Nn \c_msg_no_info_text_tl +\tl_const:Nn \c_@@_no_info_text_tl { LaTeX~does~not~know~anything~more~about~this~error,~sorry. - \c_msg_return_text_tl + \c_@@_return_text_tl } -\tl_const:Nn \c_msg_on_line_text_tl { on~line } -\tl_const:Nn \c_msg_return_text_tl +\tl_const:Nn \c_@@_on_line_text_tl { on~line } +\tl_const:Nn \c_@@_return_text_tl { \\ \\ Try~typing~~to~proceed. \\ If~that~doesn't~work,~type~X~~to~quit. } -\tl_const:Nn \c_msg_trouble_text_tl +\tl_const:Nn \c_@@_trouble_text_tl { \\ \\ More~errors~will~almost~certainly~follow: \\ @@ -932,7 +940,7 @@ \cs_new_nopar:Npn \msg_line_number: { \int_use:N \tex_inputlineno:D } \cs_gset_nopar:Npn \msg_line_context: { - \c_msg_on_line_text_tl + \c_@@_on_line_text_tl \c_space_tl \msg_line_number: } @@ -953,12 +961,12 @@ { \tl_if_empty:nTF {#3} { - \@@_interrupt_wrap:nn { \\ \c_msg_no_info_text_tl } - {#1 \\\\ #2 \\\\ \c_msg_continue_text_tl } + \@@_interrupt_wrap:nn { \\ \c_@@_no_info_text_tl } + {#1 \\\\ #2 \\\\ \c_@@_continue_text_tl } } { \@@_interrupt_wrap:nn { \\ #3 } - {#1 \\\\ #2 \\\\ \c_msg_help_text_tl } + {#1 \\\\ #2 \\\\ \c_@@_help_text_tl } } } % \end{macrocode} @@ -1171,7 +1179,7 @@ \use:c { \c_@@_text_prefix_tl #1 / #2 } {#3} {#4} {#5} {#6} \msg_see_documentation_text:n {#1} } - { \c_msg_fatal_text_tl } + { \c_@@_fatal_text_tl } \tex_end:D } % \end{macrocode} @@ -1199,7 +1207,7 @@ \use:c { \c_@@_text_prefix_tl #1 / #2 } {#3} {#4} {#5} {#6} \msg_see_documentation_text:n {#1} } - { \c_msg_critical_text_tl } + { \c_@@_critical_text_tl } \tex_endinput:D } % \end{macrocode} @@ -1732,25 +1740,25 @@ \@@_kernel_new:nnnn { kernel } { message-already-defined } { Message~'#2'~for~module~'#1'~already~defined. } { - \c_msg_coding_error_text_tl + \c_@@_coding_error_text_tl LaTeX~was~asked~to~define~a~new~message~called~'#2'\ by~the~module~'#1':~this~message~already~exists. - \c_msg_return_text_tl + \c_@@_return_text_tl } \@@_kernel_new:nnnn { kernel } { message-unknown } { Unknown~message~'#2'~for~module~'#1'. } { - \c_msg_coding_error_text_tl + \c_@@_coding_error_text_tl LaTeX~was~asked~to~display~a~message~called~'#2'\\ by~the~module~'#1':~this~message~does~not~exist. - \c_msg_return_text_tl + \c_@@_return_text_tl } \@@_kernel_new:nnnn { kernel } { message-class-unknown } { Unknown~message~class~'#1'. } { LaTeX~has~been~asked~to~redirect~messages~to~a~class~'#1':\\ this~was~never~defined. - \c_msg_return_text_tl + \c_@@_return_text_tl } \@@_kernel_new:nnnn { kernel } { message-redirect-loop } { @@ -1770,7 +1778,7 @@ \@@_kernel_new:nnnn { kernel } { bad-number-of-arguments } { Function~'#1'~cannot~be~defined~with~#2~arguments. } { - \c_msg_coding_error_text_tl + \c_@@_coding_error_text_tl LaTeX~has~been~asked~to~define~a~function~'#1'~with~ #2~arguments.~ TeX~allows~between~0~and~9~arguments~for~a~single~function. @@ -1778,7 +1786,7 @@ \@@_kernel_new:nnnn { kernel } { command-already-defined } { Control~sequence~#1~already~defined. } { - \c_msg_coding_error_text_tl + \c_@@_coding_error_text_tl LaTeX~has~been~asked~to~create~a~new~control~sequence~'#1'~ but~this~name~has~already~been~used~elsewhere. \\ \\ The~current~meaning~is:\\ @@ -1787,14 +1795,14 @@ \@@_kernel_new:nnnn { kernel } { command-not-defined } { Control~sequence~#1~undefined. } { - \c_msg_coding_error_text_tl + \c_@@_coding_error_text_tl LaTeX~has~been~asked~to~use~a~command~#1,~but~this~has~not~ been~defined~yet. } \@@_kernel_new:nnnn { kernel } { empty-search-pattern } { Empty~search~pattern. } { - \c_msg_coding_error_text_tl + \c_@@_coding_error_text_tl LaTeX~has~been~asked~to~replace~an~empty~pattern~by~'#1':~that~ would~lead~to~an~infinite~loop! } @@ -1808,7 +1816,7 @@ \@@_kernel_new:nnnn { kernel } { missing-colon } { Function~'#1'~contains~no~':'. } { - \c_msg_coding_error_text_tl + \c_@@_coding_error_text_tl Code-level~functions~must~contain~':'~to~separate~the~ argument~specification~from~the~function~name.~This~is~ needed~when~defining~conditionals~or~variants,~or~when~building~a~ @@ -1817,17 +1825,18 @@ \@@_kernel_new:nnnn { kernel } { protected-predicate } { Predicate~'#1'~must~be~expandable. } { - \c_msg_coding_error_text_tl + \c_@@_coding_error_text_tl LaTeX~has~been~asked~to~define~'#1'~as~a~protected~predicate.~ Only~expandable~tests~can~have~a~predicate~version. } \@@_kernel_new:nnnn { kernel } { conditional-form-unknown } { Conditional~form~'#1'~for~function~'#2'~unknown. } { - \c_msg_coding_error_text_tl + \c_@@_coding_error_text_tl LaTeX~has~been~asked~to~define~the~conditional~form~'#1'~of~ the~function~'#2',~but~only~'TF',~'T',~'F',~and~'p'~forms~exist. } +%<*package> \bool_if:NT \l@expl@check@declarations@bool { \@@_kernel_new:nnnn { check } { non-declared-variable } @@ -1841,24 +1850,25 @@ LaTeX~will~create~the~variable~and~continue. } } +% \@@_kernel_new:nnnn { kernel } { scanmark-already-defined } { Scan~mark~#1~already~defined. } { - \c_msg_coding_error_text_tl + \c_@@_coding_error_text_tl LaTeX~has~been~asked~to~create~a~new~scan~mark~'#1'~ but~this~name~has~already~been~used~for~a~scan~mark. } \@@_kernel_new:nnnn { kernel } { variable-not-defined } { Variable~#1~undefined. } { - \c_msg_coding_error_text_tl + \c_@@_coding_error_text_tl LaTeX~has~been~asked~to~show~a~variable~#1,~but~this~has~not~ been~defined~yet. } \@@_kernel_new:nnnn { kernel } { variant-too-long } { Variant~form~'#1'~longer~than~base~signature~of~'#2'. } { - \c_msg_coding_error_text_tl + \c_@@_coding_error_text_tl LaTeX~has~been~asked~to~create~a~variant~of~the~function~'#2'~ with~a~signature~starting~with~'#1',~but~that~is~longer~than~ the~signature~(part~after~the~colon)~of~'#2'. @@ -1866,7 +1876,7 @@ \@@_kernel_new:nnnn { kernel } { invalid-variant } { Variant~form~'#1'~invalid~for~base~form~'#2'. } { - \c_msg_coding_error_text_tl + \c_@@_coding_error_text_tl LaTeX~has~been~asked~to~create~a~variant~of~the~function~'#2'~ with~a~signature~starting~with~'#1',~but~cannot~change~an~argument~ from~type~'#3'~to~type~'#4'. @@ -1885,7 +1895,7 @@ \@@_kernel_new:nnn { kernel } { negative-replication } { Negative~argument~for~\prg_replicate:nn. } \@@_kernel_new:nnn { kernel } { unknown-comparison } - { Relation~symbol~'#1'~unknown:~use~=,~<,~>,~==,~!=,~<=,~>=. } + { Relation~'#1'~unknown:~use~=,~<,~>,~==,~!=,~<=,~>=. } \@@_kernel_new:nnn { kernel } { zero-step } { Zero~step~size~for~step~function~#1. } % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx index b2e834d843c..1132202df40 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx @@ -37,7 +37,7 @@ \documentclass[full]{l3doc} % %<*driver|package> -\GetIdInfo$Id: l3names.dtx 4728 2014-05-04 13:25:37Z joseph $ +\GetIdInfo$Id: l3names.dtx 4993 2014-06-02 09:39:35Z joseph $ {L3 Namespace for primitives} % %<*driver> @@ -146,6 +146,12 @@ % \end{macrocode} %\end{macro} % +% To allow extracting \enquote{just the names}, a bit of DocStrip fiddling. +% \begin{macrocode} +% +%<*initex|names|package> +% \end{macrocode} +% % In the current incarnation of this package, all \TeX{} primitives % are given a new name of the form |\tex_|\emph{oldname}|:D|. % But first three special cases which have symbolic original names. @@ -593,6 +599,7 @@ % \begin{macrocode} \__kernel_primitive:NN \catcodetable \luatex_catcodetable:D \__kernel_primitive:NN \directlua \luatex_directlua:D + \__kernel_primitive:NN \expanded \luatex_expanded:D \__kernel_primitive:NN \initcatcodetable \luatex_initcatcodetable:D \__kernel_primitive:NN \latelua \luatex_latelua:D \__kernel_primitive:NN \luaescapestring \luatex_luaescapestring:D @@ -611,20 +618,16 @@ \__kernel_primitive:NN \pardir \luatex_pardir:D \__kernel_primitive:NN \textdir \luatex_textdir:D % \end{macrocode} -% The job is done: close the group (using the primitive renamed!). +% +% End of the \enquote{just the names} part of the source. % \begin{macrocode} -\tex_endgroup:D +% +%<*initex|package> % \end{macrocode} -% If the underlying engine is Lua\TeX{} then the \tn{pdfstrcmp} primitive -% is emulated as \cs{expl_pdfstrcmp} as part of the bootstrap process. -% That can be detected as \cs{pdftex_strcmp:D} will not be defined: is -% that is the case, copy the code and then remove the temporary emulation. +% +% The job is done: close the group (using the primitive renamed!). % \begin{macrocode} -\etex_ifdefined:D \pdftex_strcmp:D -\tex_else:D - \tex_let:D \pdftex_strcmp:D \expl_pdfstrcmp - \tex_let:D \expl_pdfstrcmp \tex_undefined:D -\tex_fi:D +\tex_endgroup:D % \end{macrocode} % % \LaTeXe{} will have moved a few primitives, so these are sorted out. diff --git a/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx b/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx index e204fe0dec2..29352c0212b 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx @@ -37,7 +37,7 @@ \documentclass[full]{l3doc} % %<*driver|package> -\GetIdInfo$Id: l3quark.dtx 4728 2014-05-04 13:25:37Z joseph $ +\GetIdInfo$Id: l3quark.dtx 4889 2014-05-26 19:59:25Z joseph $ {L3 Quarks} % %<*driver> @@ -264,28 +264,6 @@ % ended. % \end{function} % -% \section{Clearing quarks away} -% -% \begin{function}{\use_none_delimit_by_q_recursion_stop:w} -% \begin{syntax} -% \cs{use_none_delimit_by_q_recursion_stop:w} \meta{tokens} \cs{q_recursion_stop} -% \end{syntax} -% Used to prematurely terminate a recursion using \cs{q_recursion_stop} -% as the end marker, removing any remaining \meta{tokens} from the -% input stream. -% \end{function} -% -% \begin{function}{\use_i_delimit_by_q_recursion_stop:nw} -% \begin{syntax} -% \cs{use_i_delimit_by_q_recursion_stop:nw} \Arg{insertion} -% ~~\meta{tokens} \cs{q_recursion_stop} -% \end{syntax} -% Used to prematurely terminate a recursion using \cs{q_recursion_stop} -% as the end marker, removing any remaining \meta{tokens} from the -% input stream. The \meta{insertion} is then made into the input -% stream after the end of the recursion. -% \end{function} -% % \section{An example of recursion with quarks} % \label{sec:l3quark:quark-example} % @@ -488,14 +466,14 @@ % \begin{macrocode} \cs_new:Npn \quark_if_recursion_tail_stop:n #1 { - \if_int_compare:w \pdftex_strcmp:D + \if_int_compare:w \__str_if_eq_x:nn { \exp_not:N \q_recursion_tail } { \exp_not:n {#1} } = \c_zero \exp_after:wN \use_none_delimit_by_q_recursion_stop:w \fi: } \cs_new:Npn \quark_if_recursion_tail_stop_do:nn #1 { - \if_int_compare:w \pdftex_strcmp:D + \if_int_compare:w \__str_if_eq_x:nn { \exp_not:N \q_recursion_tail } { \exp_not:n {#1} } = \c_zero \exp_after:wN \use_i_delimit_by_q_recursion_stop:nw \else: @@ -521,7 +499,7 @@ } \cs_new:Npn \__quark_if_recursion_tail_break:nN #1#2 { - \if_int_compare:w \pdftex_strcmp:D + \if_int_compare:w \__str_if_eq_x:nn { \exp_not:N \q_recursion_tail } { \exp_not:n {#1} } = \c_zero \exp_after:wN #2 \fi: @@ -572,7 +550,7 @@ % \begin{macrocode} \prg_new_conditional:Nnn \quark_if_nil:n { p, T , F , TF } { - \if_int_compare:w \pdftex_strcmp:D + \if_int_compare:w \__str_if_eq_x:nn { \exp_not:N \q_nil } { \exp_not:n {#1} } = \c_zero \prg_return_true: \else: @@ -581,7 +559,7 @@ } \prg_new_conditional:Nnn \quark_if_no_value:n { p, T , F , TF } { - \if_int_compare:w \pdftex_strcmp:D + \if_int_compare:w \__str_if_eq_x:nn { \exp_not:N \q_no_value } { \exp_not:n {#1} } = \c_zero \prg_return_true: \else: diff --git a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx index abd4bac865d..f773f3e2867 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx @@ -38,7 +38,7 @@ \documentclass[full]{l3doc} % %<*driver|package> -\GetIdInfo$Id: l3skip.dtx 4738 2014-05-05 08:00:05Z joseph $ +\GetIdInfo$Id: l3skip.dtx 4972 2014-05-31 16:42:18Z bruno $ {L3 Dimensions and skips} % %<*driver> @@ -900,7 +900,7 @@ % \end{texnote} % \end{function} % -% \begin{function}[added = 2011-11-11, EXP] +% \begin{function}[added = 2011-11-11, updated=2014-05-31, EXP] % {\__dim_strip_bp:n, \__dim_strip_pt:n} % \begin{syntax} % \cs{__dim_strip_bp:n} \Arg{dimension expression} @@ -912,15 +912,11 @@ % and applying the standard mathematical rules. The magnitude of the % result, expressed in big points (\texttt{bp}) or points (\texttt{pt}), % will be left in the input stream with \emph{no units}. If the decimal -% part of the magnitude is zero, this will be omitted. -% -% If the \Arg{dimension expression} contains additional units, these will -% be ignored, so for example +% part of the magnitude is zero, it will be omitted. For example, % \begin{verbatim} -% \__dim_strip_pt:n { 1 bp pt } +% \__dim_strip_pt:n { 2.5 pt * 2 } % \end{verbatim} -% will leave |1.00374| in the input stream (\emph{i.e.}~the magnitude of -% one \enquote{big point} when converted to points). +% will leave~|5| in the input stream. % \end{function} % % \end{documentation} @@ -1349,38 +1345,34 @@ % integer fraction for $72/72.27$. % \begin{macrocode} \cs_new:Npn \@@_strip_bp:n #1 - { - \__dim_strip_pt:n - { - \__dim_eval:w ( #1 ) * 800 / 803 \__dim_eval_end: - } - } + { \@@_strip_pt:n { ( #1 ) * 800 / 803 } } % \end{macrocode} % \end{macro} % % \begin{macro}[EXP]{\@@_strip_pt:n} % \begin{macro}[EXP, aux]{\@@_strip_pt:w} -% A function which comes up often enough to deserve a place in the kernel. -% The idea here is that the input is assumed to be in \texttt{pt}, but can -% be given in other units, while the output is the value of the dimension -% in \texttt{pt} but with no units given. This is used a lot by low-level +% A function which comes up often enough to deserve a place in the +% kernel. Evaluate the dimension expression~|#1| then remove the +% trailing \texttt{pt}. The argument is put in parentheses as this +% prevents the dimension expression from terminating early and leaving +% extra tokens lying around. This is used a lot by low-level % manipulations. % \begin{macrocode} \cs_new:Npn \@@_strip_pt:n #1 { \exp_after:wN - \@@_strip_pt:w \dim_use:N \@@_eval:w #1 \@@_eval_end: \q_stop + \@@_strip_pt:w \dim_use:N \@@_eval:w (#1) \@@_eval_end: } \use:x { \cs_new:Npn \exp_not:N \@@_strip_pt:w - ##1 . ##2 \tl_to_str:n { pt } ##3 \exp_not:N \q_stop + ##1 . ##2 \tl_to_str:n { pt } + } { - ##1 - \exp_not:N \int_compare:nNnT {##2} > \c_zero - { . ##2 } + \int_compare:nNnTF {#2} > \c_zero + { #1 . #2 } + { #1 } } - } % \end{macrocode} % \end{macro} % \end{macro} @@ -1562,7 +1554,7 @@ \prg_new_conditional:Npnn \skip_if_eq:nn #1#2 { p , T , F , TF } { \if_int_compare:w - \pdftex_strcmp:D { \skip_eval:n { #1 } } { \skip_eval:n { #2 } } + \__str_if_eq_x:nn { \skip_eval:n { #1 } } { \skip_eval:n { #2 } } = \c_zero \prg_return_true: \else: diff --git a/Master/texmf-dist/source/latex/l3kernel/l3styleguide.tex b/Master/texmf-dist/source/latex/l3kernel/l3styleguide.tex new file mode 100644 index 00000000000..6a3a9d122e6 --- /dev/null +++ b/Master/texmf-dist/source/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/source/latex/l3kernel/l3syntax-changes.tex b/Master/texmf-dist/source/latex/l3kernel/l3syntax-changes.tex new file mode 100644 index 00000000000..4dfc70e0e97 --- /dev/null +++ b/Master/texmf-dist/source/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/source/latex/l3kernel/l3tl.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx index befa072b22d..88874c36241 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx @@ -37,7 +37,7 @@ \documentclass[full]{l3doc} % %<*driver|package> -\GetIdInfo$Id: l3tl.dtx 4728 2014-05-04 13:25:37Z joseph $ +\GetIdInfo$Id: l3tl.dtx 5070 2014-06-06 18:00:24Z bruno $ {L3 Token lists} % %<*driver> @@ -657,7 +657,8 @@ % \begin{itemize} % \item an escape character, whose character code is given by the % internal parameter \tn{escapechar}, absent if the -% \tn{escapechar} is negative; +% \tn{escapechar} is negative or greater than the largest +% character code; % \item the control sequence name, as defined by \cs{cs_to_str:N}; % \item a space, unless the control sequence name is a single % character whose category at the time of expansion of @@ -1434,18 +1435,10 @@ % \begin{variable}{\c_@@_rescan_marker_tl} % The rescanning code needs a special token list containing the same % character with two different category codes. This is set up here, -% while the detail is described below. -% \begin{macrocode} -\group_begin: - \tex_lccode:D `\A = `\@ \scan_stop: - \tex_lccode:D `\B = `\@ \scan_stop: - \tex_catcode:D `\A = 8 \scan_stop: - \tex_catcode:D `\B = 3 \scan_stop: -\tex_lowercase:D - { - \group_end: - \tl_const:Nn \c_@@_rescan_marker_tl { A B } - } +% while the detail is described below. Note that we are sure that the +% colon has category letter at this stage. +% \begin{macrocode} +\tl_const:Nx \c_@@_rescan_marker_tl { : \token_to_str:N : } % \end{macrocode} % \end{variable} % @@ -1471,9 +1464,9 @@ % When expanding a token list this can be handled using \cs{exp_not:N} % but this fails if the token list is not being expanded. So instead % a delimited argument is used with an end marker which cannot appear -% within the token list which is scanned: two |@| symbols with different +% within the token list which is scanned: two `|:|' symbols with different % category codes. The rescanned token list cannot contain the end marker, -% because all |@| present in the token list are read with the same category +% because all `|:|' present in the token list are read with the same category % code. As every character with charcode \tn{newlinechar} is replaced % by the \tn{endlinechar}, and an extra \tn{endlinechar} is % added at the end, we need to set both of those to $-1$, @@ -1675,15 +1668,10 @@ % \begin{macro}[aux]{\@@_if_blank_p:NNw} % \TeX{} skips spaces when reading a non-delimited arguments. Thus, % a \meta{token list} is blank if and only if \cs{use_none:n} -% \meta{token list} |?| is empty. For performance reasons, we hard-code -% the emptiness test done in \cs{tl_if_empty:n(TF)}: convert to harmless -% characters with \cs{tl_to_str:n}, and then use +% \meta{token list} |?| is empty after one expansion. The auxiliary +% \cs{@@_if_empty_return:o} is a fast emptyness test, converting its +% argument to a string (after one expansion) and using the test % \cs{if_meaning:w} \cs{q_nil} |...| \cs{q_nil}. -% Note that converting to a string is done after reading the delimited -% argument for \cs{use_none:n}. The similar construction -% \cs{exp_after:wN} \cs{use_none:n} \cs{tl_to_str:n} \Arg{token list} |?| -% would fail if the token list contains the control sequence \cs{ }, -% while \tn{escapechar} is a space or is unprintable. % \begin{macrocode} \prg_new_conditional:Npnn \tl_if_blank:n #1 { p , T , F , TF } { \@@_if_empty_return:o { \use_none:n #1 ? } } @@ -1720,18 +1708,18 @@ % \end{macro} % % \begin{macro}[pTF]{\tl_if_empty:n,\tl_if_empty:V} -% It would be tempting to just use |\if_meaning:w \q_nil #1 \q_nil| as -% a test since this works really well. However, it fails on a token +% Convert the argument to a string: this will be empty if and only if +% the argument is. Then |\if_meaning:w \q_nil ... \q_nil| is +% \texttt{true} if and only if the string |...| is empty. +% It could be tempting to use |\if_meaning:w \q_nil #1 \q_nil| directly. +% This fails on a token % list starting with \cs{q_nil} of course but more troubling is the % case where argument is a complete conditional such as \cs{if_true:} % a \cs{else:} b \cs{fi:} because then \cs{if_true:} is used by % \cs{if_meaning:w}, the test turns out \texttt{false}, the \cs{else:} % executes the \texttt{false} branch, the \cs{fi:} ends it and the % \cs{q_nil} at the end -% starts executing\dots{} A safer route is to convert the entire -% token list into harmless characters first and then compare -% that. This way the test will even accept \cs{q_nil} as the first -% token. +% starts executing\dots{} % \begin{macrocode} \prg_new_conditional:Npnn \tl_if_empty:n #1 { p , TF , T , F } { @@ -1751,7 +1739,7 @@ % \begin{macro}[pTF]{\tl_if_empty:o} % \begin{macro}[EXP,aux]{\@@_if_empty_return:o} % The auxiliary function \cs{@@_if_empty_return:o} is for use -% in conditionals on token lists, which mostly reduce to testing +% in various token list conditionals which reduce to testing % if a given token list is empty after applying a simple function % to it. % The test for emptiness is based on \cs{tl_if_empty:n(TF)}, but @@ -1831,7 +1819,7 @@ % \end{macro} % % \begin{macro}[TF]{\tl_if_in:nn, \tl_if_in:Vn, \tl_if_in:on, \tl_if_in:no} -% Once more, the test relies on \cs{tl_to_str:n} for robustness. +% Once more, the test relies on the emptiness test for robustness. % The function \cs{@@_tmp:w} removes tokens until the first occurrence % of |#2|. If this does not appear in |#1|, then the final |#2| is removed, % leaving an empty token list. Otherwise some tokens remain, and the @@ -1868,18 +1856,37 @@ % \end{macro} % % \begin{macro}[EXP,pTF]{\tl_if_single:n} -% A token list has exactly one item if it is a single token or a -% single brace group, surrounded by optional explicit spaces. -% The naive -% version of this test would do \cs{use_none:n} |#1|, and -% test if the result is empty. However, this will fail when -% the token list is empty. Furthermore, it does not allow optional -% trailing spaces. +% \begin{macro}[EXP,pTF,aux]{\@@_if_single:n} +% This test is similar to \cs{tl_if_empty:nTF}. Expanding +% \cs{use_none:nn} |#1| |??| once yields an empty result if |#1| is +% blank, a single~|?| if |#1| has a single item, and otherwise yields +% some tokens ending with |??|. Then, \cs{tl_to_str:n} makes sure +% there are no odd category codes. An earlier version would compare +% the result to a single~|?| using string comparison, but the Lua call +% is slow in \LuaTeX{}. Instead, \cs{@@_if_single:nnw} picks the +% second token in front of it. If |#1| is empty, this token will be +% the trailing~|?| and the catcode test yields \texttt{false}. If +% |#1| has a single item, the token will be~|^| and the catcode test +% yields \texttt{true}. Otherwise, it will be one of the characters +% resulting from \cs{tl_to_str:n}, and the catcode test yields +% \texttt{false}. Note that \cs{if_catcode:w} takes care of the +% expansions, and that \cs{tl_to_str:n} (the \tn{detokenize} +% primitive) actually expands tokens until finding a begin-group +% token. % \begin{macrocode} \prg_new_conditional:Npnn \tl_if_single:n #1 { p , T , F , TF } - { \__str_if_eq_x_return:nn { \exp_not:o { \use_none:nn #1 ?? } } {?} } + { + \if_catcode:w ^ \exp_after:wN \@@_if_single:nnw + \tl_to_str:n \exp_after:wN { \use_none:nn #1 ?? } ^ ? \q_stop + \prg_return_true: + \else: + \prg_return_false: + \fi: + } +\cs_new:Npn \@@_if_single:nnw #1#2#3 \q_stop {#2} % \end{macrocode} % \end{macro} +% \end{macro} % % \begin{macro}[EXP]{\tl_case:Nn, \tl_case:cn} % \begin{macro}[EXP, TF]{\tl_case:Nn, \tl_case:cn} @@ -2060,7 +2067,7 @@ % variable. Brace groups within the list are read as a single % element. Spaces are ignored. % \cs{@@_count:n} grabs the element and replaces it by |+1|. -% The |0| to ensure it works on an empty list. +% The |0| ensures that it works on an empty list. % \begin{macrocode} \cs_new:Npn \tl_count:n #1 { @@ -2636,13 +2643,16 @@ % % \begin{macro}[EXP,pTF]{\tl_if_head_is_space:n} % \begin{macro}[EXP,aux]{\@@_if_head_is_space:w} -% If the first token of the token list is an explicit space, i.e., -% a character token with character code $32$ and category code $10$, -% then this test will be \texttt{true}. It is \texttt{false} if the token -% list is empty, if the first token is an implicit space token, -% such as \cs{c_space_token}, or any token other than an explicit space. -% The slightly convoluted approach with \tn{romannumeral} ensures that -% each expansion step gives a balanced token list. +% The auxiliary's argument is all that is before the first explicit +% space in |?#1?~|. If that is a single~|?| the test yields +% \texttt{true}. Otherwise, that is more than one token, and the test +% yields \texttt{false}. The work is done within braces (with an +% |\if_false: { \fi: ... }| construction) both to hide potential +% alignment tab characters from \TeX{} in a table, and to allow for +% removing what remains of the token list after its first space. The +% \cs{tex_romannumeral:D} and \cs{c_zero} ensure that the result of a +% single step of expansion directly yields a balanced token list (no +% trailing closing brace). % \begin{macrocode} \prg_new_conditional:Npnn \tl_if_head_is_space:n #1 { p , T , F , TF } { diff --git a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx index ff569c8e8c0..36d2a427ac5 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx @@ -37,7 +37,7 @@ \documentclass[full]{l3doc} % %<*driver|package> -\GetIdInfo$Id: l3token.dtx 4728 2014-05-04 13:25:37Z joseph $ +\GetIdInfo$Id: l3token.dtx 4889 2014-05-26 19:59:25Z joseph $ {L3 Experimental token manipulation} % %<*driver> @@ -1455,7 +1455,7 @@ } \cs_new:Npn \@@_if_macro_p:w #1 MA #2 ; #3 \q_stop { - \if_int_compare:w \pdftex_strcmp:D { #2 } { cro } = \c_zero + \if_int_compare:w \__str_if_eq_x:nn { #2 } { cro } = \c_zero \prg_return_true: \else: \prg_return_false: diff --git a/Master/texmf-dist/source/latex/l3kernel/source3.tex b/Master/texmf-dist/source/latex/l3kernel/source3.tex new file mode 100644 index 00000000000..22c3c44048d --- /dev/null +++ b/Master/texmf-dist/source/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/source/latex/l3packages/l3keys2e/l3keys2e.dtx b/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx index 6158b9c21a9..34be20b1580 100644 --- a/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx +++ b/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx @@ -37,8 +37,8 @@ %<*driver|package> % The version of expl3 required is tested as early as possible, as % some really old versions do not define \ProvidesExplPackage. -\RequirePackage{expl3}[2014/05/05] -%\@ifpackagelater{expl3}{2014/05/05} +\RequirePackage{expl3}[2014/06/10] +%\@ifpackagelater{expl3}{2014/06/10} % {} % {% % \PackageError{l3keys2e}{Support package l3kernel too old} @@ -50,7 +50,7 @@ % }% % \endinput % } -\GetIdInfo$Id: l3keys2e.dtx 4740 2014-05-05 14:04:24Z joseph $ +\GetIdInfo$Id: l3keys2e.dtx 5105 2014-06-10 07:28:49Z joseph $ {LaTeX2e option processing using LaTeX3 keys} % %<*driver> diff --git a/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx b/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx index cda5afc4764..fc736388407 100644 --- a/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx +++ b/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx @@ -41,8 +41,8 @@ %<*driver|package> % The version of expl3 required is tested as early as possible, as % some really old versions do not define \ProvidesExplPackage. -\RequirePackage{expl3}[2014/05/05] -%\@ifpackagelater{expl3}{2014/05/05} +\RequirePackage{expl3}[2014/06/10] +%\@ifpackagelater{expl3}{2014/06/10} % {} % {% % \PackageError{xparse}{Support package l3kernel too old} @@ -54,7 +54,7 @@ % }% % \endinput % } -\GetIdInfo$Id: xparse.dtx 4740 2014-05-05 14:04:24Z joseph $ +\GetIdInfo$Id: xparse.dtx 5105 2014-06-10 07:28:49Z joseph $ {L3 Experimental document command parser} % %<*driver> @@ -3146,7 +3146,7 @@ \__msg_kernel_new:nnnn { xparse } { bad-arg-spec } { Bad~argument~specification~'#1'. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl The~argument~specification~provided~was~not~valid:~ one~or~more~mandatory~pieces~of~information~were~missing. \\ \\ LaTeX~will~ignore~this~entire~definition. @@ -3197,7 +3197,7 @@ Argument~specification~for~expandable~command~ends~with~optional~argument. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl Expandable~commands~must~have~a~final~mandatory~argument~ (or~no~arguments~at~all).~You~cannot~have~a~terminal~optional~ argument~with~expandable~commands. @@ -3205,14 +3205,14 @@ \__msg_kernel_new:nnnn { xparse } { inconsistent-long } { Inconsistent~long~arguments~for~expandable~command. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl The~arguments~for~an~expandable~command~must~either~all~be~ short~or~all~be~long.~You~have~tried~to~mix~the~two~types. } \__msg_kernel_new:nnnn { xparse } { invalid-expandable-argument-type } { Argument~type~'#1'~not~available~for~an~expandable~function. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl The~letter~'#1'~does~not~specify~an~argument~type~which~can~be~used~ in~an~expandable~function. \\ \\ @@ -3228,7 +3228,7 @@ \__msg_kernel_new:nnnn { xparse } { not-single-token } { Argument~delimiter~should~be~a~single~token:~'#1'. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl The~argument~specification~provided~was~not~valid:~ in~a~place~where~a~single~token~is~required,~LaTeX~found~'#1'. \\ \\ LaTeX~will~ignore~this~entire~definition. @@ -3236,7 +3236,7 @@ \__msg_kernel_new:nnnn { xparse } { processor-in-expandable } { Argument~processors~cannot~be~used~with~expandable~functions. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl The~argument~specification~for~#1~contains~a~processor~function:~ this~is~only~supported~for~standard~robust~functions. } @@ -3250,7 +3250,7 @@ \__msg_kernel_new:nnnn { xparse } { unknown-argument-type } { Unknown~argument~type~'#1'~replaced~by~'m'. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl The~letter~'#1'~does~not~specify~a~known~argument~type.~ LaTeX~will~assume~you~want~a~standard~mandatory~argument~(type~'m'). } diff --git a/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx b/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx index bef0843c51c..e3204cdfedd 100644 --- a/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx +++ b/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx @@ -41,8 +41,8 @@ %<*driver|package> % The version of expl3 required is tested as early as possible, as % some really old versions do not define \ProvidesExplPackage. -\RequirePackage{expl3}[2014/05/05] -%\@ifpackagelater{expl3}{2014/05/05} +\RequirePackage{expl3}[2014/06/10] +%\@ifpackagelater{expl3}{2014/06/10} % {} % {% % \PackageError{xtemplate}{Support package l3kernel too old} @@ -54,7 +54,7 @@ % }% % \endinput % } -\GetIdInfo$Id: xtemplate.dtx 4740 2014-05-05 14:04:24Z joseph $ +\GetIdInfo$Id: xtemplate.dtx 5105 2014-06-10 07:28:49Z joseph $ {L3 Experimental prototype document functions} % %<*driver> @@ -2570,7 +2570,7 @@ \msg_new:nnnn { xtemplate } { argument-number-mismatch } { Object~type~'#1'~takes~#2~argument(s). } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl Objects~of~type~'#1'~require~#2~argument(s).\\ You~have~tried~to~make~a~template~for~'#1'~ with~#3~argument(s),~which~is~not~possible:~ @@ -2579,7 +2579,7 @@ \msg_new:nnnn { xtemplate } { bad-number-of-arguments } { Bad~number~of~arguments~for~object~type~'#1'. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl An~object~may~accept~between~0~and~9~arguments.\\ You~asked~to~use~#2~arguments:~this~is~not~supported. } @@ -2601,7 +2601,7 @@ \msg_new:nnnn { xtemplate } { choice-no-code } { The~choice~'#1'~requires~implementation~details. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl When~creating~template~code~using~\DeclareTemplateCode,~ each~choice~name~must~have~an~associated~implementation.\\ This~should~be~given~after~a~'='~sign:~LaTeX~did~not~find~one. @@ -2609,7 +2609,7 @@ \msg_new:nnnn { xtemplate } { duplicate-key-interface } { Key~'#1'~appears~twice~in~interface~definition~\msg_line_context:. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl Each~key~can~only~have~one~interface~declared~in~a~template.\\ LaTeX~found~two~interfaces~for~'#1'. } @@ -2623,7 +2623,7 @@ \msg_new:nnnn { xtemplate } { invalid-keytype } { The~key~'#1'~is~missing~a~key-type~\msg_line_context:. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl Each~key~in~a~template~requires~a~key-type,~given~in~the~form:\\ \ \ ~:~\\ LaTeX~could~not~find~a~~in~your~input. @@ -2631,7 +2631,7 @@ \msg_new:nnnn { xtemplate } { key-no-value } { The~key~'#1'~has~no~value~\msg_line_context:. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl When~creating~an~instance~of~a~template~ every~key~listed~must~include~a~value:\\ \ \ ~=~ @@ -2639,7 +2639,7 @@ \msg_new:nnnn { xtemplate } { key-no-variable } { The~key~'#1'~requires~implementation~details~\msg_line_context:. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl When~creating~template~code~using~\DeclareTemplateCode,~ each~key~name~must~have~an~associated~implementation.\\ This~should~be~given~after~a~'='~sign:~LaTeX~did~not~find~one. @@ -2647,7 +2647,7 @@ \msg_new:nnnn { xtemplate } { key-not-implemented } { Key~'#1'~has~no~implementation~\msg_line_context:. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl The~definition~of~key~implementations~for~template~'#2'~ of~object~type~'#3'~does~not~include~any~details~for~key~'#1'.\\ The~key~was~declared~in~the~interface~definition,~ @@ -2656,7 +2656,7 @@ \msg_new:nnnn { xtemplate } { missing-keytype } { The~key~'#1'~is missing~a~key-type~\msg_line_context:. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl Key~interface~definitions~should~be~of~the~form\\ \ \ #1~:~\\ but~LaTeX~could~not~find~a~. @@ -2667,7 +2667,7 @@ or~has~no~implementation. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl There~is~no~code~available~for~the~template~name~given.\\ This~should~be~given~using~\DeclareTemplateCode. } @@ -2705,14 +2705,14 @@ \msg_new:nnnn { xtemplate } { unknown-key } { Unknown~template~key~'#1'. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl The~key~'#1'~was~not~declared~in~the~interface~ for~the~current~template. } \msg_new:nnnn { xtemplate } { unknown-keytype } { The~key-type~'#1'~is~unknown. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl Valid~key-types~are:\\ -~boolean;\\ -~choice;\\ @@ -2730,7 +2730,7 @@ \msg_new:nnnn { xtemplate } { unknown-object-type } { The~object~type~'#1'~is~unknown. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl An~object~type~needs~to~be~declared~with~\DeclareObjectType prior~to~using~it. } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3flag.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3flag.sty index a7249a188cb..242a465ed60 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3flag.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3flag.sty @@ -46,7 +46,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{expl3} -\GetIdInfo$Id: l3flag.dtx 3039 2011-12-08 09:22:35Z bruno $ +\GetIdInfo$Id: l3flag.dtx 4745 2014-05-06 10:41:27Z joseph $ {L3 Experimental flags} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex-trace.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex-trace.sty index 3d1224dfd80..ec8dc8bce52 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex-trace.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex-trace.sty @@ -46,7 +46,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{expl3} -\GetIdInfo$Id: l3regex.dtx 4623 2013-12-14 13:53:40Z bruno $ +\GetIdInfo$Id: l3regex.dtx 5067 2014-06-06 16:51:35Z bruno $ {L3 Experimental regular expressions} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} @@ -268,7 +268,7 @@ } \cs_new_protected:Npn \__regex_escape_use:nnnn #1#2#3#4 { - \trace_push:nnn { regex } { 1 } { @@_escape_use:nnnn } + \trace_push:nnn { regex } { 1 } { __regex_escape_use:nnnn } \__tl_build:Nw \l__regex_internal_a_tl \cs_set_nopar:Npn \__regex_escape_unescaped:N ##1 { #1 } \cs_set_nopar:Npn \__regex_escape_escaped:N ##1 { #2 } @@ -282,7 +282,7 @@ } \__tl_build_one:o \l__regex_internal_b_tl \__tl_build_end: - \trace_pop:nnn { regex } { 1 } { @@_escape_use:nnnn } + \trace_pop:nnn { regex } { 1 } { __regex_escape_use:nnnn } \l__regex_internal_a_tl } \cs_new:Npn \__regex_escape_loop:N #1 @@ -365,12 +365,12 @@ \if_charcode:w \c_space_token #1 \exp_after:wN \__regex_escape_x_test:N \else: - \exp_after:wN \__regex_escape_x_test_two:N + \exp_after:wN \__regex_escape_x_testii:N \exp_after:wN #1 \fi: } } -\cs_new:Npn \__regex_escape_x_test_two:N #1 +\cs_new:Npn \__regex_escape_x_testii:N #1 { \if_charcode:w \c_left_brace_str #1 \exp_after:wN \__regex_escape_x_loop:N @@ -391,25 +391,32 @@ } \cs_new:Npn \__regex_escape_x_loop:N #1 { - \__str_hexadecimal_use:NTF #1 - { \__regex_escape_x_loop:N } + \str_if_eq_x:nnTF {#1} { break } + { ; \__regex_escape_x_loop_error:n { } {#1} } { - \token_if_eq_charcode:NNTF \c_space_token #1 + \__str_hexadecimal_use:NTF #1 { \__regex_escape_x_loop:N } { - ; - \exp_after:wN \token_if_eq_charcode:NNTF \c_right_brace_str #1 - { \__regex_escape_loop:N } + \token_if_eq_charcode:NNTF \c_space_token #1 + { \__regex_escape_x_loop:N } { - \if_false: { \fi: } - \__tl_build_one:o \l__regex_internal_b_tl - \__msg_kernel_error:nn { regex } { x-missing-rbrace } {#1} - \tl_set:Nx \l__regex_internal_b_tl - { \if_false: } \fi: \__regex_escape_loop:N #1 + ; + \exp_after:wN + \token_if_eq_charcode:NNTF \c_right_brace_str #1 + { \__regex_escape_loop:N } + { \__regex_escape_x_loop_error:n {#1} } } } } } +\cs_new:Npn \__regex_escape_x_loop_error:n #1 + { + \if_false: { \fi: } + \__tl_build_one:o \l__regex_internal_b_tl + \__msg_kernel_error:nnx { regex } { x-missing-rbrace } {#1} + \tl_set:Nx \l__regex_internal_b_tl + { \if_false: } \fi: \__regex_escape_loop:N #1 + } \prg_new_conditional:Npnn \__regex_char_if_special:N #1 { TF } { \if_int_compare:w `#1 < \c_ninety_one @@ -614,6 +621,8 @@ { #1 } \prg_do_nothing: \prg_do_nothing: \prg_do_nothing: \prg_do_nothing: + \int_compare:nNnT \l__regex_mode_int = \c_two + { \__msg_kernel_error:nn { regex } { c-trailing } } \int_compare:nNnT \l__regex_mode_int < \c_zero { \__msg_kernel_error:nn { regex } { c-missing-rbrace } @@ -1067,7 +1076,7 @@ { __regex_compile_special_group_\token_to_str:N #4 :w } { \__msg_kernel_warning:nnx { regex } { special-group-unknown } - { (? \token_to_str:N #4 } + { (? #4 } \__regex_compile_group_begin:N \__regex_group:nnnN \__regex_compile_raw:N ? #3 #4 } @@ -1456,7 +1465,7 @@ } \cs_new_protected:Npn \__regex_build:N #1 { - \trace_push:nnn { regex } { 1 } { @@_build } + \trace_push:nnn { regex } { 1 } { __regex_build } \int_set:Nn \tex_escapechar:D { 92 } \int_zero:N \l__regex_capturing_group_int \int_set_eq:NN \l__regex_max_state_int \l__regex_min_state_int @@ -1467,12 +1476,12 @@ \__regex_group:nnnN {#1} { 1 } { 0 } \c_false_bool \__regex_toks_put_right:Nn \l__regex_right_state_int { \__regex_action_success: } - \@@_trace_states:n { 2 } - \trace_pop:nnn { regex } { 1 } { @@_build } + \__regex_trace_states:n { 2 } + \trace_pop:nnn { regex } { 1 } { __regex_build } } \cs_new_protected:Npn \__regex_build_for_cs:n #1 { - \trace_push:nnn { regex } { 1 } { @@_build_for_cs } + \trace_push:nnn { regex } { 1 } { __regex_build_for_cs } \int_set_eq:NN \l__regex_max_state_int \l__regex_min_state_int \__regex_build_new_state: \__regex_build_new_state: @@ -1485,8 +1494,8 @@ \exp_after:wN \__regex_action_success: \fi: } - \@@_trace_states:n { 2 } - \trace_pop:nnn { regex } { 1 } { @@_build_for_cs } + \__regex_trace_states:n { 2 } + \trace_pop:nnn { regex } { 1 } { __regex_build_for_cs } } \cs_new_protected_nopar:Npn \__regex_push_lr_states: { @@ -1602,7 +1611,7 @@ } \cs_new_protected:Npn \__regex_group_aux:nnnnN #1#2#3#4#5 { - \trace_push:nnn { regex } { 1 } { @@_group } + \trace_push:nnn { regex } { 1 } { __regex_group } \if_int_compare:w #3 = \c_zero \__regex_build_new_state: \__regex_build_transition_right:nNn \__regex_action_free_group:n @@ -1617,7 +1626,7 @@ \or: \__regex_group_repeat:nnN {#1} {#3} #5 \else: \__regex_group_repeat:nnnN {#1} {#3} {#4} #5 \fi: - \trace_pop:nnn { regex } { 1 } { @@_group } + \trace_pop:nnn { regex } { 1 } { __regex_group } } \cs_new_protected:Npn \__regex_group:nnnN #1 { @@ -1653,7 +1662,7 @@ } \cs_new_protected:Npn \__regex_branch:n #1 { - \trace_push:nnn { regex } { 1 } { @@_branch } + \trace_push:nnn { regex } { 1 } { __regex_branch } \__regex_build_new_state: \seq_get:NN \l__regex_left_state_seq \l__regex_internal_a_tl \int_set:Nn \l__regex_left_state_int \l__regex_internal_a_tl @@ -1663,7 +1672,7 @@ \seq_get:NN \l__regex_right_state_seq \l__regex_internal_a_tl \__regex_build_transition_right:nNn \__regex_action_free:n \l__regex_right_state_int \l__regex_internal_a_tl - \trace_pop:nnn { regex } { 1 } { @@_branch } + \trace_pop:nnn { regex } { 1 } { __regex_branch } } \cs_new_protected:Npn \__regex_group_repeat:nn #1#2 { @@ -1842,7 +1851,7 @@ \bool_new:N \l__regex_match_success_bool \cs_new_protected:Npn \__regex_match:n #1 { - \trace_push:nnx { regex } { 1 } { @@_match } + \trace_push:nnx { regex } { 1 } { __regex_match } \trace:nnx { regex } { 1 } { analyzing~query~token~list } \int_zero:N \l__regex_balance_int \int_set:Nn \l__regex_current_pos_int { \c_two * \l__regex_max_state_int } @@ -1864,7 +1873,7 @@ { \c_two * \l__regex_max_state_int } \bool_set_false:N \l__regex_empty_success_bool \__regex_match_once: - \trace_pop:nnx { regex } { 1 } { @@_match } + \trace_pop:nnx { regex } { 1 } { __regex_match } } \cs_new_protected_nopar:Npn \__regex_match_once: { @@ -2083,7 +2092,7 @@ } \cs_new_protected:Npn \__regex_replacement:n #1 { - \trace_push:nnn { regex } { 1 } { @@_replacement:n } + \trace_push:nnn { regex } { 1 } { __regex_replacement:n } \__tl_build:Nw \l__regex_internal_a_tl \int_zero:N \l__regex_balance_int \tl_clear:N \l__regex_balance_tl @@ -2110,7 +2119,7 @@ } \__tl_build_end: \exp_args:No \__regex_replacement_aux:n \l__regex_internal_a_tl - \trace_pop:nnn { regex } { 1 } { @@_replacement:n } + \trace_pop:nnn { regex } { 1 } { __regex_replacement:n } } \cs_new_protected:Npn \__regex_replacement_aux:n #1 { @@ -2589,47 +2598,48 @@ } } \__msg_kernel_new:nnnn { regex } { trailing-backslash } - { Trailing~escape~character~\iow_char:N\\. } + { Trailing~escape~character~`\iow_char:N\\'. } { A~regular~expression~or~its~replacement~text~ends~with~ - the~escape~character~\iow_char:N\\.~It~will~be~ignored. + the~escape~character~`\iow_char:N\\'.~It~will~be~ignored. } \__msg_kernel_new:nnnn { regex } { x-missing-rbrace } - { Missing~closing~brace~in~\iow_char:N\\x~hexadecimal~sequence. } + { Missing~closing~brace~in~`\iow_char:N\\x'~hexadecimal~sequence. } { You~wrote~something~like~ - `\iow_char:N\\x\{\int_to_hexadecimal:n{#1}'.~ + `\iow_char:N\\x\{...#1'.~ The~closing~brace~is~missing. } \__msg_kernel_new:nnnn { regex } { x-overflow } - { Character~code~'#1'~too~large~in~\iow_char:N\\x~hexadecimal~sequence. } + { Character~code~`#1'~too~large~in~`\iow_char:N\\x'~hexadecimal~sequence. } { You~wrote~something~like~ `\iow_char:N\\x\{\int_to_hexadecimal:n{#1}\}'.~ - The~character~code~'#1'~is~larger~than~\int_use:N \c_max_char_int. + The~character~code~#1~is~larger~than~ + the~maximum~value~\int_use:N \c_max_char_int. } \__msg_kernel_new:nnnn { regex } { invalid-quantifier } - { Braced~quantifier~'#1'~may~not~be~followed~by~'#2'. } + { Braced~quantifier~`#1'~may~not~be~followed~by~`#2'. } { - The~character~'#2'~is~invalid~in~the~braced~quantifier~'#1'.~ - The~only~valid~quantifiers~are~'*',~'?',~'+',~'{}',~ - '{,}'~and~'{,}',~followed~or~not~by~'?'. + The~character~`#2'~is~invalid~in~the~braced~quantifier~`#1'.~ + The~only~valid~quantifiers~are~`*',~`?',~`+',~`{}',~ + `{,}'~and~`{,}',~optionally~followed~by~`?'. } \__msg_kernel_new:nnnn { regex } { missing-rbrack } { Missing~right~bracket~inserted~in~regular~expression. } { LaTeX~was~given~a~regular~expression~where~a~character~class~ - was~started~with~'[',~but~the~matching~']'~is~missing. + was~started~with~`[',~but~the~matching~`]'~is~missing. } \__msg_kernel_new:nnnn { regex } { missing-rparen } { - Missing~right~parenthes\int_compare:nTF{#1=1}{i}{e}s~ + Missing~right~ + \int_compare:nTF { #1 = 1 } { parenthesis } { parentheses } ~ inserted~in~regular~expression. } { - LaTeX~was~given~a~regular~expression~with~\int_eval:n{#1}~ - more~left~parenthes\int_compare:nTF{#1=1}{i}{e}s~than~right~ - parenthes\int_compare:nTF{#1=1}{i}{e}s. + LaTeX~was~given~a~regular~expression~with~\int_eval:n {#1} ~ + more~left~parentheses~than~right~parentheses. } \__msg_kernel_new:nnnn { regex } { extra-rparen } { Extra~right~parenthesis~ignored~in~regular~expression. } @@ -2639,7 +2649,7 @@ } \__msg_kernel_new:nnnn { regex } { bad-escape } { - Invalid~escape~\c_backslash_str #1~ + Invalid~escape~`\iow_char:N\\#1'~ \__regex_if_in_cs:TF { within~a~control~sequence. } { \__regex_if_in_class:TF @@ -2648,96 +2658,102 @@ } } { - The~escape~sequence~\iow_char:N\\#1~may~not~appear~ + The~escape~sequence~`\iow_char:N\\#1'~may~not~appear~ \__regex_if_in_cs:TF { within~a~control~sequence~test~introduced~by~ - \iow_char:N\\c\iow_char:N\{. + `\iow_char:N\\c\iow_char:N\{'. } { \__regex_if_in_class:TF { within~a~character~class~ } - { following~a~category~test~such~as~\iow_char:N\\cL~ } + { following~a~category~test~such~as~`\iow_char:N\\cL'~ } because~it~does~not~match~exactly~one~character. } } \__msg_kernel_new:nnnn { regex } { range-missing-end } - { Invalid~end-point~for~range~'#1-#2'~in~character~class. } + { Invalid~end-point~for~range~`#1-#2'~in~character~class. } { - The~end-point~'#2'~of~the~range~'#1-#2'~may~not~serve~as~an~ + The~end-point~`#2'~of~the~range~`#1-#2'~may~not~serve~as~an~ end-point~for~a~range:~alphanumeric~characters~should~not~be~ escaped,~and~non-alphanumeric~characters~should~be~escaped. } \__msg_kernel_new:nnnn { regex } { range-backwards } - { Range~[#1-#2]~out~of~order~in~character~class. } + { Range~`[#1-#2]'~out~of~order~in~character~class. } { - In~ranges~of~characters~[x-y]~appearing~in~character~classes,~ + In~ranges~of~characters~`[x-y]'~appearing~in~character~classes,~ the~first~character~code~must~not~be~larger~than~the~second.~ - Here,~#1~has~character~code~\int_eval:n {`#1},~while~#2~has~ - character~code~\int_eval:n {`#2}. + Here,~`#1'~has~character~code~\int_eval:n {`#1},~while~ + `#2'~has~character~code~\int_eval:n {`#2}. } \__msg_kernel_new:nnnn { regex } { c-bad-mode } - { Invalid~nested~\iow_char:N\\c~escape~in~regular~expression. } + { Invalid~nested~`\iow_char:N\\c'~escape~in~regular~expression. } { - The~\iow_char:N\\c~escape~cannot~be~used~within~ - a~control~sequence~test~'\iow_char:N\\c{...}'.~ - To~combine~several~category~tests,~use~'\iow_char:N\\c[...]'. + The~`\iow_char:N\\c'~escape~cannot~be~used~within~ + a~control~sequence~test~`\iow_char:N\\c{...}'.~ + To~combine~several~category~tests,~use~`\iow_char:N\\c[...]'. } \__msg_kernel_new:nnnn { regex } { c-missing-rbrace } - { Missing~right~brace~inserted~for~\iow_char:N\\c~escape. } + { Missing~right~brace~inserted~for~`\iow_char:N\\c'~escape. } { LaTeX~was~given~a~regular~expression~where~a~ - '\iow_char:N\\c\iow_char:N\{...'~construction~was~not~ended~ - with~a~closing~brace~'\iow_char:N\}'. + `\iow_char:N\\c\iow_char:N\{...'~construction~was~not~ended~ + with~a~closing~brace~`\iow_char:N\}'. } \__msg_kernel_new:nnnn { regex } { c-missing-rbrack } - { Missing~right~bracket~inserted~for~\iow_char:N\\c~escape. } + { Missing~right~bracket~inserted~for~`\iow_char:N\\c'~escape. } { - A~construction~'\iow_char:N\\c[...'~appears~in~a~ - regular~expression,~but~the~closing~']'~is~not~present. + A~construction~`\iow_char:N\\c[...'~appears~in~a~ + regular~expression,~but~the~closing~`]'~is~not~present. } \__msg_kernel_new:nnnn { regex } { c-missing-category } - { Invalid~character~'#1'~following~\iow_char:N\\c~escape. } + { Invalid~character~`#1'~following~`\iow_char:N\\c'~escape. } { - In~regular~expressions,~the~\iow_char:N\\c~escape~sequence~ + In~regular~expressions,~the~`\iow_char:N\\c'~escape~sequence~ may~only~be~followed~by~a~left~brace,~a~left~bracket,~or~a~ capital~letter~representing~a~character~category,~namely~ - one~of~ABCDELMOPSTU. + one~of~`ABCDELMOPSTU'. + } +\__msg_kernel_new:nnnn { regex } { c-trailing } + { Trailing~category~code~escape~`\iow_char:N\\c'... } + { + A~regular~expression~ends~with~`\iow_char:N\\c'~followed~ + by~a~letter.~It~will~be~ignored. } \__msg_kernel_new:nnnn { regex } { u-missing-lbrace } - { Missing~left~brace~following~\iow_char:N\\u~escape. } + { Missing~left~brace~following~`\iow_char:N\\u'~escape. } { - The~\iow_char:N\\u~escape~sequence~must~be~followed~by~ + The~`\iow_char:N\\u'~escape~sequence~must~be~followed~by~ a~brace~group~with~the~name~of~the~variable~to~use. } \__msg_kernel_new:nnnn { regex } { u-missing-rbrace } - { Missing~right~brace~inserted~for~\iow_char:N\\u~escape. } + { Missing~right~brace~inserted~for~`\iow_char:N\\u'~escape. } { LaTeX~ \str_if_eq_x:nnTF { } {#2} { reached~the~end~of~the~string~ } - { encountered~an~escaped~alphanumeric~character '\iow_char:N\\#2'~ } - when~parsing~the~argument~of~an~'\iow_char:N\\u\iow_char:N\{...\}'~escape. + { encountered~an~escaped~alphanumeric~character `\iow_char:N\\#2'~ } + when~parsing~the~argument~of~an~`\iow_char:N\\u\iow_char:N\{...\}'~escape. } \__msg_kernel_new:nnnn { regex } { posix-unsupported } - { POSIX~collating~element~'[#1 ~ #1]'~not~supported. } + { POSIX~collating~element~`[#1 ~ #1]'~not~supported. } { - The~[.foo.]~and~[=bar=]~syntaxes~have~a~special~meaning~in~POSIX~ - regular~expressions.~This~is~not~supported~by~LaTeX.~Maybe~you~ - forgot~to~escape~a~left~bracket~in~a~character~class? + The~`[.foo.]'~and~`[=bar=]'~syntaxes~have~a~special~meaning~ + in~POSIX~regular~expressions.~This~is~not~supported~by~LaTeX.~ + Maybe~you~forgot~to~escape~a~left~bracket~in~a~character~class? } \__msg_kernel_new:nnnn { regex } { posix-unknown } - { POSIX~class~[:#1:]~unknown. } + { POSIX~class~`[:#1:]'~unknown. } { - [:#1:]~is~not~among~the~known~POSIX~classes~ - [:alnum:],~[:alpha:],~[:ascii:],~[:blank:],~ - [:cntrl:],~[:digit:],~[:graph:],~[:lower:],~ - [:print:],~[:punct:],~[:space:],~[:upper:],~ - [:word:],~and~[:xdigit:]. + `[:#1:]'~is~not~among~the~known~POSIX~classes~ + `[:alnum:]',~`[:alpha:]',~`[:ascii:]',~`[:blank:]',~ + `[:cntrl:]',~`[:digit:]',~`[:graph:]',~`[:lower:]',~ + `[:print:]',~`[:punct:]',~`[:space:]',~`[:upper:]',~ + `[:word:]',~and~`[:xdigit:]'. } \__msg_kernel_new:nnnn { regex } { posix-missing-close } - { Missing~closing~':]'~for~POSIX~class. } - { The~POSIX~syntax~'#1'~must~be~followed~by~':]',~not~'#2'. } + { Missing~closing~`:]'~for~POSIX~class. } + { The~POSIX~syntax~`#1'~must~be~followed~by~`:]',~not~`#2'. } \__msg_kernel_new:nnnn { regex } { result-unbalanced } { Missing~brace~inserted~when~#1. } { @@ -2749,55 +2765,64 @@ \__msg_kernel_new:nnnn { regex } { unknown-option } { Unknown~option~`#1'~for~regular~expressions. } { - The~only~available~option~is~'case-insensitive',~toggled~by~ - '(?i)'~and~'(?-i)'. + The~only~available~option~is~`case-insensitive',~toggled~by~ + `(?i)'~and~`(?-i)'. + } +\__msg_kernel_new:nnnn { regex } { special-group-unknown } + { Unknown~special~group~`#1~...'~in~a~regular~expression. } + { + The~only~valid~constructions~starting~with~`(?'~are~ + `(?:~...~)',~`(?|~...~)',~`(?i)',~and~`(?-i)'. } \__msg_kernel_new:nnnn { regex } { replacement-c } - { Misused~\iow_char:N\\c~command~in~a~replacement~text. } + { Misused~`\iow_char:N\\c'~command~in~a~replacement~text. } { - In~a~replacement~text,~the~\iow_char:N\\c~escape~sequence~ - can~be~followed~by~one~of~the~letters~ABCDELMOPSTU~ - or~a~brace~group,~not~by~'#1'. + In~a~replacement~text,~the~`\iow_char:N\\c'~escape~sequence~ + can~be~followed~by~one~of~the~letters~`ABCDELMOPSTU'~ + or~a~brace~group,~not~by~`#1'. } \__msg_kernel_new:nnnn { regex } { replacement-u } - { Misused~\iow_char:N\\u~command~in~a~replacement~text. } + { Misused~`\iow_char:N\\u'~command~in~a~replacement~text. } { - In~a~replacement~text,~the~\iow_char:N\\u~escape~sequence~ + In~a~replacement~text,~the~`\iow_char:N\\u'~escape~sequence~ must~be~~followed~by~a~brace~group~holding~the~name~of~the~ variable~to~use. } \__msg_kernel_new:nnnn { regex } { replacement-g } - { Missing~brace~for~the~\iow_char:N\\g~construction~in~a~replacement~text. } + { + Missing~brace~for~the~`\iow_char:N\\g'~construction~ + in~a~replacement~text. + } { In~the~replacement~text~for~a~regular~expression~search,~ - submatches~are~represented~either~as~\iow_char:N \\g{dd..d},~ - or~\\d,~where~`d'~are~single~digits.~Here,~a~brace~is~missing. + submatches~are~represented~either~as~`\iow_char:N \\g{dd..d}',~ + or~`\\d',~where~`d'~are~single~digits.~Here,~a~brace~is~missing. } \__msg_kernel_new:nnnn { regex } { replacement-catcode-end } { - Missing~character~for~the~\iow_char:N\\c~ + Missing~character~for~the~`\iow_char:N\\c'~ construction~in~a~replacement~text. } { - In~a~replacement~text,~the~\iow_char:N\\c~escape~sequence~ - can~be~followed~by~one~of~the~letters~ABCDELMOPSTU~representing~ + In~a~replacement~text,~the~`\iow_char:N\\c'~escape~sequence~ + can~be~followed~by~one~of~the~letters~`ABCDELMOPSTU'~representing~ the~character~category.~Then,~a~character~must~follow.~LaTeX~ reached~the~end~of~the~replacement~when~looking~for~that. } \__msg_kernel_new:nnnn { regex } { replacement-null-space } { TeX~cannot~build~a~space~token~with~character~code~0. } { - You~asked~for~a~character~token~with~category~'space',~ + You~asked~for~a~character~token~with~category~space,~ and~character~code~0,~for~instance~through~ - '\iow_char:N\\cS\iow_char:N\\x00'.~ + `\iow_char:N\\cS\iow_char:N\\x00'.~ This~specific~case~is~impossible~and~will~be~replaced~ by~a~normal~space. } \__msg_kernel_new:nnnn { regex } { replacement-missing-rbrace } { Missing~right~brace~inserted~in~replacement~text. } { - There~were~\int_use:N \l__regex_replacement_csnames_int \ - missing~right~braces. + There~ \int_compare:nTF { #1 = 1 } { was } { were } ~ #1~ + missing~right~\int_compare:nTF { #1 = 1 } { brace } { braces } . } \cs_new:Npn \__regex_msg_repeated:nnN #1#2#3 { diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex.sty index 12774db5615..55bd0e1464c 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3regex.sty @@ -46,7 +46,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{expl3} -\GetIdInfo$Id: l3regex.dtx 4623 2013-12-14 13:53:40Z bruno $ +\GetIdInfo$Id: l3regex.dtx 5067 2014-06-06 16:51:35Z bruno $ {L3 Experimental regular expressions} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} @@ -363,12 +363,12 @@ \if_charcode:w \c_space_token #1 \exp_after:wN \__regex_escape_x_test:N \else: - \exp_after:wN \__regex_escape_x_test_two:N + \exp_after:wN \__regex_escape_x_testii:N \exp_after:wN #1 \fi: } } -\cs_new:Npn \__regex_escape_x_test_two:N #1 +\cs_new:Npn \__regex_escape_x_testii:N #1 { \if_charcode:w \c_left_brace_str #1 \exp_after:wN \__regex_escape_x_loop:N @@ -389,25 +389,32 @@ } \cs_new:Npn \__regex_escape_x_loop:N #1 { - \__str_hexadecimal_use:NTF #1 - { \__regex_escape_x_loop:N } + \str_if_eq_x:nnTF {#1} { break } + { ; \__regex_escape_x_loop_error:n { } {#1} } { - \token_if_eq_charcode:NNTF \c_space_token #1 + \__str_hexadecimal_use:NTF #1 { \__regex_escape_x_loop:N } { - ; - \exp_after:wN \token_if_eq_charcode:NNTF \c_right_brace_str #1 - { \__regex_escape_loop:N } + \token_if_eq_charcode:NNTF \c_space_token #1 + { \__regex_escape_x_loop:N } { - \if_false: { \fi: } - \__tl_build_one:o \l__regex_internal_b_tl - \__msg_kernel_error:nn { regex } { x-missing-rbrace } {#1} - \tl_set:Nx \l__regex_internal_b_tl - { \if_false: } \fi: \__regex_escape_loop:N #1 + ; + \exp_after:wN + \token_if_eq_charcode:NNTF \c_right_brace_str #1 + { \__regex_escape_loop:N } + { \__regex_escape_x_loop_error:n {#1} } } } } } +\cs_new:Npn \__regex_escape_x_loop_error:n #1 + { + \if_false: { \fi: } + \__tl_build_one:o \l__regex_internal_b_tl + \__msg_kernel_error:nnx { regex } { x-missing-rbrace } {#1} + \tl_set:Nx \l__regex_internal_b_tl + { \if_false: } \fi: \__regex_escape_loop:N #1 + } \prg_new_conditional:Npnn \__regex_char_if_special:N #1 { TF } { \if_int_compare:w `#1 < \c_ninety_one @@ -612,6 +619,8 @@ { #1 } \prg_do_nothing: \prg_do_nothing: \prg_do_nothing: \prg_do_nothing: + \int_compare:nNnT \l__regex_mode_int = \c_two + { \__msg_kernel_error:nn { regex } { c-trailing } } \int_compare:nNnT \l__regex_mode_int < \c_zero { \__msg_kernel_error:nn { regex } { c-missing-rbrace } @@ -1065,7 +1074,7 @@ { __regex_compile_special_group_\token_to_str:N #4 :w } { \__msg_kernel_warning:nnx { regex } { special-group-unknown } - { (? \token_to_str:N #4 } + { (? #4 } \__regex_compile_group_begin:N \__regex_group:nnnN \__regex_compile_raw:N ? #3 #4 } @@ -2562,47 +2571,48 @@ } } \__msg_kernel_new:nnnn { regex } { trailing-backslash } - { Trailing~escape~character~\iow_char:N\\. } + { Trailing~escape~character~`\iow_char:N\\'. } { A~regular~expression~or~its~replacement~text~ends~with~ - the~escape~character~\iow_char:N\\.~It~will~be~ignored. + the~escape~character~`\iow_char:N\\'.~It~will~be~ignored. } \__msg_kernel_new:nnnn { regex } { x-missing-rbrace } - { Missing~closing~brace~in~\iow_char:N\\x~hexadecimal~sequence. } + { Missing~closing~brace~in~`\iow_char:N\\x'~hexadecimal~sequence. } { You~wrote~something~like~ - `\iow_char:N\\x\{\int_to_hexadecimal:n{#1}'.~ + `\iow_char:N\\x\{...#1'.~ The~closing~brace~is~missing. } \__msg_kernel_new:nnnn { regex } { x-overflow } - { Character~code~'#1'~too~large~in~\iow_char:N\\x~hexadecimal~sequence. } + { Character~code~`#1'~too~large~in~`\iow_char:N\\x'~hexadecimal~sequence. } { You~wrote~something~like~ `\iow_char:N\\x\{\int_to_hexadecimal:n{#1}\}'.~ - The~character~code~'#1'~is~larger~than~\int_use:N \c_max_char_int. + The~character~code~#1~is~larger~than~ + the~maximum~value~\int_use:N \c_max_char_int. } \__msg_kernel_new:nnnn { regex } { invalid-quantifier } - { Braced~quantifier~'#1'~may~not~be~followed~by~'#2'. } + { Braced~quantifier~`#1'~may~not~be~followed~by~`#2'. } { - The~character~'#2'~is~invalid~in~the~braced~quantifier~'#1'.~ - The~only~valid~quantifiers~are~'*',~'?',~'+',~'{}',~ - '{,}'~and~'{,}',~followed~or~not~by~'?'. + The~character~`#2'~is~invalid~in~the~braced~quantifier~`#1'.~ + The~only~valid~quantifiers~are~`*',~`?',~`+',~`{}',~ + `{,}'~and~`{,}',~optionally~followed~by~`?'. } \__msg_kernel_new:nnnn { regex } { missing-rbrack } { Missing~right~bracket~inserted~in~regular~expression. } { LaTeX~was~given~a~regular~expression~where~a~character~class~ - was~started~with~'[',~but~the~matching~']'~is~missing. + was~started~with~`[',~but~the~matching~`]'~is~missing. } \__msg_kernel_new:nnnn { regex } { missing-rparen } { - Missing~right~parenthes\int_compare:nTF{#1=1}{i}{e}s~ + Missing~right~ + \int_compare:nTF { #1 = 1 } { parenthesis } { parentheses } ~ inserted~in~regular~expression. } { - LaTeX~was~given~a~regular~expression~with~\int_eval:n{#1}~ - more~left~parenthes\int_compare:nTF{#1=1}{i}{e}s~than~right~ - parenthes\int_compare:nTF{#1=1}{i}{e}s. + LaTeX~was~given~a~regular~expression~with~\int_eval:n {#1} ~ + more~left~parentheses~than~right~parentheses. } \__msg_kernel_new:nnnn { regex } { extra-rparen } { Extra~right~parenthesis~ignored~in~regular~expression. } @@ -2612,7 +2622,7 @@ } \__msg_kernel_new:nnnn { regex } { bad-escape } { - Invalid~escape~\c_backslash_str #1~ + Invalid~escape~`\iow_char:N\\#1'~ \__regex_if_in_cs:TF { within~a~control~sequence. } { \__regex_if_in_class:TF @@ -2621,96 +2631,102 @@ } } { - The~escape~sequence~\iow_char:N\\#1~may~not~appear~ + The~escape~sequence~`\iow_char:N\\#1'~may~not~appear~ \__regex_if_in_cs:TF { within~a~control~sequence~test~introduced~by~ - \iow_char:N\\c\iow_char:N\{. + `\iow_char:N\\c\iow_char:N\{'. } { \__regex_if_in_class:TF { within~a~character~class~ } - { following~a~category~test~such~as~\iow_char:N\\cL~ } + { following~a~category~test~such~as~`\iow_char:N\\cL'~ } because~it~does~not~match~exactly~one~character. } } \__msg_kernel_new:nnnn { regex } { range-missing-end } - { Invalid~end-point~for~range~'#1-#2'~in~character~class. } + { Invalid~end-point~for~range~`#1-#2'~in~character~class. } { - The~end-point~'#2'~of~the~range~'#1-#2'~may~not~serve~as~an~ + The~end-point~`#2'~of~the~range~`#1-#2'~may~not~serve~as~an~ end-point~for~a~range:~alphanumeric~characters~should~not~be~ escaped,~and~non-alphanumeric~characters~should~be~escaped. } \__msg_kernel_new:nnnn { regex } { range-backwards } - { Range~[#1-#2]~out~of~order~in~character~class. } + { Range~`[#1-#2]'~out~of~order~in~character~class. } { - In~ranges~of~characters~[x-y]~appearing~in~character~classes,~ + In~ranges~of~characters~`[x-y]'~appearing~in~character~classes,~ the~first~character~code~must~not~be~larger~than~the~second.~ - Here,~#1~has~character~code~\int_eval:n {`#1},~while~#2~has~ - character~code~\int_eval:n {`#2}. + Here,~`#1'~has~character~code~\int_eval:n {`#1},~while~ + `#2'~has~character~code~\int_eval:n {`#2}. } \__msg_kernel_new:nnnn { regex } { c-bad-mode } - { Invalid~nested~\iow_char:N\\c~escape~in~regular~expression. } + { Invalid~nested~`\iow_char:N\\c'~escape~in~regular~expression. } { - The~\iow_char:N\\c~escape~cannot~be~used~within~ - a~control~sequence~test~'\iow_char:N\\c{...}'.~ - To~combine~several~category~tests,~use~'\iow_char:N\\c[...]'. + The~`\iow_char:N\\c'~escape~cannot~be~used~within~ + a~control~sequence~test~`\iow_char:N\\c{...}'.~ + To~combine~several~category~tests,~use~`\iow_char:N\\c[...]'. } \__msg_kernel_new:nnnn { regex } { c-missing-rbrace } - { Missing~right~brace~inserted~for~\iow_char:N\\c~escape. } + { Missing~right~brace~inserted~for~`\iow_char:N\\c'~escape. } { LaTeX~was~given~a~regular~expression~where~a~ - '\iow_char:N\\c\iow_char:N\{...'~construction~was~not~ended~ - with~a~closing~brace~'\iow_char:N\}'. + `\iow_char:N\\c\iow_char:N\{...'~construction~was~not~ended~ + with~a~closing~brace~`\iow_char:N\}'. } \__msg_kernel_new:nnnn { regex } { c-missing-rbrack } - { Missing~right~bracket~inserted~for~\iow_char:N\\c~escape. } + { Missing~right~bracket~inserted~for~`\iow_char:N\\c'~escape. } { - A~construction~'\iow_char:N\\c[...'~appears~in~a~ - regular~expression,~but~the~closing~']'~is~not~present. + A~construction~`\iow_char:N\\c[...'~appears~in~a~ + regular~expression,~but~the~closing~`]'~is~not~present. } \__msg_kernel_new:nnnn { regex } { c-missing-category } - { Invalid~character~'#1'~following~\iow_char:N\\c~escape. } + { Invalid~character~`#1'~following~`\iow_char:N\\c'~escape. } { - In~regular~expressions,~the~\iow_char:N\\c~escape~sequence~ + In~regular~expressions,~the~`\iow_char:N\\c'~escape~sequence~ may~only~be~followed~by~a~left~brace,~a~left~bracket,~or~a~ capital~letter~representing~a~character~category,~namely~ - one~of~ABCDELMOPSTU. + one~of~`ABCDELMOPSTU'. + } +\__msg_kernel_new:nnnn { regex } { c-trailing } + { Trailing~category~code~escape~`\iow_char:N\\c'... } + { + A~regular~expression~ends~with~`\iow_char:N\\c'~followed~ + by~a~letter.~It~will~be~ignored. } \__msg_kernel_new:nnnn { regex } { u-missing-lbrace } - { Missing~left~brace~following~\iow_char:N\\u~escape. } + { Missing~left~brace~following~`\iow_char:N\\u'~escape. } { - The~\iow_char:N\\u~escape~sequence~must~be~followed~by~ + The~`\iow_char:N\\u'~escape~sequence~must~be~followed~by~ a~brace~group~with~the~name~of~the~variable~to~use. } \__msg_kernel_new:nnnn { regex } { u-missing-rbrace } - { Missing~right~brace~inserted~for~\iow_char:N\\u~escape. } + { Missing~right~brace~inserted~for~`\iow_char:N\\u'~escape. } { LaTeX~ \str_if_eq_x:nnTF { } {#2} { reached~the~end~of~the~string~ } - { encountered~an~escaped~alphanumeric~character '\iow_char:N\\#2'~ } - when~parsing~the~argument~of~an~'\iow_char:N\\u\iow_char:N\{...\}'~escape. + { encountered~an~escaped~alphanumeric~character `\iow_char:N\\#2'~ } + when~parsing~the~argument~of~an~`\iow_char:N\\u\iow_char:N\{...\}'~escape. } \__msg_kernel_new:nnnn { regex } { posix-unsupported } - { POSIX~collating~element~'[#1 ~ #1]'~not~supported. } + { POSIX~collating~element~`[#1 ~ #1]'~not~supported. } { - The~[.foo.]~and~[=bar=]~syntaxes~have~a~special~meaning~in~POSIX~ - regular~expressions.~This~is~not~supported~by~LaTeX.~Maybe~you~ - forgot~to~escape~a~left~bracket~in~a~character~class? + The~`[.foo.]'~and~`[=bar=]'~syntaxes~have~a~special~meaning~ + in~POSIX~regular~expressions.~This~is~not~supported~by~LaTeX.~ + Maybe~you~forgot~to~escape~a~left~bracket~in~a~character~class? } \__msg_kernel_new:nnnn { regex } { posix-unknown } - { POSIX~class~[:#1:]~unknown. } + { POSIX~class~`[:#1:]'~unknown. } { - [:#1:]~is~not~among~the~known~POSIX~classes~ - [:alnum:],~[:alpha:],~[:ascii:],~[:blank:],~ - [:cntrl:],~[:digit:],~[:graph:],~[:lower:],~ - [:print:],~[:punct:],~[:space:],~[:upper:],~ - [:word:],~and~[:xdigit:]. + `[:#1:]'~is~not~among~the~known~POSIX~classes~ + `[:alnum:]',~`[:alpha:]',~`[:ascii:]',~`[:blank:]',~ + `[:cntrl:]',~`[:digit:]',~`[:graph:]',~`[:lower:]',~ + `[:print:]',~`[:punct:]',~`[:space:]',~`[:upper:]',~ + `[:word:]',~and~`[:xdigit:]'. } \__msg_kernel_new:nnnn { regex } { posix-missing-close } - { Missing~closing~':]'~for~POSIX~class. } - { The~POSIX~syntax~'#1'~must~be~followed~by~':]',~not~'#2'. } + { Missing~closing~`:]'~for~POSIX~class. } + { The~POSIX~syntax~`#1'~must~be~followed~by~`:]',~not~`#2'. } \__msg_kernel_new:nnnn { regex } { result-unbalanced } { Missing~brace~inserted~when~#1. } { @@ -2722,55 +2738,64 @@ \__msg_kernel_new:nnnn { regex } { unknown-option } { Unknown~option~`#1'~for~regular~expressions. } { - The~only~available~option~is~'case-insensitive',~toggled~by~ - '(?i)'~and~'(?-i)'. + The~only~available~option~is~`case-insensitive',~toggled~by~ + `(?i)'~and~`(?-i)'. + } +\__msg_kernel_new:nnnn { regex } { special-group-unknown } + { Unknown~special~group~`#1~...'~in~a~regular~expression. } + { + The~only~valid~constructions~starting~with~`(?'~are~ + `(?:~...~)',~`(?|~...~)',~`(?i)',~and~`(?-i)'. } \__msg_kernel_new:nnnn { regex } { replacement-c } - { Misused~\iow_char:N\\c~command~in~a~replacement~text. } + { Misused~`\iow_char:N\\c'~command~in~a~replacement~text. } { - In~a~replacement~text,~the~\iow_char:N\\c~escape~sequence~ - can~be~followed~by~one~of~the~letters~ABCDELMOPSTU~ - or~a~brace~group,~not~by~'#1'. + In~a~replacement~text,~the~`\iow_char:N\\c'~escape~sequence~ + can~be~followed~by~one~of~the~letters~`ABCDELMOPSTU'~ + or~a~brace~group,~not~by~`#1'. } \__msg_kernel_new:nnnn { regex } { replacement-u } - { Misused~\iow_char:N\\u~command~in~a~replacement~text. } + { Misused~`\iow_char:N\\u'~command~in~a~replacement~text. } { - In~a~replacement~text,~the~\iow_char:N\\u~escape~sequence~ + In~a~replacement~text,~the~`\iow_char:N\\u'~escape~sequence~ must~be~~followed~by~a~brace~group~holding~the~name~of~the~ variable~to~use. } \__msg_kernel_new:nnnn { regex } { replacement-g } - { Missing~brace~for~the~\iow_char:N\\g~construction~in~a~replacement~text. } + { + Missing~brace~for~the~`\iow_char:N\\g'~construction~ + in~a~replacement~text. + } { In~the~replacement~text~for~a~regular~expression~search,~ - submatches~are~represented~either~as~\iow_char:N \\g{dd..d},~ - or~\\d,~where~`d'~are~single~digits.~Here,~a~brace~is~missing. + submatches~are~represented~either~as~`\iow_char:N \\g{dd..d}',~ + or~`\\d',~where~`d'~are~single~digits.~Here,~a~brace~is~missing. } \__msg_kernel_new:nnnn { regex } { replacement-catcode-end } { - Missing~character~for~the~\iow_char:N\\c~ + Missing~character~for~the~`\iow_char:N\\c'~ construction~in~a~replacement~text. } { - In~a~replacement~text,~the~\iow_char:N\\c~escape~sequence~ - can~be~followed~by~one~of~the~letters~ABCDELMOPSTU~representing~ + In~a~replacement~text,~the~`\iow_char:N\\c'~escape~sequence~ + can~be~followed~by~one~of~the~letters~`ABCDELMOPSTU'~representing~ the~character~category.~Then,~a~character~must~follow.~LaTeX~ reached~the~end~of~the~replacement~when~looking~for~that. } \__msg_kernel_new:nnnn { regex } { replacement-null-space } { TeX~cannot~build~a~space~token~with~character~code~0. } { - You~asked~for~a~character~token~with~category~'space',~ + You~asked~for~a~character~token~with~category~space,~ and~character~code~0,~for~instance~through~ - '\iow_char:N\\cS\iow_char:N\\x00'.~ + `\iow_char:N\\cS\iow_char:N\\x00'.~ This~specific~case~is~impossible~and~will~be~replaced~ by~a~normal~space. } \__msg_kernel_new:nnnn { regex } { replacement-missing-rbrace } { Missing~right~brace~inserted~in~replacement~text. } { - There~were~\int_use:N \l__regex_replacement_csnames_int \ - missing~right~braces. + There~ \int_compare:nTF { #1 = 1 } { was } { were } ~ #1~ + missing~right~\int_compare:nTF { #1 = 1 } { brace } { braces } . } \cs_new:Npn \__regex_msg_repeated:nnN #1#2#3 { diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty index aeb2ecc59fa..1b3122241ab 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty @@ -46,7 +46,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{expl3} -\GetIdInfo$Id: l3str-convert.dtx 4339 2013-01-08 10:22:00Z bruno $ +\GetIdInfo$Id: l3str-convert.dtx 5028 2014-06-03 17:04:19Z bruno $ {L3 Experimental string encoding conversions} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} @@ -468,7 +468,6 @@ { \cs_new_protected_nopar:Npn \__str_convert_encode_: { - \int_zero:N \l__tl_build_offset_int \__tl_gbuild_x:Nw \g__str_result_tl \exp_after:wN \__str_encode_native_loop:w \g__str_result_tl \s__tl { \q_stop \__prg_break: } \s__tl diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty index 87eed61c5e8..7fc8488d265 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty @@ -46,7 +46,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{expl3} -\GetIdInfo$Id: l3str-format.dtx 3940 2012-07-09 00:41:44Z bruno $ +\GetIdInfo$Id: l3str-format.dtx 4745 2014-05-06 10:41:27Z joseph $ {L3 Experimental string formatting} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str.sty index 5f8bcae6e85..05fff62dae9 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str.sty @@ -46,7 +46,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{expl3} -\GetIdInfo$Id: l3str.dtx 4728 2014-05-04 13:25:37Z joseph $ +\GetIdInfo$Id: l3str.dtx 4889 2014-05-26 19:59:25Z joseph $ {L3 Experimental strings} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} @@ -318,7 +318,7 @@ } \prg_new_conditional:Npnn \str_if_eq:NN #1#2 { p , TF , T , F } { - \if_int_compare:w \pdftex_strcmp:D { \tl_to_str:N #1 } { \tl_to_str:N #2 } + \if_int_compare:w \__str_if_eq_x:nn { \tl_to_str:N #1 } { \tl_to_str:N #2 } = \c_zero \prg_return_true: \else: \prg_return_false: \fi: } \cs_new_eq:NN \str_show:n \tl_show:n diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3tl-analysis.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3tl-analysis.sty index 8598a3df85c..b0f064707f6 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3tl-analysis.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3tl-analysis.sty @@ -46,7 +46,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{expl3} -\GetIdInfo$Id: l3tl-analysis.dtx 3039 2011-12-08 09:22:35Z bruno $ +\GetIdInfo$Id: l3tl-analysis.dtx 4745 2014-05-06 10:41:27Z joseph $ {L3 Experimental token lists analysis} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3tl-build.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3tl-build.sty index 1ad40197bab..e916eaa180e 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3tl-build.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3tl-build.sty @@ -46,7 +46,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{expl3} -\GetIdInfo$Id: l3tl-build.dtx 3039 2011-12-08 09:22:35Z bruno $ +\GetIdInfo$Id: l3tl-build.dtx 4745 2014-05-06 10:41:27Z joseph $ {L3 Experimental token list construction} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex index 5940982692f..43ce6fd8e94 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex @@ -33,11 +33,9 @@ %% l3fp-trig.dtx (with options: `package') %% l3fp-convert.dtx (with options: `package') %% l3fp-assign.dtx (with options: `package') -%% l3fp-old.dtx (with options: `package') %% l3box.dtx (with options: `package') %% l3coffins.dtx (with options: `package') %% l3color.dtx (with options: `package') -%% l3luatex.dtx (with options: `package') %% l3candidates.dtx (with options: `package') %% %% EXPERIMENTAL CODE @@ -81,8 +79,8 @@ %% ----------------------------------------------------------------------- \def\ExplFileName{expl3} \def\ExplFileDescription{L3 programming layer} -\def\ExplFileDate{2014/05/20} -\def\ExplFileVersion{4814} +\def\ExplFileDate{2014/06/10} +\def\ExplFileVersion{5105} \begingroup \def\next{\endgroup} \expandafter\ifx\csname PackageError\endcsname\relax @@ -241,7 +239,7 @@ } } \endgroup -\GetIdInfo$Id: l3bootstrap.dtx 4782 2014-05-16 22:12:19Z joseph $ +\GetIdInfo$Id: l3bootstrap.dtx 4889 2014-05-26 19:59:25Z joseph $ {L3 Bootstrap code} \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname pdfstrcmp\endcsname\relax @@ -281,17 +279,6 @@ \expandafter\luatex_directlua:D\expandafter{\tempa}% } \fi - \long\gdef\expl_pdfstrcmp#1#2% - {% - \luatex_directlua:D - {% - l3kernel.strcmp - ( - "\luatex_luaescapestring:D {#1}" , - "\luatex_luaescapestring:D {#2}" - ) - }% - } \fi \fi \endgroup @@ -310,26 +297,28 @@ \LineBreak }% \expandafter\ifx\csname pdfstrcmp\endcsname\relax - \catcode`\_=11 % - \expandafter\ifx\csname expl_pdfstrcmp\endcsname\relax - \def\LineBreak{\noexpand\MessageBreak}% - \expandafter\ifx\csname PackageError\endcsname\relax - \def\LineBreak{^^J}% - \begingroup - \def\PackageError#1#2#3% - {% - \endgroup - \errhelp{#3}% - \errmessage{#1 Error: #2!} - }% + \expandafter\ifx\csname directlua\endcsname\relax + \else + \ifnum\luatexversion<36 % + \def\LineBreak{\noexpand\MessageBreak}% + \expandafter\ifx\csname PackageError\endcsname\relax + \def\LineBreak{^^J}% + \begingroup + \def\PackageError#1#2#3% + {% + \endgroup + \errhelp{#3}% + \errmessage{#1 Error: #2!} + }% + \fi + \edef\next + {% + \noexpand\PackageError{expl3}{\ShortText} + {\LongText Loading of expl3 will abort!}% + \endgroup + \noexpand\endinput + }% \fi - \edef\next - {% - \noexpand\PackageError{expl3}{\ShortText} - {\LongText Loading of expl3 will abort!}% - \endgroup - \noexpand\endinput - }% \fi \fi \next @@ -345,16 +334,6 @@ \fi \expandafter\endgroup \next -\ifdefined\directlua - \ifdefined\newattribute - \else - \ifdefined\RequirePackage - \RequirePackage{luatex} - \else - \input luatex.sty % - \fi - \fi -\fi \protected\def\ExplSyntaxOff{} \protected\edef\ExplSyntaxOff {% @@ -446,7 +425,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3names.dtx 4728 2014-05-04 13:25:37Z joseph $ +\GetIdInfo$Id: l3names.dtx 4993 2014-06-02 09:39:35Z joseph $ {L3 Namespace for primitives} \let \tex_global:D \global \let \tex_let:D \let @@ -869,6 +848,7 @@ \__kernel_primitive:NN \XeTeXversion \xetex_XeTeXversion:D \__kernel_primitive:NN \catcodetable \luatex_catcodetable:D \__kernel_primitive:NN \directlua \luatex_directlua:D + \__kernel_primitive:NN \expanded \luatex_expanded:D \__kernel_primitive:NN \initcatcodetable \luatex_initcatcodetable:D \__kernel_primitive:NN \latelua \luatex_latelua:D \__kernel_primitive:NN \luaescapestring \luatex_luaescapestring:D @@ -881,11 +861,6 @@ \__kernel_primitive:NN \pardir \luatex_pardir:D \__kernel_primitive:NN \textdir \luatex_textdir:D \tex_endgroup:D -\etex_ifdefined:D \pdftex_strcmp:D -\tex_else:D - \tex_let:D \pdftex_strcmp:D \expl_pdfstrcmp - \tex_let:D \expl_pdfstrcmp \tex_undefined:D -\tex_fi:D \etex_ifdefined:D \@@end \tex_let:D \tex_end:D \@@end \tex_let:D \tex_everydisplay:D \frozen@everydisplay @@ -963,7 +938,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3basics.dtx 4728 2014-05-04 13:25:37Z joseph $ +\GetIdInfo$Id: l3basics.dtx 5033 2014-06-04 05:32:44Z joseph $ {L3 Basic definitions} \tex_let:D \if_true: \tex_iftrue:D \tex_let:D \if_false: \tex_iffalse:D @@ -1714,20 +1689,42 @@ \cs_gset_eq:NN \pdftex_if_engine_p: \c_false_bool } \cs_new_nopar:Npn \prg_do_nothing: { } +\cs_new:Npn \__str_if_eq_x:nn #1#2 { \pdftex_strcmp:D {#1} {#2} } +\luatex_if_engine:T + { + \cs_set:Npn \__str_if_eq_x:nn #1#2 + { + \luatex_directlua:D + { + l3kernel.strcmp + ( + " \__str_escape_x:n {#1} " , + " \__str_escape_x:n {#2} " + ) + } + } + \cs_new:Npn \__str_escape_x:n #1 + { + \luatex_luaescapestring:D + { + \etex_detokenize:D \exp_after:wN { \luatex_expanded:D {#1} } + } + } + } \prg_new_conditional:Npnn \str_if_eq:nn #1#2 { p , T , F , TF } { - \if_int_compare:w \pdftex_strcmp:D { \exp_not:n {#1} } { \exp_not:n {#2} } + \if_int_compare:w \__str_if_eq_x:nn { \exp_not:n {#1} } { \exp_not:n {#2} } = \c_zero \prg_return_true: \else: \prg_return_false: \fi: } \prg_new_conditional:Npnn \str_if_eq_x:nn #1#2 { p , T , F , TF } { - \if_int_compare:w \pdftex_strcmp:D {#1} {#2} = \c_zero + \if_int_compare:w \__str_if_eq_x:nn {#1} {#2} = \c_zero \prg_return_true: \else: \prg_return_false: \fi: } \cs_new:Npn \__str_if_eq_x_return:nn #1 #2 { - \if_int_compare:w \pdftex_strcmp:D {#1} {#2} = \c_zero + \if_int_compare:w \__str_if_eq_x:nn {#1} {#2} = \c_zero \prg_return_true: \else: \prg_return_false: @@ -2327,7 +2324,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3tl.dtx 4728 2014-05-04 13:25:37Z joseph $ +\GetIdInfo$Id: l3tl.dtx 5070 2014-06-06 18:00:24Z bruno $ {L3 Token lists} \cs_new_protected:Npn \tl_new:N #1 { @@ -2500,16 +2497,7 @@ \tl_gset:Nx #1 { \exp_not:o {#2} \exp_not:o {#3} } } \tex_fi:D -\group_begin: - \tex_lccode:D `\A = `\@ \scan_stop: - \tex_lccode:D `\B = `\@ \scan_stop: - \tex_catcode:D `\A = 8 \scan_stop: - \tex_catcode:D `\B = 3 \scan_stop: -\tex_lowercase:D - { - \group_end: - \tl_const:Nn \c__tl_rescan_marker_tl { A B } - } +\tl_const:Nx \c__tl_rescan_marker_tl { : \token_to_str:N : } \cs_new_protected_nopar:Npn \tl_set_rescan:Nnn { \__tl_set_rescan:NNnn \tl_set:Nn } \cs_new_protected_nopar:Npn \tl_gset_rescan:Nnn @@ -2702,7 +2690,15 @@ \cs_new:Npn \tl_if_single:NF { \exp_args:No \tl_if_single:nF } \cs_new:Npn \tl_if_single:NTF { \exp_args:No \tl_if_single:nTF } \prg_new_conditional:Npnn \tl_if_single:n #1 { p , T , F , TF } - { \__str_if_eq_x_return:nn { \exp_not:o { \use_none:nn #1 ?? } } {?} } + { + \if_catcode:w ^ \exp_after:wN \__tl_if_single:nnw + \tl_to_str:n \exp_after:wN { \use_none:nn #1 ?? } ^ ? \q_stop + \prg_return_true: + \else: + \prg_return_false: + \fi: + } +\cs_new:Npn \__tl_if_single:nnw #1#2#3 \q_stop {#2} \cs_new:Npn \tl_case:Nn #1#2 { \tex_romannumeral:D @@ -3625,7 +3621,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3int.dtx 4776 2014-05-16 14:46:44Z joseph $ +\GetIdInfo$Id: l3int.dtx 4966 2014-05-31 00:44:34Z bruno $ {L3 Integers} \cs_new_eq:NN \__int_value:w \tex_number:D \cs_new_eq:NN \__int_eval:w \etex_numexpr:D @@ -3816,7 +3812,12 @@ \cs_new:Npn \__int_compare:NNw #1#2#3 \q_mark { \etex_unexpanded:D - \use:c { __int_compare_ #1 \if_meaning:w = #2 = \fi: :NNw } + \use:c + { + __int_compare_ \token_to_str:N #1 + \if_meaning:w = #2 = \fi: + :NNw + } \__prg_compare_error:Nw #1 } \cs_new:cpn { __int_compare_end_=:NNw } #1#2#3 e #4 \q_stop @@ -3954,19 +3955,26 @@ \int_compare:nNnF {#1} #2 {#3} { \int_do_until:nNnn {#1} #2 {#3} {#4} } } -\cs_new:Npn \int_step_function:nnnN #1#2#3#4 +\cs_new:Npn \int_step_function:nnnN #1#2#3 + { + \exp_after:wN \__int_step:wwwN + \int_use:N \__int_eval:w #1 \exp_after:wN ; + \int_use:N \__int_eval:w #2 \exp_after:wN ; + \int_use:N \__int_eval:w #3 ; + } +\cs_new:Npn \__int_step:wwwN #1; #2; #3; #4 { \int_compare:nNnTF {#2} > \c_zero - { \exp_args:NNf \__int_step:NnnnN > } + { \__int_step:NnnnN > } { \int_compare:nNnTF {#2} = \c_zero { \__msg_kernel_expandable_error:nnn { kernel } { zero-step } {#4} \use_none:nnnn } - { \exp_args:NNf \__int_step:NnnnN < } + { \__int_step:NnnnN < } } - { \int_eval:n {#1} } {#2} {#3} #4 + {#1} {#2} {#3} #4 } \cs_new:Npn \__int_step:NnnnN #1#2#3#4#5 { @@ -4470,7 +4478,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3quark.dtx 4728 2014-05-04 13:25:37Z joseph $ +\GetIdInfo$Id: l3quark.dtx 4889 2014-05-26 19:59:25Z joseph $ {L3 Quarks} \cs_new_protected:Npn \quark_new:N #1 { \tl_const:Nn #1 {#1} } \quark_new:N \q_nil @@ -4495,14 +4503,14 @@ } \cs_new:Npn \quark_if_recursion_tail_stop:n #1 { - \if_int_compare:w \pdftex_strcmp:D + \if_int_compare:w \__str_if_eq_x:nn { \exp_not:N \q_recursion_tail } { \exp_not:n {#1} } = \c_zero \exp_after:wN \use_none_delimit_by_q_recursion_stop:w \fi: } \cs_new:Npn \quark_if_recursion_tail_stop_do:nn #1 { - \if_int_compare:w \pdftex_strcmp:D + \if_int_compare:w \__str_if_eq_x:nn { \exp_not:N \q_recursion_tail } { \exp_not:n {#1} } = \c_zero \exp_after:wN \use_i_delimit_by_q_recursion_stop:nw \else: @@ -4519,7 +4527,7 @@ } \cs_new:Npn \__quark_if_recursion_tail_break:nN #1#2 { - \if_int_compare:w \pdftex_strcmp:D + \if_int_compare:w \__str_if_eq_x:nn { \exp_not:N \q_recursion_tail } { \exp_not:n {#1} } = \c_zero \exp_after:wN #2 \fi: @@ -4546,7 +4554,7 @@ \cs_generate_variant:Nn \quark_if_no_value:NTF { c } \prg_new_conditional:Nnn \quark_if_nil:n { p, T , F , TF } { - \if_int_compare:w \pdftex_strcmp:D + \if_int_compare:w \__str_if_eq_x:nn { \exp_not:N \q_nil } { \exp_not:n {#1} } = \c_zero \prg_return_true: \else: @@ -4555,7 +4563,7 @@ } \prg_new_conditional:Nnn \quark_if_no_value:n { p, T , F , TF } { - \if_int_compare:w \pdftex_strcmp:D + \if_int_compare:w \__str_if_eq_x:nn { \exp_not:N \q_no_value } { \exp_not:n {#1} } = \c_zero \prg_return_true: \else: @@ -5417,7 +5425,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3token.dtx 4728 2014-05-04 13:25:37Z joseph $ +\GetIdInfo$Id: l3token.dtx 4889 2014-05-26 19:59:25Z joseph $ {L3 Experimental token manipulation} \cs_new_protected:Npn \char_set_catcode:nn #1#2 { \tex_catcode:D #1 = \__int_eval:w #2 \__int_eval_end: } @@ -5642,7 +5650,7 @@ } \cs_new:Npn \__token_if_macro_p:w #1 MA #2 ; #3 \q_stop { - \if_int_compare:w \pdftex_strcmp:D { #2 } { cro } = \c_zero + \if_int_compare:w \__str_if_eq_x:nn { #2 } { cro } = \c_zero \prg_return_true: \else: \prg_return_false: @@ -6408,7 +6416,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3msg.dtx 4728 2014-05-04 13:25:37Z joseph $ +\GetIdInfo$Id: l3msg.dtx 4943 2014-05-30 17:26:32Z bruno $ {L3 Messages} \tl_new:N \l__msg_internal_tl \tl_const:Nn \c__msg_text_prefix_tl { msg~text~>~ } @@ -6462,33 +6470,33 @@ } \cs_new_protected:Npn \msg_gset:nnn #1#2#3 { \msg_gset:nnnn {#1} {#2} {#3} { } } -\tl_const:Nn \c_msg_coding_error_text_tl +\tl_const:Nn \c__msg_coding_error_text_tl { This~is~a~coding~error. \\ \\ } -\tl_const:Nn \c_msg_continue_text_tl +\tl_const:Nn \c__msg_continue_text_tl { Type~~to~continue } -\tl_const:Nn \c_msg_critical_text_tl - { Reading~the~current~file~will~stop. } -\tl_const:Nn \c_msg_fatal_text_tl +\tl_const:Nn \c__msg_critical_text_tl + { Reading~the~current~file~'\g_file_current_name_tl'~will~stop. } +\tl_const:Nn \c__msg_fatal_text_tl { This~is~a~fatal~error:~LaTeX~will~abort. } -\tl_const:Nn \c_msg_help_text_tl +\tl_const:Nn \c__msg_help_text_tl { For~immediate~help~type~H~ } -\tl_const:Nn \c_msg_no_info_text_tl +\tl_const:Nn \c__msg_no_info_text_tl { LaTeX~does~not~know~anything~more~about~this~error,~sorry. - \c_msg_return_text_tl + \c__msg_return_text_tl } -\tl_const:Nn \c_msg_on_line_text_tl { on~line } -\tl_const:Nn \c_msg_return_text_tl +\tl_const:Nn \c__msg_on_line_text_tl { on~line } +\tl_const:Nn \c__msg_return_text_tl { \\ \\ Try~typing~~to~proceed. \\ If~that~doesn't~work,~type~X~~to~quit. } -\tl_const:Nn \c_msg_trouble_text_tl +\tl_const:Nn \c__msg_trouble_text_tl { \\ \\ More~errors~will~almost~certainly~follow: \\ @@ -6497,7 +6505,7 @@ \cs_new_nopar:Npn \msg_line_number: { \int_use:N \tex_inputlineno:D } \cs_gset_nopar:Npn \msg_line_context: { - \c_msg_on_line_text_tl + \c__msg_on_line_text_tl \c_space_tl \msg_line_number: } @@ -6505,12 +6513,12 @@ { \tl_if_empty:nTF {#3} { - \__msg_interrupt_wrap:nn { \\ \c_msg_no_info_text_tl } - {#1 \\\\ #2 \\\\ \c_msg_continue_text_tl } + \__msg_interrupt_wrap:nn { \\ \c__msg_no_info_text_tl } + {#1 \\\\ #2 \\\\ \c__msg_continue_text_tl } } { \__msg_interrupt_wrap:nn { \\ #3 } - {#1 \\\\ #2 \\\\ \c_msg_help_text_tl } + {#1 \\\\ #2 \\\\ \c__msg_help_text_tl } } } \cs_new_protected:Npn \__msg_interrupt_wrap:nn #1#2 @@ -6628,7 +6636,7 @@ \use:c { \c__msg_text_prefix_tl #1 / #2 } {#3} {#4} {#5} {#6} \msg_see_documentation_text:n {#1} } - { \c_msg_fatal_text_tl } + { \c__msg_fatal_text_tl } \tex_end:D } \__msg_class_new:nn { critical } @@ -6639,7 +6647,7 @@ \use:c { \c__msg_text_prefix_tl #1 / #2 } {#3} {#4} {#5} {#6} \msg_see_documentation_text:n {#1} } - { \c_msg_critical_text_tl } + { \c__msg_critical_text_tl } \tex_endinput:D } \__msg_class_new:nn { error } @@ -6875,25 +6883,25 @@ \__msg_kernel_new:nnnn { kernel } { message-already-defined } { Message~'#2'~for~module~'#1'~already~defined. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl LaTeX~was~asked~to~define~a~new~message~called~'#2'\ by~the~module~'#1':~this~message~already~exists. - \c_msg_return_text_tl + \c__msg_return_text_tl } \__msg_kernel_new:nnnn { kernel } { message-unknown } { Unknown~message~'#2'~for~module~'#1'. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl LaTeX~was~asked~to~display~a~message~called~'#2'\\ by~the~module~'#1':~this~message~does~not~exist. - \c_msg_return_text_tl + \c__msg_return_text_tl } \__msg_kernel_new:nnnn { kernel } { message-class-unknown } { Unknown~message~class~'#1'. } { LaTeX~has~been~asked~to~redirect~messages~to~a~class~'#1':\\ this~was~never~defined. - \c_msg_return_text_tl + \c__msg_return_text_tl } \__msg_kernel_new:nnnn { kernel } { message-redirect-loop } { @@ -6909,7 +6917,7 @@ \__msg_kernel_new:nnnn { kernel } { bad-number-of-arguments } { Function~'#1'~cannot~be~defined~with~#2~arguments. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl LaTeX~has~been~asked~to~define~a~function~'#1'~with~ #2~arguments.~ TeX~allows~between~0~and~9~arguments~for~a~single~function. @@ -6917,7 +6925,7 @@ \__msg_kernel_new:nnnn { kernel } { command-already-defined } { Control~sequence~#1~already~defined. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl LaTeX~has~been~asked~to~create~a~new~control~sequence~'#1'~ but~this~name~has~already~been~used~elsewhere. \\ \\ The~current~meaning~is:\\ @@ -6926,14 +6934,14 @@ \__msg_kernel_new:nnnn { kernel } { command-not-defined } { Control~sequence~#1~undefined. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl LaTeX~has~been~asked~to~use~a~command~#1,~but~this~has~not~ been~defined~yet. } \__msg_kernel_new:nnnn { kernel } { empty-search-pattern } { Empty~search~pattern. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl LaTeX~has~been~asked~to~replace~an~empty~pattern~by~'#1':~that~ would~lead~to~an~infinite~loop! } @@ -6947,7 +6955,7 @@ \__msg_kernel_new:nnnn { kernel } { missing-colon } { Function~'#1'~contains~no~':'. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl Code-level~functions~must~contain~':'~to~separate~the~ argument~specification~from~the~function~name.~This~is~ needed~when~defining~conditionals~or~variants,~or~when~building~a~ @@ -6956,14 +6964,14 @@ \__msg_kernel_new:nnnn { kernel } { protected-predicate } { Predicate~'#1'~must~be~expandable. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl LaTeX~has~been~asked~to~define~'#1'~as~a~protected~predicate.~ Only~expandable~tests~can~have~a~predicate~version. } \__msg_kernel_new:nnnn { kernel } { conditional-form-unknown } { Conditional~form~'#1'~for~function~'#2'~unknown. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl LaTeX~has~been~asked~to~define~the~conditional~form~'#1'~of~ the~function~'#2',~but~only~'TF',~'T',~'F',~and~'p'~forms~exist. } @@ -6983,21 +6991,21 @@ \__msg_kernel_new:nnnn { kernel } { scanmark-already-defined } { Scan~mark~#1~already~defined. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl LaTeX~has~been~asked~to~create~a~new~scan~mark~'#1'~ but~this~name~has~already~been~used~for~a~scan~mark. } \__msg_kernel_new:nnnn { kernel } { variable-not-defined } { Variable~#1~undefined. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl LaTeX~has~been~asked~to~show~a~variable~#1,~but~this~has~not~ been~defined~yet. } \__msg_kernel_new:nnnn { kernel } { variant-too-long } { Variant~form~'#1'~longer~than~base~signature~of~'#2'. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl LaTeX~has~been~asked~to~create~a~variant~of~the~function~'#2'~ with~a~signature~starting~with~'#1',~but~that~is~longer~than~ the~signature~(part~after~the~colon)~of~'#2'. @@ -7005,7 +7013,7 @@ \__msg_kernel_new:nnnn { kernel } { invalid-variant } { Variant~form~'#1'~invalid~for~base~form~'#2'. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl LaTeX~has~been~asked~to~create~a~variant~of~the~function~'#2'~ with~a~signature~starting~with~'#1',~but~cannot~change~an~argument~ from~type~'#3'~to~type~'#4'. @@ -7019,7 +7027,7 @@ \__msg_kernel_new:nnn { kernel } { negative-replication } { Negative~argument~for~\prg_replicate:nn. } \__msg_kernel_new:nnn { kernel } { unknown-comparison } - { Relation~symbol~'#1'~unknown:~use~=,~<,~>,~==,~!=,~<=,~>=. } + { Relation~'#1'~unknown:~use~=,~<,~>,~==,~!=,~<=,~>=. } \__msg_kernel_new:nnn { kernel } { zero-step } { Zero~step~size~for~step~function~#1. } \__msg_kernel_new:nnn { kernel } { show-clist } @@ -7182,7 +7190,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3file.dtx 4737 2014-05-05 07:37:48Z joseph $ +\GetIdInfo$Id: l3file.dtx 4890 2014-05-26 20:59:31Z joseph $ {L3 File and I/O operations} \tl_new:N \g_file_current_name_tl \tl_gset_eq:NN \g_file_current_name_tl \@currname @@ -7201,11 +7209,27 @@ \tl_set:Nx \l__file_internal_name_tl {#1} \tl_set:Nx \l__file_internal_name_tl { \tl_to_str:N \l__file_internal_name_tl } - \tl_if_in:NnT \l__file_internal_name_tl { ~ } + \int_compare:nNnTF + { + \int_mod:nn + { + 0 \tl_map_function:NN \l__file_internal_name_tl + \__file_name_sanitize_aux:n + } + \c_two + } + = \c_zero { - \__msg_kernel_error:nnx { kernel } { space-in-file-name } + \tl_remove_all:Nn \l__file_internal_name_tl { " } + \tl_if_in:NnT \l__file_internal_name_tl { ~ } + { + \tl_set:Nx \l__file_internal_name_tl + { " \exp_not:V \l__file_internal_name_tl " } + } + } + { + \__msg_kernel_error:nnx { kernel } { unbalanced-quote-in-filename } { \l__file_internal_name_tl } - \tl_remove_all:Nn \l__file_internal_name_tl { ~ } } \use:x { @@ -7213,6 +7237,11 @@ \exp_not:n {#2} { \l__file_internal_name_tl } } } +\cs_new:Npn \__file_name_sanitize_aux:n #1 + { + \str_if_eq:nnT {#1} { " } + { + \c_one } + } \cs_new_protected:Npn \file_add_path:nN #1 { \__file_name_sanitize:nn {#1} { \__file_add_path:nN } } \cs_new_protected:Npn \__file_add_path:nN #1#2 @@ -7676,11 +7705,10 @@ All~16~are~currently~in~use,~and~something~wanted~to~open~ another~one. } -\__msg_kernel_new:nnnn { kernel } { space-in-file-name } - { Space~in~file~name~'#1'. } +\__msg_kernel_new:nnnn { kernel } { unbalanced-quote-in-filename } + { Unbalanced~quotes~in~file~name~'#1'. } { - Spaces~are~not~permitted~in~files~loaded~by~LaTeX: \\ - Further~errors~may~follow! + File~names~must~contain~balanced~numbers~of~quotes~("). } %% File: l3skip.dtx Copyright (C) 2004-2011 Frank Mittelbach, The LaTeX3 Project %% (C) 2012-2014 The LaTeX3 Project @@ -7715,7 +7743,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3skip.dtx 4738 2014-05-05 08:00:05Z joseph $ +\GetIdInfo$Id: l3skip.dtx 4972 2014-05-31 16:42:18Z bruno $ {L3 Dimensions and skips} \cs_new_eq:NN \if_dim:w \tex_ifdim:D \cs_new_eq:NN \__dim_eval:w \etex_dimexpr:D @@ -7929,27 +7957,22 @@ \cs_new:Npn \dim_eval:n #1 { \dim_use:N \__dim_eval:w #1 \__dim_eval_end: } \cs_new:Npn \__dim_strip_bp:n #1 - { - \__dim_strip_pt:n - { - \__dim_eval:w ( #1 ) * 800 / 803 \__dim_eval_end: - } - } + { \__dim_strip_pt:n { ( #1 ) * 800 / 803 } } \cs_new:Npn \__dim_strip_pt:n #1 { \exp_after:wN - \__dim_strip_pt:w \dim_use:N \__dim_eval:w #1 \__dim_eval_end: \q_stop + \__dim_strip_pt:w \dim_use:N \__dim_eval:w (#1) \__dim_eval_end: } \use:x { \cs_new:Npn \exp_not:N \__dim_strip_pt:w - ##1 . ##2 \tl_to_str:n { pt } ##3 \exp_not:N \q_stop + ##1 . ##2 \tl_to_str:n { pt } + } { - ##1 - \exp_not:N \int_compare:nNnT {##2} > \c_zero - { . ##2 } + \int_compare:nNnTF {#2} > \c_zero + { #1 . #2 } + { #1 } } - } \cs_new_eq:NN \dim_use:N \tex_the:D \cs_generate_variant:Nn \dim_use:N { c } \cs_new_eq:NN \dim_show:N \__kernel_register_show:N @@ -8010,7 +8033,7 @@ \prg_new_conditional:Npnn \skip_if_eq:nn #1#2 { p , T , F , TF } { \if_int_compare:w - \pdftex_strcmp:D { \skip_eval:n { #1 } } { \skip_eval:n { #2 } } + \__str_if_eq_x:nn { \skip_eval:n { #1 } } { \skip_eval:n { #2 } } = \c_zero \prg_return_true: \else: @@ -8143,7 +8166,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3keys.dtx 4753 2014-05-08 20:12:49Z joseph $ +\GetIdInfo$Id: l3keys.dtx 5093 2014-06-08 20:33:14Z joseph $ {L3 Key-value interfaces} \int_new:N \g__keyval_level_int \tl_new:N \l__keyval_key_tl @@ -8356,20 +8379,54 @@ } \cs_generate_variant:Nn \__keys_bool_set_inverse:Nn { c } \cs_new_protected_nopar:Npn \__keys_choice_make: + { \__keys_choice_make:N \__keys_choice_find:n } +\cs_new_protected_nopar:Npn \__keys_multichoice_make: + { \__keys_choice_make:N \__keys_multichoice_find:n } +\cs_new_protected_nopar:Npn \__keys_choice_make:N #1 + { + \prop_if_exist:cTF { \c__keys_info_root_tl \__keys_parent:o \l_keys_path_tl } + { + \prop_get:cnNTF { \c__keys_info_root_tl \__keys_parent:o \l_keys_path_tl } + { choice } \l_keys_value_tl + { + \__msg_kernel_error:nnxx { kernel } { nested-choice-key } + { \l_keys_path_tl } { \__keys_parent:o \l_keys_path_tl } + } + { \__keys_choice_make_aux:N #1 } + } + { \__keys_choice_make_aux:N #1 } + } +\cs_new_protected_nopar:Npn \__keys_choice_make_aux:N #1 { - \__keys_cmd_set:nn { \l_keys_path_tl } - { \__keys_choice_find:n {##1} } + \__keys_cmd_set:nn { \l_keys_path_tl } { #1 {##1} } + \prop_put:cnn { \c__keys_info_root_tl \l_keys_path_tl } { choice } + { true } \__keys_cmd_set:nn { \l_keys_path_tl / unknown } { \__msg_kernel_error:nnxx { kernel } { key-choice-unknown } { \l_keys_path_tl } {##1} } } -\cs_new_protected:Npn \__keys_choices_make:nn #1#2 +\cs_new:Npn \__keys_parent:n #1 + { \__keys_parent:wn #1 / / \q_stop { } } +\cs_generate_variant:Nn \__keys_parent:n { o } +\cs_new:Npn \__keys_parent:wn #1 / #2 / #3 \q_stop #4 { - \__keys_choice_make: + \tl_if_blank:nTF {#2} + { \use_none:n #4 } + { + \__keys_parent:wn #2 / #3 \q_stop { #4 / #1 } + } + } +\cs_new_protected_nopar:Npn \__keys_choices_make:nn + { \__keys_choices_make:Nnn \__keys_choice_make: } +\cs_new_protected_nopar:Npn \__keys_multichoices_make:nn + { \__keys_choices_make:Nnn \__keys_multichoice_make: } +\cs_new_protected:Npn \__keys_choices_make:Nnn #1#2#3 + { + #1 \int_zero:N \l_keys_choice_int - \clist_map_inline:nn {#1} + \clist_map_inline:nn {#2} { \int_incr:N \l_keys_choice_int \__keys_cmd_set:nx { \l_keys_path_tl / ##1 } @@ -8377,7 +8434,7 @@ \tl_set:Nn \exp_not:N \l_keys_choice_tl {##1} \int_set:Nn \exp_not:N \l_keys_choice_int { \int_use:N \l_keys_choice_int } - \exp_not:n {#2} + \exp_not:n {#3} } } } @@ -8412,34 +8469,6 @@ } \cs_new_protected:Npn \__keys_meta_make:nn #1#2 { \__keys_cmd_set:Vn \l_keys_path_tl { \keys_set:nn {#1} {#2} } } -\cs_new:Npn \__keys_multichoice_find:n #1 - { \clist_map_function:nN {#1} \__keys_choice_find:n } -\cs_new_protected_nopar:Npn \__keys_multichoice_make: - { - \__keys_cmd_set:nn { \l_keys_path_tl } - { \__keys_multichoice_find:n {##1} } - \__keys_cmd_set:nn { \l_keys_path_tl / unknown } - { - \__msg_kernel_error:nnxx { kernel } { key-choice-unknown } - { \l_keys_path_tl } {##1} - } - } -\cs_new_protected:Npn \__keys_multichoices_make:nn #1#2 - { - \__keys_multichoice_make: - \int_zero:N \l_keys_choice_int - \clist_map_inline:nn {#1} - { - \int_incr:N \l_keys_choice_int - \__keys_cmd_set:nx { \l_keys_path_tl / ##1 } - { - \tl_set:Nn \exp_not:N \l_keys_choice_tl {##1} - \int_set:Nn \exp_not:N \l_keys_choice_int - { \int_use:N \l_keys_choice_int } - \exp_not:n {#2} - } - } - } \cs_new_protected:Npn \__keys_value_requirement:n #1 { \prop_if_exist:cT { \c__keys_info_root_tl \l_keys_path_tl } @@ -8778,6 +8807,8 @@ \__keys_execute:nn { \l_keys_path_tl / \tl_to_str:n {#1} } { \__keys_execute:nn { \l_keys_path_tl / unknown } { } } } +\cs_new:Npn \__keys_multichoice_find:n #1 + { \clist_map_function:nN {#1} \__keys_choice_find:n } \prg_new_conditional:Npnn \keys_if_exist:nn #1#2 { p , T , F , TF } { \cs_if_exist:cTF { \c__keys_code_root_tl #1 / #2 } @@ -8809,7 +8840,7 @@ \__msg_kernel_new:nnnn { kernel } { key-no-property } { No~property~given~in~definition~of~key~'#1'. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl Inside~\keys_define:nn each~key~name~ needs~a~property: \\ \\ \iow_indent:n { #1 . } \\ \\ @@ -8821,17 +8852,23 @@ The~module~'#2'~does~not~have~a~key~called~#1'.\\ Check~that~you~have~spelled~the~key~name~correctly. } +\__msg_kernel_new:nnnn { kernel } { nested-choice-key } + { Attempt~to~define~'#1'~as~a~nested~choice~key. } + { + The~key~'#1'~cannot~be~defined~as~a~choice~as~the~parent~key~'#2'~is~ + itself~a~choice. + } \__msg_kernel_new:nnnn { kernel } { property-requires-value } { The~property~'#1'~requires~a~value. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl LaTeX~was~asked~to~set~property~'#1'~for~key~'#2'.\\ No~value~was~given~for~the~property,~and~one~is~required. } \__msg_kernel_new:nnnn { kernel } { property-unknown } { The~key~property~'#1'~is~unknown. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl LaTeX~has~been~asked~to~set~the~property~'#1'~for~key~'#2':~ this~property~is~not~defined. } @@ -8892,7 +8929,7 @@ \__msg_kernel_new:nnnn { kernel } { generate-choices-before-code } { No~code~available~to~generate~choices~for~key~'#1'. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl Before~using~.generate_choices:n~the~code~should~be~defined~ with~'.choice_code:n'~or~'.choice_code:x'. } @@ -10238,7 +10275,7 @@ \if_catcode:w \scan_stop: \exp_not:N #1 \if_meaning:w \scan_stop: #1 \if_int_compare:w - \pdftex_strcmp:D { \s__fp } { \exp_not:N #1 } = \c_zero + \__str_if_eq_x:nn { \s__fp } { \exp_not:N #1 } = \c_zero 0 \__msg_kernel_expandable_error:nnn { kernel } { fp-after-e } { floating~point~ } @@ -10251,7 +10288,7 @@ \fi: \else: \if_int_compare:w - \pdftex_strcmp:D { \__int_value:w #1 } { \tex_the:D #1 } + \__str_if_eq_x:nn { \__int_value:w #1 } { \tex_the:D #1 } = \c_zero \__int_value:w #1 \else: @@ -10452,11 +10489,12 @@ \exp_after:wN \__fp_parse_after:ww \tex_romannumeral:D \__fp_parse_operand:Nw \c_minus_one - \__fp_parse_expand:w #1 \s__fp_mark + \__fp_parse_expand:w #1 + \s__fp_mark \__fp_parse_infix_end:N \s__fp_stop } \cs_new:Npn \__fp_parse_after:ww - #1@ \__fp_parse_infix_end:N \s__fp_mark \s__fp_stop + #1@ \__fp_parse_infix_end:N \s__fp_stop { \c_zero #1 } \cs_new:Npn \__fp_parse_operand:Nw #1 { @@ -10487,10 +10525,10 @@ { \if_catcode:w \scan_stop: \exp_not:N #2 \if_int_compare:w - \pdftex_strcmp:D { \s__fp_mark } { \exp_not:N #2 } + \__str_if_eq_x:nn { \s__fp_mark } { \exp_not:N #2 } = \c_zero \exp_after:wN \exp_after:wN - \exp_after:wN \__fp_parse_infix_end:N + \exp_after:wN \__fp_parse_infix_mark:NNN \else: \exp_after:wN \exp_after:wN \exp_after:wN \__fp_parse_infix_juxtapose:N @@ -10529,6 +10567,7 @@ \fi: } \group_end: +\cs_new:Npn \__fp_parse_infix_mark:NNN #1#2#3 { #3 #1 } \cs_new:Npn \__fp_parse_infix_end:N #1 { @ \use_none:n \__fp_parse_infix_end:N } \group_begin: @@ -10829,30 +10868,36 @@ } \cs_new:Npn \__fp_parse_continue_compare:NNwNN #1#2 #3@ #4#5 { #4 #2 #3@ #1 } -\group_begin: - \char_set_catcode_other:N \^^@ - \cs_new:Npn \fp_function:Nw #1 { ^^@ ; { \exp_after:wN #1 } } -\group_end: -\group_begin: - \char_set_catcode_other:N \^^@ - \cs_new_protected:Npn \fp_new_function:Npn #1#2# - { - \cs_new:Npx #1 - { - ^^@ ; - { - \exp_not:N \exp_after:wN - \exp_not:N \__fp_function_args:Nwn - \exp_not:N \exp_after:wN - \exp_not:c { __fp_user_ \cs_to_str:N #1 } - \exp_not:N \__int_value:w - \int_eval:n { \tl_count:n {#2} / \c_two } - \exp_not:N \exp_after:wN ; - } - } - \cs_new:cpn { __fp_user_ \cs_to_str:N #1 } #2 - } -\group_end: +\cs_new:Npn \fp_function:Nw #1 + { + \exp_after:wN \__fp_function_apply:nw + \exp_after:wN #1 + \tex_romannumeral:D + \__fp_parse_operand:Nw \c_sixteen \__fp_parse_expand:w + } +\cs_new_protected:Npn \fp_new_function:Npn #1#2# + { + \__fp_new_function:Ncfnn #1 + { __fp_user_ \cs_to_str:N #1 } + { \int_eval:n { \tl_count:n {#2} / \c_two } } + {#2} + } +\cs_new_protected:Npn \__fp_new_function:NNnnn #1#2#3#4#5 + { + \cs_new_nopar:Npn #1 + { + \exp_after:wN \__fp_function_apply:nw \exp_after:wN + { + \exp_after:wN \__fp_function_args:Nwn + \exp_after:wN #2 + \__int_value:w #3 \exp_after:wN ; \exp_after:wN + } + \tex_romannumeral:D + \__fp_parse_operand:Nw \c_sixteen \__fp_parse_expand:w + } + \cs_new:Npn #2 #4 {#5} + } +\cs_generate_variant:Nn \__fp_new_function:NNnnn { Ncf } \cs_new:Npn \__fp_function_args:Nwn #1#2; #3 { \int_compare:nNnTF { \tl_count:n {#3} } = {#2} @@ -10863,34 +10908,23 @@ \c_nan_fp } } -\group_begin: - \char_set_catcode_other:N \^^@ - \cs_new:cpn { __fp_parse_prefix_ ^^@ :Nw } #1 ; #2 - { - \exp_after:wN \__fp_function_apply:NnwN - \exp_after:wN #1 - \exp_after:wN { #2 \exp_after:wN } - \tex_romannumeral:D - \__fp_parse_operand:Nw \c_sixteen \__fp_parse_expand:w - } -\group_end: -\cs_new:Npn \__fp_function_apply:NnwN #1#2#3@#4 +\cs_new:Npn \__fp_function_apply:nw #1#2 @ { - \exp_after:wN \__fp_exp_after_array_f:w - \tex_romannumeral:D -`0 - \__fp_function_store:wwNwnn #3 - \s__fp_mark \__fp_function_store:wwNwnn ; - \s__fp_mark \__fp_function_store_end:wnnn - \s__fp_stop { } { } {#2} - \s__fp_stop - #4 #1 + \__fp_parse:n + { + \__fp_function_store:wwNwnn #2 + \s__fp_mark \__fp_function_store:wwNwnn ; + \s__fp_mark \__fp_function_store_end:wnnn + \s__fp_stop { } { } {#1} + } + \s__fp_mark } \cs_new:Npn \__fp_function_store:wwNwnn #1; #2 \s__fp_mark #3#4 \s__fp_stop #5#6 { #3 #2 \s__fp_mark #3#4 \s__fp_stop { #5 #6 } { { #1; } } } \cs_new:Npn \__fp_function_store_end:wnnn #1 \s__fp_stop #2#3#4 - { \__fp_parse:n { #4 {#2} } } + { #4 {#2} } \__msg_kernel_new:nnn { kernel } { unknown-fp-word } { Unknown~fp~word~#1. } \__msg_kernel_new:nnn { kernel } { fp-missing } @@ -12978,7 +13012,7 @@ } \cs_new:Npn \__fp_pow_normal:ww \s__fp \__fp_chk:w 1 #1#2#3; \s__fp \__fp_chk:w #4#5 { - \if_int_compare:w \pdftex_strcmp:D { #2 #3 } + \if_int_compare:w \__str_if_eq_x:nn { #2 #3 } { 1 {1000} {0000} {0000} {0000} } = \c_zero \if_int_compare:w #4 #1 = 32 \exp_stop_f: \exp_after:wN \__fp_case_return_ii_o:ww @@ -14354,147 +14388,6 @@ \fp_new:N \l_tmpb_fp \fp_new:N \g_tmpa_fp \fp_new:N \g_tmpb_fp -%% File: l3fp-old.dtx Copyright (C) 2012,2014 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 Team. -%% -%% ----------------------------------------------------------------------- -%% -\fp_const:Nn \c_undefined_fp { nan } -\prg_new_conditional:Npnn \fp_if_undefined:N #1 { p , T , F , TF } - { \exp_after:wN \__fp_if_undefined:w #1 } -\cs_new:Npn \__fp_if_undefined:w \s__fp \__fp_chk:w #1#2; - { - \if_int_compare:w #1 > \c_one - \prg_return_true: \else: \prg_return_false: \fi: - } -\prg_new_conditional:Npnn \fp_if_zero:N #1 { p , T , F , TF } - { \exp_after:wN \__fp_if_zero:w #1 } -\cs_new:Npn \__fp_if_zero:w \s__fp \__fp_chk:w #1#2; - { \if_meaning:w #1 0 \prg_return_true: \else: \prg_return_false: \fi: } -\cs_new_protected_nopar:Npn \fp_abs:N { \__fp_abs:NNN \tl_set:Nx \__fp_abs_o:w } -\cs_new_protected_nopar:Npn \fp_gabs:N { \__fp_abs:NNN \tl_gset:Nx \__fp_abs_o:w } -\cs_new_protected_nopar:Npx \fp_neg:N - { - \exp_not:N \__fp_abs:NNN - \exp_not:N \tl_set:Nx - \exp_not:c { __fp_-_o:w } - } -\cs_new_protected_nopar:Npx \fp_gneg:N - { - \exp_not:N \__fp_abs:NNN - \exp_not:N \tl_gset:Nx - \exp_not:c { __fp_-_o:w } - } -\cs_new_protected:Npn \__fp_abs:NNN #1#2#3 - { #1 #3 { \exp_after:wN #2 #3 \prg_do_nothing: } } -\cs_generate_variant:Nn \fp_abs:N { c } -\cs_generate_variant:Nn \fp_gabs:N { c } -\cs_generate_variant:Nn \fp_neg:N { c } -\cs_generate_variant:Nn \fp_gneg:N { c } -\cs_new_protected_nopar:Npn \fp_mul:Nn { \__fp_mul:NNNn \fp_set:Nn * } -\cs_new_protected_nopar:Npn \fp_gmul:Nn { \__fp_mul:NNNn \fp_gset:Nn * } -\cs_new_protected_nopar:Npn \fp_div:Nn { \__fp_mul:NNNn \fp_set:Nn / } -\cs_new_protected_nopar:Npn \fp_gdiv:Nn { \__fp_mul:NNNn \fp_gset:Nn / } -\cs_new_protected_nopar:Npn \fp_pow:Nn { \__fp_mul:NNNn \fp_set:Nn ^ } -\cs_new_protected_nopar:Npn \fp_gpow:Nn { \__fp_mul:NNNn \fp_gset:Nn ^ } -\cs_new_protected:Npn \__fp_mul:NNNn #1#2#3#4 - { #1 #3 { #3 #2 \__fp_parse:n {#4} } } -\cs_generate_variant:Nn \fp_mul:Nn { c } -\cs_generate_variant:Nn \fp_gmul:Nn { c } -\cs_generate_variant:Nn \fp_div:Nn { c } -\cs_generate_variant:Nn \fp_gdiv:Nn { c } -\cs_generate_variant:Nn \fp_pow:Nn { c } -\cs_generate_variant:Nn \fp_gpow:Nn { c } -\cs_set_protected:Npn \__fp_tmp:w #1#2#3#4#5 - { - \cs_new_protected_nopar:Npn #1 { #5 {#4} \tl_set_eq:NN #3 } - \cs_new_protected_nopar:Npn #2 { #5 {#4} \tl_gset_eq:NN #3 } - \cs_generate_variant:Nn #1 { c } - \cs_generate_variant:Nn #2 { c } - } -\__fp_tmp:w \fp_exp:Nn \fp_gexp:Nn \__fp_exp_o:w {exp} \__fp_assign_to:nNNNn -\__fp_tmp:w \fp_ln:Nn \fp_gln:Nn \__fp_ln_o:w {ln } \__fp_assign_to:nNNNn -\__fp_tmp:w \fp_sin:Nn \fp_gsin:Nn \__fp_sin_o:w {sin} \__fp_assign_to:nNNNn -\__fp_tmp:w \fp_cos:Nn \fp_gcos:Nn \__fp_cos_o:w {cos} \__fp_assign_to:nNNNn -\__fp_tmp:w \fp_tan:Nn \fp_gtan:Nn \__fp_tan_o:w {tan} \__fp_assign_to:nNNNn -\cs_new_protected:Npn \__fp_assign_to:nNNNn #1#2#3#4#5 - { - \exp_after:wN \__fp_assign_to_i:wNNNn - \tex_romannumeral:D -`0 \__fp_parse:n {#5} {#1} #2#3#4 - } -\cs_new_protected:Npn \__fp_assign_to_i:wNNNn \s__fp \__fp_chk:w #1#2#3; #4 - { - \exp_args:Nc \__fp_assign_to_ii:NnNNN - { c__fp_ #4 [ #1 # 2 \if_meaning:w 1 #1 #3 \fi: ] _fp } - { #1#2#3 } - } -\cs_new_protected:Npn \__fp_assign_to_ii:NnNNN #1#2#3#4#5 - { - \cs_if_exist:NF #1 - { \tl_const:Nx #1 { #4 \s__fp \__fp_chk:w #2; } } - #3 #5 #1 - } -\cs_new_protected_nopar:Npn \fp_compare:NNNTF { \fp_compare:nNnTF } -\cs_new_protected_nopar:Npn \fp_compare:NNNT { \fp_compare:nNnT } -\cs_new_protected_nopar:Npn \fp_compare:NNNF { \fp_compare:nNnF } -\cs_new_protected_nopar:Npn \fp_round_places:Nn - { \__fp_round_places:NNn \tl_set:Nx } -\cs_new_protected_nopar:Npn \fp_ground_places:Nn - { \__fp_round_places:NNn \tl_gset:Nx } -\cs_new_protected:Npn \__fp_round_places:NNn #1#2#3 - { - #1 #2 - { - \exp_after:wN \exp_after:wN - \exp_after:wN \__fp_round:Nwn - \exp_after:wN \exp_after:wN - \exp_after:wN \__fp_round_to_nearest:NNN - \exp_after:wN #2 - \exp_after:wN { \int_use:N \__int_eval:w #3 } - } - } -\cs_generate_variant:Nn \fp_round_places:Nn { c } -\cs_generate_variant:Nn \fp_ground_places:Nn { c } -\cs_new_protected:Npn \fp_round_figures:Nn #1#2 - { - \__fp_round_places:NNn \tl_set:Nx #1 - { #2 - \exp_after:wN \__fp_exponent:w #1 } - } -\cs_new_protected:Npn \fp_ground_figures:Nn #1#2 - { - \__fp_round_places:NNn \tl_gset:Nx #1 - { #2 - \exp_after:wN \__fp_exponent:w #1 } - } -\cs_generate_variant:Nn \fp_round_figures:Nn { c } -\cs_generate_variant:Nn \fp_ground_figures:Nn { c } %% File: l3box.dtx Copyright (C) 2005-2014 The LaTeX3 Project %% %% It may be distributed and/or modified under the conditions of the @@ -14527,7 +14420,7 @@ %% prior consultation with the LaTeX3 Project. %% %% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3box.dtx 4728 2014-05-04 13:25:37Z joseph $ +\GetIdInfo$Id: l3box.dtx 4974 2014-05-31 18:28:43Z mittelba $ {L3 Experimental boxes} \cs_new_protected:Npn \box_new:N #1 { @@ -14771,7 +14664,7 @@ %% %% ----------------------------------------------------------------------- %% -\GetIdInfo$Id: l3coffins.dtx 4728 2014-05-04 13:25:37Z joseph $ +\GetIdInfo$Id: l3coffins.dtx 4899 2014-05-28 20:13:51Z joseph $ {L3 Coffin code layer} \box_new:N \l__coffin_internal_box \dim_new:N \l__coffin_internal_dim @@ -15540,7 +15433,7 @@ \__msg_kernel_new:nnnn { kernel } { no-pole-intersection } { No~intersection~between~coffin~poles. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl LaTeX~was~asked~to~find~the~intersection~between~two~poles,~ but~they~do~not~have~a~unique~meeting~point:~ the~value~(0~pt,~0~pt)~will~be~used. @@ -15551,7 +15444,7 @@ \__msg_kernel_new:nnnn { kernel } { unknown-coffin-pole } { Pole~'#1'~unknown~for~coffin~'#2'. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl LaTeX~was~asked~to~find~a~typesetting~pole~for~a~coffin,~ but~either~the~coffin~does~not~exist~or~the~pole~name~is~wrong. } @@ -15617,174 +15510,6 @@ { \cs_set_protected_nopar:Npn \color_ensure_current: { \set@color } } } } -%% File: l3luatex.dtx Copyright (C) 2010-2014 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. -%% -%% ----------------------------------------------------------------------- -\GetIdInfo$Id: l3luatex.dtx 4712 2014-04-30 08:17:49Z joseph $ - {L3 Experimental LuaTeX-specific functions} -\luatex_if_engine:TF - { - \cs_new_eq:NN \lua_now_x:n \luatex_directlua:D - \cs_new_eq:NN \lua_shipout_x:n \luatex_latelua:D - } - { - \cs_new:Npn \lua_now_x:n #1 - { - \__msg_kernel_expandable_error:nnn - { kernel } { bad-engine } { \lua_now_x:n } - } - \cs_new_protected:Npn \lua_shipout_x:n #1 - { - \__msg_kernel_expandable_error:nnn - { kernel } { bad-engine } { \lua_shipout_x:n } - } - } -\cs_generate_variant:Nn \lua_now_x:n { x } -\cs_new:Npn \lua_now:n #1 - { \lua_now_x:n { \exp_not:n {#1} } } -\cs_generate_variant:Nn \lua_now:n { x } -\cs_generate_variant:Nn \lua_shipout_x:n { x } -\cs_new_protected:Npn \lua_shipout:n #1 - { \lua_shipout_x:n { \exp_not:n {#1} } } -\cs_generate_variant:Nn \lua_shipout:n { x } -\int_new:N \g__cctab_allocate_int -\int_set:Nn \g__cctab_allocate_int { \c_minus_one } -\int_new:N \g__cctab_stack_int -\seq_new:N \g__cctab_stack_seq -\cs_new_protected:Npn \cctab_new:N #1 - { - \__chk_if_free_cs:N #1 - \int_gadd:Nn \g__cctab_allocate_int { \c_two } - \int_compare:nNnTF - \g__cctab_allocate_int < { \c_max_register_int + \c_one } - { - \tex_global:D \tex_chardef:D #1 \g__cctab_allocate_int - \luatex_initcatcodetable:D #1 - } - { \__msg_kernel_fatal:nnx { kernel } { out-of-registers } { cctab } } - } -\luatex_if_engine:F - { - \cs_set_protected:Npn \cctab_new:N #1 - { - \__msg_kernel_error:nnx { kernel } { bad-engine } - { \exp_not:N \cctab_new:N } - } - } -\luatex_if_engine:T - { - \cs_set_protected:Npn \cctab_new:N #1 - { - \__chk_if_free_cs:N #1 - \newcatcodetable #1 - \luatex_initcatcodetable:D #1 - } - } -\cs_new_protected:Npn \cctab_begin:N #1 - { - \seq_gpush:Nx \g__cctab_stack_seq { \tex_the:D \luatex_catcodetable:D } - \luatex_catcodetable:D #1 - \int_gadd:Nn \g__cctab_stack_int { \c_two } - \int_compare:nNnT \g__cctab_stack_int > \c_max_register_int - { \__msg_kernel_fatal:nn { kernel } { cctab-stack-full } } - \luatex_savecatcodetable:D \g__cctab_stack_int - \luatex_catcodetable:D \g__cctab_stack_int - } -\cs_new_protected_nopar:Npn \cctab_end: - { - \int_gsub:Nn \g__cctab_stack_int { \c_two } - \seq_if_empty:NTF \g__cctab_stack_seq - { \tl_set:Nn \l__cctab_internal_tl { 0 } } - { \seq_gpop:NN \g__cctab_stack_seq \l__cctab_internal_tl } - \luatex_catcodetable:D \l__cctab_internal_tl \scan_stop: - } -\luatex_if_engine:F - { - \cs_set_protected:Npn \cctab_begin:N #1 - { - \__msg_kernel_error:nnxx { kernel } { bad-engine } - { \exp_not:N \cctab_begin:N } {#1} - } - \cs_set_protected_nopar:Npn \cctab_end: - { - \__msg_kernel_error:nnx { kernel } { bad-engine } - { \exp_not:N \cctab_end: } - } - } -\luatex_if_engine:T - { - \cs_set_protected:Npn \cctab_begin:N #1 { \BeginCatcodeRegime #1 } - \cs_set_protected_nopar:Npn \cctab_end: { \EndCatcodeRegime } - } -\tl_new:N \l__cctab_internal_tl -\cs_new_protected:Npn \cctab_gset:Nn #1#2 - { - \group_begin: - #2 - \luatex_savecatcodetable:D #1 - \group_end: - } -\luatex_if_engine:F - { - \cs_set_protected:Npn \cctab_gset:Nn #1#2 - { - \__msg_kernel_error:nnxx { kernel } { bad-engine } - { \exp_not:N \cctab_gset:Nn } { #1 {#2} } - } - } -\luatex_if_engine:T - { - \cctab_new:N \c_code_cctab - \cctab_gset:Nn \c_code_cctab { } - } -\luatex_if_engine:T - { - \cs_new_eq:NN \c_document_cctab \CatcodeTableLaTeX - \cs_new_eq:NN \c_initex_cctab \CatcodeTableIniTeX - \cs_new_eq:NN \c_other_cctab \CatcodeTableOther - \cs_new_eq:NN \c_str_cctab \CatcodeTableString - } -\__msg_kernel_new:nnnn { kernel } { bad-engine } - { LuaTeX~engine~not~in~use!~Ignoring~#1. } - { - The~feature~you~are~using~is~only~available~ - with~the~LuaTeX~engine.~LaTeX3~ignored~`#1#2'. - } -\__msg_kernel_new:nnnn { kernel } { cctab-stack-full } - { The~category~code~table~stack~is~exhausted. } - { - LaTeX~has~been~asked~to~switch~to~a~new~category~code~table,~ - but~there~is~no~more~space~to~do~this! - } %% File: l3candidates.dtx Copyright(C) 2012-2014 The LaTeX3 Project %% %% It may be distributed and/or modified under the conditions of the @@ -15818,7 +15543,7 @@ %% %% ----------------------------------------------------------------------- %% -\GetIdInfo$Id: l3candidates.dtx 4734 2014-05-04 21:48:49Z joseph $ +\GetIdInfo$Id: l3candidates.dtx 4972 2014-05-31 16:42:18Z bruno $ {L3 Experimental additions to l3kernel} \fp_new:N \l__box_angle_fp \fp_new:N \l__box_cos_fp @@ -16043,8 +15768,15 @@ \hbox_overlap_right:n { \box_use:N #1 } \__driver_box_scale_end: } - \box_set_ht:Nn \l__box_internal_box { \l__box_top_new_dim } - \box_set_dp:Nn \l__box_internal_box { \l__box_bottom_new_dim } + \fp_compare:nNnTF \l__box_scale_y_fp > \c_zero_fp + { + \box_set_ht:Nn \l__box_internal_box { \l__box_top_new_dim } + \box_set_dp:Nn \l__box_internal_box { -\l__box_bottom_new_dim } + } + { + \box_set_dp:Nn \l__box_internal_box { \l__box_top_new_dim } + \box_set_ht:Nn \l__box_internal_box { -\l__box_bottom_new_dim } + } \fp_compare:nNnTF \l__box_scale_x_fp < \c_zero_fp { \hbox_to_wd:nn { \l__box_right_new_dim } @@ -16669,12 +16401,12 @@ { \dim_to_pt:n { - 1pt * \__dim_to_unit:n { \dim_to_pt:n {#1} pt } - / \__dim_to_unit:n { \dim_to_pt:n {#2} pt } + 1pt * + \dim_ratio:nn + { \dim_to_pt:n {#1} pt } + { \dim_to_pt:n {#2} pt } } } -\cs_new:Npn \__dim_to_unit:n #1 - { \__int_value:w \__dim_eval:w #1 \__dim_eval_end: } \cs_new:Npn \skip_split_finite_else_action:nnNN #1#2#3#4 { \skip_if_finite:nTF {#1} diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex index 5f41e03a2d2..8ec68d04b0c 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex @@ -47,8 +47,8 @@ %% ----------------------------------------------------------------------- \def\ExplFileName{expl3} \def\ExplFileDescription{L3 programming layer} -\def\ExplFileDate{2014/05/20} -\def\ExplFileVersion{4814} +\def\ExplFileDate{2014/06/10} +\def\ExplFileVersion{5105} \let\ExplLoaderFileVersion\ExplFileVersion \begingroup \def\tempa{LaTeX2e} @@ -116,11 +116,13 @@ \xetex_if_engine:TF { xdvipdfmx } { - \ifpdf - pdfmode - \else - dvips - \fi + \bool_if:nTF + { + \cs_if_exist_p:N \pdftex_pdfoutput:D + && \int_compare_p:nNn \pdftex_pdfoutput:D > \c_zero + } + { pdfmode } + { dvips } } .def \scan_stop: \cs_undefine:N \ProvidesExplFile diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty index 1b25d6f4498..433b3fe9cad 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty @@ -47,15 +47,14 @@ %% ----------------------------------------------------------------------- \def\ExplFileName{expl3} \def\ExplFileDescription{L3 programming layer} -\def\ExplFileDate{2014/05/20} -\def\ExplFileVersion{4814} +\def\ExplFileDate{2014/06/10} +\def\ExplFileVersion{5105} \let\ExplLoaderFileVersion\ExplFileVersion \ProvidesPackage{\ExplFileName} [% \ExplFileDate\space v\ExplFileVersion\space \ExplFileDescription\space (loader) ] -\RequirePackage{ifpdf} \newcommand\expl@create@bool@option[2]% {% \DeclareOption{#1}{\chardef #2=1 }% @@ -109,19 +108,35 @@ active~engine.~LaTeX3~will~use~the~'#2'~driver~instead. } \tl_new:N \l__expl_driver_tl +\bool_if:nTF + { + \cs_if_exist_p:N \pdftex_pdfoutput:D + && \int_compare_p:nNn \pdftex_pdfoutput:D > \c_zero + } + { + \cs_new_eq:NN \__expl_if_pdf:T \use:n + \cs_new_eq:NN \__expl_if_pdf:F \use_none:n + \cs_new_eq:NN \__expl_if_pdf:TF \use_i:nn + } + { + \cs_new_eq:NN \__expl_if_pdf:T \use_none:n + \cs_new_eq:NN \__expl_if_pdf:F \use:n + \cs_new_eq:NN \__expl_if_pdf:TF \use_ii:nn + } \keys_define:nn { expl } { driver .choice:, driver / auto .code:n = { - \xetex_if_engine:TF - { \tl_set:Nn \l__expl_driver_tl { xdvipdfmx } } + \tl_set:Nx \l__expl_driver_tl { - \ifpdf - \tl_set:Nn \l__expl_driver_tl { pdfmode } - \else - \tl_set:Nn \l__expl_driver_tl { dvips } - \fi + \xetex_if_engine:TF + { xdvipdfmx } + { + \__expl_if_pdf:TF + { pdfmode } + { dvips } + } } }, driver / dvipdfmx .code:n = @@ -131,14 +146,15 @@ { \__msg_kernel_error:nnnn { expl } { wrong-driver } { dvipdfmx } { xdvipdfmx } - \tl_set:Nn \l__expl_driver_tl { xdvipdmx } + \tl_set:Nn \l__expl_driver_tl { xdvipdfmx } } { - \ifpdf - \__msg_kernel_error:nnnn { expl } { wrong-driver } - { dvipdfmx } { pdfmode } - \tl_set:Nn \l__expl_driver_tl { pdfmode } - \fi + \__expl_if_pdf:T + { + \__msg_kernel_error:nnnn { expl } { wrong-driver } + { dvipdfmx } { pdfmode } + \tl_set:Nn \l__expl_driver_tl { pdfmode } + } } }, driver / dvips .code:n = @@ -151,11 +167,12 @@ \tl_set:Nn \l__expl_driver_tl { xdvipdfmx } } { - \ifpdf - \__msg_kernel_error:nnnn { expl } { wrong-driver } - { dvips } { pdfmode } - \tl_set:Nn \l__expl_driver_tl { pdfmode } - \fi + \__expl_if_pdf:T + { + \__msg_kernel_error:nnnn { expl } { wrong-driver } + { dvips } { pdfmode } + \tl_set:Nn \l__expl_driver_tl { pdfmode } + } } }, driver / latex2e .code:n = @@ -170,12 +187,12 @@ \tl_set:Nn \l__expl_driver_tl { xdvipdfmx } } { - \ifpdf - \else - \__msg_kernel_error:nnnn { expl } { wrong-driver } - { pdfmode } { dvips } - \tl_set:Nn \l__expl_driver_tl { dvips } - \fi + \__expl_if_pdf:F + { + \__msg_kernel_error:nnnn { expl } { wrong-driver } + { pdfmode } { dvips } + \tl_set:Nn \l__expl_driver_tl { dvips } + } } }, driver / xdvipdfmx .code:n = @@ -183,18 +200,20 @@ \tl_set:Nn \l__expl_driver_tl { xdvipdfmx } \xetex_if_engine:F { - \ifpdf - \__msg_kernel_error:nnnn { expl } { wrong-driver } - { xdvipdfmx } { pdfmode } - \tl_set:Nn \l__expl_driver_tl { pdfmode } - \else - \__msg_kernel_error:nnnn { expl } { wrong-driver } - { xdvipdfmx } { dvips } - \tl_set:Nn \l__expl_driver_tl { dvips } - \fi + \__expl_if_pdf:TF + { + \__msg_kernel_error:nnnn { expl } { wrong-driver } + { xdvipdfmx } { pdfmode } + \tl_set:Nn \l__expl_driver_tl { pdfmode } + } + { + \__msg_kernel_error:nnnn { expl } { wrong-driver } + { xdvipdfmx } { dvips } + \tl_set:Nn \l__expl_driver_tl { dvips } + } } }, - driver .initial:n = { latex2e } , + driver .initial:n = { auto } , native-drivers .choice:, native-drivers .default:n = { true }, native-drivers / false .meta:n = { driver = latex2e }, @@ -259,8 +278,17 @@ } } { - \cs_set_protected:Npn \ProvidesExplFile #1#2#3#4 - { \ProvidesFile {#1} [ #2~v#3~#4 ] } + \cs_set_protected:Npn \ProvidesExplFile + { + \group_begin: + \char_set_catcode_space:n { `\ } + \ProvidesExplFileAux + } + \cs_set_protected:Npn \ProvidesExplFileAux #1#2#3#4 + { + \group_end: + \ProvidesFile {#1} [ #2~v#3~#4 ] + } \tl_const:Nn \c__expl_def_ext_tl { def } \@onefilewithoptions { l3 \l__expl_driver_tl } [ ] [ ] \c__expl_def_ext_tl \cs_set_protected:Npn \ProvidesExplFile #1#2#3#4 @@ -268,6 +296,7 @@ \ProvidesFile {#1} [ #2~v#3~#4 ] \ExplSyntaxOn } + \cs_undefine:N \ProvidesExplFileAux } \tl_put_left:Nn \@pushfilename { diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls b/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls index 87772eedfb7..a4573ca67cd 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls +++ b/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls @@ -4,8 +4,7 @@ %% %% The original source files were: %% -%% l3doc.dtx (with options: `class,cfg') -%% +%% l3doc.dtx (with options: `class') %% %% EXPERIMENTAL CODE %% @@ -14,7 +13,6 @@ %% %% Do not distribute a modified version of this file. %% -%% %% File: l3doc.dtx Copyright (C) 1990-2014 The LaTeX3 project %% %% It may be distributed and/or modified under the conditions of the @@ -1460,51 +1458,6 @@ \DisableCrossrefs \OnlyDescription } -\tl_new:N \Team -\tl_set:Nn \Team - { - The~\LaTeX3~Project\thanks - { - Frank~Mittelbach,~Denys~Duchier,~Chris~Rowley,~ - Rainer~Sch\"opf,~Johannes~Braams,~Michael~Downes,~ - David~Carlisle,~Alan~Jeffrey,~Morten~H\o{}gholm,~Thomas~Lotze,~ - Javier~Bezos,~Will~Robertson,~Joseph~Wright,~Bruno~Le~Floch - } - } -\NewDocumentCommand{\ExplMakeTitle}{mm} - { - \title - { - The~\pkg{#1}~package \\ #2 - \thanks - { - This~file~describes~v\ExplFileVersion,~ - last~revised~\ExplFileDate. - } - } - \author - { - The~\LaTeX3~Project\thanks{E-mail:~ - \href{mailto:latex-l@listserv.uni-heidelberg.de} - {latex-l@listserv.uni-heidelberg.de}} - } - \date{Released~\ExplFileDate} - \maketitle - } -\DeclareDocumentCommand\ie{}{\emph{i.e.}} -\DeclareDocumentCommand\eg{}{\emph{e.g.}} -\DeclareDocumentCommand\Ie{}{\emph{I.e.}} -\DeclareDocumentCommand\Eg{}{\emph{E.g.}} -\AtBeginDocument - { - \clist_map_inline:nn - { - asin, acos, atan, acot, - asinh, acosh, atanh, acoth, round, floor, ceil - } - { \exp_args:Nc \DeclareMathOperator{#1}{#1} } - } -\NewDocumentCommand { \nan } { } { \text { \texttt { nan } } } %% %% %% End of file `l3doc.cls'. diff --git a/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty b/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty index 6d5daa9410e..5d25a40764b 100644 --- a/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty +++ b/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty @@ -46,8 +46,8 @@ %% %% ----------------------------------------------------------------------- %% -\RequirePackage{expl3}[2014/05/05] -\@ifpackagelater{expl3}{2014/05/05} +\RequirePackage{expl3}[2014/06/10] +\@ifpackagelater{expl3}{2014/06/10} {} {% \PackageError{l3keys2e}{Support package l3kernel too old} @@ -59,7 +59,7 @@ }% \endinput } -\GetIdInfo$Id: l3keys2e.dtx 4740 2014-05-05 14:04:24Z joseph $ +\GetIdInfo$Id: l3keys2e.dtx 5105 2014-06-10 07:28:49Z joseph $ {LaTeX2e option processing using LaTeX3 keys} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} diff --git a/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty b/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty index beae464378c..ab63198a913 100644 --- a/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty +++ b/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty @@ -50,8 +50,8 @@ %% %% ----------------------------------------------------------------------- %% -\RequirePackage{expl3}[2014/05/05] -\@ifpackagelater{expl3}{2014/05/05} +\RequirePackage{expl3}[2014/06/10] +\@ifpackagelater{expl3}{2014/06/10} {} {% \PackageError{xparse}{Support package l3kernel too old} @@ -63,7 +63,7 @@ }% \endinput } -\GetIdInfo$Id: xparse.dtx 4740 2014-05-05 14:04:24Z joseph $ +\GetIdInfo$Id: xparse.dtx 5105 2014-06-10 07:28:49Z joseph $ {L3 Experimental document command parser} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} @@ -1394,7 +1394,7 @@ \__msg_kernel_new:nnnn { xparse } { bad-arg-spec } { Bad~argument~specification~'#1'. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl The~argument~specification~provided~was~not~valid:~ one~or~more~mandatory~pieces~of~information~were~missing. \\ \\ LaTeX~will~ignore~this~entire~definition. @@ -1445,7 +1445,7 @@ Argument~specification~for~expandable~command~ends~with~optional~argument. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl Expandable~commands~must~have~a~final~mandatory~argument~ (or~no~arguments~at~all).~You~cannot~have~a~terminal~optional~ argument~with~expandable~commands. @@ -1453,14 +1453,14 @@ \__msg_kernel_new:nnnn { xparse } { inconsistent-long } { Inconsistent~long~arguments~for~expandable~command. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl The~arguments~for~an~expandable~command~must~either~all~be~ short~or~all~be~long.~You~have~tried~to~mix~the~two~types. } \__msg_kernel_new:nnnn { xparse } { invalid-expandable-argument-type } { Argument~type~'#1'~not~available~for~an~expandable~function. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl The~letter~'#1'~does~not~specify~an~argument~type~which~can~be~used~ in~an~expandable~function. \\ \\ @@ -1476,7 +1476,7 @@ \__msg_kernel_new:nnnn { xparse } { not-single-token } { Argument~delimiter~should~be~a~single~token:~'#1'. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl The~argument~specification~provided~was~not~valid:~ in~a~place~where~a~single~token~is~required,~LaTeX~found~'#1'. \\ \\ LaTeX~will~ignore~this~entire~definition. @@ -1484,7 +1484,7 @@ \__msg_kernel_new:nnnn { xparse } { processor-in-expandable } { Argument~processors~cannot~be~used~with~expandable~functions. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl The~argument~specification~for~#1~contains~a~processor~function:~ this~is~only~supported~for~standard~robust~functions. } @@ -1498,7 +1498,7 @@ \__msg_kernel_new:nnnn { xparse } { unknown-argument-type } { Unknown~argument~type~'#1'~replaced~by~'m'. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl The~letter~'#1'~does~not~specify~a~known~argument~type.~ LaTeX~will~assume~you~want~a~standard~mandatory~argument~(type~'m'). } diff --git a/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty b/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty index 499b870ecf6..9c98f54dcf1 100644 --- a/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty +++ b/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty @@ -50,8 +50,8 @@ %% %% ----------------------------------------------------------------------- %% -\RequirePackage{expl3}[2014/05/05] -\@ifpackagelater{expl3}{2014/05/05} +\RequirePackage{expl3}[2014/06/10] +\@ifpackagelater{expl3}{2014/06/10} {} {% \PackageError{xtemplate}{Support package l3kernel too old} @@ -63,7 +63,7 @@ }% \endinput } -\GetIdInfo$Id: xtemplate.dtx 4740 2014-05-05 14:04:24Z joseph $ +\GetIdInfo$Id: xtemplate.dtx 5105 2014-06-10 07:28:49Z joseph $ {L3 Experimental prototype document functions} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} @@ -1136,7 +1136,7 @@ \msg_new:nnnn { xtemplate } { argument-number-mismatch } { Object~type~'#1'~takes~#2~argument(s). } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl Objects~of~type~'#1'~require~#2~argument(s).\\ You~have~tried~to~make~a~template~for~'#1'~ with~#3~argument(s),~which~is~not~possible:~ @@ -1145,7 +1145,7 @@ \msg_new:nnnn { xtemplate } { bad-number-of-arguments } { Bad~number~of~arguments~for~object~type~'#1'. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl An~object~may~accept~between~0~and~9~arguments.\\ You~asked~to~use~#2~arguments:~this~is~not~supported. } @@ -1167,7 +1167,7 @@ \msg_new:nnnn { xtemplate } { choice-no-code } { The~choice~'#1'~requires~implementation~details. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl When~creating~template~code~using~\DeclareTemplateCode,~ each~choice~name~must~have~an~associated~implementation.\\ This~should~be~given~after~a~'='~sign:~LaTeX~did~not~find~one. @@ -1175,7 +1175,7 @@ \msg_new:nnnn { xtemplate } { duplicate-key-interface } { Key~'#1'~appears~twice~in~interface~definition~\msg_line_context:. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl Each~key~can~only~have~one~interface~declared~in~a~template.\\ LaTeX~found~two~interfaces~for~'#1'. } @@ -1189,7 +1189,7 @@ \msg_new:nnnn { xtemplate } { invalid-keytype } { The~key~'#1'~is~missing~a~key-type~\msg_line_context:. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl Each~key~in~a~template~requires~a~key-type,~given~in~the~form:\\ \ \ ~:~\\ LaTeX~could~not~find~a~~in~your~input. @@ -1197,7 +1197,7 @@ \msg_new:nnnn { xtemplate } { key-no-value } { The~key~'#1'~has~no~value~\msg_line_context:. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl When~creating~an~instance~of~a~template~ every~key~listed~must~include~a~value:\\ \ \ ~=~ @@ -1205,7 +1205,7 @@ \msg_new:nnnn { xtemplate } { key-no-variable } { The~key~'#1'~requires~implementation~details~\msg_line_context:. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl When~creating~template~code~using~\DeclareTemplateCode,~ each~key~name~must~have~an~associated~implementation.\\ This~should~be~given~after~a~'='~sign:~LaTeX~did~not~find~one. @@ -1213,7 +1213,7 @@ \msg_new:nnnn { xtemplate } { key-not-implemented } { Key~'#1'~has~no~implementation~\msg_line_context:. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl The~definition~of~key~implementations~for~template~'#2'~ of~object~type~'#3'~does~not~include~any~details~for~key~'#1'.\\ The~key~was~declared~in~the~interface~definition,~ @@ -1222,7 +1222,7 @@ \msg_new:nnnn { xtemplate } { missing-keytype } { The~key~'#1'~is missing~a~key-type~\msg_line_context:. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl Key~interface~definitions~should~be~of~the~form\\ \ \ #1~:~\\ but~LaTeX~could~not~find~a~. @@ -1233,7 +1233,7 @@ or~has~no~implementation. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl There~is~no~code~available~for~the~template~name~given.\\ This~should~be~given~using~\DeclareTemplateCode. } @@ -1271,14 +1271,14 @@ \msg_new:nnnn { xtemplate } { unknown-key } { Unknown~template~key~'#1'. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl The~key~'#1'~was~not~declared~in~the~interface~ for~the~current~template. } \msg_new:nnnn { xtemplate } { unknown-keytype } { The~key-type~'#1'~is~unknown. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl Valid~key-types~are:\\ -~boolean;\\ -~choice;\\ @@ -1296,7 +1296,7 @@ \msg_new:nnnn { xtemplate } { unknown-object-type } { The~object~type~'#1'~is~unknown. } { - \c_msg_coding_error_text_tl + \c__msg_coding_error_text_tl An~object~type~needs~to~be~declared~with~\DeclareObjectType prior~to~using~it. } -- cgit v1.2.3