summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/l3kernel
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2011-08-18 23:12:56 +0000
committerKarl Berry <karl@freefriends.org>2011-08-18 23:12:56 +0000
commiteae5d19d439ded67f5535d315a8983939733b548 (patch)
tree4a9013282bd26875540c662fbde8bd49b28b6f51 /Master/texmf-dist/source/latex/l3kernel
parent9e6c3db576f3908b80eb70d378aca43a22c043b1 (diff)
l3kernel 2607 (17aug11)
git-svn-id: svn://tug.org/texlive/trunk@23596 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/l3kernel')
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/expl3.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3.ins68
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3box.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3doc.dtx10
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3format.ins72
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3int.dtx150
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3io.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3keys.dtx14
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3keyval.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3msg.dtx67
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3prg.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3seq.dtx80
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3tl.dtx95
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3token.dtx51
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3toks.dtx4
15 files changed, 494 insertions, 143 deletions
diff --git a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
index 48ef3aa0a54..6de2ed0c0d2 100644
--- a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
@@ -37,8 +37,8 @@
\RequirePackage{l3names}
\def\ExplFileName{expl3}
\def\ExplFileDescription{L3 Experimental code bundle wrapper}
-\def\ExplFileDate{2011/08/13}
-\def\ExplFileVersion{2564}
+\def\ExplFileDate{2011/08/17}
+\def\ExplFileVersion{2607}
%</driver|package>
%<*driver>
\documentclass[full]{l3doc}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3.ins b/Master/texmf-dist/source/latex/l3kernel/l3.ins
new file mode 100644
index 00000000000..9b28c54f15e
--- /dev/null
+++ b/Master/texmf-dist/source/latex/l3kernel/l3.ins
@@ -0,0 +1,68 @@
+\iffalse meta-comment
+
+File l3.ins Copyright (C) 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 "expl3 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
+
+\input docstrip.tex
+\askforoverwritefalse
+
+\preamble
+
+EXPERIMENTAL CODE
+
+Do not distribute this file without also distributing the
+source files specified above.
+
+Do not distribute a modified version of this file.
+
+\endpreamble
+% stop docstrip adding \endinput
+\postamble
+\endpostamble
+
+\keepsilent
+
+% ===== PACKAGE ONLY ======
+\generate{\file{expl3.sty} {\from{expl3.dtx} {package}}}
+% ========================
+\generate{\file{l3bootstrap.sty}{\from{l3bootstrap.dtx}{package}}}
+\generate{\file{l3names.sty} {\from{l3names.dtx} {package}}}
+\generate{\file{l3basics.sty} {\from{l3basics.dtx} {package}}}
+\generate{\file{l3expan.sty} {\from{l3expan.dtx} {package}}}
+\generate{\file{l3tl.sty} {\from{l3tl.dtx} {package}}}
+\generate{\file{l3seq.sty} {\from{l3seq.dtx} {package}}}
+\generate{\file{l3int.sty} {\from{l3int.dtx} {package}}}
+\generate{\file{l3quark.sty} {\from{l3quark.dtx} {package}}}
+\generate{\file{l3prg.sty} {\from{l3prg.dtx} {package}}}
+\generate{\file{l3clist.sty} {\from{l3clist.dtx} {package}}}
+\generate{\file{l3token.sty} {\from{l3token.dtx} {package}}}
+\generate{\file{l3prop.sty} {\from{l3prop.dtx} {package}}}
+\generate{\file{l3msg.sty} {\from{l3msg.dtx} {package}}}
+\generate{\file{l3io.sty} {\from{l3io.dtx} {package}}}
+\generate{\file{l3file.sty} {\from{l3file.dtx} {package}}}
+\generate{\file{l3skip.sty} {\from{l3skip.dtx} {package}}}
+\generate{\file{l3box.sty} {\from{l3box.dtx} {package}}}
+\generate{\file{l3keyval.sty} {\from{l3keyval.dtx} {package}}}
+\generate{\file{l3keys.sty} {\from{l3keys.dtx} {package}}}
+\generate{\file{l3fp.sty} {\from{l3fp.dtx} {package}}}
+\generate{\file{l3luatex.sty} {\from{l3luatex.dtx} {package}}}
+
+\generate{\file{l3doc.cls} {\from{l3doc.dtx} {class}}}
+\generate{\file{l3doc.ist} {\from{l3doc.dtx} {docist}}}
+
+\generate{\file{l3toks.sty} {\from{l3toks.dtx} {package}}}
+
+\endbatchfile
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
index 85313ce8791..c2fb953d45b 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3names}
-\GetIdInfo$Id: l3box.dtx 2526 2011-08-09 08:58:42Z joseph $
+\GetIdInfo$Id: l3box.dtx 2595 2011-08-16 00:58:34Z bruno $
{L3 Experimental boxes}
%</driver|package>
%<*driver>
@@ -528,7 +528,7 @@
%
% \begin{function}{\vbox_to_ht:nn}
% \begin{syntax}
-% \cs{vbox_to_ht:n} \Arg{contents} \Arg{dimexpr}
+% \cs{vbox_to_ht:nn} \Arg{dimexpr} \Arg{contents}
% \end{syntax}
% Typesets the \meta{contents} into a vertical box of height
% \meta{dimexpr} and then includes this box in the current list for
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx b/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
index e3dd82e210e..ed8f421b259 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
@@ -78,7 +78,7 @@ Do not distribute a modified version of this file.
% \end{macrocode}
%
%<*driver|class>
-\GetIdInfo$Id: l3doc.dtx 2540 2011-08-10 23:39:33Z bruno $
+\GetIdInfo$Id: l3doc.dtx 2601 2011-08-16 23:20:27Z bruno $
{L3 Experimental documentation class}
%</driver|class>
%
@@ -955,8 +955,8 @@ Do not distribute a modified version of this file.
$\star$
}
\tl_set:Nx \g_doc_macro_tl { \tl_to_str:N \g_doc_macro_tl }
- \exp_args:NNf \tl_replace_all_in:Nnn \g_doc_macro_tl {\token_to_str:N _} {/}
- \exp_args:NNf \tl_replace_all_in:Nnn \g_doc_macro_tl {\@backslashchar} {}
+ \exp_args:NNf \tl_replace_all:Nnn \g_doc_macro_tl {\token_to_str:N _} {/}
+ \exp_args:NNf \tl_replace_all:Nnn \g_doc_macro_tl {\@backslashchar} {}
\bool_if:NT \g_doc_full_bool {
\exp_args:Nf\label{doc/function/\g_doc_macro_tl#3#2}
}
@@ -1146,8 +1146,8 @@ Do not distribute a modified version of this file.
\bool_if:NF \l_doc_macro_aux_bool {
\tl_gset:Nx \l_doc_macro_tl { \tl_to_str:n {#1} }
- \exp_args:NNf \tl_greplace_all_in:Nnn \l_doc_macro_tl {\token_to_str:N _} {/}
- \exp_args:NNf \tl_greplace_all_in:Nnn \l_doc_macro_tl {\@backslashchar} {}
+ \exp_args:NNf \tl_greplace_all:Nnn \l_doc_macro_tl {\token_to_str:N _} {/}
+ \exp_args:NNf \tl_greplace_all:Nnn \l_doc_macro_tl {\@backslashchar} {}
}
\use:x {
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..562695271fa
--- /dev/null
+++ b/Master/texmf-dist/source/latex/l3kernel/l3format.ins
@@ -0,0 +1,72 @@
+\iffalse meta-comment
+
+File l3format.ins Copyright (C) 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 "expl3 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
+
+\input docstrip.tex
+\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{l3io.dtx} {initex}
+ \from{l3file.dtx} {initex}
+ \from{l3skip.dtx} {initex}
+ \from{l3box.dtx} {initex}
+ \from{l3keyval.dtx} {initex}
+ \from{l3keys.dtx} {initex}
+ \from{l3fp.dtx} {initex}
+ \from{l3luatex.dtx} {initex}
+ % ===== FORMAT ONLY ======
+ \from{l3final.dtx} {initex}
+ % ========================
+ }
+ }
+
+\endbatchfile \ No newline at end of file
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
index 89695862b2f..0719e0e86df 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3names}
-\GetIdInfo$Id: l3int.dtx 2551 2011-08-11 22:40:53Z bruno $
+\GetIdInfo$Id: l3int.dtx 2600 2011-08-16 22:31:24Z bruno $
{L3 Experimental integers}
%</driver|package>
%<*driver>
@@ -631,16 +631,6 @@
% with category code $11$ (letter).
% \end{function}
%
-% \begin{function}[EXP]{\int_to_symbol:n}
-% \begin{syntax}
-% \cs{int_to_symbol:n} \Arg{integer expression}
-% \end{syntax}
-% Calculates the value of the \meta{integer expression} and places
-% the symbol representation of the result in the input stream. The
-% list of symbols used is equivalent to \LaTeXe{}'s \cs{@fnsymbol}
-% set.
-% \end{function}
-%
% \section{Converting from other formats to integers}
%
% \begin{function}[EXP]{\int_from_alph:n}
@@ -1613,89 +1603,95 @@
%
% \begin{macro}{\int_to_base:nn}
% \UnitTested
-% \begin{macro}[aux]{\int_to_base_aux:nnn}
+% \begin{macro}[aux]{\int_to_base_aux_i:nn,
+% \int_to_base_aux_ii:nnN,\int_to_base_aux_iii:nnnN}
% \begin{macro}[int]{\int_to_letter:n}
% \UnitTested
% Converting from base ten (|#1|) to a second base (|#2|) starts with
-% a simple sign check. As the input is base $10$ \TeX{} can then
-% do the actual work with the sign itself.
+% computing |#1|: if it is a complicated calculation, we shouldn't
+% perform it twice. Then check the sign, store it, either \texttt{-}
+% or \cs{c_empty_tl}, and feed the absolute value to the next auxiliary
+% function.
% \begin{macrocode}
-\cs_new:Npn \int_to_base:nn #1#2
+\cs_new:Npn \int_to_base:nn #1
+ { \exp_args:Nf \int_to_base_aux_i:nn { \int_eval:n {#1} } }
+\cs_new:Npn \int_to_base_aux_i:nn #1#2
{
\int_compare:nNnTF {#1} < \c_zero
- {
- -
- \exp_args:Nnf \int_to_base_aux:nnn
- { } { \int_eval:n { 0 - ( #1 ) } } {#2}
- }
- {
- \exp_args:Nnf \int_to_base_aux:nnn
- { } { \int_eval:n {#1} } {#2}
- }
-}
+ { \exp_args:No \int_to_base_aux_ii:nnN { \use_none:n #1 } {#2} - }
+ { \int_to_base_aux_ii:nnN {#1} {#2} \c_empty_tl }
+ }
% \end{macrocode}
% Here, the idea is to provide a recursive system to deal with the
-% input. The output is build up as argument |#1|, which is why it
-% starts off empty in the above. At each pass, the value in |#2| is
-% checked to see if it is less than the new base (|#3|). If it is
-% the it is converted directly and the rest of the output is added in.
+% input. The output is built up after the end of the function.
+% At each pass, the value in |#1| is checked to see if it is less
+% than the new base (|#2|). If it is, then it is converted directly,
+% putting the sign back in front.
% On the other hand, if the value to convert is greater than or equal
% to the new base then the modulus and remainder values are found. The
-% modulus is converted to a symbol and the remainder is carried forward
-% to the next round.
+% modulus is converted to a symbol and put on the right,
+% and the remainder is carried forward to the next round.
% \begin{macrocode}
-\cs_new:Npn \int_to_base_aux:nnn #1#2#3 {
- \int_compare:nNnTF {#2} < {#3}
- {
- \int_to_letter:n {#2}
- #1
- }
- {
- \exp_args:Nff \int_to_base_aux:nnn
- {
- \int_to_letter:n { \int_mod:nn {#2} {#3} }
- #1
- }
- { \int_div_truncate:nn {#2} {#3} }
- {#3}
- }
+\cs_new:Npn \int_to_base_aux_ii:nnN #1#2#3
+ {
+ \int_compare:nNnTF {#1} < {#2}
+ { \exp_last_unbraced:Nf #3 { \int_to_letter:n {#1} } }
+ {
+ \exp_args:Nf \int_to_base_aux_iii:nnnN
+ { \int_to_letter:n { \int_mod:nn {#1} {#2} } }
+ {#1}
+ {#2}
+ #3
+ }
+ }
+\cs_new:Npn \int_to_base_aux_iii:nnnN #1#2#3#4
+ {
+ \exp_args:Nf \int_to_base_aux_ii:nnN
+ { \int_div_truncate:nn {#2} {#3} }
+ {#3}
+ #4
+ #1
}
% \end{macrocode}
% Convert to a letter only if necessary, otherwise simply return the
-% value unchanged.
+% value unchanged. It would be cleaner to use \cs{prg_case_int:nnn},
+% but in our case, the cases are contiguous, so it is forty times faster
+% to use the \cs{if_case:w} primitive. The first \cs{exp_after:wN}
+% expands the conditional, jumping to the correct case, the second one
+% expands after the resulting character to close the conditional.
% \begin{macrocode}
\cs_new:Npn \int_to_letter:n #1
{
- \prg_case_int:nnn { #1 - 9 }
- {
- { 1 } { A }
- { 2 } { B }
- { 3 } { C }
- { 4 } { D }
- { 5 } { E }
- { 6 } { F }
- { 7 } { G }
- { 8 } { H }
- { 9 } { I }
- { 10 } { J }
- { 11 } { K }
- { 12 } { L }
- { 13 } { M }
- { 14 } { N }
- { 15 } { O }
- { 16 } { P }
- { 17 } { Q }
- { 18 } { R }
- { 19 } { S }
- { 20 } { T }
- { 21 } { U }
- { 22 } { V }
- { 23 } { W }
- { 24 } { X }
- { 25 } { Y }
- { 26 } { Z }
- }
- {#1}
+ \exp_after:wN \exp_after:wN
+ \if_case:w \int_eval:w #1 - \c_ten \int_eval_end:
+ A
+ \or: B
+ \or: C
+ \or: D
+ \or: E
+ \or: F
+ \or: G
+ \or: H
+ \or: I
+ \or: J
+ \or: K
+ \or: L
+ \or: M
+ \or: N
+ \or: O
+ \or: P
+ \or: Q
+ \or: R
+ \or: S
+ \or: T
+ \or: U
+ \or: V
+ \or: W
+ \or: X
+ \or: Y
+ \or: Z
+ \else: #1
+ \fi:
}
% \end{macrocode}
%\end{macro}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3io.dtx b/Master/texmf-dist/source/latex/l3kernel/l3io.dtx
index bf71c3df878..7b6879ba613 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3io.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3io.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3names}
-\GetIdInfo$Id: l3io.dtx 2478 2011-06-19 21:34:23Z joseph $
+\GetIdInfo$Id: l3io.dtx 2595 2011-08-16 00:58:34Z bruno $
{L3 Experimental input-output operations}
%</driver|package>
%<*driver>
@@ -498,10 +498,10 @@
%<*initex>
\alloc_setup_type:nnn { ior } \c_zero \c_sixteen
\cs_new_protected_nopar:Npn \ior_raw_new:N #1
- { \alloc_reg:NnNN g { ior } \tex_chardef:D #1 }
+ { \alloc_reg:nNN { ior } \tex_chardef:D #1 }
\alloc_setup_type:nnn { iow } \c_zero \c_sixteen
\cs_new_protected_nopar:Npn \iow_raw_new:N #1
- { \alloc_reg:NnNN g { iow } \tex_chardef:D #1 }
+ { \alloc_reg:nNN { iow } \tex_chardef:D #1 }
%</initex>
%<*package>
\cs_set_eq:NN \iow_raw_new:N \newwrite
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
index cbc1fb62a7d..df988bea954 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3names}
-\GetIdInfo$Id: l3keys.dtx 2478 2011-06-19 21:34:23Z joseph $
+\GetIdInfo$Id: l3keys.dtx 2568 2011-08-14 05:03:32Z bruno $
{L3 Experimental key-value interfaces}
%</driver|package>
%<*driver>
@@ -269,7 +269,7 @@
% \meta{key} .fp_set:N = \meta{floating point}
% \end{syntax}
% Defines \meta{key} to set \meta{floating point} to \meta{value}
-% (which must a integer expression). If the variable does not exist,
+% (which must a floating point number). If the variable does not exist,
% it will be created at the point that the key is set up. The
% \meta{integer} will be assigned locally.
% \end{function}
@@ -279,7 +279,7 @@
% \meta{key} .fp_gset:N = \meta{floating point}
% \end{syntax}
% Defines \meta{key} to set \meta{floating-point} to \meta{value}
-% (which must a integer expression). If the variable does not exist,
+% (which must a floating point number). If the variable does not exist,
% it will be created at the point that the key is set up. The
% \meta{integer} will be assigned globally.
% \end{function}
@@ -301,7 +301,7 @@
% \meta{key} .int_set:N = \meta{integer}
% \end{syntax}
% Defines \meta{key} to set \meta{integer} to \meta{value} (which
-% must a integer expression). If the variable does not exist, it
+% must be an integer expression). If the variable does not exist, it
% will be created at the point that the key is set up. The
% \meta{integer} will be assigned locally.
% \end{function}
@@ -311,7 +311,7 @@
% \meta{key} .int_gset:N = \meta{integer}
% \end{syntax}
% Defines \meta{key} to set \meta{integer} to \meta{value} (which
-% must a integer expression). If the variable does not exist, it
+% must be an integer expression). If the variable does not exist, it
% will be created at the point that the key is set up. The
% \meta{integer} will be assigned globally.
% \end{function}
@@ -331,7 +331,7 @@
% \meta{key} .skip_set:N = \meta{skip}
% \end{syntax}
% Defines \meta{key} to set \meta{skip} to \meta{value} (which
-% must a skip expression). If the variable does not exist, it
+% must be a skip expression). If the variable does not exist, it
% will be created at the point that the key is set up. The
% \meta{skip} will be assigned locally.
% \end{function}
@@ -341,7 +341,7 @@
% \meta{key} .skip_gset:N = \meta{skip}
% \end{syntax}
% Defines \meta{key} to set \meta{skip} to \meta{value} (which
-% must a skip expression). If the variable does not exist, it
+% must be a skip expression). If the variable does not exist, it
% will be created at the point that the key is set up. The
% \meta{skip} will be assigned globally.
% \end{function}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3keyval.dtx b/Master/texmf-dist/source/latex/l3kernel/l3keyval.dtx
index 999ae7e5b08..01adb3a033a 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3keyval.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3keyval.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3names}
-\GetIdInfo$Id: l3keyval.dtx 2478 2011-06-19 21:34:23Z joseph $
+\GetIdInfo$Id: l3keyval.dtx 2601 2011-08-16 23:20:27Z bruno $
{L3 Experimental key-value parsing}
%</driver|package>
%<*driver>
@@ -203,8 +203,8 @@
\group_begin:
\tl_clear:N \l_keyval_sanitise_tl
\tl_set:Nn \l_keyval_sanitise_tl {#1}
- \tl_replace_all_in:Nnn \l_keyval_sanitise_tl { = } { 8 }
- \tl_replace_all_in:Nnn \l_keyval_sanitise_tl { , } { 9 }
+ \tl_replace_all:Nnn \l_keyval_sanitise_tl { = } { 8 }
+ \tl_replace_all:Nnn \l_keyval_sanitise_tl { , } { 9 }
\tl_clear:N \l_keyval_parse_tl
\exp_after:wN \keyval_parse_elt:w \exp_after:wN
\q_no_value \l_keyval_sanitise_tl 9 \q_nil 9
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
index 7e23d67b838..635c1a0a827 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3names}
-\GetIdInfo$Id: l3msg.dtx 2551 2011-08-11 22:40:53Z bruno $
+\GetIdInfo$Id: l3msg.dtx 2601 2011-08-16 23:20:27Z bruno $
{L3 Experimental messages}
%</driver|package>
%<*driver>
@@ -624,6 +624,12 @@
% Issues an \enquote{Undefined error} message from \TeX{} itself,
% and prints the \meta{error message}. The \meta{error message}
% must be short: it is cropped at the end of one line.
+% \begin{texnote}
+% This function expands to an empty token list after two steps.
+% Tokens inserted in response to \TeX{}'s prompt are read with
+% the current category code setting, and inserted just after
+% the place where the error message was issued.
+% \end{texnote}
% \end{function}
%
% \end{documentation}
@@ -666,6 +672,7 @@
% \end{variable}
%
% \begin{macro}{\msg_new:nnnn, \msg_new:nnn}
+% \begin{macro}{\msg_gset:nnnn,\msg_gset:nnn}
% \begin{macro}{\msg_set:nnnn, \msg_set:nnn}
% Setting a message simply means saving the appropriate text
% into two functions. A sanity check first.
@@ -677,7 +684,7 @@
\msg_kernel_error:nn { msg } { message-already-defined }
{#1} {#2}
}
- \msg_set:nnnn {#1} {#2}
+ \msg_gset:nnnn {#1} {#2}
}
\cs_new_protected:Npn \msg_new:nnn #1#2#3
{ \msg_new:nnnn {#1} {#2} {#3} { } }
@@ -690,9 +697,19 @@
}
\cs_new_protected:Npn \msg_set:nnn #1#2#3
{ \msg_set:nnnn {#1} {#2} {#3} { } }
+\cs_new_protected:Npn \msg_gset:nnnn #1#2#3#4
+ {
+ \cs_gset:cpn { \c_msg_text_prefix_tl #1 / #2 }
+ ##1##2##3##4 {#3}
+ \cs_gset:cpn { \c_msg_more_text_prefix_tl #1 / #2 }
+ ##1##2##3##4 {#4}
+ }
+\cs_new_protected:Npn \msg_gset:nnn #1#2#3
+ { \msg_gset:nnnn {#1} {#2} {#3} { } }
% \end{macrocode}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \subsection{Messages: support functions and text}
%
@@ -863,8 +880,8 @@
% which is turned into a blank space.
% \begin{macrocode}
\group_begin: % {
- \char_set_lccode:w `\} = `\ \scan_stop:
- \char_set_lccode:w `\& = `\! \scan_stop:
+ \char_set_lccode:nn {`\}} {`\ }
+ \char_set_lccode:nn {`\&} {`\!}
\char_set_catcode_active:N \&
\tl_to_lowercase:n
{
@@ -1574,18 +1591,46 @@
% \subsection{Expandable errors}
%
% \begin{macro}{\msg_expandable_error:n}
-%
+% In expansion only context, we cannot use the normal means of
+% reporting errors. Instead, we feed \TeX{} an undefined control
+% sequence, \cs{LaTeX3 error:}. It is thus interrupted, and shows
+% the context, which thanks to the odd-looking \cs{use:n} is
+% \begin{verbatim}
+% <argument> \LaTeX3 error:
+% The error message.
+% \end{verbatim}
+% In other words, \TeX{} is processing the argument of \cs{use:n},
+% which is \cs{LaTeX3 error:} \meta{error message}.
+% Then \cs{msg_expandable_error_aux:w} cleans up. In fact, there
+% is an extra subtlety: if the user inserts tokens for error recovery,
+% they should be kept. Thus we also use an odd space character
+% (with category code $7$) and keep tokens until that space character,
+% dropping everything else until \cs{q_stop}. The \cs{c_zero} prevents
+% losing braces around the user-inserted text if any, and stops the
+% expansion of \cs{tex_romannumeral:D}.
% \begin{macrocode}
\group_begin:
-\cs_new:Npx \msg_expandable_error:n #1
+\char_set_catcode_math_superscript:N \^
+\char_set_lccode:nn {`^} {`\ }
+\char_set_lccode:nn {`L} {`L}
+\char_set_lccode:nn {`T} {`T}
+\char_set_lccode:nn {`X} {`X}
+\tl_to_lowercase:n
{
- \exp_not:n
+ \cs_new:Npx \msg_expandable_error:n #1
{
- \exp_after:wN \exp_after:wN
- \exp_after:wN \use_none_delimit_by_q_stop:w
+ \exp_not:n
+ {
+ \tex_romannumeral:D
+ \exp_after:wN \exp_after:wN
+ \exp_after:wN \msg_expandable_error_aux:w
+ \exp_after:wN \exp_after:wN
+ \exp_after:wN \c_zero
+ }
+ \exp_not:N \use:n { \exp_not:c { LaTeX3~error: } ^ #1 }
+ \exp_not:N \q_stop
}
- \exp_not:N \use:n { \exp_not:c { LaTeX3 ~ error : } #1 }
- \exp_not:N \q_stop
+ \cs_new:Npn \msg_expandable_error_aux:w #1 ^ #2 \q_stop { #1 }
}
\group_end:
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
index 386b98b32dd..b63d2e5721b 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3names}
-\GetIdInfo$Id: l3prg.dtx 2553 2011-08-11 23:55:20Z bruno $
+\GetIdInfo$Id: l3prg.dtx 2601 2011-08-16 23:20:27Z bruno $
{L3 Experimental control structures}
%</driver|package>
%<*driver>
@@ -2035,8 +2035,8 @@
% As we have restructured the structured variables, these are no
% longer needed.
% \begin{macrocode}
-\cs_new_protected:Npn \prg_new_map_functions:Nn #1#2 { \deprectiated }
-\cs_new_protected:Npn \prg_set_map_functions:Nn #1#2 { \deprectiated }
+\cs_new_protected:Npn \prg_new_map_functions:Nn #1#2 { \deprecated }
+\cs_new_protected:Npn \prg_set_map_functions:Nn #1#2 { \deprecated }
% \end{macrocode}
% \end{macro}
% \end{macro}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
index 0babc835ec9..10692dcf430 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3names}
-\GetIdInfo$Id: l3seq.dtx 2556 2011-08-12 14:00:43Z bruno $
+\GetIdInfo$Id: l3seq.dtx 2586 2011-08-15 03:59:12Z bruno $
{L3 Experimental sequences and stacks}
%</driver|package>
%<*driver>
@@ -722,6 +722,21 @@
% according to the variant chosen.
% \end{function}
%
+% \begin{function}
+% {\seq_set_split:Nnn,\seq_gset_split:Nnn}
+% \begin{syntax}
+% \cs{seq_set_split:Nnn} \meta{sequence}
+% ~~\Arg{delimiter} \Arg{token list}
+% \end{syntax}
+% This function splits the \meta{token list} into \meta{items}
+% separated by \meta{delimiter}, ignoring all explicit space
+% characters from both sides of each \meta{item}, then removing
+% one set of outer braces if any. The result is assigned to
+% \meta{sequence}, locally or globally according to the function
+% chosen. The \meta{delimiter} may not contain |{|, |}| or |#|
+% (assuming \TeX{}'s normal category code r\'egime).
+% \end{function}
+%
% \section{Internal sequence functions}
%
% \begin{function}{\seq_if_empty_err_break:N}
@@ -1816,6 +1831,69 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\seq_set_split:Nnn,\seq_gset_split:Nnn}
+% \begin{macro}[aux]{\seq_set_split_aux:NNnn}
+% \begin{macro}[aux]
+% {
+% \seq_set_split_aux_i:w, \seq_set_split_aux_ii:w,
+% \seq_set_split_aux_end:
+% }
+% The goal is to split a given token list at a marker,
+% strip spaces from each item, and remove one set of
+% outer braces if after removing leading and trailing
+% spaces the item is enclosed within braces. After
+% \cs{tl_replace_all:Nnn}, the token list \cs{l_seq_tmpa_tl}
+% is a repetition of the pattern
+% \cs{seq_set_split_aux_i:w} \cs{prg_do_nothing:}
+% \meta{item with spaces} \cs{seq_set_split_aux_end:}.
+% Then, \texttt{x}-expansion causes \cs{seq_set_split_aux_i:w}
+% to trim spaces, and leaves its result as
+% \cs{seq_set_split_aux_ii:w} \meta{trimmed item}
+% \cs{seq_set_split_aux_end:}. This is then converted
+% to the \pkg{l3seq} internal structure by another
+% \texttt{x}-expansion. In the first step, we insert
+% \cs{prg_do_nothing:} to avoid losing braces too early:
+% that would cause space trimming to act within those
+% lost braces. The second step is solely there to strip
+% braces which are outermost after space trimming.
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \seq_set_split:Nnn
+ { \seq_set_split_aux:NNnn \tl_set:Nx }
+\cs_new_protected_nopar:Npn \seq_gset_split:Nnn
+ { \seq_set_split_aux:NNnn \tl_gset:Nx }
+\cs_new_protected_nopar:Npn \seq_set_split_aux:NNnn #1 #2 #3 #4
+ {
+ \tl_if_empty:nTF {#4}
+ { #1 #2 { } }
+ {
+ \tl_set:Nn \l_seq_tmpa_tl
+ {
+ \seq_set_split_aux_i:w \prg_do_nothing:
+ #4
+ \seq_set_split_aux_end:
+ }
+ \tl_replace_all:Nnn \l_seq_tmpa_tl { #3 }
+ {
+ \seq_set_split_aux_end:
+ \seq_set_split_aux_i:w \prg_do_nothing:
+ }
+ \tl_set:Nx \l_seq_tmpa_tl { \l_seq_tmpa_tl }
+ #1 #2 { \l_seq_tmpa_tl }
+ }
+ }
+\cs_new:Npn \seq_set_split_aux_i:w #1 \seq_set_split_aux_end:
+ {
+ \exp_not:N \seq_set_split_aux_ii:w
+ \exp_args:No \tl_trim_spaces:n {#1}
+ \exp_not:N \seq_set_split_aux_end:
+ }
+\cs_new:Npn \seq_set_split_aux_ii:w #1 \seq_set_split_aux_end:
+ { \exp_not:n { \seq_item:n {#1} } }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
% \subsection{Deprecated interfaces}
%
% A few functions which are no longer documented: these were moved
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
index 3db13f9b400..f596eb1a263 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3names}
-\GetIdInfo$Id: l3tl.dtx 2563 2011-08-13 12:23:59Z joseph $
+\GetIdInfo$Id: l3tl.dtx 2566 2011-08-13 22:04:42Z bruno $
{L3 Experimental token lists}
%</driver|package>
%<*driver>
@@ -786,25 +786,31 @@
% \begin{syntax}
% \cs{tl_trim_spaces:n} \meta{token list}
% \end{syntax}
-% Removes any leading and trailing spaces from the \meta{token list}
-% and leaves the result in the input stream. This process requires
-% two expansions.
+% Removes any leading and trailing explicit space characters
+% from the \meta{token list} and leaves the result in the input
+% stream. This process requires two expansions.
+% \begin{texnote}
+% The result is return within the \cs{etex_unexpanded:D}
+% primitive (\cs{exp_not:n}), which means that the token
+% list will not expand further when appearing in an x-type
+% argument expansion.
+% \end{texnote}
% \end{function}
%
% \begin{function}{\tl_trim_spaces:N, \tl_trim_spaces:c}
% \begin{syntax}
% \cs{tl_trim_spaces:N} \meta{tl~var}
% \end{syntax}
-% Removes any leading and trailing spaces from the content of the
-% \meta{tl~var} within the current \TeX{} group.
+% Removes any leading and trailing explicit space characters
+% from the content of the \meta{tl~var} within the current \TeX{} group.
% \end{function}
%
% \begin{function}{\tl_gtrim_spaces:N, \tl_gtrim_spaces:c}
% \begin{syntax}
% \cs{tl_gtrim_spaces:N} \meta{tl~var}
% \end{syntax}
-% Removes any leading and trailing spaces from the content of the
-% \meta{tl~var} globally.
+% Removes any leading and trailing explicit space characters
+% from the content of the \meta{tl~var} globally.
% \end{function}
%
% \section{The first token from a token list}
@@ -2017,39 +2023,76 @@
% \tl_trim_spaces:N, \tl_trim_spaces:c,
% \tl_gtrim_spaces:N, \tl_gtrim_spaces:c
% }
-% \begin{macro}[aux]{\tl_trim_spaces_exp:n}
-% \begin{macro}[aux]{\tl_trim_spaces_aux_i:w}
-% \begin{macro}[aux]{\tl_trim_spaces_aux_ii:w}
-% Trimming spaces from around the input uses the idea of a sufficiently
-% odd token to allow for a delimited argument to do this. Here, the
-% standard approach [a |Q| with category code 3 (math toggle)] is used.
+% \begin{macro}[aux]
+% {
+% \tl_trim_spaces_aux_i:w, \tl_trim_spaces_aux_ii:w
+% \tl_trim_spaces_aux_iii:w, \tl_trim_spaces_aux_iv:w
+% }
+% Trimming spaces from around the input is done using delimited
+% arguments and quarks, and to get spaces at odd places in the
+% definitions, we nest those in \cs{tl_tmp:w}, which then receives
+% a single space as its argument: |#1| is \verb*+ +.
+% Removing leading spaces is done with \cs{tl_trim_spaces_aux_i:w},
+% which loops until \cs{q_mark}\verb*+ + matches the end of the token
+% list: then |##1| is the token list and |##3| is
+% \cs{tl_trim_spaces_aux_ii:w}. This hands the relevant tokens to the
+% loop \cs{tl_trim_spaces_aux_iii:w}, responsible for trimming
+% trailing spaces. The end is reached when \verb*+ + \cs{q_nil}
+% matches the one present in the definition of \cs{tl_trim_spacs:n}.
+% Then \cs{tl_trim_spaces_aux_iv:w} puts the token list into a group,
+% as the argument of the initial \cs{etex_unexpanded:D}.
% The \cs{etex_unexpanded:D} here is used so that space trimming will
% behave correctly within an \texttt{x}-type expansion.
% \begin{macrocode}
-\cs_new:Npn \tl_trim_spaces:n #1
+\cs_set:Npn \tl_tmp:w #1
{
- \etex_unexpanded:D \exp_after:wN \exp_after:wN \exp_after:wN
- { \tl_trim_spaces_exp:n {#1} }
+ \cs_new:Npn \tl_trim_spaces:n ##1
+ {
+ \etex_unexpanded:D
+ \tl_trim_spaces_aux_i:w
+ \q_mark
+ ##1
+ \q_nil
+ \q_mark #1 { }
+ \q_mark \tl_trim_spaces_aux_ii:w
+ \tl_trim_spaces_aux_iii:w
+ #1 \q_nil
+ \tl_trim_spaces_aux_iv:w
+ \q_stop
+ }
+ \cs_new:Npn \tl_trim_spaces_aux_i:w ##1 \q_mark #1 ##2 \q_mark ##3
+ {
+ ##3
+ \tl_trim_spaces_aux_i:w
+ \q_mark
+ ##2
+ \q_mark #1 {##1}
+ }
+ \cs_new:Npn \tl_trim_spaces_aux_ii:w ##1 \q_mark \q_mark ##2
+ {
+ \tl_trim_spaces_aux_iii:w
+ ##2
+ }
+ \cs_new:Npn \tl_trim_spaces_aux_iii:w ##1 #1 \q_nil ##2
+ {
+ ##2
+ ##1 \q_nil
+ \tl_trim_spaces_aux_iii:w
+ }
+ \cs_new:Npn \tl_trim_spaces_aux_iv:w ##1 \q_nil ##2 \q_stop
+ { \exp_after:wN { \use_none:n ##1 } }
}
+\tl_tmp:w { ~ }
\cs_new_protected:Npn \tl_trim_spaces:N #1
{ \tl_set:Nx #1 { \exp_after:wN \tl_trim_spaces:n \exp_after:wN {#1} } }
\cs_new_protected:Npn \tl_gtrim_spaces:N #1
{ \tl_gset:Nx #1 { \exp_after:wN \tl_trim_spaces:n \exp_after:wN {#1} } }
-\group_begin:
- \tex_catcode:D `\Q = 3 \scan_stop:
- \cs_new:Npn \tl_trim_spaces_exp:n #1
- { \tex_romannumeral:D - `0 \tl_trim_spaces_aux_i:w \exp_not:N #1 Q ~ Q }
- \cs_new:Npn \tl_trim_spaces_aux_i:w #1 ~ Q { \tl_trim_spaces_aux_ii:w #1 Q }
- \cs_new:Npn \tl_trim_spaces_aux_ii:w #1 Q #2 {#1}
-\group_end:
\cs_generate_variant:Nn \tl_trim_spaces:N { c }
\cs_generate_variant:Nn \tl_gtrim_spaces:N { c }
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
-% \end{macro}
-% \end{macro}
%
% \subsection{The first token from a token list}
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
index 153ca92f7e0..3aeca13b29d 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3names}
-\GetIdInfo$Id: l3token.dtx 2491 2011-07-02 11:49:37Z joseph $
+\GetIdInfo$Id: l3token.dtx 2579 2011-08-14 16:22:30Z bruno $
{L3 Experimental token manipulation}
%</driver|package>
%<*driver>
@@ -1098,6 +1098,25 @@
% definition is global.
% \end{function}
%
+% \begin{function}[TF]{\peek_N_type:}
+% \begin{syntax}
+% \cs{peek_N_type:TF} \Arg{true code} \Arg{false code}
+% \end{syntax}
+% Tests if the next \meta{token} in the input stream can be safely
+% grabbed as an \texttt{N}-type argument. The test will be \meta{false}
+% if the next \meta{token} is either an explicit or implicit
+% begin-group or end-group token (with any character code), or
+% an explicit or implicit space character (with character code $32$
+% and category code $10$), and \meta{true} in all other cases.
+% Note that a \meta{true} result ensures that the next \meta{token} is
+% a valid \texttt{N}-type argument. However, if the next \meta{token}
+% is for instance \cs{c_space_token}, the test will take the
+% \meta{false} branch, even though the next \meta{token} is in fact
+% a valid \texttt{N}-type argument. The \meta{token} will be left
+% in the input stream after the \meta{true code} or \meta{false code}
+% (as appropriate to the result of the test).
+% \end{function}
+%
% \end{documentation}
%
% \begin{implementation}
@@ -2283,6 +2302,36 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}[TF]{\peek_N_type:}
+% \begin{macro}{\peek_execute_branches_N_type:}
+% The next token is normal if it is neither a begin-group token,
+% nor an end-group token, nor a charcode-$32$ space token.
+% Note that implicit begin-group tokens, end-group tokens, and
+% spaces are also recognized as non-\texttt{N}-type.
+% Here, there is no \meta{search token}, so we feed a dummy
+% \cs{scan_stop:} to the \cs{peek_token_generic::NN} functions.
+% \begin{macrocode}
+\cs_new_protected_nopar:Npn \peek_execute_branches_N_type:
+ {
+ \bool_if:nTF
+ {
+ \token_if_eq_catcode_p:NN \l_peek_token \c_group_begin_token ||
+ \token_if_eq_catcode_p:NN \l_peek_token \c_group_end_token ||
+ \token_if_eq_meaning_p:NN \l_peek_token \c_space_token
+ }
+ { \peek_false:w }
+ { \peek_true:w }
+ }
+\cs_new_protected_nopar:Npn \peek_N_type:TF
+ { \peek_token_generic:NNTF \peek_execute_branches_N_type: \scan_stop: }
+\cs_new_protected_nopar:Npn \peek_N_type:T
+ { \peek_token_generic:NNT \peek_execute_branches_N_type: \scan_stop: }
+\cs_new_protected_nopar:Npn \peek_N_type:F
+ { \peek_token_generic:NNF \peek_execute_branches_N_type: \scan_stop: }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
% \subsection{Deprecated functions}
%
% Deprecated on 2011-05-27, for removal by 2011-08-31.
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3toks.dtx b/Master/texmf-dist/source/latex/l3kernel/l3toks.dtx
index 62824848afc..2b5d5cd0880 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3toks.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3toks.dtx
@@ -35,7 +35,7 @@
%
%<*driver|package>
\RequirePackage{l3names}
-\GetIdInfo$Id: l3toks.dtx 2478 2011-06-19 21:34:23Z joseph $
+\GetIdInfo$Id: l3toks.dtx 2601 2011-08-16 23:20:27Z bruno $
{L3 Experimental token registers}
%</driver|package>
%<*driver>
@@ -67,7 +67,7 @@
%
% \begin{documentation}
%
-% \textbf{THIS ENTIRE MODULE IS DEPRECIATED: DO NOT USE \cs{TOKS_\ldots}
+% \textbf{THIS ENTIRE MODULE IS DEPRECATED: DO NOT USE \cs{TOKS_\ldots}
% FUNCTIONS}
%
% \end{documentation}