summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2011-03-08 00:12:32 +0000
committerKarl Berry <karl@freefriends.org>2011-03-08 00:12:32 +0000
commit743bc34fac4c76ac8e33a48ae49291dc4cd4fb3f (patch)
tree6a8b146caa83351f0bbca9b95500812fb7693cd9 /Master/texmf-dist/source
parentf0c0dc9d9dcc8fa9dc2d08552a32433ec8560a5f (diff)
expl3 2184 (7mar11)
git-svn-id: svn://tug.org/texlive/trunk@21634 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source')
-rw-r--r--Master/texmf-dist/source/latex/expl3/expl3.dtx5
-rw-r--r--Master/texmf-dist/source/latex/expl3/interface3.tex83
-rw-r--r--Master/texmf-dist/source/latex/expl3/l3.ins120
-rw-r--r--Master/texmf-dist/source/latex/expl3/l3alloc.dtx12
-rw-r--r--Master/texmf-dist/source/latex/expl3/l3basics.dtx20
-rw-r--r--Master/texmf-dist/source/latex/expl3/l3box.dtx183
-rw-r--r--Master/texmf-dist/source/latex/expl3/l3candidates.dtx163
-rw-r--r--Master/texmf-dist/source/latex/expl3/l3clist.dtx250
-rw-r--r--Master/texmf-dist/source/latex/expl3/l3doc.dtx483
-rw-r--r--Master/texmf-dist/source/latex/expl3/l3font.dtx251
-rw-r--r--Master/texmf-dist/source/latex/expl3/l3format.ins83
-rw-r--r--Master/texmf-dist/source/latex/expl3/l3fp.dtx559
-rw-r--r--Master/texmf-dist/source/latex/expl3/l3int.dtx265
-rw-r--r--Master/texmf-dist/source/latex/expl3/l3prg.dtx230
-rw-r--r--Master/texmf-dist/source/latex/expl3/l3quark.dtx89
-rw-r--r--Master/texmf-dist/source/latex/expl3/l3skip.dtx12
-rw-r--r--Master/texmf-dist/source/latex/expl3/l3tl.dtx29
-rw-r--r--Master/texmf-dist/source/latex/expl3/l3token.dtx14
-rw-r--r--Master/texmf-dist/source/latex/expl3/l3xref.dtx10
-rw-r--r--Master/texmf-dist/source/latex/expl3/source3.tex102
-rw-r--r--Master/texmf-dist/source/latex/expl3/source3body.tex391
21 files changed, 1563 insertions, 1791 deletions
diff --git a/Master/texmf-dist/source/latex/expl3/expl3.dtx b/Master/texmf-dist/source/latex/expl3/expl3.dtx
index c4f035ec41f..6535553a72a 100644
--- a/Master/texmf-dist/source/latex/expl3/expl3.dtx
+++ b/Master/texmf-dist/source/latex/expl3/expl3.dtx
@@ -37,7 +37,7 @@
\RequirePackage{l3names}
%</driver|package>
%\fi
-\GetIdInfo$Id: expl3.dtx 2083 2010-11-13 13:01:31Z will $
+\GetIdInfo$Id: expl3.dtx 2156 2011-02-17 15:40:23Z will $
{L3 Experimental code bundle wrapper}%
%\iffalse
%<*driver>
@@ -927,7 +927,8 @@
l3xref,
l3file,
l3fp,
- l3luatex
+ l3luatex,
+ l3font
}
\RequirePackage{calc}
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/expl3/interface3.tex b/Master/texmf-dist/source/latex/expl3/interface3.tex
deleted file mode 100644
index cb2d3d88335..00000000000
--- a/Master/texmf-dist/source/latex/expl3/interface3.tex
+++ /dev/null
@@ -1,83 +0,0 @@
-% \iffalse
-%% File: interface3.tex Copyright (C) 1990-2010 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.
-%%
-%% -----------------------------------------------------------------------
-%%
-%% 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 LaTeX Project Team.
-%%
-%% -----------------------------------------------------------------------
-%% \fi
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% This document will typeset the LaTeX3 interface descriptions a single
-% document. This will produce quite a large file (more than 170 pages
-% currently) and may take a long time on a slow machine.
-%
-% 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}
-%\catcode\string`\_\string=\active
-
-\title{The \LaTeX3 Interfaces}
-\author{\Team}
-
-\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/expl3/l3.ins b/Master/texmf-dist/source/latex/expl3/l3.ins
deleted file mode 100644
index 91288ab8004..00000000000
--- a/Master/texmf-dist/source/latex/expl3/l3.ins
+++ /dev/null
@@ -1,120 +0,0 @@
-
-\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
-
-% wrapper package for the expl3 bundle
-\generate{\file{expl3.sty}{\from{expl3.dtx}{package}}}
-
-
-% l3names.sty sets up the naming scheme for TeX primitives.
-\generate{\file{l3names.sty}{\from{l3names.dtx}{package}}}
-
-
-
-% Define some basic commands to get us started with the new
-% programming style.
-\generate{\file{l3basics.sty}{\from{l3basics.dtx}{package,trace}}}
-
-
-% Define some basic commands that check various conditions
-% related to defining commands eg defined/undefined global/local
-% Not sure how much of this really makes sense as a package, but...
-\generate{\file{l3chk.sty}{\from{l3chk.dtx}{package,trace}}}
-
-
-%% toks register handling (can be compiled with check module)
-\generate{\file{l3toks.sty}{\from{l3toks.dtx}{package,trace}}}
-
-
-%% token lists
-\generate{\file{l3tl.sty}{\from{l3tl.dtx}{package,trace}}}
-
-
-%% LaTeX3 expansion module
-\generate{\file{l3expan.sty}{\from{l3expan.dtx}{package,trace}}}
-
-
-%% LaTeX3 quarks.
-\generate{\file{l3quark.sty}{\from{l3quark.dtx}{package,trace}}}
-
-
-%% LaTeX3 sequences.
-\generate{\file{l3seq.sty}{\from{l3seq.dtx}{package,trace}}}
-
-
-%% LaTeX3 clists.
-\generate{\file{l3clist.sty}{\from{l3clist.dtx}{package,trace}}}
-
-
-%% LaTeX3 property lists.
-\generate{\file{l3prop.sty}{\from{l3prop.dtx}{package,trace}}}
-
-
-%% LaTeX3 fake integer macros. --- this is still needed in places such as xor !!!
-\generate{\file{l3num.sty}{\from{l3num.dtx}{package,trace}}}
-
-%% LaTeX3 integer registers. (can be compiled with check module)
-\generate{\file{l3int.sty}{\from{l3int.dtx}{package,trace}}}
-
-%% LaTeX3 skip registers.
-\generate{\file{l3skip.sty}{\from{l3skip.dtx}{package,trace}}}
-
-
-%% LaTeX3 precompilation
-\generate{\file{l3precom.sty}{\from{l3precom.dtx}{package,precompile,trace}}}
-
-%% LaTeX3 I/O module.
-\generate{\file{l3io.sty}{\from{l3io.dtx}{package,trace}}}
-
-%% LaTeX3 program control structures (loops, booleans, ...)
-\generate{\file{l3prg.sty}{\from{l3prg.dtx}{package}}}
-
-%% LaTeX3 box module
-\generate{\file{l3box.sty}{\from{l3box.dtx}{package}}}
-
-%% LaTeX3 messages
-\generate{\file{l3msg.sty}{\from{l3msg.dtx}{package}}}
-
-%% LaTeX3 tokens
-\generate{\file{l3token.sty}{\from{l3token.dtx}{package}}}
-
-%% LaTeX3 cross references
-\generate{\file{l3xref.sty}{\from{l3xref.dtx}{package}}}
-%%\generate{\file{l3xref-test.tex}{\from{l3xref.dtx}{testfile}}}
-
-%% LaTeX3 calc module
-\generate{\file{l3calc.sty}{\from{l3calc.dtx}{package}}}
-
-%% LaTeX3 keyval modules
-\generate{\file{l3keyval.sty}{\from{l3keyval.dtx}{package}}}
-\generate{\file{l3keys.sty}{\from{l3keys.dtx}{package}}}
-
-%% LaTeX3 file loading
-\generate{\file{l3file.sty}{\from{l3file.dtx}{package}}}
-
-%% LaTeX3 floating point unit
-\generate{\file{l3fp.sty}{\from{l3fp.dtx}{package}}}
-
-%% LaTeX3 LuaTeX support
-\generate{\file{l3luatex.sty}{\from{l3luatex.dtx}{package}}}
-
-
-\endbatchfile
diff --git a/Master/texmf-dist/source/latex/expl3/l3alloc.dtx b/Master/texmf-dist/source/latex/expl3/l3alloc.dtx
index 9b3509c95e3..509a7f9ae15 100644
--- a/Master/texmf-dist/source/latex/expl3/l3alloc.dtx
+++ b/Master/texmf-dist/source/latex/expl3/l3alloc.dtx
@@ -36,7 +36,7 @@
\RequirePackage{l3names}
%</driver>
%\fi
-\GetIdInfo$Id: l3alloc.dtx 2063 2010-10-03 08:26:49Z mittelba $
+\GetIdInfo$Id: l3alloc.dtx 2153 2011-02-16 10:37:45Z will $
{L3 Experimental register allocation}%
%\iffalse
%<*driver>
@@ -188,20 +188,18 @@
% \end{macrocode}
% Then we need to check whether we have run out of registers.
% \begin{macrocode}
- \int_compare:nNnTF
- { \tl_use:c{g_#2_allocation_tl} } = { \tl_use:c{l_#2_allocation_tl} }
- {
+ \tex_ifnum:D \etex_numexpr:D
+ \tl_use:c{g_#2_allocation_tl} \tex_relax:D = \etex_numexpr:D \tl_use:c{l_#2_allocation_tl} \tex_relax:D
\iow_term:x {
We~ ran~ out~ of~
\if:w #1 g \scan_stop: global~ \else: local~ \fi:
'l#2!'~ registers!
}
- }
+ \tex_else:D
% \end{macrocode}
% We also need to check whether the value of the counter already
% occurs in the list of already allocated registers.
% \begin{macrocode}
- {
\seq_if_in:cxTF {g_#2_allocation_seq} {\tl_use:c{#1_#2_allocation_tl}}
{
\iow_log:x{ \tl_use:c{#1_#2_allocation_tl}~already~allocated. }
@@ -212,7 +210,7 @@
% the register we will assign a control sequence for.
% \begin{macrocode}
{ \iow_log:x{\tl_use:c{#1_#2_allocation_tl}~free.} }
- }
+ \tex_fi:D
}
% \end{macrocode}
% \end{macro}
diff --git a/Master/texmf-dist/source/latex/expl3/l3basics.dtx b/Master/texmf-dist/source/latex/expl3/l3basics.dtx
index 5d1b4a677c0..f6c5cebd626 100644
--- a/Master/texmf-dist/source/latex/expl3/l3basics.dtx
+++ b/Master/texmf-dist/source/latex/expl3/l3basics.dtx
@@ -1,5 +1,5 @@
% \iffalse
-%% File: l3basics.dtx Copyright (C) 1990-2008,2010 LaTeX3 project
+%% File: l3basics.dtx Copyright (C) 1990-2011 LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
\RequirePackage{l3names}
%</driver|package>
%\fi
-\GetIdInfo$Id: l3basics.dtx 2063 2010-10-03 08:26:49Z mittelba $
+\GetIdInfo$Id: l3basics.dtx 2158 2011-02-26 12:37:22Z mittelba $
{L3 Experimental basic definitions}
%\iffalse
%<*driver>
@@ -2252,9 +2252,8 @@
%
% \subsection{Defining and checking (new) functions}
%
-% \begin{macro}{\c_minus_one}
-% \begin{macro}{\c_zero}
-% \begin{macro}{\c_sixteen}
+% \begin{macro}{\c_minus_one, \c_zero, \c_sixteen}
+% \begin{macro}{\c_six, \c_seven, \c_twelve}
% We need the constants |\c_minus_one| and |\c_sixteen| now for
% writing information to the log and the terminal and |\c_zero|
% which is used by some functions in the \textsf{l3alloc} module. The
@@ -2276,9 +2275,20 @@
%</!package>
\tex_chardef:D \c_sixteen = 16~
\tex_chardef:D \c_zero = 0~
+\tex_chardef:D \c_six = 6~
+\tex_chardef:D \c_seven = 7~
+\tex_chardef:D \c_twelve = 12~
% \end{macrocode}
% \end{macro}
% \end{macro}
+%
+%
+% \begin{macro}{\c_max_register_int}
+% This is here as this particular integer is needed both in package
+% mode and to bootstrap \pkg{l3alloc}
+% \begin{macrocode}
+\tex_mathchardef:D \c_max_register_int = 32767 \tex_relax:D
+% \end{macrocode}
% \end{macro}
%
% We provide two kinds of functions that can be used to define
diff --git a/Master/texmf-dist/source/latex/expl3/l3box.dtx b/Master/texmf-dist/source/latex/expl3/l3box.dtx
index 5e8bcbb4352..fbf531008d2 100644
--- a/Master/texmf-dist/source/latex/expl3/l3box.dtx
+++ b/Master/texmf-dist/source/latex/expl3/l3box.dtx
@@ -1,5 +1,5 @@
% \iffalse
-%% File: l3box.dtx Copyright (C) 2005-2010 LaTeX3 project
+%% File: l3box.dtx Copyright (C) 2005-2011 LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -36,7 +36,7 @@
\RequirePackage{l3names}
%</driver|package>
%\fi
-\GetIdInfo$Id: l3box.dtx 2048 2010-09-26 19:13:59Z joseph $
+\GetIdInfo$Id: l3box.dtx 2178 2011-03-06 09:03:44Z mittelba $
{L3 Experimental Box module}
%\iffalse
%<*driver>
@@ -575,6 +575,7 @@
%
% \begin{macro}{\box_new:N,\box_new:c}
% Defining a new \m{box} register.
+% \testfile{m3box001.lvt}
% \begin{macrocode}
%<*initex>
\alloc_new:nnnN {box} \c_zero \c_max_register_int \tex_mathchardef:D
@@ -601,9 +602,8 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\if_hbox:N}
-% \begin{macro}{\if_vbox:N}
-% \begin{macro}{\if_box_empty:N}
+% \begin{macro}{\if_hbox:N,\if_vbox:N,\if_box_empty:N}
+% \testfile*
% The primitives for testing if a \m{box} is empty/void or which
% type of box it is.
% \begin{macrocode}
@@ -612,14 +612,16 @@
\cs_new_eq:NN \if_box_empty:N \tex_ifvoid:D
% \end{macrocode}
% \end{macro}
-% \end{macro}
-% \end{macro}
%
%
% \begin{macro}{\box_if_horizontal_p:N,\box_if_horizontal_p:c}
+% \testfile*
% \begin{macro}{\box_if_vertical_p:N,\box_if_vertical_p:c}
+% \testfile*
% \begin{macro}[TF]{\box_if_horizontal:N,\box_if_horizontal:c}
+% \testfile*
% \begin{macro}[TF]{\box_if_vertical:N,\box_if_vertical:c}
+% \testfile*
% \begin{macrocode}
\prg_new_conditional:Nnn \box_if_horizontal:N {p,TF,T,F} {
\tex_ifhbox:D #1 \prg_return_true: \else: \prg_return_false: \fi:
@@ -641,11 +643,11 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\box_if_empty_p:N}
-% \begin{macro}{\box_if_empty_p:c}
-% \begin{macro}[TF]{\box_if_empty:N}
-% \begin{macro}[TF]{\box_if_empty:c}
-% Testing if a \m{box} is empty/void.
+% \begin{macro}{\box_if_empty_p:N,\box_if_empty_p:c}
+% \testfile*
+% \begin{macro}[TF]{\box_if_empty:N,\box_if_empty:c}
+% \testfile*
+% Testing if a \m{box} is empty/void.
% \begin{macrocode}
\prg_new_conditional:Nnn \box_if_empty:N {p,TF,T,F} {
\tex_ifvoid:D #1 \prg_return_true: \else: \prg_return_false: \fi:
@@ -657,12 +659,11 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
-% \end{macro}
-% \end{macro}
%
%
% \begin{macro}{\box_set_eq:NN,\box_set_eq:cN,
% \box_set_eq:Nc,\box_set_eq:cc}
+% \testfile*
% Assigning the contents of a box to be another box.
% \begin{macrocode}
\cs_new_protected_nopar:Npn \box_set_eq:NN #1#2 {\tex_setbox:D #1 \tex_copy:D #2}
@@ -672,6 +673,7 @@
%
% \begin{macro}{\box_set_eq_clear:NN,\box_set_eq_clear:cN,
% \box_set_eq_clear:Nc,\box_set_eq_clear:cc}
+% \testfile*
% Assigning the contents of a box to be another box.
% This clears the second box globally (that's how \TeX{} does it).
% \begin{macrocode}
@@ -684,6 +686,7 @@
% \box_gset_eq:Nc,\box_gset_eq:cc,
% \box_gset_eq_clear:NN,\box_gset_eq_clear:cN,
% \box_gset_eq_clear:Nc,\box_gset_eq_clear:cc}
+% \testfile*
% Global version of the above.
% \begin{macrocode}
\cs_new_protected_nopar:Npn \box_gset_eq:NN {\pref_global:D\box_set_eq:NN}
@@ -693,15 +696,16 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\l_last_box}
+% \begin{variable}{\l_last_box}
% A different name for this read-only primitive.
% \begin{macrocode}
\cs_new_eq:NN \l_last_box \tex_lastbox:D
% \end{macrocode}
-% \end{macro}
+% \end{variable}
%
-% \begin{macro}{\box_set_to_last:N,\box_set_to_last:c}
-% \begin{macro}{\box_gset_to_last:N,\box_gset_to_last:c}
+% \begin{macro}{\box_set_to_last:N, \box_gset_to_last:N,
+% \box_set_to_last:c, \box_gset_to_last:c}
+% \testfile*
% Set a box to the previous box.
% \begin{macrocode}
\cs_new_protected_nopar:Npn \box_set_to_last:N #1{\tex_setbox:D#1\l_last_box}
@@ -710,12 +714,10 @@
\cs_generate_variant:Nn \box_gset_to_last:N {c}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\box_move_left:nn}
-% \begin{macro}{\box_move_right:nn}
-% \begin{macro}{\box_move_up:nn}
-% \begin{macro}{\box_move_down:nn}
+% \begin{macro}{\box_move_left:nn,\box_move_right:nn,
+% \box_move_up:nn,\box_move_down:nn}
+% \testfile*
% Move box material in different directions.
% \begin{macrocode}
\cs_new:Npn \box_move_left:nn #1#2{\tex_moveleft:D\dim_eval:n{#1} #2}
@@ -724,12 +726,10 @@
\cs_new:Npn \box_move_down:nn #1#2{\tex_lower:D\dim_eval:n{#1} #2}
% \end{macrocode}
% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\box_clear:N,\box_clear:c}
-% \begin{macro}{\box_gclear:N,\box_gclear:c}
+% \begin{macro}{\box_clear:N,\box_clear:c,
+% \box_gclear:N,\box_gclear:c}
+% \testfile*
% Clear a \m{box} register.
% \begin{macrocode}
\cs_new_protected_nopar:Npn \box_clear:N #1{\box_set_eq_clear:NN #1 \c_empty_box }
@@ -738,12 +738,12 @@
\cs_generate_variant:Nn \box_gclear:N {c}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
%
-% \begin{macro}{\box_ht:N,\box_ht:c}
-% \begin{macro}{\box_dp:N,\box_dp:c}
-% \begin{macro}{\box_wd:N,\box_wd:c}
+% \begin{macro}{\box_ht:N,\box_ht:c,
+% \box_dp:N,\box_dp:c,
+% \box_wd:N,\box_wd:c}
+% \testfile*
% Accessing the height, depth, and width of a \m{box} register.
% \begin{macrocode}
\cs_new_eq:NN \box_ht:N \tex_ht:D
@@ -754,15 +754,13 @@
\cs_generate_variant:Nn \box_wd:N {c}
% \end{macrocode}
% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-%\begin{macro}{\box_set_ht:Nn}
-%\begin{macro}{\box_set_ht:cn}
-%\begin{macro}{\box_set_dp:Nn}
-%\begin{macro}{\box_set_dp:cn}
-%\begin{macro}{\box_set_wd:Nn}
-%\begin{macro}{\box_set_wd:cn}
+%
+% \begin{macro}{\box_set_ht:Nn,
+% \box_set_ht:cn,
+% \box_set_dp:Nn,
+% \box_set_dp:cn,
+% \box_set_wd:Nn,
+% \box_set_wd:cn}
% Measuring is easy: all primitive work. These primitives are not
% expandable, so the derived functions are not either.
% \begin{macrocode}
@@ -780,14 +778,10 @@
\cs_generate_variant:Nn \box_set_wd:Nn { c }
% \end{macrocode}
%\end{macro}
-%\end{macro}
-%\end{macro}
-%\end{macro}
-%\end{macro}
-%\end{macro}
%
-% \begin{macro}{\box_use_clear:N,\box_use_clear:c}
-% \begin{macro}{\box_use:N,\box_use:c}
+% \begin{macro}{\box_use_clear:N,\box_use_clear:c,
+% \box_use:N,\box_use:c}
+% \testfile{m3box001.lvt}
% Using a \m{box}. These are just \TeX{} primitives with meaningful
% names.
% \begin{macrocode}
@@ -797,9 +791,9 @@
\cs_generate_variant:Nn \box_use:N {c}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
% \begin{macro}{\box_show:N,\box_show:c}
+% \testfile*
% Show the contents of a box and write it into the log file.
% \begin{macrocode}
\cs_set_eq:NN \box_show:N \tex_showbox:D
@@ -807,9 +801,7 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\c_empty_box}
-% \begin{macro}{\l_tmpa_box}
-% \begin{macro}{\l_tmpb_box}
+% \begin{variable}{\c_empty_box,\l_tmpa_box,\l_tmpb_box}
% We allocate some \m{box} registers here (and borrow a few from \LaTeX).
% \begin{macrocode}
%<package>\cs_set_eq:NN \c_empty_box \voidb@x
@@ -818,9 +810,7 @@
%<initex>\box_new:N \l_tmpa_box
\box_new:N \l_tmpb_box
% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
+% \end{variable}
%
%
% \subsection{Vertical boxes}
@@ -828,6 +818,7 @@
%
% \begin{macro}{\vbox:n,
% \vbox_top:n}
+% \testfile{m3box003.lvt}
% Put a vertical box directly into the input stream.
% \begin{macrocode}
\cs_new_protected_nopar:Npn \vbox:n {\tex_vbox:D \scan_stop:}
@@ -835,8 +826,9 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\vbox_set:Nn,\vbox_set:cn}
-% \begin{macro}{\vbox_gset:Nn,\vbox_gset:cn}
+% \begin{macro}{\vbox_set:Nn,\vbox_set:cn,
+% \vbox_gset:Nn,\vbox_gset:cn}
+% \testfile*
% Storing material in a vertical box with a natural height.
% \begin{macrocode}
\cs_new_protected:Npn \vbox_set:Nn #1#2 {\tex_setbox:D #1 \tex_vbox:D {#2}}
@@ -845,11 +837,11 @@
\cs_generate_variant:Nn \vbox_gset:Nn {cn}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
%
-% \begin{macro}{\vbox_set_top:Nn,\vbox_set_top:cn}
-% \begin{macro}{\vbox_gset_top:Nn,\vbox_gset_top:cn}
+% \begin{macro}{\vbox_set_top:Nn,\vbox_set_top:cn,
+% \vbox_gset_top:Nn,\vbox_gset_top:cn}
+% \testfile*
% Storing material in a vertical box with a natural height and reference
% point at the baseline of the first object in the box.
% \begin{macrocode}
@@ -859,10 +851,10 @@
\cs_generate_variant:Nn \vbox_gset_top:Nn {cn}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\vbox_set_to_ht:Nnn,\vbox_set_to_ht:cnn}
-% \begin{macro}{\vbox_gset_to_ht:Nnn,\vbox_gset_to_ht:cnn,\vbox_gset_to_ht:ccn}
+% \begin{macro}{\vbox_set_to_ht:Nnn,\vbox_set_to_ht:cnn,
+% \vbox_gset_to_ht:Nnn,\vbox_gset_to_ht:cnn,\vbox_gset_to_ht:ccn}
+% \testfile*
% Storing material in a vertical box with a specified height.
% \begin{macrocode}
\cs_new_protected:Npn \vbox_set_to_ht:Nnn #1#2#3 {
@@ -873,13 +865,13 @@
\cs_generate_variant:Nn \vbox_gset_to_ht:Nnn {cnn,ccn}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
%
-% \begin{macro}{\vbox_set_inline_begin:N}
-% \begin{macro}{\vbox_set_inline_end:}
-% \begin{macro}{\vbox_gset_inline_begin:N}
-% \begin{macro}{\vbox_gset_inline_end:}
+% \begin{macro}{\vbox_set_inline_begin:N,
+% \vbox_set_inline_end:,
+% \vbox_gset_inline_begin:N,
+% \vbox_gset_inline_end:}
+% \testfile*
% Storing material in a vertical box. This type is useful in
% environment definitions.
% \begin{macrocode}
@@ -891,22 +883,19 @@
\cs_new_eq:NN \vbox_gset_inline_end: \c_group_end_token
% \end{macrocode}
% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
%
%
-% \begin{macro}{\vbox_to_ht:nn}
-% \begin{macro}{\vbox_to_zero:n}
+% \begin{macro}{\vbox_to_ht:nn,\vbox_to_zero:n}
+% \testfile*
% Put a vertical box directly into the input stream.
% \begin{macrocode}
\cs_new_protected:Npn \vbox_to_ht:nn #1#2{\tex_vbox:D to \dim_eval:n{#1}{#2}}
\cs_new_protected:Npn \vbox_to_zero:n #1 {\tex_vbox:D to \c_zero_dim {#1}}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
% \begin{macro}{\vbox_set_split_to_ht:NNn}
+% \testfile*
% Splitting a vertical box in two.
% \begin{macrocode}
\cs_new_protected_nopar:Npn \vbox_set_split_to_ht:NNn #1#2#3{
@@ -915,8 +904,9 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\vbox_unpack:N,\vbox_unpack:c}
-% \begin{macro}{\vbox_unpack_clear:N,\vbox_unpack_clear:c}
+% \begin{macro}{\vbox_unpack:N,\vbox_unpack:c,
+% \vbox_unpack_clear:N,\vbox_unpack_clear:c}
+% \testfile*
% Unpacking a box and if requested also clear it.
% \begin{macrocode}
\cs_new_eq:NN \vbox_unpack:N \tex_unvcopy:D
@@ -925,7 +915,6 @@
\cs_generate_variant:Nn \vbox_unpack_clear:N {c}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
%
%
@@ -937,13 +926,15 @@
%
% \begin{macro}{\hbox:n}
% Put a horizontal box directly into the input stream.
+% \testfile{m3box002.lvt}
% \begin{macrocode}
\cs_new_protected_nopar:Npn \hbox:n {\tex_hbox:D \scan_stop:}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\hbox_set:Nn,\hbox_set:cn}
-% \begin{macro}{\hbox_gset:Nn,\hbox_gset:cn}
+% \begin{macro}{\hbox_set:Nn,\hbox_set:cn,
+% \hbox_gset:Nn,\hbox_gset:cn}
+% \testfile*
% Assigning the contents of a box to be another box.
% This clears the second box globally (that's how \TeX{} does it).
% \begin{macrocode}
@@ -953,10 +944,10 @@
\cs_generate_variant:Nn \hbox_gset:Nn {cn}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\hbox_set_to_wd:Nnn,\hbox_set_to_wd:cnn}
-% \begin{macro}{\hbox_gset_to_wd:Nnn,\hbox_gset_to_wd:cnn}
+% \begin{macro}{\hbox_set_to_wd:Nnn,\hbox_set_to_wd:cnn,
+% \hbox_gset_to_wd:Nnn,\hbox_gset_to_wd:cnn}
+% \testfile*
% Storing material in a horizontal box with a specified width.
% \begin{macrocode}
\cs_new_protected:Npn \hbox_set_to_wd:Nnn #1#2#3 {
@@ -967,12 +958,12 @@
\cs_generate_variant:Nn \hbox_gset_to_wd:Nnn {cnn}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\hbox_set_inline_begin:N,\hbox_set_inline_begin:c}
-% \begin{macro}{\hbox_set_inline_end:}
-% \begin{macro}{\hbox_gset_inline_begin:N,\hbox_gset_inline_begin:c}
-% \begin{macro}{\hbox_gset_inline_end:}
+% \begin{macro}{\hbox_set_inline_begin:N,\hbox_set_inline_begin:c,
+% \hbox_gset_inline_begin:N,\hbox_gset_inline_begin:c,
+% \hbox_set_inline_end:,
+% \hbox_gset_inline_end:}
+% \testfile*
% Storing material in a horizontal box. This type is useful in
% environment definitions.
% \begin{macrocode}
@@ -988,23 +979,18 @@
\cs_new_eq:NN \hbox_gset_inline_end: \c_group_end_token
% \end{macrocode}
% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\hbox_to_wd:nn}
-% \begin{macro}{\hbox_to_zero:n}
+% \begin{macro}{\hbox_to_wd:nn,\hbox_to_zero:n}
+% \testfile*
% Put a horizontal box directly into the input stream.
% \begin{macrocode}
\cs_new_protected:Npn \hbox_to_wd:nn #1#2 {\tex_hbox:D to #1 {#2}}
\cs_new_protected:Npn \hbox_to_zero:n #1 {\tex_hbox:D to \c_zero_skip {#1}}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
%
-% \begin{macro}{\hbox_overlap_left:n}
-% \begin{macro}{\hbox_overlap_right:n}
+% \begin{macro}{\hbox_overlap_left:n,\hbox_overlap_right:n}
% Put a zero-sized box with the contents pushed against one side (which
% makes it stick out on the other) directly into the input stream.
% \begin{macrocode}
@@ -1012,11 +998,11 @@
\cs_new_protected:Npn \hbox_overlap_right:n #1 {\hbox_to_zero:n {#1 \tex_hss:D}}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
%
-% \begin{macro}{\hbox_unpack:N,\hbox_unpack:c}
-% \begin{macro}{\hbox_unpack_clear:N,\hbox_unpack_clear:c}
+% \begin{macro}{\hbox_unpack:N,\hbox_unpack:c,
+% \hbox_unpack_clear:N,\hbox_unpack_clear:c}
+% \testfile*
% Unpacking a box and if requested also clear it.
% \begin{macrocode}
\cs_new_eq:NN \hbox_unpack:N \tex_unhcopy:D
@@ -1025,7 +1011,6 @@
\cs_generate_variant:Nn \hbox_unpack_clear:N {c}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
%
%
diff --git a/Master/texmf-dist/source/latex/expl3/l3candidates.dtx b/Master/texmf-dist/source/latex/expl3/l3candidates.dtx
index 4062f8828c6..842adff6471 100644
--- a/Master/texmf-dist/source/latex/expl3/l3candidates.dtx
+++ b/Master/texmf-dist/source/latex/expl3/l3candidates.dtx
@@ -1,5 +1,5 @@
% \iffalse
-%% File: l3candidates.dtx Copyright (C) 2005-2010 LaTeX3 project
+%% File: l3candidates.dtx Copyright (C) 2005-2011 LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -37,7 +37,7 @@
%</driver|package>
%\fi
\errorcontextlines=999
-\GetIdInfo$Id: l3candidates.dtx 2137 2011-01-23 23:13:58Z will $
+\GetIdInfo$Id: l3candidates.dtx 2179 2011-03-06 09:06:18Z mittelba $
{L3 Experimental 'extras' module}
%\iffalse
%<*driver>
@@ -192,24 +192,40 @@
%
%
%
-% \begin{function}{\clist_length:N / (EXP)|\clist_length:n / (EXP)}
-% \begin{syntax}
-% "\clist_length:N" <clist>
-% \end{syntax}
-% Expands to the number of elements in the <clist>.
-% \end{function}
-%
-% \begin{function}{\clist_element:Nn / (EXP)|\clist_element:nn / (EXP)}
-% \begin{syntax}
-% "\clist_element:Nn" <clist> \Arg{i}
-% "\clist_element:nn" |{| <c0>|,| <c1>|,|\dots|,| <c$_{n-\1}$>|,| <c$_n$> |}| \Arg{i}
-% "\clist_element:nn" |{| <c$_{-n-\1}$>|,| <c$_{-n}$>|,|\dots|,| <c$_{-\2}$>|,| <c$_{-\1}$> |}| \Arg{i}
-% \end{syntax}
-% Expands to <c$_i$>, the <i>-th element of the <clist>.
-% The indexing counts from zero, and negative indices count from the end.
-% (Negative indexing is slightly less efficent since the length of the list
-% must first be calculated.)
-% \end{function}
+%\begin{function}{
+% \clist_length:N / (EXP) |
+% \clist_length:c / (EXP) |
+% \clist_length:n / (EXP) |
+%}
+% \begin{syntax}
+% \cs{clist_length:N} \Arg{comma-list}
+% \end{syntax}
+% Counts the number of \meta{elements} in the \Arg{comma-list} and
+% leaves this information in the input stream. The number of
+% \meta{elements} will be one more than the number of unbraced
+% \verb"," tokens of category code \( 12 \) (other) within the
+% \meta{comma-list}. This function requires two expansions,
+% giving an \meta{integer denotation}.
+%\end{function}
+%
+%\begin{function}{
+% \clist_item:Nn / (EXP) |
+% \clist_item:cn / (EXP) |
+% \clist_item:nn / (EXP) |
+%}
+% \begin{syntax}
+% \cs{clist_item:Nn} \Arg{comma-list} \Arg{offset}
+% \end{syntax}
+% Locates the \meta{element} in the \meta{comma-list} with the
+% \meta{offset} specified, and leaves the result in the input stream.
+% The \meta{offset} should be an integer expression, and is the number
+% of places from the start of the list at which the \meta{element} is
+% located. The there is no \meta{element} with the \meta{offset}
+% specified then the full expansion of the function will be empty.
+% Negative \meta{offset} values work from the end of the
+% \meta{comma-list}, such that and \meta{meta} of \( -1 \) will
+% leave the last item of the \meta{comma-list} in the input stream.
+%\end{function}
%
%
%
@@ -393,67 +409,70 @@
% \end{macrocode}
% \end{macro}
%
-%
-%
-% \begin{macro}{\clist_length:N,\clist_length:n}
+%\begin{macro}{\clist_length:N}
+%\begin{macro}{\clist_length:c}
+%\begin{macro}{\clist_length:n}
+% Counting the elements in a comma-list is straight-forward, using the
+% same approach as for other lists of tokens.
% \begin{macrocode}
-\cs_new:Npn \clist_length:N {
- \exp_args:No \clist_length:n
+\cs_new_nopar:Npn \clist_length:N #1 {
+ \tex_number:D \etex_numexpr:D
+ 0
+ \clist_map_function:NN #1 \tl_elt_count_aux:n
+ \scan_stop:
}
-\cs_new:Npn \clist_length:n #1 {
- \int_eval:n {
- 0 \clist_map_function:nN {#1} \tl_elt_count_aux:n
- }
+\cs_generate_variant:Nn \clist_length:N { c }
+\cs_new_nopar:Npn \clist_length:n #1 {
+ \tex_number:D \etex_numexpr:D
+ 0
+ \clist_map_function:nN {#1} \tl_elt_count_aux:n
+ \scan_stop:
}
% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\clist_element:Nn,\clist_element:nn}
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%
+%\begin{macro}{\clist_item:Nn}
+%\begin{macro}{\clist_item:cn}
+%\begin{macro}{\clist_item:nn}
+%\begin{macro}[aux]{\clist_element_aux:nw}
+% Recovering an item from a list is indexed from \( 0 \), with negative
+% numbers meaning ``from the end of the list''. So the first test
+% discriminates the two cases. For negative numbers, there is therefore
+% a need to know the number of items in the list before doing the
+% second phase, a recursion which will give an empty result if the
+% number is too big.
% \begin{macrocode}
-\cs_new:Npn \clist_element:Nn #1 {
- \exp_args:No \clist_element:nn #1
+\cs_new_nopar:Npn \clist_item:Nn #1#2 {
+ \exp_args:No \clist_item:nn {#1} {#2}
}
-\cs_new:Npn \clist_element:nn #1#2 {
-% \end{macrocode}
-% When negative indexing is used, calculate the length and subtract.
-% This incurs a minor performance penalty, of course, but it's nothing to
-% worry about.
-% \begin{macrocode}
- \int_compare:nNnTF {#2} < {0}
- {
- \exp_args:Nf \clist_element_aux:nw
- {\clist_length:n {#1}+#2} #1 , \q_recursion_tail , \q_recursion_stop
- }
- {
- \clist_element_aux:nw {#2} #1 , \q_recursion_tail , \q_recursion_stop
- }
-% \end{macrocode}
-% Shorter but less readable version of the code block above:
-% \begin{verbatim}
-% \exp_args:Nf \clist_element_aux:nnw
-% { #2 \int_compare:nNnT {#2} < {0} { +\clist_length:n {#1} } }
-% #1 , \q_recursion_tail , \q_recursion_stop
-% \end{verbatim}
-% Note in both cases I've used |\exp_args:Nf| directly, since I'm starting
-% to think that adding too many control sequences is bad for \TeX's
-% performance.
-% \begin{macrocode}
+\cs_generate_variant:Nn \clist_item:Nn { c }
+\cs_new:Npn \clist_item:nn #1#2 {
+ \int_compare:nNnTF {#2} < { 0 }
+ {
+ \exp_args:Nf \clist_item_aux:nw
+ { \clist_length:n {#1} + #2 }
+ #1 , \q_recursion_tail \q_recursion_stop
+ }
+ {
+ \clist_item_aux:nw {#2} #1
+ , \q_recursion_tail \q_recursion_stop
+ }
}
-\cs_new:Npn \clist_element_aux:nw #1#2, {
- \quark_if_recursion_tail_stop:n {#2}
- \int_compare:nNnTF {#1} = {0}
- {
- \use_i_delimit_by_q_recursion_stop:nw {#2}
- }
- {
- \clist_element_aux:nw {#1-1}
- }
+\cs_new:Npn \clist_item_aux:nw #1#2 , #3 {
+ \int_compare:nNnTF {#1} = { 0 }
+ { \use_i_delimit_by_q_recursion_stop:nw {#2} }
+ {
+ \quark_if_recursion_tail_stop:n {#3}
+ \clist_item_aux:nw { #1 - 1 } #3
+ }
}
% \end{macrocode}
-% \end{macro}
-%
-%
+%\end{macro}
+%\end{macro}
+%\end{macro}
+%\end{macro}
%
%
% \begin{macrocode}
diff --git a/Master/texmf-dist/source/latex/expl3/l3clist.dtx b/Master/texmf-dist/source/latex/expl3/l3clist.dtx
index a4acbe592cd..bfec9e082b6 100644
--- a/Master/texmf-dist/source/latex/expl3/l3clist.dtx
+++ b/Master/texmf-dist/source/latex/expl3/l3clist.dtx
@@ -1,5 +1,5 @@
% \iffalse
-%% File: l3clist.dtx Copyright (C) 2005-2010 Frank Mittelbach, LaTeX3 project
+%% File: l3clist.dtx Copyright (C) 2005-2011 Frank Mittelbach, LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -36,7 +36,7 @@
\RequirePackage{l3names}
%</driver|package>
%\fi
-\GetIdInfo$Id: l3clist.dtx 2071 2010-10-09 09:48:48Z joseph $
+\GetIdInfo$Id: l3clist.dtx 2178 2011-03-06 09:03:44Z mittelba $
{L3 Experimental comma separated lists}
%\iffalse
%<*driver>
@@ -560,6 +560,8 @@
%
% \section{\pkg{l3clist} implementation}
%
+% \TestFiles{m3clist002.lvt}
+%
% We start by ensuring that the required packages are loaded.
% \begin{macrocode}
%<*package>
@@ -572,20 +574,19 @@
%
% \subsection{Allocation and initialisation}
%
-% \begin{macro}{\clist_new:N}
-% \begin{macro}{\clist_new:c}
+% \begin{macro}{\clist_new:N, \clist_new:c}
+% \UnitTested
% Comma-Lists are implemented using token lists.
% \begin{macrocode}
\cs_new_eq:NN \clist_new:N \tl_new:N
\cs_generate_variant:Nn \clist_new:N {c}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\clist_clear:N}
-% \begin{macro}{\clist_clear:c}
-% \begin{macro}{\clist_gclear:N}
-% \begin{macro}{\clist_gclear:c}
+% \begin{macro}{\clist_clear:N, \clist_clear:c }
+% \UnitTested
+% \begin{macro}{\clist_gclear:N, \clist_gclear:c }
+% \UnitTested
% Clearing a comma-list is the same as clearing a token list.
% \begin{macrocode}
\cs_new_eq:NN \clist_clear:N \tl_clear:N
@@ -595,14 +596,12 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
-% \end{macro}
-% \end{macro}
%
%
-% \begin{macro}{\clist_clear_new:N}
-% \begin{macro}{\clist_clear_new:c}
-% \begin{macro}{\clist_gclear_new:N}
-% \begin{macro}{\clist_gclear_new:c}
+% \begin{macro}{\clist_clear_new:N, \clist_clear_new:c }
+% \UnitTested
+% \begin{macro}{\clist_gclear_new:N, \clist_gclear_new:c }
+% \UnitTested
% Clearing a comma-list is the same as clearing a token list.
% \begin{macrocode}
\cs_new_eq:NN \clist_clear_new:N \tl_clear_new:N
@@ -612,13 +611,10 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
-% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\clist_set_eq:NN}
-% \begin{macro}{\clist_set_eq:cN}
-% \begin{macro}{\clist_set_eq:Nc}
-% \begin{macro}{\clist_set_eq:cc}
+% \begin{macro}{\clist_set_eq:NN, \clist_set_eq:cN,
+% \clist_set_eq:Nc, \clist_set_eq:cc }
+% \UnitTested
% We can set one \meta{clist} equal to another.
% \begin{macrocode}
\cs_new_eq:NN \clist_set_eq:NN \tl_set_eq:NN
@@ -627,15 +623,11 @@
\cs_new_eq:NN \clist_set_eq:cc \tl_set_eq:cc
% \end{macrocode}
% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
%
%
-% \begin{macro}{\clist_gset_eq:NN}
-% \begin{macro}{\clist_gset_eq:cN}
-% \begin{macro}{\clist_gset_eq:Nc}
-% \begin{macro}{\clist_gset_eq:cc}
+% \begin{macro}{\clist_gset_eq:NN, \clist_gset_eq:cN,
+% \clist_gset_eq:Nc, \clist_gset_eq:cc }
+% \UnitTested
% An of course globally which seems to be needed far more often.
% \begin{macrocode}
\cs_new_eq:NN \clist_gset_eq:NN \tl_gset_eq:NN
@@ -644,14 +636,14 @@
\cs_new_eq:NN \clist_gset_eq:cc \tl_gset_eq:cc
% \end{macrocode}
% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
+%
+%
%
% \subsection{Predicates and conditionals}
%
% \begin{macro}{\clist_if_empty_p:N,\clist_if_empty_p:c}
% \begin{macro}[TF]{\clist_if_empty:N,\clist_if_empty:c}
+% \UnitTested
% \begin{macrocode}
\prg_new_eq_conditional:NNn \clist_if_empty:N \tl_if_empty:N {p,TF,T,F}
\prg_new_eq_conditional:NNn \clist_if_empty:c \tl_if_empty:c {p,TF,T,F}
@@ -672,6 +664,7 @@
% \end{macrocode}
% \end{macro}
%
+%
% \begin{macro}{\clist_if_eq_p:NN,\clist_if_eq_p:Nc,
% \clist_if_eq_p:cN,\clist_if_eq_p:cc}
% \begin{macro}[TF]{\clist_if_eq:NN,\clist_if_eq:cN,
@@ -686,9 +679,12 @@
% \end{macro}
% \end{macro}
%
+%
% \begin{macro}[TF]{\clist_if_in:Nn}
+% \UnitTested
% \begin{macro}[TF]{\clist_if_in:NV,\clist_if_in:No,\clist_if_in:cn,
% \clist_if_in:cV,\clist_if_in:co}
+% \UnitTested
% |\clist_if_in:NnTF| \m{clist}\m{item} \m{true~case} \m{false~case}
% will check whether \m{item} is in \m{clist} and then either execute
% the \m{true~case} or the \m{false~case}. \m{true~case} and
@@ -714,8 +710,8 @@
%
% \subsection{Retrieving data}
%
-% \begin{macro}{\clist_use:N}
-% \begin{macro}{\clist_use:c}
+% \begin{macro}{\clist_use:N, \clist_use:c}
+% \UnitTested
% Using a \meta{clist} is just executing it but
% if \m{clist} equals |\scan_stop:| it is probably stemming
% from a |\cs:w ... \cs_end:| that was created by mistake somewhere.
@@ -731,11 +727,9 @@
\cs_generate_variant:Nn \clist_use:N {c}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\clist_get:NN}
-% \begin{macro}{\clist_get:cN}
-% \begin{macro}{\clist_get_aux:w}
+% \begin{macro}{\clist_get:NN, \clist_get:cN}
+% \UnitTested
% |\clist_get:NN |\meta{comma-list}\meta{cmd} defines \meta{cmd} to be the
% left-most element of \meta{comma-list}.
% \begin{macrocode}
@@ -743,20 +737,22 @@
\clist_if_empty_err:N #1
\exp_after:wN \clist_get_aux:w #1,\q_stop
}
+\cs_generate_variant:Nn \clist_get:NN {cN}
% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[aux]{\clist_get_aux:w}
% \begin{macrocode}
\cs_new_protected:Npn \clist_get_aux:w #1,#2\q_stop #3 { \tl_set:Nn #3{#1} }
% \end{macrocode}
-% \begin{macrocode}
-\cs_generate_variant:Nn \clist_get:NN {cN}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
% \end{macro}
%
-% \begin{macro}{\clist_pop_aux:nnNN}
-% \begin{macro}{\clist_pop_aux:w}
-% \begin{macro}{\clist_pop_auxi:w}
+%
+%
+%
+% \begin{macro}[aux]{\clist_pop_aux:nnNN}
+% \begin{macro}[aux]{\clist_pop_aux:w}
+% \begin{macro}[aux]{\clist_pop_auxi:w}
% |\clist_pop_aux:nnNN| \meta{def$\sb1$} \meta{def$\sb2$} \meta{comma-list}
% \meta{cmd} assigns the left-most element of \meta{comma-list} to
% \meta{cmd} using \meta{def$\sb2$}, and assigns the tail of
@@ -783,6 +779,9 @@
% \end{macro}
% \end{macro}
%
+%
+%
+%
% \begin{macro}{\clist_show:N}
% \begin{macro}{\clist_show:c}
% \begin{macrocode}
@@ -816,7 +815,7 @@
%
% \subsection{Storing data}
%
-% \begin{macro}{\clist_put_aux:NNnnNn}
+% \begin{macro}[aux]{\clist_put_aux:NNnnNn}
% The generic put function.
% When adding we have to distinguish between an empty \meta{clist}
% and one that contains at least one item (otherwise we accumulate
@@ -835,13 +834,11 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\clist_put_left:Nn}
-% \begin{macro}{\clist_put_left:NV}
-% \begin{macro}{\clist_put_left:No}
-% \begin{macro}{\clist_put_left:Nx}
-% \begin{macro}{\clist_put_left:cn}
-% \begin{macro}{\clist_put_left:cV}
-% \begin{macro}{\clist_put_left:co}
+% \begin{macro}{\clist_put_left:Nn, \clist_put_left:NV,
+% \clist_put_left:No, \clist_put_left:Nx,
+% \clist_put_left:cn, \clist_put_left:cV,
+% \clist_put_left:co}
+% \UnitTested
% The operations for adding to the left.
% \begin{macrocode}
\cs_new_protected_nopar:Npn \clist_put_left:Nn {
@@ -850,20 +847,13 @@
\cs_generate_variant:Nn \clist_put_left:Nn {NV,No,Nx,cn,cV,co}
% \end{macrocode}
% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\clist_gput_left:Nn}
-% \begin{macro}{\clist_gput_left:NV}
-% \begin{macro}{\clist_gput_left:No}
-% \begin{macro}{\clist_gput_left:Nx}
-% \begin{macro}{\clist_gput_left:cn}
-% \begin{macro}{\clist_gput_left:cV}
-% \begin{macro}{\clist_gput_left:co}
+%
+% \begin{macro}{\clist_gput_left:Nn, \clist_gput_left:NV,
+% \clist_gput_left:No, \clist_gput_left:Nx,
+% \clist_gput_left:cn, \clist_gput_left:cV,
+% \clist_gput_left:co}
+% \UnitTested
% Global versions.
% \begin{macrocode}
\cs_new_protected_nopar:Npn \clist_gput_left:Nn {
@@ -872,20 +862,14 @@
\cs_generate_variant:Nn \clist_gput_left:Nn {NV,No,Nx,cn,cV,co}
% \end{macrocode}
% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\clist_put_right:Nn}
-% \begin{macro}{\clist_put_right:NV}
-% \begin{macro}{\clist_put_right:No}
-% \begin{macro}{\clist_put_right:Nx}
-% \begin{macro}{\clist_put_right:cn}
-% \begin{macro}{\clist_put_right:cV}
-% \begin{macro}{\clist_put_right:co}
+%
+%
+% \begin{macro}{\clist_put_right:Nn, \clist_put_right:NV,
+% \clist_put_right:No, \clist_put_right:Nx,
+% \clist_put_right:cn, \clist_put_right:cV,
+% \clist_put_right:co}
+% \UnitTested
% Adding something to the right side is almost the same.
% \begin{macrocode}
\cs_new_protected_nopar:Npn \clist_put_right:Nn {
@@ -894,20 +878,12 @@
\cs_generate_variant:Nn \clist_put_right:Nn {NV,No,Nx,cn,cV,co}
% \end{macrocode}
% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\clist_gput_right:Nn}
-% \begin{macro}{\clist_gput_right:NV}
-% \begin{macro}{\clist_gput_right:No}
-% \begin{macro}{\clist_gput_right:Nx}
-% \begin{macro}{\clist_gput_right:cn}
-% \begin{macro}{\clist_gput_right:cV}
-% \begin{macro}{\clist_gput_right:co}
+% \begin{macro}{\clist_gput_right:Nn, \clist_gput_right:NV,
+% \clist_gput_right:No, \clist_gput_right:Nx,
+% \clist_gput_right:cn, \clist_gput_right:cV,
+% \clist_gput_right:co}
+% \UnitTested
% And here the global variants.
% \begin{macrocode}
\cs_new_protected_nopar:Npn \clist_gput_right:Nn {
@@ -916,25 +892,16 @@
\cs_generate_variant:Nn \clist_gput_right:Nn {NV,No,Nx,cn,cV,co}
% \end{macrocode}
% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
%
%
% \subsection{Mapping}
%
-%\begin{macro}{\clist_map_function:NN}
-%\begin{macro}{\clist_map_function:Nc}
-%\begin{macro}{\clist_map_function:cN}
-%\begin{macro}{\clist_map_function:cc}
-%\begin{macro}{\clist_map_function:nN}
-%\begin{macro}{\clist_map_function:nc}
-%\begin{macro}{\clist_map_inline:Nn}
-%\begin{macro}{\clist_map_inline:cn}
-%\begin{macro}{\clist_map_inline:nn}
+% \begin{macro}{\clist_map_function:NN, \clist_map_function:Nc,
+% \clist_map_function:cN, \clist_map_function:cc,
+% \clist_map_function:nN,\clist_map_function:nc }
+% \UnitTested
+% \begin{macro}{\clist_map_inline:Nn, \clist_map_inline:nn }
+% \UnitTested
%\begin{macro}{\clist_map_break:}
% Using the above creating the comma mappings is easy..
% \begin{macrocode}
@@ -945,20 +912,14 @@
\cs_generate_variant:Nn \clist_map_inline:Nn { c }
\cs_generate_variant:Nn \clist_map_inline:Nn { nc }
% \end{macrocode}
-%\end{macro}
-%\end{macro}
-%\end{macro}
-%\end{macro}
-%\end{macro}
-%\end{macro}
-%\end{macro}
-%\end{macro}
-%\end{macro}
-%\end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
%
-% \begin{macro}{\clist_map_variable:nNn}
-% \begin{macro}{\clist_map_variable:NNn}
-% \begin{macro}{\clist_map_variable:cNn}
+%
+% \begin{macro}{\clist_map_variable:nNn, \clist_map_variable:NNn,
+% \clist_map_variable:cNn}
+% \UnitTested
% |\clist_map_variable:NNn| \meta{comma-list} \meta{temp} \meta{action} assigns
% \meta{temp} to each element and executes \meta{action}.
% \begin{macrocode}
@@ -975,8 +936,8 @@
\cs_generate_variant:Nn\clist_map_variable:NNn {cNn}
% \end{macrocode}
% \end{macro}
-% \end{macro}
-% \end{macro}
+%
+%
%
% \begin{macro}[aux]{\clist_map_variable_aux:Nnw}
% The general loop. Assign the temp variable |#1| to the current item
@@ -991,11 +952,15 @@
% \end{macrocode}
% \end{macro}
%
+%
+%
% \subsection{Higher level functions}
%
-% \begin{macro}[aux]{\clist_concat_aux:NNNN}
-% \begin{macro}{\clist_concat:NNN,\clist_concat:ccc}
+% \begin{macro}{\clist_concat:NNN, \clist_concat:ccc}
+% \UnitTested
% \begin{macro}{\clist_gconcat:NNN,\clist_gconcat:ccc}
+% \UnitTested
+% \begin{macro}[aux]{\clist_concat_aux:NNNN}
% |\clist_gconcat:NNN| \m{clist~1} \m{clist~2} \m{clist~3} will globally
% assign \m{clist~1} the concatenation of \m{clist~2} and
% \m{clist~3}.
@@ -1032,7 +997,9 @@
% \begin{macro}[aux]{\clist_remove_duplicates_aux:NN}
% \begin{macro}[aux]{\clist_remove_duplicates_aux:n}
% \begin{macro}{\clist_remove_duplicates:N}
+% \UnitTested
% \begin{macro}{\clist_gremove_duplicates:N}
+% \UnitTested
% Removing duplicate entries in a \meta{clist} is fairly straight
% forward. We use a temporary variable and then go through the list
% from left to right. For each element check if the element is
@@ -1100,12 +1067,11 @@
% specific functions together.
%
%
-% \begin{macro}{\clist_push:Nn}
-% \begin{macro}{\clist_push:No}
-% \begin{macro}{\clist_push:NV}
-% \begin{macro}{\clist_push:cn}
-% \begin{macro}{\clist_pop:NN}
-% \begin{macro}{\clist_pop:cN}
+% \begin{macro}{\clist_push:Nn, \clist_push:No,
+% \clist_push:NV, \clist_push:cn}
+% \UnitTested
+% \begin{macro}{\clist_pop:NN, \clist_pop:cN}
+% \UnitTested
% Since comma-lists can be used as stacks, we ought to have both
% `push' and `pop'. In most cases they are nothing more then new
% names for old functions.
@@ -1119,19 +1085,14 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
%
%
%
-% \begin{macro}{\clist_gpush:Nn}
-% \begin{macro}{\clist_gpush:No}
-% \begin{macro}{\clist_gpush:NV}
-% \begin{macro}{\clist_gpush:cn}
-% \begin{macro}{\clist_gpop:NN}
-% \begin{macro}{\clist_gpop:cN}
+% \begin{macro}{\clist_gpush:Nn, \clist_gpush:No,
+% \clist_gpush:NV, \clist_gpush:cn}
+% \UnitTested
+% \begin{macro}{\clist_gpop:NN, \clist_gpop:cN}
+% \UnitTested
% I don't agree with Denys that one needs only local stacks,
% actually I believe that one will probably need the functions
% here more often. In case of |\clist_gpop:NN| the value is
@@ -1149,14 +1110,10 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
%
%
-% \begin{macro}{\clist_top:NN}
-% \begin{macro}{\clist_top:cN}
+% \begin{macro}{\clist_top:NN,\clist_top:cN}
+% \UnitTested
% Looking at the top element of the stack without removing it is
% done with this operation.
% \begin{macrocode}
@@ -1164,7 +1121,6 @@
\cs_new_eq:NN \clist_top:cN \clist_get:cN
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
% \begin{macrocode}
%</initex|package>
diff --git a/Master/texmf-dist/source/latex/expl3/l3doc.dtx b/Master/texmf-dist/source/latex/expl3/l3doc.dtx
index ae52fcdcc3d..b374d8c5942 100644
--- a/Master/texmf-dist/source/latex/expl3/l3doc.dtx
+++ b/Master/texmf-dist/source/latex/expl3/l3doc.dtx
@@ -77,7 +77,7 @@ Do not distribute a modified version of this file.
% \end{macrocode}
%
%<*driver|class>
-\GetIdInfo$Id: l3doc.dtx 2037 2010-09-20 21:22:45Z joseph $
+\GetIdInfo$Id: l3doc.dtx 2180 2011-03-06 10:38:35Z will $
{L3 Experimental documentation class}
%</driver|class>
%
@@ -94,7 +94,7 @@ Do not distribute a modified version of this file.
%<*class>
\ProvidesExplClass
{\filename}{\filedate}{\fileversion}{\filedescription}
-\RequirePackage{expl3}
+\RequirePackage{expl3,xparse}
\let \filename \filenameOld
\let \filenameext \filenameextOld
\let \filedate \filedateOld
@@ -179,11 +179,10 @@ Do not distribute a modified version of this file.
%
% \section{Problems \& Todo}
%
-% Problems at the moment: (1)~not flexible in the types of things that can be documented; (2)~very nonstandard markup (using `"|"' as a delimiter and the odd `"/ (...)"' tags; (3)~no obvious link between the "\begin{function}" environment for documenting things to the "\begin{macro}" function that's used analogously in the implementation.
+% Problems at the moment: (1)~not flexible in the types of things that can be documented; (2)~very nonstandard markup (e.g., the odd `"/ (...)"' tags; (3)~no obvious link between the "\begin{function}" environment for documenting things to the "\begin{macro}" function that's used analogously in the implementation.
%
-% The environments "function" and "macro" should probably
-% be renamed to something like \env{funcdoc} and \env{funcimpl},
-% respectively.
+% The "macro" should probably be renamed to "function" when it is used within
+% an implementation section. But they should have the same syntax before that happens!
%
% Furthermore, we need another `layer' of documentation commands to
% account for `user-macro' as opposed to `code-functions'; the \pkg{expl3}
@@ -271,7 +270,7 @@ Do not distribute a modified version of this file.
% Two heavily-used environments are defined to describe the syntax
% of \textsf{expl3} functions and variables.
% \begin{verbatim}
-% \begin{function}{ list_of | functions }
+% \begin{function}{ list_of , functions }
% \begin{syntax}
% "\foo_bar:" \Arg{meta} <test1>
% \end{syntax}
@@ -279,22 +278,22 @@ Do not distribute a modified version of this file.
% \end{function}
% \end{verbatim}
%
-% \begin{function}{ list_of | functions }
+% \begin{function}{ list_of , functions }
% \begin{syntax}
% "\foo_bar:" \Arg{meta} <test1>
% \end{syntax}
% <description>
% \end{function}
%
-% Note that the list of functions use "|" as a separator.
+% Functions may be suffixed by an optional flag or two to indicate whether it is
+% expandable or defined in conditional forms. Use "/" to separate the function name
+% from the flag(s) and then add any of "(EXP)", "(TF)", or "(pTF)" for this.
+% Note that "(pTF)" implies "(EXP)" since predicates must always be expandable.
%
-% \bigskip
-% \textbf{MAJOR PROPOSED CHANGE}\qquad
-% I think we should probably discourage this sort of free-form markup in
-% \LaTeX3 and change this to a plain ol' comma-separated list instead.
+% Note that the list of functions used to use "|" as a separator instead, and this syntax is still supported.
%
-% Alternatively, we could provide programmatic means of looping through
-% lists with arbitary separators and promote this kind of thing.
+% \DescribeEnv{function}
+% If you are documenting a variable instead of a function, use the "variable" environment instead; it behaves identically to the "function" environment above.
%
% \subsection{Describing functions in the implementation}
%
@@ -311,6 +310,33 @@ Do not distribute a modified version of this file.
% % \end{macrocode}
% % \end{macro}
% \end{verbatim}
+% If you are documenting an auxiliary macro, it's generally not necessary
+% to highlight it as much and you also don't need to check it for, say,
+% having a test function and having a documentation chunk earlier in a "function"
+% environment. In this case, write "\begin[aux]{macro}" and it will be
+% marked as such; its margin call-out will be printed in grey.
+%
+% For documenting \pkg{expl3}-type conditionals, you may also pass this
+% environment a "TF" option (and omit it from the function name) to denote that
+% the function is provided with "T", "F", and "TF" suffixes.
+% A similar "pTF" option will print both "TF" and "_p" predicate forms.
+%
+% \DescribeMacro{\testfile}
+% Within a "macro" environment, it is a good idea to mark whether a unit test has
+% been created for the commands it defines. This is indicated by writing \cs{testfile}\marg{filename}
+% anywhere within "\begin{macro}" \dots "\end{macro}".
+% The first time a test file is referred to its filename will be printed in the documentation;
+% subsequent referals will be noted by \textsf{l3doc} but not printed.
+%
+% If the class option "checktest" is enabled, then it is an \emph{error} to have a
+% "macro" environment without a \cs{testfile} file. This is intended for large packages such
+% as \pkg{expl3} that should have absolutely comprehensive tests suites and whose authors
+% may not always be as sharp at adding new tests with new code as they should be.
+%
+% \DescribeEnv{variable}
+% When documenting variable definitions, use the "variable" environment instead.
+% It will, here, behave identically to the "macro" environment, except that if the class
+% option "checktest" is enabled, variables will not be required to have a test file.
%
% \DescribeEnv{arguments}
% Within a \env{macro} environment, you may use the \env{arguments} environment
@@ -424,6 +450,7 @@ Do not distribute a modified version of this file.
\bool_new:N \g_doc_full_bool
\bool_new:N \g_doc_lmodern_bool
\bool_new:N \g_doc_checkfunc_bool
+\bool_new:N \g_doc_checktest_bool
% \end{macrocode}
%
% \begin{macrocode}
@@ -437,13 +464,18 @@ Do not distribute a modified version of this file.
% \end{macrocode}
%
% \begin{macrocode}
+\DeclareOption{checktest}{ \bool_set_true:N \g_doc_checktest_bool }
+\DeclareOption{nochecktest}{ \bool_set_false:N \g_doc_checktest_bool }
+% \end{macrocode}
+%
+% \begin{macrocode}
\DeclareOption{cm-default}{ \bool_set_false:N \g_doc_lmodern_bool }
\DeclareOption{lm-default}{ \bool_set_true:N \g_doc_lmodern_bool }
% \end{macrocode}
%
% \begin{macrocode}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
-\ExecuteOptions{full,a4paper,nocheck,lm-default}
+\ExecuteOptions{full,a4paper,nocheck,nochecktest,lm-default}
% \end{macrocode}
%
% Input a local configuration file, if it exists.
@@ -631,13 +663,20 @@ Do not distribute a modified version of this file.
% \begin{macro}{\EnableDocumentation,\EnableImplementation}
% \begin{macro}{\DisableDocumentation,\DisableImplementation}
% \begin{macrocode}
-\newenvironment{documentation}{}{}
-\newenvironment{implementation}{}{}
+\cs_new:Npn \doc_implementation: {
+ \cs_set:Npn \variable {\macro[var]}
+}
+\cs_new:Npn \doc_docu: {
+ \cs_set_eq:NN \variable \variabledoc
+}
+\AtEndOfPackage{\doc_docu:}
+\newenvironment{documentation}{\doc_docu:}{}
+\newenvironment{implementation}{\doc_implementation:}{}
\newcommand\EnableDocumentation{%
- \renewenvironment{documentation}{}{}%
+ \renewenvironment{documentation}{\doc_docu:}{}%
}
\newcommand\EnableImplementation{%
- \renewenvironment{implementation}{}{}%
+ \renewenvironment{implementation}{\doc_implementation:}{}%
}
\newcommand\DisableDocumentation{%
\cs_set_eq:NN \documentation \comment
@@ -670,7 +709,7 @@ Do not distribute a modified version of this file.
% \end{environment}
%
% \begin{environment}{function}
-% \begin{environment}{variable}
+% \begin{environment}{variabledoc}
% Environment for documenting function(s).
% Stick the function names in a box. Use a "|" as delimiter and
% allow |<...>| to be used as markup for |\meta{...}|.
@@ -679,6 +718,7 @@ Do not distribute a modified version of this file.
\group_begin:
\char_make_active:N \<
\cs_new_nopar:Npn \function {
+ \phantomsection
\char_make_active:N \<
\cs_set_eq:NN < \doc_open_meta:n
\group_begin:
@@ -692,10 +732,7 @@ Do not distribute a modified version of this file.
\function_aux:n
}
\group_end:
-% \end{macrocode}
-% And the "variable" function is exactly the same for now:
-% \begin{macrocode}
-\cs_set_eq:NN \variable \function
+\cs_set_eq:NN \variabledoc \function
% \end{macrocode}
%
% \begin{macro}{\function_aux:n}
@@ -704,6 +741,7 @@ Do not distribute a modified version of this file.
% input has already been sanitised by catcode changes before reading
% the argument.
% \end{arguments}
+% Because vertical bars are odd delimiters to choose, we also now iterate over commas!
% \begin{macrocode}
\group_begin:
\char_make_other:N \|
@@ -713,7 +751,7 @@ Do not distribute a modified version of this file.
\bigskip\endgraf\noindent\ttfamily
\tabular[b]{ | l @{} c | }
\hline
- \doc_showmacro:w #1 | \q_stop \\
+ \clist_map_inline:nn {#1} {\doc_showmacro:w ##1 | \q_stop} \\
\hline
\endtabular
\group_end:
@@ -744,6 +782,7 @@ Do not distribute a modified version of this file.
%
% \begin{macrocode}
\bool_new:N \l_doc_meta_TF_bool
+\bool_new:N \l_doc_meta_pTF_bool
\bool_new:N \l_doc_meta_EXP_bool
% \end{macrocode}
%
@@ -771,6 +810,19 @@ Do not distribute a modified version of this file.
}{
\bool_gset_false:N \l_doc_meta_EXP_bool
}
+ \tl_if_in:nnTF {#2} { (pTF) } {
+ \bool_gset_true:N \l_doc_meta_TF_bool
+ \bool_gset_true:N \l_doc_meta_pTF_bool
+ \bool_gset_true:N \l_doc_meta_EXP_bool
+ \tl_set:Nx \l_doc_pTF_name_tl { \doc_predicate_from_base:w #1 \q_nil }
+ }{
+ \bool_gset_false:N \l_doc_meta_pTF_bool
+ }
+
+ \bool_if:NT \l_doc_meta_pTF_bool {
+ \doc_special_main_index:o { \l_doc_pTF_name_tl }
+ \seq_gput_right:Nx \g_doc_functions_seq { \tl_to_str:N \l_doc_pTF_name_tl }
+ }
\bool_if:NTF \l_doc_meta_TF_bool {
\doc_special_main_index:o { #1 TF }
@@ -782,7 +834,14 @@ Do not distribute a modified version of this file.
\seq_gput_right:Nx \g_doc_functions_seq { \tl_to_str:n { #1 } }
}
- \doc_showmacro_aux_ii:w #1::\q_stop
+ \bool_if:NTF \l_doc_meta_pTF_bool {
+ \bool_gset_false:N \l_doc_meta_TF_bool
+ \exp_after:wN \doc_showmacro_aux_ii:w \l_doc_pTF_name_tl ::\q_stop
+ \bool_gset_true:N \l_doc_meta_TF_bool
+ \doc_showmacro_aux_ii:w #1::\q_stop
+ }{
+ \doc_showmacro_aux_ii:w #1::\q_stop
+ }
}
% \end{macrocode}
% \end{macro}
@@ -806,7 +865,6 @@ Do not distribute a modified version of this file.
% \begin{macrocode}
\cs_set_nopar:Npn \doc_showmacro_aux_ii:w #1:#2:#3 \q_stop {
\nextnewline
-
\str_if_eq:xxTF {#1} {\g_doc_macro_tl} {
\doc_typeset_aux:n
}{
@@ -822,6 +880,12 @@ Do not distribute a modified version of this file.
\hspace{\tabcolsep}
$\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} {}
+ \bool_if:NT \g_doc_full_bool {
+ \exp_args:Nf\label{doc/function/\g_doc_macro_tl#3#2}
+ }
}
% \end{macrocode}
% \end{macro}
@@ -895,13 +959,24 @@ Do not distribute a modified version of this file.
% awaiting a more robust solution.
% \begin{macrocode}
\renewcommand \macro [1][] {
+
+ \int_compare:nNnTF \currentgrouplevel=2
+ { \int_gzero:N \g_doc_nested_macro_int }
+ { \int_incr:N \g_doc_nested_macro_int }
+
\bool_set_false:N \l_doc_macro_aux_bool
\bool_set_false:N \l_doc_macro_TF_bool
+ \bool_set_false:N \l_doc_macro_pTF_bool
+ \bool_set_false:N \l_doc_macro_var_bool
+ \bool_set_false:N \l_doc_tested_bool
+
\cs_set_eq:NN \doc_macroname_prefix:n \use:n
\cs_set_eq:NN \doc_macroname_suffix: \c_empty_tl
-
+
\cs_set_nopar:Npn \KV_key_no_value_elt:n ##1 { \use:c {doc_macro_opt_##1:} }
\KV_parse_space_removal_sanitize:n {#1}
+
+ \cs_set_eq:NN \testfile \doc_print_testfile:n
\group_begin:
\MakePrivateLetters
@@ -916,18 +991,40 @@ Do not distribute a modified version of this file.
% \begin{macrocode}
\cs_new_nopar:Npn \doc_macro_aux:n #1 {
\group_end:
- \clist_map_inline:nn {#1} { \doc_macro_single {##1} }
+ \cs_set:Npn \l_doc_macro_input_clist {#1}
+ \bool_if:NTF \l_doc_macro_pTF_bool
+ {
+ \clist_map_inline:nn {#1}
+ {
+ \exp_args:Nf \doc_macro_single
+ { \doc_predicate_from_base:w ##1 \q_nil }
+ }
+ \bool_set_true:N \l_doc_macro_TF_bool
+ \clist_map_inline:nn {#1} { \doc_macro_single {##1} }
+ \bool_set_false:N \l_doc_macro_TF_bool
+ }
+ {
+ \clist_map_inline:nn {#1} { \doc_macro_single {##1} }
+ }
}
% \end{macrocode}
%
% \begin{macrocode}
\bool_new:N \l_doc_macro_aux_bool
\bool_new:N \l_doc_macro_TF_bool
+\bool_new:N \l_doc_macro_pTF_bool
+\bool_new:N \l_doc_macro_var_bool
\cs_set_nopar:Npn \doc_macro_opt_aux: { \bool_set_true:N \l_doc_macro_aux_bool }
-\cs_set_nopar:Npn \doc_macro_opt_TF: { \bool_set_true:N \l_doc_macro_TF_bool }
+\cs_set_nopar:Npn \doc_macro_opt_TF: { \bool_set_true:N \l_doc_macro_TF_bool }
+\cs_set_nopar:Npn \doc_macro_opt_pTF: { \bool_set_true:N \l_doc_macro_pTF_bool }
+\cs_set_nopar:Npn \doc_macro_opt_var: { \bool_set_true:N \l_doc_macro_var_bool }
% \end{macrocode}
% \end{environment}
%
+% \begin{macrocode}
+\cs_set:Npn \doc_predicate_from_base:w #1:#2 \q_nil {#1_p:#2}
+% \end{macrocode}
+%
% \begin{environment}{doc_macro_single}
% Let's start to mess around with "doc"'s "macro" environment. See \file{doc.dtx}
% for a full explanation of the original environment. It's
@@ -936,7 +1033,9 @@ Do not distribute a modified version of this file.
% \item Macro/function/whatever name; input has already been sanitised.
% \end{arguments}
% \begin{macrocode}
+\int_new:N \l_doc_macro_int
\cs_set_nopar:Npn \doc_macro_single #1 {
+ \int_incr:N \l_doc_macro_int
\tl_set:Nx \saved@macroname { \token_to_str:N #1 }
\topsep\MacroTopsep
\trivlist
@@ -962,12 +1061,18 @@ Do not distribute a modified version of this file.
\bool_if:NT \l_doc_macro_TF_bool {
\cs_set_eq:NN \doc_macroname_suffix: \doc_typeset_TF:
}
+
+ \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} {}
+ }
- \cs_set_nopar:Npx \@tempa {
+ \use:x {
\exp_not:N \item [ \exp_not:N \doc_print_macroname:n {
\tl_to_str:n {#1}
}]
- } \@tempa
+ }
\global\advance \c@CodelineNo \@ne
\bool_if:NF \l_doc_macro_aux_bool {
@@ -986,7 +1091,7 @@ Do not distribute a modified version of this file.
\SpecialMainIndex{#1}\nobreak
\DoNotIndex{#1}
}
-
+
\global\advance \c@CodelineNo \m@ne
\ignorespaces
}
@@ -994,21 +1099,45 @@ Do not distribute a modified version of this file.
%
% \begin{macro}{\doc_print_macroname:n}
% \begin{macrocode}
+\tl_clear:N \l_doc_macro_tl
\cs_set_nopar:Npn \doc_print_macroname:n #1 {
- \strut \MacroFont
- \doc_macroname_prefix:n {#1} \doc_macroname_suffix: \ % space!
+ \strut
+ \int_compare:nTF { \tl_elt_count:n {#1} <= 28 }
+ { \MacroFont } { \MacroLongFont }
+
+ % INEFFICIENT: (!)
+ \exp_args:NNx \seq_if_in:NnTF \g_doc_functions_seq
+ { #1 \bool_if:NT \l_doc_macro_TF_bool { \tl_to_str:n {TF} } }
+ {
+ \hyperref [doc/function/\l_doc_macro_tl]
+ }
+ { \use:n }
+ {
+ \doc_macroname_prefix:n {#1} \doc_macroname_suffix: \ % space!
+ }
}
% \end{macrocode}
% \end{macro}
% \end{environment}
%
+% \begin{macro}{\MacroLongFont}
+% \begin{macrocode}
+\providecommand \MacroLongFont {
+ \fontfamily{lmtt}\fontseries{lc}\small
+}
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{\doc_typeset_TF:,\doc_typeset_aux:n}
% Used by \cs{doc_macro_single} and \cs{doc_showmacro_aux_ii:w} to typeset
% conditionals and auxiliary functions.
% \begin{macrocode}
\cs_set_nopar:Npn \doc_typeset_TF: {
- \color[gray]{0.5}
- \underline { \color{black} \itshape TF \kern-0.1em }
+ \itshape TF%
+ \makebox[0pt][r]{%
+ \color[gray]{0.5}
+ \underline { \phantom{\itshape TF} \kern-0.1em }
+ }
}
\cs_set_nopar:Npn \doc_typeset_aux:n #1 {
{\color[gray]{0.5} #1}
@@ -1016,6 +1145,167 @@ Do not distribute a modified version of this file.
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\doc_print_testfile:n}
+% Used to show that a macro has a test, somewhere.
+% \begin{macrocode}
+\DeclareDocumentCommand \doc_print_testfile:n {m} {
+ \bool_set_true:N \l_doc_tested_bool
+ \tl_if_eq:nnF {#1} {*} {
+ \seq_if_in:NnF \g_doc_testfiles_seq {#1}
+ {
+ \par{\footnotesize(\textit{
+ The~ test~ suite~ for~ this~ command,~ and~ others~ in~ this~ file,~ is~ \textsf{#1}}.
+ )\par}
+ \seq_gput_right:Nn \g_doc_testfiles_seq {#1}
+ }
+ }
+}
+\seq_new:N \g_doc_testfiles_seq
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\TestFiles}
+% \begin{macrocode}
+\DeclareDocumentCommand \TestFiles {m} {
+ \par
+ {\itshape
+ The~ following~ test~ files~ are~ used~ for~ this~ code:~ \textsf{#1}.
+ }
+ \par\ignorespaces
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\UnitTested}
+% \begin{macrocode}
+\DeclareDocumentCommand \UnitTested {} {
+ \testfile*
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\TestMissing}
+% \begin{macrocode}
+\cs_generate_variant:Nn \prop_gput:Nnn {NVx}
+\prop_new:N \g_doc_missing_tests_prop
+\DeclareDocumentCommand \TestMissing {m} {
+ \prop_if_in:NVTF \g_doc_missing_tests_prop \l_doc_macro_input_clist
+ {
+ \prop_get:NVN \g_doc_missing_tests_prop \l_doc_macro_input_clist \l_tmpa_tl
+ \prop_gput:NVx \g_doc_missing_tests_prop \l_doc_macro_input_clist
+ {
+ *~ \l_tmpa_tl
+ ^^J \exp_not:n {\space\space\space\space\space\space}
+ *~ #1
+ }
+ }
+ { \prop_gput:NVn \g_doc_missing_tests_prop \l_doc_macro_input_clist {#1} }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% Delete these when they're finally available:
+% \begin{macrocode}
+\cs_set_nopar:Npn \clist_length:N #1 {
+ \tex_number:D \etex_numexpr:D
+ 0
+ \clist_map_function:NN #1 \tl_elt_count_aux:n
+ \scan_stop:
+}
+\cs_set_nopar:Npn \clist_length:n #1 {
+ \tex_number:D \etex_numexpr:D
+ 0
+ \clist_map_function:nN {#1} \tl_elt_count_aux:n
+ \scan_stop:
+}
+\cs_set_nopar:Npn \clist_item:Nn #1#2 {
+ \exp_args:No \clist_item:nn {#1} {#2}
+}
+\cs_generate_variant:Nn \clist_item:Nn { c }
+\cs_set:Npn \clist_item:nn #1#2 {
+ \int_compare:nNnTF {#2} < { 0 }
+ {
+ \exp_args:Nf \clist_item_aux:nw
+ { \clist_length:n {#1} + #2 }
+ #1 , \q_recursion_tail \q_recursion_stop
+ }
+ {
+ \clist_item_aux:nw {#2} #1
+ , \q_recursion_tail \q_recursion_stop
+ }
+}
+\cs_set:Npn \clist_item_aux:nw #1#2 , #3 {
+ \int_compare:nNnTF {#1} = { 0 }
+ { \use_i_delimit_by_q_recursion_stop:nw {#2} }
+ {
+ \quark_if_recursion_tail_stop:n {#3}
+ \clist_item_aux:nw { #1 - 1 } #3
+ }
+}
+% \end{macrocode}
+%
+% \begin{macro}{\endmacro}
+% \begin{macrocode}
+\int_new:N \g_doc_nested_macro_int
+\cs_set:Nn \doc_texttt_comma:n {\,,~\texttt{#1}}
+\cs_set:Npn \endmacro {
+ \int_compare:nT {\g_doc_nested_macro_int<1}
+ {
+ \par\nobreak{\footnotesize(\emph{
+ End~ definition~ for~
+ \prg_case_int:nnn { \clist_length:N \l_doc_macro_input_clist }
+ {
+ {1} { \texttt{ \clist_use:N \l_doc_macro_input_clist }. }
+ {2}
+ {
+ \tl_set:Nx \l_clist_first_tl { \clist_item:Nn \l_doc_macro_input_clist {0} }
+ \tl_set:Nx \l_clist_last_tl { \clist_item:Nn \l_doc_macro_input_clist {1} }
+ \texttt{\l_clist_first_tl}\,~ and~ \texttt{\l_clist_last_tl}\,.
+ }
+ {3}
+ {
+ \tl_set:Nx \l_clist_first_tl { \clist_item:Nn \l_doc_macro_input_clist {0} }
+ \tl_set:Nx \l_clist_mid_tl { \clist_item:Nn \l_doc_macro_input_clist {1} }
+ \tl_set:Nx \l_clist_last_tl { \clist_item:Nn \l_doc_macro_input_clist {2} }
+ \texttt{\l_clist_first_tl}\,,~
+ \texttt{\l_clist_mid_tl}\,,~
+ and~ \texttt{\l_clist_last_tl}\,.
+ }
+ }
+ {
+ \tl_set:Nx \l_clist_first_tl { \clist_item:Nn \l_doc_macro_input_clist {0} }
+ \texttt{\l_clist_first_tl}\,~and~others.
+ }
+ \bool_if:nT {
+ !\l_doc_macro_aux_bool &&
+ \int_compare_p:n {\g_doc_nested_macro_int<1}
+ }
+ {
+ \int_compare:nNnTF \l_doc_macro_int=1 {~This~} {~These~}
+ \bool_if:NTF \l_doc_macro_var_bool{variable}{function}
+ \int_compare:nNnTF \l_doc_macro_int=1 {~is~}{s~are~}
+ documented~on~page~
+ \exp_args:Nx\pageref{doc/function/\l_doc_macro_tl}.
+ }
+ })\par}
+ }
+ \bool_if:nT
+ { \g_doc_checktest_bool &&
+ !( \l_doc_macro_aux_bool || \l_doc_macro_var_bool ) &&
+ !\l_doc_tested_bool
+ }
+ {
+ \seq_gput_right:Nx \g_doc_not_tested_seq
+ {
+ \l_doc_macro_input_clist
+ \bool_if:NT \l_doc_macro_pTF_bool {~(pTF)}
+ \bool_if:NT \l_doc_macro_TF_bool {~(TF)}
+ }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{\DescribeOption}
% For describing package options. Due to Joseph Wright.
% Name/usage might change soon.
@@ -1342,6 +1632,7 @@ Do not distribute a modified version of this file.
% \begin{macrocode}
\seq_new:N \g_doc_functions_seq
\seq_new:N \g_doc_macros_seq
+\seq_new:N \g_doc_not_tested_seq
% \end{macrocode}
%
% \begin{macrocode}
@@ -1397,6 +1688,52 @@ Do not distribute a modified version of this file.
}
% \end{macrocode}
%
+% \begin{macrocode}
+\cs_new:Npn \doc_show_not_tested: {
+ \bool_if:NT \g_doc_checktest_bool
+ {
+ \bool_if:nT { !(\seq_if_empty_p:N \g_doc_not_tested_seq) ||
+ !(\prop_if_empty_p:N \g_doc_missing_tests_prop) }
+ {
+ \tl_clear:N \l_tmpa_tl
+ \prop_if_empty:NF \g_doc_missing_tests_prop
+ {
+ \tl_put_right:Nn \l_tmpa_tl
+ {
+ ^^J^^JThe~ following~ macro(s)~ have~ incomplete~ tests:^^J
+ }
+ \prop_map_inline:Nn \g_doc_missing_tests_prop
+ {
+ \tl_put_right:Nn \l_tmpa_tl
+ {^^J\space\space\space\space ##1
+ ^^J\space\space\space\space\space\space ##2}
+ }
+ }
+ \seq_if_empty:NF \g_doc_not_tested_seq
+ {
+ \tl_put_right:Nn \l_tmpa_tl
+ {
+ ^^J^^J
+ The~ following~ macro(s)~ do~ not~ have~ any~ tests:^^J
+ }
+ \seq_map_inline:Nn \g_doc_not_tested_seq
+ {
+ \clist_map_inline:nn {##1}
+ {
+ \tl_put_right:Nn \l_tmpa_tl {^^J\space\space\space\space ####1}
+ }
+ }
+ \int_set:Nn \l_tmpa_int {\etex_interactionmode:D}
+ \errorstopmode
+ \ClassError{l3doc}{\l_tmpa_tl}{}
+ \int_set:Nn \etex_interactionmode:D {\l_tmpa_int}
+ }
+ }
+ }
+}
+\AtEndDocument{ \doc_show_not_tested: }
+% \end{macrocode}
+%
% \subsection{Indexing}
%
% Fix index (for now):
@@ -1610,53 +1947,41 @@ page_precedence "rnaA"
%
% \bigskip\bigskip
%
-% \begin{macro}{\c_minus_one}
-% \begin{macro}{\c_zero}
-% \begin{macro}{\c_one}
-% \begin{macro}{\c_two}
-% \begin{macro}{\c_three}
-% \begin{macro}{\c_four}
-% \begin{macro}{\c_five}
-% \begin{macro}{\c_six}
-% \begin{macro}{\c_seven}
-% \begin{macro}{\c_eight}
-% \begin{macro}{\c_nine}
-% \begin{macro}{\c_ten}
-% \begin{macro}{\c_eleven}
-% \begin{macro}{\c_sixteen}
-% \begin{macro}{\c_thirty_two}
-% \begin{macro}{\c_hundred_one}
-% \begin{macro}{\c_twohundred_fifty_five}
-% \begin{macro}{\c_twohundred_fifty_six}
-% \begin{macro}{\c_thousand}
-% \begin{macro}{\c_ten_thousand}
-% \begin{macro}{\c_ten_thousand_one}
+% \begin{macro}{\aaaa_bbbb_cccc_dddd_eeee_ffff_gggg_hhhh}
+% Long macro names need to be printed in a shorter font.
+% \begin{macrocode}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\c_minus_one,
+% \c_zero,
+% \c_one,
+% \c_two,
+% \c_three,
+% \c_four,
+% \c_five,
+% \c_six,
+% \c_seven,
+% \c_eight,
+% \c_nine,
+% \c_ten,
+% \c_eleven,
+% \c_sixteen,
+% \c_thirty_two,
+% \c_hundred_one,
+% \c_twohundred_fifty_five,
+% \c_twohundred_fifty_six,
+% \c_thousand,
+% \c_ten_thousand,
+% \c_ten_thousand_one}
% \begin{arguments}
% \item name
% \item parameters
% \end{arguments}
% Another test.
% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
+%
%
%\ExplSyntaxOn
%\cs_set_eq:NN\g_doc_functions_seq\g_saved_doc_functions_seq
diff --git a/Master/texmf-dist/source/latex/expl3/l3font.dtx b/Master/texmf-dist/source/latex/expl3/l3font.dtx
new file mode 100644
index 00000000000..0098dab3314
--- /dev/null
+++ b/Master/texmf-dist/source/latex/expl3/l3font.dtx
@@ -0,0 +1,251 @@
+% \iffalse
+%% File: l3font.dtx Copyright (C) 1990-2011 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.
+%%
+%% -----------------------------------------------------------------------
+%%
+%% 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 LaTeX Project Team.
+%%
+%% -----------------------------------------------------------------------
+%
+%<*driver|package>
+\RequirePackage{l3names}
+%</driver|package>
+%\fi
+\GetIdInfo$Id: l3font.dtx 2175 2011-03-03 12:16:46Z will $
+ {L3 Experimental Font Loading}
+%\iffalse
+%<*driver>
+%\fi
+\ProvidesFile{\filename.\filenameext}
+ [\filedate\space v\fileversion\space\filedescription]
+%\iffalse
+\documentclass[full,checktest]{l3doc}
+\begin{document}
+\DocInput{l3font.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+%
+% \title{The \textsf{l3font} package\thanks{This file
+% has version number \fileversion, last
+% revised \filedate.}\\
+% ``Fonts''}
+% \author{\Team}
+% \date{\filedate}
+% \maketitle
+%
+% \begin{documentation}
+%
+% This module covers basic font loading commands.
+% Functions are provided to load font faces and extract various
+% properties from them.
+%
+% Some features within are specific \XeTeX\ and \LuaTeX; such functions
+% will be explicitly noted.
+%
+% This module is currently a work in progress as we incorporate \LaTeXe's
+% font loading into \pkg{expl3}. The successor to the NFSS will provide
+% (backwards compatible) user-level functions for font selection.
+%
+%
+% \section{Functions}
+%
+%
+% \begin{function}{\font_set:Nnn,\font_gset:Nnn,
+% \font_set:cnn,\font_gset:cnn}
+% \begin{syntax}
+% "\font_set:Nnn" <font cs> \Arg{font name} \Arg{font size}
+% \end{syntax}
+% Defines <cs> as a command to select the font defined by <font name>
+% at the <font size>. If the <font size> is empty, the font will be loaded
+% at its design size, which is usually specified by the font designer.
+% For fonts without a typical design size, this will usually be 10\,pt.
+% \end{function}
+%
+% \begin{function}{\font_set_eq:NN,\font_gset_eq:NN}
+% \begin{syntax}
+% "\font_set_eq:NN" <font cs1> <font cs2>
+% \end{syntax}
+% Copies <font cs2> into <font cs1>.
+% \end{function}
+%
+% \begin{function}{\font_set_to_current:N,\font_gset_to_current:N}
+% \begin{syntax}
+% "\font_set_to_current:N" <font cs>
+% \end{syntax}
+% Sets <font cs> to the font that is currently selected.
+% \end{function}
+%
+% \begin{function}{\font_if_null_p:N /(EXP) | \font_if_null:N / (TF)(EXP)}
+% \begin{syntax}
+% "\font_if_null:NTF" <font cs> \Arg{true} \Arg{false}
+% \end{syntax}
+% Conditional to switch whether the control sequence is the `null font'.
+% \end{function}
+%
+% \begin{function}{\font_suppress_not_found_error:,\font_enable_not_found_error:}
+% \begin{syntax}
+% "\font_suppress_not_found_error:"
+% "\font_enable_not_found_error:"
+% \end{syntax}
+% \emph{Not available in pdf\TeX.}
+% In LuaTeX or XeTeX, the error when a font is selected but does not exist
+% can be toggled with these two commands. The non-existance of a font can
+% then be tested with the "\font_if_null_p:N" conditional.
+% \end{function}
+%
+%
+%
+%
+% \end{documentation}
+%
+% \begin{implementation}
+%
+% \section{\pkg{l3font} implementation}
+%
+% \begin{macrocode}
+%<*package>
+\ProvidesExplPackage
+ {\filename}{\filedate}{\fileversion}{\filedescription}
+\package_check_loaded_expl:
+%</package>
+%<*initex|package>
+% \end{macrocode}
+%
+%
+% \begin{macro}{\font_set:Nnn,\font_gset:Nnn,\font_set:cnn,\font_gset:cnn}
+% \begin{arguments}
+% \item csname \item fontname \item size (dimension)
+% \end{arguments}
+% Note that the fontname needs to be escaped appropriately in "xetex"
+% or "luatex".
+% \testfile{m3font001.lvt}
+% \begin{macrocode}
+\cs_new_protected:Npn \font_set:Nnn #1#2#3 { \tex_font:D #1 = #2 ~at~ #3 \scan_stop: }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new_protected:Npn \font_gset:Nnn #1#2#3 {
+ \tex_global:D \tex_font:D #1 = #2 ~at~ #3 \scan_stop:
+}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_generate_variant:Nn \font_set:Nnn {c}
+\cs_generate_variant:Nn \font_gset:Nnn {c}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\font_set_eq:NN}
+% \testfile*
+% \begin{macrocode}
+\cs_set_eq:NN \font_set_eq:NN \tex_let:D
+\cs_set_protected:Npn \font_gset_eq:NN { \tex_global:D \tex_let:D }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\font_set_to_current:N,\font_gset_to_current:N}
+% \testfile*
+% \begin{macrocode}
+\cs_set:Npn \font_set_to_current:N #1 {
+ \exp_after:wN \font_set_eq:NN \exp_after:wN #1 \tex_the:D \tex_font:D
+}
+\cs_set:Npn \font_gset_to_current:N #1 {
+ \tex_global:D \exp_after:wN \font_set_eq:NN \exp_after:wN #1 \tex_the:D \tex_font:D
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\font_suppress_not_found_error:,\font_enable_not_found_error:}
+% \testfile* ^^A THIS IS A BIG LIE! NOT TESTED, BUT OH WELL
+% \begin{macrocode}
+\luatex_if_engine:TF
+{
+ \cs_new:Npn \font_suppress_not_found_error:
+ {\luatexsuppressfontnotfounderror=\c_one}
+ \cs_new:Npn \font_enable_not_found_error:
+ {\luatexsuppressfontnotfounderror=\c_zero}
+}
+{
+ \xetex_if_engine:TF
+ {
+ \cs_new:Npn \font_suppress_not_found_error:
+ {\suppressfontnotfounderror=\c_one}
+ \cs_new:Npn \font_enable_not_found_error:
+ {\suppressfontnotfounderror=\c_zero}
+ }
+ {
+ \cs_new:Npn \font_suppress_not_found_error:
+ {
+ \msg_kernel_warning:nnx {l3font} {cmd-pdftex-unavail}
+ {\font_suppress_not_found_error:}
+ }
+ }
+}
+\msg_kernel_new:nnn {l3font} {cmd-pdftex-unavail} {
+ The~ command~ `\exp_not:n{#1}'~ is~ not~ available~ for~ the~ pdfTeX~ format.
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\font_if_null_p:N}
+% \testfile*
+% \begin{macro}[TF]{\font_if_null:N}
+% \testfile*
+% \begin{macrocode}
+\prg_new_conditional:Nnn \font_if_null:N {p,TF,T,F} {
+ \if_meaning:w #1 \tex_nullfont:D
+ \prg_return_true:
+ \else:
+ \prg_return_false:
+ \fi:
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+%</initex|package>
+% \end{macrocode}
+%
+% Show token usage:
+% \begin{macrocode}
+%<*showmemory>
+\showMemUsage
+%</showmemory>
+% \end{macrocode}
+%
+% \end{implementation}
+% \PrintIndex
+%
+% \endinput
diff --git a/Master/texmf-dist/source/latex/expl3/l3format.ins b/Master/texmf-dist/source/latex/expl3/l3format.ins
deleted file mode 100644
index 5fb4d549050..00000000000
--- a/Master/texmf-dist/source/latex/expl3/l3format.ins
+++ /dev/null
@@ -1,83 +0,0 @@
-
-\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 the format file
-\generate{%
- \file{latex3.ltx}{%
- \from{l3names.dtx}{initex} % The naming conventions
- \from{l3basics.dtx}{initex} % Initialisations
- \from{l3expan.dtx}{initex} % Controlling expansion of arguments
- \from{l3tl.dtx}{initex} % token list variables
- \from{l3intexpr.dtx}{initex} %
- \from{l3quark.dtx}{initex} % quarks
- \from{l3seq.dtx}{initex} % Sequences and stacks
-%
- \from{l3alloc.dtx}{initex} % Register allocations
-%
- \from{l3toks.dtx}{initex} % dealing with token registers
- \from{l3int.dtx}{initex} % dealing with integer registers
- \from{l3prg.dtx}{initex} % Program control structures
- \from{l3clist.dtx}{initex} % Comma separated lists
- \from{l3token.dtx}{initex} % token investigation
- \from{l3prop.dtx}{initex} % property lists
- \from{l3msg.dtx}{initex} % setting up for user communication
- \from{l3io.dtx}{initex} % dealing with I/O
- \from{l3skip.dtx}{initex} % dealing with skip registers
- \from{l3box.dtx}{initex} % dealing with box registers
- \from{l3keyval.dtx}{initex} %
- \from{l3keys.dtx}{initex} %
- \from{l3fp.dtx}{initex} %
- \from{l3luatex.dtx}{initex} %
-%
-% \from{l3precom.dtx}{initex,precompile} %
-%
- \from{l3calc.dtx}{initex} %
- \from{l3xref.dtx}{initex} % Cross references
- \from{l3file.dtx}{initex} % file loading
-%
- \from{l3vers.dtx}{initex} % Version information
-%
-%
-% \from{l3chk.dtx}{initex} % Checking functions
-%
- \from{l3final.dtx}{initex} % Final wrap-up
- }
-}
-
-% generate higher-level material
-\generate{%
- \file{xparse.ltx}{\from{xparse.dtx}{initex}}
- \file{xtemplate.ltx}{\from{xtemplate.dtx}{initex}}
-}
-
-\Msg{}
-\Msg{*************************************}
-\Msg{*}
-\Msg{* Now run (PDF)INITEX on lbase.ltx}
-\Msg{*}
-\Msg{* On an up to date system, run }
-\Msg{* pdftex -ini -etex *latex3.ltx }
-\Msg{*}
-\Msg{*************************************}
-\Msg{}
-
-\endbatchfile
diff --git a/Master/texmf-dist/source/latex/expl3/l3fp.dtx b/Master/texmf-dist/source/latex/expl3/l3fp.dtx
index a6fb183db8c..6232374336a 100644
--- a/Master/texmf-dist/source/latex/expl3/l3fp.dtx
+++ b/Master/texmf-dist/source/latex/expl3/l3fp.dtx
@@ -1,5 +1,5 @@
% \iffalse
-%% File: l3fp.dtx Copyright (C) 2010 LaTeX3 project
+%% File: l3fp.dtx Copyright (C) 2010-2011 LaTeX3 project
%%
%% It may be distributed and/or modified under the conditions of the
%% LaTeX Project Public License (LPPL), either version 1.3c of this
@@ -35,7 +35,7 @@
\RequirePackage{l3names}
%</driver|package>
%\fi
-\GetIdInfo$Id: l3fp.dtx 2129 2011-01-10 22:58:48Z joseph $
+\GetIdInfo$Id: l3fp.dtx 2178 2011-03-06 09:03:44Z mittelba $
{L3 Experimental floating-point operations}
%\iffalse
%<*driver>
@@ -796,6 +796,8 @@
%\begin{implementation}
%
%\section{Implementation}
+%
+% \TestFiles{m3fp003.lvt}
%
% We start by ensuring that the required packages are loaded.
% \begin{macrocode}
@@ -809,13 +811,13 @@
%
%\subsection{Constants}
%
-%\begin{macro}{\c_forty_four}
-%\begin{macro}{\c_one_hundred}
-%\begin{macro}{\c_one_thousand}
-%\begin{macro}{\c_one_million}
-%\begin{macro}{\c_one_hundred_million}
-%\begin{macro}{\c_five_hundred_million}
-%\begin{macro}{\c_one_thousand_million}
+%\begin{macro}[aux]{\c_forty_four}
+%\begin{macro}[aux]{\c_one_hundred}
+%\begin{macro}[aux]{\c_one_thousand}
+%\begin{macro}[aux]{\c_one_million}
+%\begin{macro}[aux]{\c_one_hundred_million}
+%\begin{macro}[aux]{\c_five_hundred_million}
+%\begin{macro}[aux]{\c_one_thousand_million}
% There is some speed to gain by moving numbers into fixed positions.
% \begin{macrocode}
\int_const:Nn \c_forty_four { 44 }
@@ -834,12 +836,12 @@
%\end{macro}
%\end{macro}
%
-%\begin{macro}{\c_fp_pi_by_four_decimal_int}
-%\begin{macro}{\c_fp_pi_by_four_extended_int}
-%\begin{macro}{\c_fp_pi_decimal_int}
-%\begin{macro}{\c_fp_pi_extended_int}
-%\begin{macro}{\c_fp_two_pi_decimal_int}
-%\begin{macro}{\c_fp_two_pi_extended_int}
+%\begin{macro}[aux]{\c_fp_pi_by_four_decimal_int}
+%\begin{macro}[aux]{\c_fp_pi_by_four_extended_int}
+%\begin{macro}[aux]{\c_fp_pi_decimal_int}
+%\begin{macro}[aux]{\c_fp_pi_extended_int}
+%\begin{macro}[aux]{\c_fp_two_pi_decimal_int}
+%\begin{macro}[aux]{\c_fp_two_pi_extended_int}
% Parts of \( \pi \) for trigonometric range reduction, implemented
% as \texttt{int} variables for speed.
% \begin{macrocode}
@@ -905,7 +907,7 @@
%
%\subsection{Variables}
%
-%\begin{macro}{\l_fp_arg_tl}
+%\begin{macro}[aux]{\l_fp_arg_tl}
% A token list to store the formalised representation of the input
% for transcendental functions.
% \begin{macrocode}
@@ -913,14 +915,14 @@
% \end{macrocode}
%\end{macro}
%
-%\begin{macro}{\l_fp_count_int}
+%\begin{macro}[aux]{\l_fp_count_int}
% A counter for things like the number of divisions possible.
% \begin{macrocode}
\int_new:N \l_fp_count_int
% \end{macrocode}
%\end{macro}
%
-%\begin{macro}{\l_fp_div_offset_int}
+%\begin{macro}[aux]{\l_fp_div_offset_int}
% When carrying out division, an offset is used for the results to
% get the decimal part correct.
% \begin{macrocode}
@@ -928,10 +930,10 @@
% \end{macrocode}
%\end{macro}
%
-%\begin{macro}{\l_fp_exp_integer_int}
-%\begin{macro}{\l_fp_exp_decimal_int}
-%\begin{macro}{\l_fp_exp_extended_int}
-%\begin{macro}{\l_fp_exp_exponent_int}
+%\begin{macro}[aux]{\l_fp_exp_integer_int}
+%\begin{macro}[aux]{\l_fp_exp_decimal_int}
+%\begin{macro}[aux]{\l_fp_exp_extended_int}
+%\begin{macro}[aux]{\l_fp_exp_exponent_int}
% Used for the calculation of exponent values.
% \begin{macrocode}
\int_new:N \l_fp_exp_integer_int
@@ -944,14 +946,14 @@
%\end{macro}
%\end{macro}
%
-%\begin{macro}{\l_fp_input_a_sign_int}
-%\begin{macro}{\l_fp_input_a_integer_int}
-%\begin{macro}{\l_fp_input_a_decimal_int}
-%\begin{macro}{\l_fp_input_a_exponent_int}
-%\begin{macro}{\l_fp_input_b_sign_int}
-%\begin{macro}{\l_fp_input_b_integer_int}
-%\begin{macro}{\l_fp_input_b_decimal_int}
-%\begin{macro}{\l_fp_input_b_exponent_int}
+%\begin{macro}[aux]{\l_fp_input_a_sign_int}
+%\begin{macro}[aux]{\l_fp_input_a_integer_int}
+%\begin{macro}[aux]{\l_fp_input_a_decimal_int}
+%\begin{macro}[aux]{\l_fp_input_a_exponent_int}
+%\begin{macro}[aux]{\l_fp_input_b_sign_int}
+%\begin{macro}[aux]{\l_fp_input_b_integer_int}
+%\begin{macro}[aux]{\l_fp_input_b_decimal_int}
+%\begin{macro}[aux]{\l_fp_input_b_exponent_int}
% Storage for the input: two storage areas as there are at most two
% inputs.
% \begin{macrocode}
@@ -973,8 +975,8 @@
%\end{macro}
%\end{macro}
%
-%\begin{macro}{\l_fp_input_a_extended_int}
-%\begin{macro}{\l_fp_input_b_extended_int}
+%\begin{macro}[aux]{\l_fp_input_a_extended_int}
+%\begin{macro}[aux]{\l_fp_input_b_extended_int}
% For internal use, `extended' floating point numbers are
% needed.
% \begin{macrocode}
@@ -984,18 +986,18 @@
%\end{macro}
%\end{macro}
%
-%\begin{macro}{\l_fp_mul_a_i_int}
-%\begin{macro}{\l_fp_mul_a_ii_int}
-%\begin{macro}{\l_fp_mul_a_iii_int}
-%\begin{macro}{\l_fp_mul_a_iv_int}
-%\begin{macro}{\l_fp_mul_a_v_int}
-%\begin{macro}{\l_fp_mul_a_vi_int}
-%\begin{macro}{\l_fp_mul_b_i_int}
-%\begin{macro}{\l_fp_mul_b_ii_int}
-%\begin{macro}{\l_fp_mul_b_iii_int}
-%\begin{macro}{\l_fp_mul_b_iv_int}
-%\begin{macro}{\l_fp_mul_b_v_int}
-%\begin{macro}{\l_fp_mul_b_vi_int}
+%\begin{macro}[aux]{\l_fp_mul_a_i_int}
+%\begin{macro}[aux]{\l_fp_mul_a_ii_int}
+%\begin{macro}[aux]{\l_fp_mul_a_iii_int}
+%\begin{macro}[aux]{\l_fp_mul_a_iv_int}
+%\begin{macro}[aux]{\l_fp_mul_a_v_int}
+%\begin{macro}[aux]{\l_fp_mul_a_vi_int}
+%\begin{macro}[aux]{\l_fp_mul_b_i_int}
+%\begin{macro}[aux]{\l_fp_mul_b_ii_int}
+%\begin{macro}[aux]{\l_fp_mul_b_iii_int}
+%\begin{macro}[aux]{\l_fp_mul_b_iv_int}
+%\begin{macro}[aux]{\l_fp_mul_b_v_int}
+%\begin{macro}[aux]{\l_fp_mul_b_vi_int}
% Multiplication requires that the decimal part is split into parts
% so that there are no overflows.
% \begin{macrocode}
@@ -1025,8 +1027,8 @@
%\end{macro}
%\end{macro}
%
-%\begin{macro}{\l_fp_mul_output_int}
-%\begin{macro}{\l_fp_mul_output_tl}
+%\begin{macro}[aux]{\l_fp_mul_output_int}
+%\begin{macro}[aux]{\l_fp_mul_output_tl}
% Space for multiplication results.
% \begin{macrocode}
\int_new:N \l_fp_mul_output_int
@@ -1035,10 +1037,10 @@
%\end{macro}
%\end{macro}
%
-%\begin{macro}{\l_fp_output_sign_int}
-%\begin{macro}{\l_fp_output_integer_int}
-%\begin{macro}{\l_fp_output_decimal_int}
-%\begin{macro}{\l_fp_output_exponent_int}
+%\begin{macro}[aux]{\l_fp_output_sign_int}
+%\begin{macro}[aux]{\l_fp_output_integer_int}
+%\begin{macro}[aux]{\l_fp_output_decimal_int}
+%\begin{macro}[aux]{\l_fp_output_exponent_int}
% Output is stored in the same way as input.
% \begin{macrocode}
\int_new:N \l_fp_output_sign_int
@@ -1051,21 +1053,21 @@
%\end{macro}
%\end{macro}
%
-%\begin{macro}{\l_fp_output_extended_int}
+%\begin{macro}[aux]{\l_fp_output_extended_int}
% Again, for calculations an extended part.
% \begin{macrocode}
\int_new:N \l_fp_output_extended_int
% \end{macrocode}
%\end{macro}
%
-%\begin{macro}{\l_fp_round_carry_bool}
+%\begin{macro}[aux]{\l_fp_round_carry_bool}
% To indicate that a digit needs to be carried forward.
% \begin{macrocode}
\bool_new:N \l_fp_round_carry_bool
% \end{macrocode}
%\end{macro}
%
-%\begin{macro}{\l_fp_round_decimal_tl}
+%\begin{macro}[aux]{\l_fp_round_decimal_tl}
% A temporary store when rounding, to build up the decimal part without
% needing to do any maths.
% \begin{macrocode}
@@ -1073,8 +1075,8 @@
% \end{macrocode}
%\end{macro}
%
-%\begin{macro}{\l_fp_round_position_int}
-%\begin{macro}{\l_fp_round_target_int}
+%\begin{macro}[aux]{\l_fp_round_position_int}
+%\begin{macro}[aux]{\l_fp_round_target_int}
% Used to check the position for rounding.
% \begin{macrocode}
\int_new:N \l_fp_round_position_int
@@ -1083,7 +1085,7 @@
%\end{macro}
%\end{macro}
%
-%\begin{macro}{\l_fp_sign_tl}
+%\begin{macro}[aux]{\l_fp_sign_tl}
% There are places where the sign needs to be set up `early',
% so that the registers can be re-used.
% \begin{macrocode}
@@ -1091,7 +1093,7 @@
% \end{macrocode}
%\end{macro}
%
-%\begin{macro}{\l_fp_split_sign_int}
+%\begin{macro}[aux]{\l_fp_split_sign_int}
% When splitting the input it is fastest to use a fixed name for the
% sign part, and to transfer it after the split is complete.
% \begin{macrocode}
@@ -1099,7 +1101,7 @@
% \end{macrocode}
%\end{macro}
%
-%\begin{macro}{\l_fp_tmp_int}
+%\begin{macro}[aux]{\l_fp_tmp_int}
% A scratch \texttt{int}: used only where the value is not carried
% forward.
% \begin{macrocode}
@@ -1107,23 +1109,23 @@
% \end{macrocode}
%\end{macro}
%
-%\begin{macro}{\l_fp_tmp_tl}
+%\begin{macro}[aux]{\l_fp_tmp_tl}
% A scratch token list variable for expanding material.
% \begin{macrocode}
\tl_new:N \l_fp_tmp_tl
% \end{macrocode}
%\end{macro}
%
-%\begin{macro}{\l_fp_trig_octant_int}
+%\begin{macro}[aux]{\l_fp_trig_octant_int}
% To track which octant the trigonometric input is in.
% \begin{macrocode}
\int_new:N \l_fp_trig_octant_int
% \end{macrocode}
%\end{macro}
%
-%\begin{macro}{\l_fp_trig_sign_int}
-%\begin{macro}{\l_fp_trig_decimal_int}
-%\begin{macro}{\l_fp_trig_extended_int}
+%\begin{macro}[aux]{\l_fp_trig_sign_int}
+%\begin{macro}[aux]{\l_fp_trig_decimal_int}
+%\begin{macro}[aux]{\l_fp_trig_extended_int}
% Used for the calculation of trigonometric values.
% \begin{macrocode}
\int_new:N \l_fp_trig_sign_int
@@ -1411,7 +1413,7 @@
%\end{macro}
%\end{macro}
%
-%\begin{macro}{\fp_tmp:w}
+%\begin{macro}[aux]{\fp_tmp:w}
% Used for output of results, cutting down on \cs{tex_expandafter:D}.
% This is just a place holder definition.
% \begin{macrocode}
@@ -1428,8 +1430,8 @@
% When stored, floating points will always be stored with a value in
% the integer position unless the number is zero.
%
-%\begin{macro}{\fp_new:N}
-%\begin{macro}{\fp_new:c}
+%\begin{macro}{\fp_new:N, \fp_new:c}
+%\UnitTested
% Fixed-points always have a value, and of course this has to be
% initialised globally.
% \begin{macrocode}
@@ -1440,10 +1442,9 @@
\cs_generate_variant:Nn \fp_new:N { c }
% \end{macrocode}
%\end{macro}
-%\end{macro}
%
-%\begin{macro}{\fp_const:Nn}
-%\begin{macro}{\fp_const:cn}
+%
+%\begin{macro}{\fp_const:Nn, \fp_const:cn}
% A simple wrapper.
% \begin{macrocode}
\cs_new_protected_nopar:Npn \fp_const:Nn #1#2 {
@@ -1460,12 +1461,11 @@
\cs_generate_variant:Nn \fp_const:Nn { c }
% \end{macrocode}
%\end{macro}
-%\end{macro}
%
-%\begin{macro}{\fp_zero:N}
-%\begin{macro}{\fp_zero:c}
-%\begin{macro}{\fp_gzero:N}
-%\begin{macro}{\fp_gzero:c}
+%\begin{macro}{\fp_zero:N, \fp_zero:c }
+%\UnitTested
+%\begin{macro}{\fp_gzero:N, \fp_gzero:c }
+%\UnitTested
% Zeroing fixed-points is pretty obvious.
% \begin{macrocode}
\cs_new_protected_nopar:Npn \fp_zero:N #1 {
@@ -1479,13 +1479,11 @@
% \end{macrocode}
%\end{macro}
%\end{macro}
-%\end{macro}
-%\end{macro}
%
-%\begin{macro}{\fp_set:Nn}
-%\begin{macro}{\fp_set:cn}
-%\begin{macro}{\fp_gset:Nn}
-%\begin{macro}{\fp_gset:cn}
+%\begin{macro}{\fp_set:Nn, \fp_set:cn}
+%\UnitTested
+%\begin{macro}{\fp_gset:Nn, \fp_gset:cn}
+%\UnitTested
%\begin{macro}[aux]{\fp_set_aux:NNn}
% To trap any input errors, a very simple version of the parser is run
% here. This will pick up any invalid characters at this stage, saving
@@ -1533,17 +1531,17 @@
%\end{macro}
%\end{macro}
%\end{macro}
-%\end{macro}
-%\end{macro}
%
-%\begin{macro}{\fp_set_from_dim:Nn}
-%\begin{macro}{\fp_set_from_dim:cn}
-%\begin{macro}{\fp_gset_from_dim:Nn}
-%\begin{macro}{\fp_gset_from_dim:cn}
+%
+%
+%\begin{macro}{\fp_set_from_dim:Nn, \fp_set_from_dim:cn}
+%\UnitTested
+%\begin{macro}{\fp_gset_from_dim:Nn, \fp_gset_from_dim:cn}
+%\UnitTested
%\begin{macro}[aux]{\fp_set_from_dim_aux:NNn}
%\begin{macro}[aux]{\fp_set_from_dim_aux:w}
-%\begin{macro}{\l_fp_tmp_dim}
-%\begin{macro}{\l_fp_tmp_skip}
+%\begin{macro}[aux]{\l_fp_tmp_dim}
+%\begin{macro}[aux]{\l_fp_tmp_skip}
% Here, dimensions are converted to fixed-points \emph{via} a
% temporary variable. This ensures that they always convert as points.
% The code is then essentially the same as for \cs{fp_set:Nn}, but with
@@ -1608,17 +1606,16 @@
%\end{macro}
%\end{macro}
%\end{macro}
-%\end{macro}
-%\end{macro}
%
-%\begin{macro}{\fp_set_eq:NN}
-%\begin{macro}{\fp_set_eq:cN}
-%\begin{macro}{\fp_set_eq:Nc}
-%\begin{macro}{\fp_set_eq:cc}
-%\begin{macro}{\fp_gset_eq:NN}
-%\begin{macro}{\fp_gset_eq:cN}
-%\begin{macro}{\fp_gset_eq:Nc}
-%\begin{macro}{\fp_gset_eq:cc}
+%
+%
+%
+%\begin{macro}{\fp_set_eq:NN, \fp_set_eq:cN,
+% \fp_set_eq:Nc, \fp_set_eq:cc}
+%\UnitTested
+%\begin{macro}{\fp_gset_eq:NN, \fp_gset_eq:cN,
+% \fp_gset_eq:Nc, \fp_gset_eq:cc}
+%\UnitTested
% Pretty simple, really.
% \begin{macrocode}
\cs_new_eq:NN \fp_set_eq:NN \tl_set_eq:NN
@@ -1632,25 +1629,22 @@
% \end{macrocode}
%\end{macro}
%\end{macro}
-%\end{macro}
-%\end{macro}
-%\end{macro}
-%\end{macro}
-%\end{macro}
-%\end{macro}
%
-%\begin{macro}{\fp_show:N}
-%\begin{macro}{\fp_show:c}
+%
+%
+%\begin{macro}{\fp_show:N, \fp_show:c}
+%\UnitTested
% Simple showing of the underlying variable.
% \begin{macrocode}
\cs_new_eq:NN \fp_show:N \tl_show:N
\cs_new_eq:NN \fp_show:c \tl_show:c
% \end{macrocode}
%\end{macro}
-%\end{macro}
%
-%\begin{macro}{\fp_use:N}
-%\begin{macro}{\fp_use:c}
+%
+%
+%\begin{macro}{\fp_use:N, \fp_use:c}
+% \UnitTested
%\begin{macro}[aux]{\fp_use_aux:w}
%\begin{macro}[aux]{\fp_use_none:w}
%\begin{macro}[aux]{\fp_use_small:w}
@@ -1766,7 +1760,6 @@
%\end{macro}
%\end{macro}
%\end{macro}
-%\end{macro}
%
%\subsection{Transferring to other types}
%
@@ -1774,18 +1767,17 @@
% a form that can be used by \TeX. Here, the functions are slightly
% different, as some information may be discarded.
%
-%\begin{macro}{\fp_to_dim:N}
-%\begin{macro}{\fp_to_dim:c}
+%\begin{macro}{\fp_to_dim:N, \fp_to_dim:c}
% A very simple wrapper.
% \begin{macrocode}
\cs_new_nopar:Npn \fp_to_dim:N #1 { \fp_use:N #1 pt }
\cs_generate_variant:Nn \fp_to_dim:N { c }
% \end{macrocode}
%\end{macro}
-%\end{macro}
+%
%
-%\begin{macro}{\fp_to_int:N}
-%\begin{macro}{\fp_to_int:c}
+%\begin{macro}{\fp_to_int:N, \fp_to_int:c}
+%\UnitTested
%\begin{macro}[aux]{\fp_to_int_aux:w}
%\begin{macro}[aux]{\fp_to_int_none:w}
%\begin{macro}[aux]{\fp_to_int_small:w}
@@ -1905,10 +1897,13 @@
%\end{macro}
%\end{macro}
%\end{macro}
-%\end{macro}
%
-%\begin{macro}{\fp_to_tl:N}
-%\begin{macro}{\fp_to_tl:c}
+%
+%
+%
+%
+%\begin{macro}{\fp_to_tl:N, \fp_to_tl:c}
+%\UnitTested
%\begin{macro}[aux]{\fp_to_tl_aux:w}
%\begin{macro}[aux]{\fp_to_tl_large:w}
%\begin{macro}[aux]{\fp_to_tl_large_aux_i:w}
@@ -2200,17 +2195,17 @@
%\end{macro}
%\end{macro}
%\end{macro}
-%\end{macro}
%
%\subsection{Rounding numbers}
%
% The results may well need to be rounded. A couple of related functions
% to do this for a stored value.
%
-%\begin{macro}{\fp_round_figures:Nn}
-%\begin{macro}{\fp_round_figures:cn}
-%\begin{macro}{\fp_ground_figures:Nn}
-%\begin{macro}{\fp_ground_figures:cn}
+%
+%\begin{macro}{\fp_round_figures:Nn, \fp_round_figures:cn}
+%\UnitTested
+%\begin{macro}{\fp_ground_figures:Nn, \fp_ground_figures:cn}
+%\UnitTested
%\begin{macro}[aux]{\fp_round_figures_aux:NNn}
% Rounding to figures needs only an adjustment to the target by one
% (as the target is in decimal places).
@@ -2252,16 +2247,16 @@
\fp_tmp:w
}
% \end{macrocode}
-%\end{macro}
-%\end{macro}
%\end{macro}
%\end{macro}
%\end{macro}
%
-%\begin{macro}{\fp_round_places:Nn}
-%\begin{macro}{\fp_round_places:cn}
-%\begin{macro}{\fp_ground_places:Nn}
-%\begin{macro}{\fp_ground_places:cn}
+%
+%
+%\begin{macro}{\fp_round_places:Nn, \fp_round_places:cn}
+%\UnitTested
+%\begin{macro}{\fp_ground_places:Nn, \fp_ground_places:cn}
+%\UnitTested
%\begin{macro}[aux]{\fp_round_places_aux:NNn}
% Rounding to places needs an adjustment for the exponent value, which
% will mean that everything should be correct.
@@ -2304,14 +2299,14 @@
\fp_tmp:w
}
% \end{macrocode}
-%\end{macro}
-%\end{macro}
%\end{macro}
%\end{macro}
%\end{macro}
%
+%
+%
%\begin{macro}{\fp_round:}
-%\begin{macro}{\fp_round_aux:NNNNNNNNN}
+%\begin{macro}[aux]{\fp_round_aux:NNNNNNNNN}
%\begin{macro}{\fp_round_loop:N}
% The rounding approach is the same for decimal places and significant
% figures. There are always nine decimal digits to round, so the code
@@ -2370,12 +2365,15 @@
%\end{macro}
%\end{macro}
%
+%
+%
+%
%\subsection{Unary functions}
%
-%\begin{macro}{\fp_abs:N}
-%\begin{macro}{\fp_abs:c}
-%\begin{macro}{\fp_gabs:N}
-%\begin{macro}{\fp_gabs:c}
+%\begin{macro}{\fp_abs:N, \fp_abs:c}
+%\UnitTested
+%\begin{macro}{\fp_gabs:N, \fp_gabs:c}
+%\UnitTested
%\begin{macro}[aux]{\fp_abs_aux:NN}
% Setting the absolute value is easy: read the value, ignore the sign,
% return the result.
@@ -2412,13 +2410,14 @@
%\end{macro}
%\end{macro}
%\end{macro}
-%\end{macro}
-%\end{macro}
%
-%\begin{macro}{\fp_neg:N}
-%\begin{macro}{\fp_neg:c}
-%\begin{macro}{\fp_gneg:N}
-%\begin{macro}{\fp_gneg:c}
+%
+%
+%
+%\begin{macro}{\fp_neg:N, \fp_neg:c}
+%\UnitTested
+%\begin{macro}{\fp_gneg:N, \fp_gneg:c}
+%\UnitTested
%\begin{macro}[aux]{\fp_neg:NN}
% Just a bit more complex: read the input, reverse the sign and
% output the result.
@@ -2456,15 +2455,15 @@
%\end{macro}
%\end{macro}
%\end{macro}
-%\end{macro}
-%\end{macro}
+%
+%
%
%\subsection{Basic arithmetic}
%
-%\begin{macro}{\fp_add:Nn}
-%\begin{macro}{\fp_add:cn}
-%\begin{macro}{\fp_gadd:Nn}
-%\begin{macro}{\fp_gadd:cn}
+%\begin{macro}{\fp_add:Nn, \fp_add:cn}
+%\UnitTested
+%\begin{macro}{\fp_gadd:Nn,\fp_gadd:cn}
+%\UnitTested
%\begin{macro}[aux]{\fp_add_aux:NNn}
%\begin{macro}[aux]{\fp_add_core:}
%\begin{macro}[aux]{\fp_add_sum:}
@@ -2596,17 +2595,18 @@
% \end{macrocode}
%\end{macro}
%\end{macro}
-%\end{macro}
-%\end{macro}
%\end{macro}
%\end{macro}
%\end{macro}
%\end{macro}
%
-%\begin{macro}{\fp_sub:Nn}
-%\begin{macro}{\fp_sub:cn}
-%\begin{macro}{\fp_gsub:Nn}
-%\begin{macro}{\fp_gsub:cn}
+%
+%
+%
+%\begin{macro}{\fp_sub:Nn, \fp_sub:cn}
+%\UnitTested
+%\begin{macro}{\fp_gsub:Nn,\fp_gsub:cn}
+%\UnitTested
%\begin{macro}[aux]{\fp_sub_aux:NNn}
% Subtraction is essentially the same as addition, but with the sign
% of the second component reversed. Thus the core of the two function
@@ -2634,16 +2634,18 @@
\fp_tmp:w #1#2
}
% \end{macrocode}
-%\end{macro}
-%\end{macro}
%\end{macro}
%\end{macro}
%\end{macro}
%
-%\begin{macro}{\fp_mul:Nn}
-%\begin{macro}{\fp_mul:cn}
-%\begin{macro}{\fp_gmul:Nn}
-%\begin{macro}{\fp_gmul:cn}
+%
+%
+%
+%
+%\begin{macro}{\fp_mul:Nn, \fp_mul:cn}
+%\UnitTested
+%\begin{macro}{\fp_gmul:Nn,\fp_gmul:cn}
+%\UnitTested
%\begin{macro}[aux]{\fp_mul_aux:NNn}
%\begin{macro}[aux]{\fp_mul_internal:}
%\begin{macro}[aux]{\fp_mul_split:NNNN}
@@ -2791,18 +2793,20 @@
%\end{macro}
%\end{macro}
%\end{macro}
-%\end{macro}
-%\end{macro}
%\end{macro}
%\end{macro}
%\end{macro}
%\end{macro}
%\end{macro}
%
-%\begin{macro}{\fp_div:Nn}
-%\begin{macro}{\fp_div:cn}
-%\begin{macro}{\fp_gdiv:Nn}
-%\begin{macro}{\fp_gdiv:cn}
+%
+%
+%
+%
+%\begin{macro}{\fp_div:Nn, \fp_div:cn}
+%\UnitTested
+%\begin{macro}{\fp_gdiv:Nn,\fp_gdiv:cn}
+%\UnitTested
%\begin{macro}[aux]{\fp_div_aux:NNn}
%\begin{macro}{\fp_div_internal:}
%\begin{macro}[aux]{\fp_div_loop:}
@@ -3000,8 +3004,6 @@
\l_fp_input_a_decimal_int #3#4#5#6#7#8#9 0 \scan_stop:
}
% \end{macrocode}
-%\end{macro}
-%\end{macro}
%\end{macro}
%\end{macro}
%\end{macro}
@@ -3013,6 +3015,10 @@
%\end{macro}
%\end{macro}
%
+%
+%
+%
+%
%\subsection{Arithmetic for internal use}
%
% For the more complex functions, it is only possible to deliver
@@ -3514,10 +3520,15 @@
%\end{macro}
%\end{macro}
%
-%\begin{macro}{\fp_sin:Nn}
-%\begin{macro}{\fp_sin:cn}
-%\begin{macro}{\fp_gsin:Nn}
-%\begin{macro}{\fp_gsin:cn}
+%
+%
+%
+%
+%
+%\begin{macro}{\fp_sin:Nn, \fp_sin:cn}
+%\UnitTested
+%\begin{macro}{\fp_gsin:Nn,\fp_gsin:cn}
+%\UnitTested
%\begin{macro}[aux]{\fp_sin_aux:NNn}
%\begin{macro}[aux]{\fp_sin_aux_i:}
%\begin{macro}[aux]{\fp_sin_aux_ii:}
@@ -3639,16 +3650,18 @@
% \end{macrocode}
%\end{macro}
%\end{macro}
-%\end{macro}
-%\end{macro}
%\end{macro}
%\end{macro}
%\end{macro}
%
-%\begin{macro}{\fp_cos:Nn}
-%\begin{macro}{\fp_cos:cn}
-%\begin{macro}{\fp_gcos:Nn}
-%\begin{macro}{\fp_gcos:cn}
+%
+%
+%
+%
+%\begin{macro}{\fp_cos:Nn, \fp_cos:cn}
+%\UnitTested
+%\begin{macro}{\fp_gcos:Nn,\fp_gcos:cn}
+%\UnitTested
%\begin{macro}[aux]{\fp_cos_aux:NNn}
%\begin{macro}[aux]{\fp_cos_aux_i:}
%\begin{macro}[aux]{\fp_cos_aux_ii:}
@@ -3759,12 +3772,14 @@
% \end{macrocode}
%\end{macro}
%\end{macro}
-%\end{macro}
-%\end{macro}
%\end{macro}
%\end{macro}
%\end{macro}
%
+%
+%
+%
+%
%\begin{macro}{\fp_trig_calc_cos:}
%\begin{macro}{\fp_trig_calc_sin:}
%\begin{macro}[aux]{\fp_trig_calc_Taylor:}
@@ -3882,10 +3897,13 @@
%\end{macro}
%\end{macro}
%
-%\begin{macro}{\fp_tan:Nn}
-%\begin{macro}{\fp_tan:cn}
-%\begin{macro}{\fp_gtan:Nn}
-%\begin{macro}{\fp_gtan:cn}
+%
+%
+%
+%\begin{macro}{\fp_tan:Nn, \fp_tan:cn}
+%\UnitTested
+%\begin{macro}{\fp_gtan:Nn,\fp_gtan:cn}
+%\UnitTested
%\begin{macro}[aux]{\fp_tan_aux:NNn}
%\begin{macro}[aux]{\fp_tan_aux_i:}
%\begin{macro}[aux]{\fp_tan_aux_ii:}
@@ -4071,31 +4089,34 @@
%\end{macro}
%\end{macro}
%\end{macro}
-%\end{macro}
-%\end{macro}
+%
+%
+%
+%
+%
%
%\subsection{Exponent and logarithm functions}
%
-%\begin{macro}{\c_fp_exp_1_tl}
-%\begin{macro}{\c_fp_exp_2_tl}
-%\begin{macro}{\c_fp_exp_3_tl}
-%\begin{macro}{\c_fp_exp_4_tl}
-%\begin{macro}{\c_fp_exp_5_tl}
-%\begin{macro}{\c_fp_exp_6_tl}
-%\begin{macro}{\c_fp_exp_7_tl}
-%\begin{macro}{\c_fp_exp_8_tl}
-%\begin{macro}{\c_fp_exp_9_tl}
-%\begin{macro}{\c_fp_exp_10_tl}
-%\begin{macro}{\c_fp_exp_20_tl}
-%\begin{macro}{\c_fp_exp_30_tl}
-%\begin{macro}{\c_fp_exp_40_tl}
-%\begin{macro}{\c_fp_exp_50_tl}
-%\begin{macro}{\c_fp_exp_60_tl}
-%\begin{macro}{\c_fp_exp_70_tl}
-%\begin{macro}{\c_fp_exp_80_tl}
-%\begin{macro}{\c_fp_exp_90_tl}
-%\begin{macro}{\c_fp_exp_100_tl}
-%\begin{macro}{\c_fp_exp_200_tl}
+%\begin{macro}[aux]{\c_fp_exp_1_tl}
+%\begin{macro}[aux]{\c_fp_exp_2_tl}
+%\begin{macro}[aux]{\c_fp_exp_3_tl}
+%\begin{macro}[aux]{\c_fp_exp_4_tl}
+%\begin{macro}[aux]{\c_fp_exp_5_tl}
+%\begin{macro}[aux]{\c_fp_exp_6_tl}
+%\begin{macro}[aux]{\c_fp_exp_7_tl}
+%\begin{macro}[aux]{\c_fp_exp_8_tl}
+%\begin{macro}[aux]{\c_fp_exp_9_tl}
+%\begin{macro}[aux]{\c_fp_exp_10_tl}
+%\begin{macro}[aux]{\c_fp_exp_20_tl}
+%\begin{macro}[aux]{\c_fp_exp_30_tl}
+%\begin{macro}[aux]{\c_fp_exp_40_tl}
+%\begin{macro}[aux]{\c_fp_exp_50_tl}
+%\begin{macro}[aux]{\c_fp_exp_60_tl}
+%\begin{macro}[aux]{\c_fp_exp_70_tl}
+%\begin{macro}[aux]{\c_fp_exp_80_tl}
+%\begin{macro}[aux]{\c_fp_exp_90_tl}
+%\begin{macro}[aux]{\c_fp_exp_100_tl}
+%\begin{macro}[aux]{\c_fp_exp_200_tl}
% Calculation of exponentials requires a number of precomputed values:
% first the positive integers.
% \begin{macrocode}
@@ -4181,26 +4202,29 @@
%\end{macro}
%\end{macro}
%
-%\begin{macro}{\c_fp_exp_-1_tl}
-%\begin{macro}{\c_fp_exp_-2_tl}
-%\begin{macro}{\c_fp_exp_-3_tl}
-%\begin{macro}{\c_fp_exp_-4_tl}
-%\begin{macro}{\c_fp_exp_-5_tl}
-%\begin{macro}{\c_fp_exp_-6_tl}
-%\begin{macro}{\c_fp_exp_-7_tl}
-%\begin{macro}{\c_fp_exp_-8_tl}
-%\begin{macro}{\c_fp_exp_-9_tl}
-%\begin{macro}{\c_fp_exp_-10_tl}
-%\begin{macro}{\c_fp_exp_-20_tl}
-%\begin{macro}{\c_fp_exp_-30_tl}
-%\begin{macro}{\c_fp_exp_-40_tl}
-%\begin{macro}{\c_fp_exp_-50_tl}
-%\begin{macro}{\c_fp_exp_-60_tl}
-%\begin{macro}{\c_fp_exp_-70_tl}
-%\begin{macro}{\c_fp_exp_-80_tl}
-%\begin{macro}{\c_fp_exp_-90_tl}
-%\begin{macro}{\c_fp_exp_-100_tl}
-%\begin{macro}{\c_fp_exp_-200_tl}
+%
+%
+%
+%\begin{macro}[aux]{\c_fp_exp_-1_tl}
+%\begin{macro}[aux]{\c_fp_exp_-2_tl}
+%\begin{macro}[aux]{\c_fp_exp_-3_tl}
+%\begin{macro}[aux]{\c_fp_exp_-4_tl}
+%\begin{macro}[aux]{\c_fp_exp_-5_tl}
+%\begin{macro}[aux]{\c_fp_exp_-6_tl}
+%\begin{macro}[aux]{\c_fp_exp_-7_tl}
+%\begin{macro}[aux]{\c_fp_exp_-8_tl}
+%\begin{macro}[aux]{\c_fp_exp_-9_tl}
+%\begin{macro}[aux]{\c_fp_exp_-10_tl}
+%\begin{macro}[aux]{\c_fp_exp_-20_tl}
+%\begin{macro}[aux]{\c_fp_exp_-30_tl}
+%\begin{macro}[aux]{\c_fp_exp_-40_tl}
+%\begin{macro}[aux]{\c_fp_exp_-50_tl}
+%\begin{macro}[aux]{\c_fp_exp_-60_tl}
+%\begin{macro}[aux]{\c_fp_exp_-70_tl}
+%\begin{macro}[aux]{\c_fp_exp_-80_tl}
+%\begin{macro}[aux]{\c_fp_exp_-90_tl}
+%\begin{macro}[aux]{\c_fp_exp_-100_tl}
+%\begin{macro}[aux]{\c_fp_exp_-200_tl}
% Now the negative integers.
% \begin{macrocode}
\tl_new:c { c_fp_exp_-1_tl }
@@ -4285,10 +4309,16 @@
%\end{macro}
%\end{macro}
%
-%\begin{macro}{\fp_exp:Nn}
-%\begin{macro}{\fp_exp:cn}
-%\begin{macro}{\fp_gexp:Nn}
-%\begin{macro}{\fp_gexp:cn}
+%
+%
+%
+%
+%
+%
+%\begin{macro}{\fp_exp:Nn, \fp_exp:cn}
+%\UnitTested
+%\begin{macro}{\fp_gexp:Nn,\fp_gexp:cn}
+%\UnitTested
%\begin{macro}[aux]{\fp_exp_aux:NNn}
%\begin{macro}[aux]{\fp_exp_internal:}
%\begin{macro}[aux]{\fp_exp_aux:}
@@ -4684,18 +4714,18 @@
%\end{macro}
%\end{macro}
%\end{macro}
-%\end{macro}
-%\end{macro}
%
-%\begin{macro}{\c_fp_ln_10_1_tl}
-%\begin{macro}{\c_fp_ln_10_2_tl}
-%\begin{macro}{\c_fp_ln_10_3_tl}
-%\begin{macro}{\c_fp_ln_10_4_tl}
-%\begin{macro}{\c_fp_ln_10_5_tl}
-%\begin{macro}{\c_fp_ln_10_6_tl}
-%\begin{macro}{\c_fp_ln_10_7_tl}
-%\begin{macro}{\c_fp_ln_10_8_tl}
-%\begin{macro}{\c_fp_ln_10_9_tl}
+%
+%
+%\begin{macro}[aux]{\c_fp_ln_10_1_tl}
+%\begin{macro}[aux]{\c_fp_ln_10_2_tl}
+%\begin{macro}[aux]{\c_fp_ln_10_3_tl}
+%\begin{macro}[aux]{\c_fp_ln_10_4_tl}
+%\begin{macro}[aux]{\c_fp_ln_10_5_tl}
+%\begin{macro}[aux]{\c_fp_ln_10_6_tl}
+%\begin{macro}[aux]{\c_fp_ln_10_7_tl}
+%\begin{macro}[aux]{\c_fp_ln_10_8_tl}
+%\begin{macro}[aux]{\c_fp_ln_10_9_tl}
% Constants for working out logarithms: first those for the powers of
% ten.
% \begin{macrocode}
@@ -4737,9 +4767,9 @@
%\end{macro}
%\end{macro}
%
-%\begin{macro}{\c_fp_ln_2_1_tl }
-%\begin{macro}{\c_fp_ln_2_2_tl }
-%\begin{macro}{\c_fp_ln_2_3_tl }
+%\begin{macro}[aux]{\c_fp_ln_2_1_tl }
+%\begin{macro}[aux]{\c_fp_ln_2_2_tl }
+%\begin{macro}[aux]{\c_fp_ln_2_3_tl }
% The smaller set for powers of two.
% \begin{macrocode}
\tl_new:c { c_fp_ln_2_1_tl }
@@ -4756,10 +4786,13 @@
%\end{macro}
%\end{macro}
%
-%\begin{macro}{\fp_ln:Nn}
-%\begin{macro}{\fp_ln:cn}
-%\begin{macro}{\fp_gln:Nn}
-%\begin{macro}{\fp_gln:cn}
+%
+%
+%
+%\begin{macro}{\fp_ln:Nn, \fp_ln:cn}
+%\UnitTested
+%\begin{macro}{\fp_gln:Nn,\fp_gln:cn}
+%\UnitTested
%\begin{macro}[aux]{\fp_ln_aux:NNn}
%\begin{macro}[aux]{\fp_ln_aux:}
%\begin{macro}[aux]{\fp_ln_exponent:}
@@ -5237,13 +5270,13 @@
%\end{macro}
%\end{macro}
%\end{macro}
-%\end{macro}
-%\end{macro}
%
-%\begin{macro}{\fp_pow:Nn}
-%\begin{macro}{\fp_pow:cn}
-%\begin{macro}{\fp_gpow:Nn}
-%\begin{macro}{\fp_gpow:cn}
+%
+%
+%\begin{macro}{\fp_pow:Nn, \fp_pow:cn}
+%\UnitTested
+%\begin{macro}{\fp_gpow:Nn,\fp_gpow:cn}
+%\UnitTested
%\begin{macro}[aux]{\fp_pow_aux:NNn}
%\begin{macro}[aux]{\fp_pow_aux_i:}
%\begin{macro}[aux]{\fp_pow_positive:}
@@ -5490,13 +5523,15 @@
%\end{macro}
%\end{macro}
%\end{macro}
-%\end{macro}
-%\end{macro}
+%
+%
+%
%
%\subsection{Tests for special values}
%
%\begin{macro}{\fp_if_undefined_p:N}
%\begin{macro}[TF]{\fp_if_undefined:N}
+%\UnitTested
% Testing for an undefined value is easy.
% \begin{macrocode}
\prg_new_conditional:Npnn \fp_if_undefined:N #1 { T , F , TF , p } {
@@ -5510,8 +5545,12 @@
%\end{macro}
%\end{macro}
%
+%
+%
+%
%\begin{macro}{\fp_if_zero_p:N}
%\begin{macro}[TF]{\fp_if_zero:N}
+%\UnitTested
% Testing for a zero fixed-point is also easy.
% \begin{macrocode}
\prg_new_conditional:Npnn \fp_if_zero:N #1 { T , F , TF , p } {
@@ -5525,10 +5564,16 @@
%\end{macro}
%\end{macro}
%
+%
+%
+%
+%
+%
%\subsection{Floating-point conditionals}
%
%\begin{macro}[TF]{\fp_compare:nNn}
%\begin{macro}[TF]{\fp_compare:NNN}
+%\UnitTested
%\begin{macro}[aux]{\fp_compare_aux:N}
%\begin{macro}[aux]{\fp_compare_=:}
%\begin{macro}[aux]{\fp_compare_<:}
@@ -5841,4 +5886,4 @@
%
%\PrintChanges
%
-%\PrintIndex \ No newline at end of file
+%\PrintIndex
diff --git a/Master/texmf-dist/source/latex/expl3/l3int.dtx b/Master/texmf-dist/source/latex/expl3/l3int.dtx
index 93fa6d7e6d1..fac6c0245f3 100644
--- a/Master/texmf-dist/source/latex/expl3/l3int.dtx
+++ b/Master/texmf-dist/source/latex/expl3/l3int.dtx
@@ -36,7 +36,7 @@
\RequirePackage{l3names}
%</driver|package>
%\fi
-\GetIdInfo$Id: l3int.dtx 2121 2011-01-07 08:46:09Z joseph $
+\GetIdInfo$Id: l3int.dtx 2178 2011-03-06 09:03:44Z mittelba $
{L3 Experimental Integer module}
%\iffalse
%<*driver>
@@ -372,8 +372,7 @@
%\subsection{Comparing integer expressions}
%
%\begin{function}{
-% \int_compare_p:nNn / (EXP) |
-% \int_compare:nNn / (EXP) (TF) |
+% \int_compare:nNn / (EXP) (pTF) |
%}
% \begin{syntax}
% \cs{int_compare_p:nNn}
@@ -400,8 +399,7 @@
%\end{function}
%
%\begin{function}{
-% \int_compare_p:n / (EXP) |
-% \int_compare:n / (EXP) (TF) |
+% \int_compare:n / (EXP) (pTF) |
%}
% \begin{syntax}
% \cs{int_compare_p:n}
@@ -431,10 +429,8 @@
%\end{function}
%
%\begin{function}{
-% \int_if_even_p:n / (EXP) |
-% \int_if_even:n / (EXP) (TF) |
-% \int_if_odd_p:n / (EXP) |
-% \int_if_odd:n / (EXP) (TF) |
+% \int_if_even:n / (EXP) (pTF) |
+% \int_if_odd:n / (EXP) (pTF) |
%}
% \begin{syntax}
% \cs{int_if_odd_p:n} \Arg{integer expression}
@@ -967,6 +963,8 @@
%
% \section{\pkg{l3int} implementation}
%
+% \TestFiles{m3int001.lvt,m3int002.lvt,m3int03.lvt}
+%
% \subsection{Internal functions and variables}
%
% \begin{function}{\int_advance:w}
@@ -1064,6 +1062,7 @@
% \subsection{Allocation and setting}
%
% \begin{macro}{\int_new:N,\int_new:c}
+% \UnitTested
% For the \LaTeX3 format:
% \begin{macrocode}
%<*initex>
@@ -1085,10 +1084,10 @@
% \end{macro}
%
%
-% \begin{macro}{\int_set:Nn}
-% \begin{macro}{\int_set:cn}
-% \begin{macro}{\int_gset:Nn}
-% \begin{macro}{\int_gset:cn}
+% \begin{macro}{\int_set:Nn, \int_set:cn}
+% \UnitTested
+% \begin{macro}{\int_gset:Nn,\int_gset:cn}
+% \UnitTested
% Setting counters is again something that I would like to make
% uniform at the moment to get a better overview.
% \begin{macrocode}
@@ -1108,17 +1107,16 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
-% \end{macro}
-% \end{macro}
%
-%\begin{macro}{\int_set_eq:NN}
-%\begin{macro}{\int_set_eq:cN}
-%\begin{macro}{\int_set_eq:Nc}
-%\begin{macro}{\int_set_eq:cc}
-%\begin{macro}{\int_gset_eq:NN}
-%\begin{macro}{\int_gset_eq:cN}
-%\begin{macro}{\int_gset_eq:Nc}
-%\begin{macro}{\int_gset_eq:cc}
+%
+%
+%
+%\begin{macro}{\int_set_eq:NN,\int_set_eq:cN,
+% \int_set_eq:Nc,\int_set_eq:cc}
+% \UnitTested
+%\begin{macro}{\int_gset_eq:NN,\int_gset_eq:cN,
+% \int_gset_eq:Nc,\int_gset_eq:cc}
+% \UnitTested
% Setting equal means using one integer inside the set function of
% another.
% \begin{macrocode}
@@ -1137,21 +1135,18 @@
% \end{macrocode}
%\end{macro}
%\end{macro}
-%\end{macro}
-%\end{macro}
-%\end{macro}
-%\end{macro}
-%\end{macro}
-%\end{macro}
%
-% \begin{macro}{\int_incr:N}
-% \begin{macro}{\int_decr:N}
-% \begin{macro}{\int_gincr:N}
-% \begin{macro}{\int_gdecr:N}
-% \begin{macro}{\int_incr:c}
-% \begin{macro}{\int_decr:c}
-% \begin{macro}{\int_gincr:c}
-% \begin{macro}{\int_gdecr:c}
+%
+%
+%
+% \begin{macro}{\int_incr:N,\int_incr:c}
+% \UnitTested
+% \begin{macro}{\int_decr:N,\int_decr:c}
+% \UnitTested
+% \begin{macro}{\int_gincr:N,\int_gincr:c}
+% \UnitTested
+% \begin{macro}{\int_gdecr:N,\int_gdecr:c}
+% \UnitTested
% Incrementing and decrementing of integer registers is done with
% the following functions.
% \begin{macrocode}
@@ -1206,16 +1201,12 @@
% \end{macro}
% \end{macro}
% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
%
%
-% \begin{macro}{\int_zero:N}
-% \begin{macro}{\int_zero:c}
-% \begin{macro}{\int_gzero:N}
-% \begin{macro}{\int_gzero:c}
+% \begin{macro}{\int_zero:N,\int_zero:c}
+% \UnitTested
+% \begin{macro}{\int_gzero:N,\int_gzero:c}
+% \UnitTested
% Functions that reset an \m{int} register to zero.
% \begin{macrocode}
\cs_new_protected_nopar:Npn \int_zero:N #1 {#1=\c_zero}
@@ -1228,17 +1219,15 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
-% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\int_add:Nn}
-% \begin{macro}{\int_add:cn}
-% \begin{macro}{\int_gadd:Nn}
-% \begin{macro}{\int_gadd:cn}
-% \begin{macro}{\int_sub:Nn}
-% \begin{macro}{\int_sub:cn}
-% \begin{macro}{\int_gsub:Nn}
-% \begin{macro}{\int_gsub:cn}
+% \begin{macro}{\int_add:Nn,\int_add:cn}
+% \UnitTested
+% \begin{macro}{\int_gadd:Nn,\int_gadd:cn}
+% \UnitTested
+% \begin{macro}{\int_sub:Nn,\int_sub:cn}
+% \UnitTested
+% \begin{macro}{\int_gsub:Nn,\int_gsub:cn}
+% \UnitTested
% Adding and substracting to and from a counter \ldots
% We should think of using these functions
% \begin{macrocode}
@@ -1280,35 +1269,31 @@
% \end{macro}
% \end{macro}
% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
%
%
-% \begin{macro}{\int_use:N}
-% \begin{macro}{\int_use:c}
+% \begin{macro}{\int_use:N,\int_use:c}
+% \UnitTested
% Here is how counters are accessed:
% \begin{macrocode}
\cs_new_eq:NN \int_use:N \tex_the:D
\cs_new_nopar:Npn \int_use:c #1{\int_use:N \cs:w#1\cs_end:}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\int_show:N}
-% \begin{macro}{\int_show:c}
+%
+% \begin{macro}{\int_show:N,\int_show:c}
+% \UnitTested
% \begin{macrocode}
\cs_new_eq:NN \int_show:N \kernel_register_show:N
\cs_new_eq:NN \int_show:c \kernel_register_show:c
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
%
%
%
% \begin{macro}{\int_to_arabic:n}
+% \UnitTested
% Nothing exciting here.
% \begin{macrocode}
\cs_new_nopar:Npn \int_to_arabic:n #1{ \int_eval:n{#1}}
@@ -1317,7 +1302,7 @@
%
%
%
-% \begin{macro}{\int_roman_lcuc_mapping:Nnn}
+% \begin{macro}[aux]{\int_roman_lcuc_mapping:Nnn}
% Using \TeX's built-in feature for producing roman numerals has some
% surprising features. One is the the characters resulting from
% |\int_to_roman:w| have category code~12 so they may fail in
@@ -1331,6 +1316,8 @@
}
% \end{macrocode}
% \end{macro}
+%
+%
% Here are the default mappings. I haven't found any examples of say
% Turkish doing the mapping |i \i I| but at least there is a
% possibility for it if needed. Note: I have now asked a Turkish
@@ -1349,9 +1336,10 @@
\int_roman_lcuc_mapping:Nnn Q \use_none:nn \use_none:nn
% \end{macrocode}
%
-% \begin{macro}{\int_to_roman:n}
-% \begin{macro}{\int_to_Roman:n}
-% \begin{macro}{\int_to_roman_lcuc:NN}
+% \begin{macro}{\int_to_roman:n, \int_to_Roman:n}
+% \UnitTested
+% \TestMissing{output is catcode 11}
+% \begin{macro}[aux]{\int_to_roman_lcuc:NN}
% The commands for producing the lower and upper case roman numerals
% run a loop on one character at a time and also carries some
% information for upper or lower case with it. We put it through
@@ -1372,20 +1360,20 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
-% \end{macro}
+%
%
%\begin{macro}{\int_convert_to_symbols:nnn}
-% For conversion of integers to arbitrary symbols the method is in
-% general as follows. The input number ("#1") is compared to the total
-% number of symbols available at each place ("#2"). If the input is
-% larger than the total number of symbols available then the modulus
-% is needed, with one added so that the positions don't have to number
-% from zero. Using an \texttt{f}-type expansion, this is done so that
-% the system is recursive. The actual conversion function therefore
-% gets a `nice' number at each stage. Of course, if the initial input
-% was small enough then there is no problem and everything is easy. This
-% is more or less the same as \cs{int_convert_number_with_rule:nnN} but
-% `pre-packaged'.
+%\UnitTested
+% For conversion of integers to arbitrary symbols the method is in
+% general as follows. The input number ("#1") is compared to the total
+% number of symbols available at each place ("#2"). If the input is larger
+% than the total number of symbols available then the modulus is needed,
+% with one added so that the positions don't have to number from
+% zero. Using an \texttt{f}-type expansion, this is done so that the system
+% is recursive. The actual conversion function therefore gets a `nice'
+% number at each stage. Of course, if the initial input was small enough
+% then there is no problem and everything is easy. This is more or less the
+% same as \cs{int_convert_number_with_rule:nnN} but `pre-packaged'.
% \begin{macrocode}
\cs_new_nopar:Npn \int_convert_to_symbols:nnn #1#2#3 {
\int_compare:nNnTF {#1} > {#2}
@@ -1446,8 +1434,8 @@
% \end{macro}
%
%
-%\begin{macro}{\int_to_alph:n}
-%\begin{macro}{\int_to_Alph:n}
+%\begin{macro}{\int_to_alph:n,\int_to_Alph:n}
+%\UnitTested
% These both use the above function with input functions that make sense
% for the alphabet in English.
% \begin{macrocode}
@@ -1515,9 +1503,10 @@
}
% \end{macrocode}
%\end{macro}
-%\end{macro}
+%
%
% \begin{macro}{\int_to_symbol:n}
+% \UnitTested
% Turning a number into a symbol is also easy enough.
% \begin{macrocode}
\cs_new_nopar:Npn \int_to_symbol:n #1{
@@ -1533,6 +1522,9 @@
}
% \end{macrocode}
% \end{macro}
+%
+%
+%
% \begin{macro}{\int_symbol_math_conversion_rule:n}
% \begin{macro}{\int_symbol_text_conversion_rule:n}
% Nothing spectacular here.
@@ -1567,11 +1559,11 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\l_tmpa_int}
-% \begin{macro}{\l_tmpb_int}
-% \begin{macro}{\l_tmpc_int}
-% \begin{macro}{\g_tmpa_int}
-% \begin{macro}{\g_tmpb_int}
+% \begin{macro}[aux]{\l_tmpa_int}
+% \begin{macro}[aux]{\l_tmpb_int}
+% \begin{macro}[aux]{\l_tmpc_int}
+% \begin{macro}[aux]{\g_tmpa_int}
+% \begin{macro}[aux]{\g_tmpb_int}
% We provide four local and two global scratch counters, maybe we
% need more or less.
% \begin{macrocode}
@@ -1612,7 +1604,9 @@
% \subsection{Scanning and conversion}
%
%
-%\begin{macro}{\int_from_roman:n}
+% \begin{macro}{\int_from_roman:n}
+% \UnitTested
+% \TestMissing{boundary cases / wrong input?}
%\begin{macro}[aux]{\int_from_roman_aux:NN}
%\begin{macro}[aux]{\int_from_roman_end:w}
%\begin{macro}[aux]{\int_from_roman_clean_up:w}
@@ -1671,9 +1665,14 @@
%\end{macro}
%\end{macro}
%
+%
+%
+%
%\begin{macro}{\int_convert_from_base_ten:nn}
+% \UnitTested
%\begin{macro}[aux]{\int_convert_from_base_ten_aux:nnn}
%\begin{macro}{\int_convert_number_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.
@@ -1760,6 +1759,7 @@
%\end{macro}
%
%\begin{macro}{\int_convert_to_base_ten:nn}
+% \UnitTested
%\begin{macro}[aux]{\int_convert_to_base_ten_aux:nn}
%\begin{macro}[aux]{\int_convert_to_base_ten_aux:nnN}
%\begin{macro}[aux]{\int_convert_to_base_ten_aux:N}
@@ -1862,12 +1862,10 @@
%\end{macro}
%\end{macro}
%
-%\begin{macro}{\int_from_binary:n}
-%\begin{macro}{\int_from_hexadecimal:n}
-%\begin{macro}{\int_from_octal:n}
-%\begin{macro}{\int_to_binary:n}
-%\begin{macro}{\int_to_hexadecimal:n}
-%\begin{macro}{\int_to_octal:n}
+%\begin{macro}{\int_from_binary:n,\int_from_hexadecimal:n,\int_from_octal:n}
+% \UnitTested
+%\begin{macro}{\int_to_binary:n,\int_to_hexadecimal:n,\int_to_octal:n}
+% \UnitTested
% Wrappers around the generic function.
% \begin{macrocode}
\cs_new:Npn \int_from_binary:n #1 {
@@ -1891,12 +1889,11 @@
% \end{macrocode}
%\end{macro}
%\end{macro}
-%\end{macro}
-%\end{macro}
-%\end{macro}
-%\end{macro}
+%
+%
%
%\begin{macro}{\int_from_alph:n}
+% \UnitTested
%\begin{macro}[aux]{\int_from_alph_aux:n}
%\begin{macro}[aux]{\int_from_alph_aux:nN}
%\begin{macro}[aux]{\int_from_alph_aux:N}
@@ -1934,8 +1931,7 @@
%\end{macro}
%
%
-% \begin{macro}{\int_compare_p:n}
-% \begin{macro}[TF]{\int_compare:n}
+% \begin{macro}[pTF]{\int_compare:n}
% Comparison tests using a simple syntax where only one set of braces
% is required and additional operators such as "!=" and ">=" are
% supported. First some notes on the idea behind this. We wish to
@@ -2031,10 +2027,10 @@
}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\int_compare_p:nNn}
-% \begin{macro}[TF]{\int_compare:nNn}
+%
+% \begin{macro}[pTF]{\int_compare:nNn}
+% \UnitTested
% More efficient but less natural in typing.
% \begin{macrocode}
\prg_set_conditional:Npnn \int_compare:nNn #1#2#3{p}{
@@ -2065,11 +2061,14 @@
}
% \end{macrocode}
% \end{macro}
-% \end{macro}
+%
%
% \begin{macro}{\int_max:nn}
+% \UnitTested
% \begin{macro}{\int_min:nn}
+% \UnitTested
% \begin{macro}{\int_abs:n}
+% \UnitTested
% Functions for $\min$, $\max$, and absolute value.
% \begin{macrocode}
\cs_set:Npn \int_abs:n #1{
@@ -2106,8 +2105,11 @@
%
%
% \begin{macro}{\int_div_truncate:nn}
+% \UnitTested
% \begin{macro}{\int_div_round:nn}
+% \UnitTested
% \begin{macro}{\int_mod:nn}
+% \UnitTested
% As "\int_eval:w" rounds the result of a division we also
% provide a version that truncates the result.
% \begin{macrocode}
@@ -2162,10 +2164,11 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\int_if_odd_p:n}
-% \begin{macro}[TF]{\int_if_odd:n}
-% \begin{macro}{\int_if_even_p:n}
-% \begin{macro}[TF]{\int_if_even:n}
+%
+% \begin{macro}[pTF]{\int_if_odd:n}
+% \UnitTested
+% \begin{macro}[pTF]{\int_if_even:n}
+% \UnitTested
% A predicate function.
% \begin{macrocode}
\prg_set_conditional:Npnn \int_if_odd:n #1 {p,TF,T,F} {
@@ -2179,13 +2182,20 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
-% \end{macro}
-% \end{macro}
+%
%
% \begin{macro}{\int_while_do:nn}
+% \UnitTested
+% \TestMissing{Boundary cases}
% \begin{macro}{\int_until_do:nn}
+% \UnitTested
+% \TestMissing{Boundary cases}
% \begin{macro}{\int_do_while:nn}
+% \UnitTested
+% \TestMissing{Boundary cases}
% \begin{macro}{\int_do_until:nn}
+% \UnitTested
+% \TestMissing{Boundary cases}
% These are quite easy given the above functions. The "while" versions
% test first and then execute the body. The "do_while" does it the
% other way round.
@@ -2208,6 +2218,7 @@
% \end{macro}
% \end{macro}
%
+%
% \begin{macro}{\int_while_do:nNnn}
% \begin{macro}{\int_until_do:nNnn}
% \begin{macro}{\int_do_while:nNnn}
@@ -2232,10 +2243,11 @@
% \end{macro}
% \end{macro}
%
-
+%
% \subsection{Defining constants}
-% \begin{macro}{\int_const:Nn}
-% \begin{macro}{\int_const:cn}
+%
+% \begin{macro}{\int_const:Nn, \int_const:cn}
+% \UnitTested
% As stated, most constants can be defined as |\tex_chardef:D| or
% |\tex_mathchardef:D| but that's engine dependent.
% \begin{macrocode}
@@ -2260,15 +2272,7 @@
\cs_generate_variant:Nn \int_const:Nn { c }
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
-%\begin{macro}{\c_max_register_int}
-% This is here as this particular integer is needed both in package
-% mode and to bootstrap \pkg{l3alloc}
-% \begin{macrocode}
-\tex_mathchardef:D \c_max_register_int = 32767 \scan_stop:
-% \end{macrocode}
-% \end{macro}
%
% \begin{macro}{\c_minus_one,
% \c_zero, \c_one, \c_two, \c_three, \c_four, \c_five, \c_six,
@@ -2282,6 +2286,10 @@
% \c_ten_thousand_one, \c_ten_thousand_two,
% \c_ten_thousand_three, \c_ten_thousand_four,
% \c_twenty_thousand}
+% \TestMissing{Too simple for tests, but they aren't aux, so perhaps we should
+% add a test that they actually represent their numbers after
+% all}
+% \UnitTested
% And the usual constants, others are still missing. Please, make
% every constant a real constant at least for the moment. We can
% easily convert things in the end when we have found what
@@ -2289,19 +2297,19 @@
% \begin{macrocode}
%% \tex_countdef:D \c_minus_one = 10 \scan_stop:
%% \c_minus_one = -1 \scan_stop: %% in l3basics
-%\int_const:Nn \c_zero {0}
+%\int_const:Nn \c_zero {0} %% in l3basics
\int_const:Nn \c_one {1}
\int_const:Nn \c_two {2}
\int_const:Nn \c_three {3}
\int_const:Nn \c_four {4}
\int_const:Nn \c_five {5}
-\int_const:Nn \c_six {6}
-\int_const:Nn \c_seven {7}
+%\int_const:Nn \c_six {6} %% in l3basics
+%\int_const:Nn \c_seven {7} %% in l3basics
\int_const:Nn \c_eight {8}
\int_const:Nn \c_nine {9}
\int_const:Nn \c_ten {10}
\int_const:Nn \c_eleven {11}
-\int_const:Nn \c_twelve {12}
+%\int_const:Nn \c_twelve {12} %% in l3basics
\int_const:Nn \c_thirteen {13}
\int_const:Nn \c_fourteen {14}
\int_const:Nn \c_fifteen {15}
@@ -2377,9 +2385,10 @@
%\end{macro}
%\end{macro}
%
-% Needed from the tl module:
+% Needed from other modules:
% \begin{macrocode}
\int_new:N \g_tl_inline_level_int
+\int_new:N\g_prg_inline_level_int
% \end{macrocode}
%
% \subsection{Backwards compatibility}
diff --git a/Master/texmf-dist/source/latex/expl3/l3prg.dtx b/Master/texmf-dist/source/latex/expl3/l3prg.dtx
index a48517c6f12..ad629cd6450 100644
--- a/Master/texmf-dist/source/latex/expl3/l3prg.dtx
+++ b/Master/texmf-dist/source/latex/expl3/l3prg.dtx
@@ -36,7 +36,7 @@
\RequirePackage{l3names}
%</driver|package>
%\fi
-\GetIdInfo$Id: l3prg.dtx 2121 2011-01-07 08:46:09Z joseph $
+\GetIdInfo$Id: l3prg.dtx 2178 2011-03-06 09:03:44Z mittelba $
{L3 Experimental control structures}
%\iffalse
%<*driver>
@@ -223,13 +223,8 @@
% Set <bool1> equal to the value of <bool2>.
% \end{function}
%
-% \begin{function}{%
-% \bool_if_p:N / (EXP) |
-% \bool_if:N / (TF)(EXP) |
-% \bool_if_p:c / (EXP) |
-% \bool_if:c / (TF)(EXP) |
-%
-% }
+% \begin{function}{ \bool_if:N / (pTF) |
+% \bool_if:c / (pTF) }
% \begin{syntax}
% "\bool_if:NTF" <bool> \Arg{true} \Arg{false} \\
% "\bool_if_p:N" <bool>
@@ -289,10 +284,7 @@
% be changed anymore, the remainding tests within the current group
% are skipped.
%
-% \begin{function}{%
-% \bool_if_p:n / (EXP) |
-% \bool_if:n / (TF)(EXP) |
-% }
+% \begin{function}{ \bool_if:n / (pTF) }
% \begin{syntax}
% "\bool_if:nTF" \Arg{boolean expression} \Arg{true}
% \Arg{false}
@@ -444,8 +436,7 @@
%
% \section{Choosing modes}
%
-% \begin{function}{ \mode_if_vertical_p: / (EXP)|
-% \mode_if_vertical: / (TF)(EXP) }
+% \begin{function}{ \mode_if_vertical: / (pTF) }
% \begin{syntax}
% "\mode_if_vertical:TF" \Arg{true code} \Arg{false code}
% \end{syntax}
@@ -453,8 +444,7 @@
% <true code> or <false code> accordingly.
% \end{function}
%
-% \begin{function}{ \mode_if_horizontal_p: / (EXP)|
-% \mode_if_horizontal: / (TF)(EXP) }
+% \begin{function}{ \mode_if_horizontal: / (pTF) }
% \begin{syntax}
% "\mode_if_horizontal:TF" \Arg{true code} \Arg{false code}
% \end{syntax}
@@ -463,9 +453,7 @@
% \end{function}
%
%
-% \begin{function}{
-% \mode_if_inner_p: / (EXP)|
-% \mode_if_inner: / (TF)(EXP) }
+% \begin{function}{ \mode_if_inner: / (pTF) }
% \begin{syntax}
% "\mode_if_inner:TF" \Arg{true code} \Arg{false code}
% \end{syntax}
@@ -473,9 +461,7 @@
% <true code> or <false code> accordingly.
% \end{function}
%
-% \begin{function}{
-% \mode_if_math_p: /(EXP) |
-% \mode_if_math: / (TF)(EXP) }
+% \begin{function}{ \mode_if_math: / (pTF) }
% \begin{syntax}
% "\mode_if_math:TF" \Arg{true code} \Arg{false code}
% \end{syntax}
@@ -672,6 +658,8 @@
%
% \section{\pkg{l3prg} implementation}
%
+% \TestFiles{m3prg001.lvt,m3prg002.lvt,m3prg003.lvt}
+%
% \subsection{Variables}
%
% \begin{function}{ \l_tmpa_bool | \g_tmpa_bool }
@@ -695,7 +683,9 @@
% \end{macrocode}
%
% \begin{macro}{\prg_return_true:}
+% \TestMissing{This function is implicitly tested with all other conditionals!}
% \begin{macro}{\prg_return_false:}
+% \TestMissing{This function is also implicitly tested with all other conditionals!}
% \begin{macro}{
% \prg_set_conditional:Npnn,
% \prg_new_conditional:Npnn,
@@ -720,10 +710,11 @@
% \end{macro}
% \end{macro}
%
+% \newpage ^^A because the previous macro margin block is really big!
% \subsection{Choosing modes}
%
-% \begin{macro}{\mode_if_vertical_p:}
-% \begin{macro}[TF]{\mode_if_vertical:}
+% \begin{macro}[pTF]{\mode_if_vertical:}
+% \UnitTested
% For testing vertical mode. Strikes me here on the bus with David,
% that as long as we are just talking about returning true and
% false states, we can just use the primitive conditionals for this
@@ -732,54 +723,46 @@
% and clean and use the return statements.
% \begin{macrocode}
\prg_set_conditional:Npnn \mode_if_vertical: {p,TF,T,F}{
- \if_mode_vertical:
- \prg_return_true: \else: \prg_return_false: \fi:
+ \if_mode_vertical: \prg_return_true: \else: \prg_return_false: \fi:
}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\mode_if_horizontal_p:}
-% \begin{macro}[TF]{\mode_if_horizontal:}
+% \begin{macro}[pTF]{\mode_if_horizontal:}
+% \UnitTested
% For testing horizontal mode.
% \begin{macrocode}
\prg_set_conditional:Npnn \mode_if_horizontal: {p,TF,T,F}{
- \if_mode_horizontal:
- \prg_return_true: \else: \prg_return_false: \fi:
+ \if_mode_horizontal: \prg_return_true: \else: \prg_return_false: \fi:
}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\mode_if_inner_p:}
-% \begin{macro}[TF]{\mode_if_inner:}
+% \begin{macro}[pTF]{\mode_if_inner:}
+% \UnitTested
% For testing inner mode.
% \begin{macrocode}
\prg_set_conditional:Npnn \mode_if_inner: {p,TF,T,F}{
- \if_mode_inner:
- \prg_return_true: \else: \prg_return_false: \fi:
+ \if_mode_inner: \prg_return_true: \else: \prg_return_false: \fi:
}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\mode_if_math_p:}
-% \begin{macro}[TF]{\mode_if_math:}
+% \begin{macro}[pTF]{\mode_if_math:}
+% \UnitTested
% For testing math mode. Uses the kern-save |\scan_align_safe_stop:|.
% \begin{macrocode}
\prg_set_conditional:Npnn \mode_if_math: {p,TF,T,F}{
- \scan_align_safe_stop: \if_mode_math:
- \prg_return_true: \else: \prg_return_false: \fi:
+ \scan_align_safe_stop: \if_mode_math:
+ \prg_return_true: \else: \prg_return_false: \fi:
}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
% \paragraph{Alignment safe grouping and scanning}
%
%
-% \begin{macro}{\group_align_safe_begin:}
-% \begin{macro}{\group_align_safe_end:}
+% \begin{macro}{\group_align_safe_begin:,\group_align_safe_end:}
% \TeX's alignment structures present many problems. As Knuth says
% himself in \emph{\TeX : The Program}: ``It's sort of a miracle
% whenever |\halign| or |\valign| work, [\ldots]'' One problem relates
@@ -802,7 +785,6 @@
\cs_new_nopar:Npn \group_align_safe_end: {\if_num:w`{=\c_zero}\fi:}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
%
% \begin{macro}{\scan_align_safe_stop:}
@@ -839,6 +821,7 @@
% \subsection{Producing $n$ copies}
%
% \begin{macro}{\prg_replicate:nn}
+% \UnitTested
% \begin{macro}[aux]{\prg_replicate_aux:N,\prg_replicate_first_aux:N}
% This function uses a cascading csname technique by David Kastrup
% (who else :-)
@@ -883,7 +866,7 @@
}
% \end{macrocode}
% \end{macro}
-% \end{macro}
+%
% Then comes all the functions that do the hard work of inserting all
% the copies.
% \begin{macrocode}
@@ -921,11 +904,13 @@
\cs_new:cpn {prg_replicate_first_8:n}#1{\cs_end: #1#1#1#1#1#1#1#1}
\cs_new:cpn {prg_replicate_first_9:n}#1{\cs_end: #1#1#1#1#1#1#1#1#1}
% \end{macrocode}
+% \end{macro}
%
%
%
%
% \begin{macro}{\prg_stepwise_function:nnnN}
+% \UnitTested
% \begin{macro}[aux]{\prg_stepwise_function_incr:nnnN,
% \prg_stepwise_function_decr:nnnN}
% A stepwise function. Firstly we check the direction of the steps
@@ -962,8 +947,9 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\g_prg_inline_level_int}
% \begin{macro}{\prg_stepwise_inline:nnnn}
+% \UnitTested
+% \begin{variable}{\g_prg_inline_level_int}
% \begin{macro}[aux]{\prg_stepwise_inline_decr:nnnn,
% \prg_stepwise_inline_incr:nnnn}
% This function uses the same approach as for instance
@@ -972,7 +958,6 @@
% carries the newly constructed csname. Must make assignments global
% when we maintain our own stack.
% \begin{macrocode}
-\int_new:N\g_prg_inline_level_int
\cs_new_protected:Npn\prg_stepwise_inline:nnnn #1#2#3#4{
\int_gincr:N \g_prg_inline_level_int
\cs_gset_nopar:cpn{prg_stepwise_inline_\int_use:N\g_prg_inline_level_int :n}##1{#4}
@@ -1001,10 +986,11 @@
}
% \end{macrocode}
% \end{macro}
-% \end{macro}
+% \end{variable}
% \end{macro}
%
% \begin{macro}{\prg_stepwise_variable:nnnNn}
+% \UnitTested
% \begin{macro}[aux]{\prg_stepwise_variable_decr:nnnNn,
% \prg_stepwise_variable_incr:nnnNn}
% Almost the same as above. Just store the value in |#4| and execute
@@ -1044,16 +1030,12 @@
% We only define the |N| versions here as the |c| versions can easily
% be constructed with the expansion module.
%
-% \begin{macro}{\bool_new:N}
-% \begin{macro}{\bool_new:c}
-% \begin{macro}{\bool_set_true:N}
-% \begin{macro}{\bool_set_true:c}
-% \begin{macro}{\bool_set_false:N}
-% \begin{macro}{\bool_set_false:c}
-% \begin{macro}{\bool_gset_true:N}
-% \begin{macro}{\bool_gset_true:c}
-% \begin{macro}{\bool_gset_false:N}
-% \begin{macro}{\bool_gset_false:c}
+% \begin{macro}{\bool_new:N,\bool_new:c,
+% \bool_set_true:N,\bool_set_true:c,
+% \bool_set_false:N,\bool_set_false:c,
+% \bool_gset_true:N,\bool_gset_true:c,
+% \bool_gset_false:N,\bool_gset_false:c}
+% \UnitTested
% Defining and setting a boolean is easy.
% \begin{macrocode}
\cs_new_protected_nopar:Npn \bool_new:N #1 { \cs_new_eq:NN #1 \c_false_bool }
@@ -1068,24 +1050,16 @@
\cs_new_protected_nopar:Npn \bool_gset_false:c #1 { \cs_gset_eq:cN {#1} \c_false_bool }
% \end{macrocode}
% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\bool_set_eq:NN}
-% \begin{macro}{\bool_set_eq:Nc}
-% \begin{macro}{\bool_set_eq:cN}
-% \begin{macro}{\bool_set_eq:cc}
-% \begin{macro}{\bool_gset_eq:NN}
-% \begin{macro}{\bool_gset_eq:Nc}
-% \begin{macro}{\bool_gset_eq:cN}
-% \begin{macro}{\bool_gset_eq:cc}
+% \begin{macro}{\bool_set_eq:NN,
+% \bool_set_eq:Nc,
+% \bool_set_eq:cN,
+% \bool_set_eq:cc,
+% \bool_gset_eq:NN,
+% \bool_gset_eq:Nc,
+% \bool_gset_eq:cN,
+% \bool_gset_eq:cc}
+% \UnitTested
% Setting a boolean to another is also pretty easy.
% \begin{macrocode}
\cs_new_eq:NN \bool_set_eq:NN \cs_set_eq:NN
@@ -1098,26 +1072,17 @@
\cs_new_eq:NN \bool_gset_eq:cc \cs_gset_eq:cc
% \end{macrocode}
% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\l_tmpa_bool}
-% \begin{macro}{\g_tmpa_bool}
+% \begin{variable}{\l_tmpa_bool,\g_tmpa_bool}
% A few booleans just if you need them.
% \begin{macrocode}
\bool_new:N \l_tmpa_bool
\bool_new:N \g_tmpa_bool
% \end{macrocode}
-% \end{macro}
-% \end{macro}
+% \end{variable}
%
-% \begin{macro}{\bool_if_p:N,\bool_if_p:c}
-% \begin{macro}[TF]{\bool_if:N,\bool_if:c}
+% \begin{macro}[pTF]{\bool_if:N,\bool_if:c}
+% \UnitTested
% Straight forward here. We could optimize here if we wanted to as
% the boolean can just be input directly.
% \begin{macrocode}
@@ -1130,14 +1095,13 @@
\cs_generate_variant:Nn \bool_if:NF {c}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
%
%
-% \begin{macro}{\bool_while_do:Nn}
-% \begin{macro}{\bool_while_do:cn}
-% \begin{macro}{\bool_until_do:Nn}
-% \begin{macro}{\bool_until_do:cn}
+% \begin{macro}{\bool_while_do:Nn,\bool_while_do:cn,
+% \bool_until_do:Nn,\bool_until_do:cn}
+% \UnitTested
+% \UnitTested
% A "while" loop where the boolean is tested before executing the
% statement. The `while' version executes the code as long as the
% boolean is true; the `until' version executes the code as
@@ -1155,15 +1119,12 @@
}
\cs_generate_variant:Nn \bool_until_do:Nn {c}
% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
+% \end{macro}
%
-% \begin{macro}{\bool_do_while:Nn}
-% \begin{macro}{\bool_do_while:cn}
-% \begin{macro}{\bool_do_until:Nn}
-% \begin{macro}{\bool_do_until:cn}
+% \begin{macro}{\bool_do_while:Nn,\bool_do_while:cn,
+% \bool_do_until:Nn,\bool_do_until:cn}
+% \UnitTested
+% \UnitTested
% A "do-while" loop where the body is performed at least once and the
% boolean is tested after executing the body. Otherwise identical to
% the above functions.
@@ -1180,31 +1141,28 @@
}
\cs_generate_variant:Nn \bool_do_until:Nn {c}
% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
+% \end{macro}
%
%
%
% \subsection{Parsing boolean expressions}
%
-% \begin{macro}{\bool_if_p:n}
-% \begin{macro}[TF]{\bool_if:n}
-% \begin{macro}[aux]{\bool_get_next:N, \bool_cleanup:N, \bool_choose:NN}
-% \begin{macro}[aux]{\bool_!:w}
-% \begin{macro}[aux]{\bool_Not:w}
-% \begin{macro}[aux]{\bool_Not:w}
-% \begin{macro}[aux]{\bool_(:w}
-% \begin{macro}[aux]{\bool_p:w}
-% \begin{macro}[aux]{\bool_8_1:w}
-% \begin{macro}[aux]{\bool_I_1:w}
-% \begin{macro}[aux]{\bool_8_0:w}
-% \begin{macro}[aux]{\bool_I_0:w}
-% \begin{macro}[aux]{\bool_)_0:w}
-% \begin{macro}[aux]{\bool_)_1:w}
-% \begin{macro}[aux]{\bool_S_0:w}
-% \begin{macro}[aux]{\bool_S_1:w}
+% \begin{macro}[pTF]{\bool_if:n}
+% \UnitTested
+% \begin{macro}[aux]{\bool_get_next:N, \bool_cleanup:N, \bool_choose:NN,
+% \bool_!:w,
+% \bool_Not:w,
+% \bool_Not:w,
+% \bool_(:w,
+% \bool_p:w,
+% \bool_8_1:w,
+% \bool_I_1:w,
+% \bool_8_0:w,
+% \bool_I_0:w,
+% \bool_)_0:w,
+% \bool_)_1:w,
+% \bool_S_0:w,
+% \bool_S_1:w}
%
% Evaluating the truth value of a list of predicates is done using
% an input syntax somewhat similar to the one found in other
@@ -1441,20 +1399,6 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
%
% \begin{macro}[aux]{\bool_eval_skip_to_end:Nw,
% \bool_eval_skip_to_end_aux:Nw,\bool_eval_skip_to_end_auxii:Nw}
@@ -1551,6 +1495,7 @@
% \end{macro}
%
% \begin{macro}{\bool_not_p:n}
+% \UnitTested
% The "not" variant just reverses the outcome of |\bool_if_p:n|. Can
% be optimized but this is nice and simple and according to the
% implementation plan. Not even particularly useful to have it when
@@ -1561,6 +1506,7 @@
% \end{macro}
%
% \begin{macro}{\bool_xor_p:nn}
+% \UnitTested
% Exclusive or. If the boolean expressions have same truth value,
% return false, otherwise return true.
% \begin{macrocode}
@@ -1578,8 +1524,9 @@
}
% \end{macrocode}
%
-% \begin{macro}{\bool_while_do:nn,\bool_until_do:nn}
-% \begin{macro}{\bool_do_while:nn,\bool_do_until:nn}
+% \begin{macro}{\bool_while_do:nn,\bool_do_while:nn}
+% \UnitTested
+% \begin{macro}{\bool_until_do:nn,\bool_do_until:nn}
% \begin{arguments}
% \item Predicate test
% \item Code to execute
@@ -1604,6 +1551,7 @@
% \subsection{Case switch}
%
% \begin{macro}{\prg_case_int:nnn}
+% \UnitTested
% \begin{macro}[aux]{\prg_case_int_aux:nnn}
% This case switch is in reality quite simple. It takes three arguments:
% \begin{enumerate}
@@ -1651,6 +1599,7 @@
% \end{macro}
%
% \begin{macro}{\prg_case_dim:nnn}
+% \UnitTested
% \begin{macro}[aux]{\prg_case_dim_aux:nnn}
% Same as |\prg_case_dim:nnn| except it is for \meta{dim} registers.
% \begin{macrocode}
@@ -1669,6 +1618,7 @@
% \end{macro}
%
% \begin{macro}{\prg_case_str:nnn}
+% \UnitTested
% \begin{macro}[aux]{\prg_case_str_aux:nnn}
% Same as |\prg_case_dim:nnn| except it is for strings.
% \begin{macrocode}
@@ -1687,6 +1637,7 @@
% \end{macro}
%
% \begin{macro}{\prg_case_tl:Nnn}
+% \UnitTested
% \begin{macro}[aux]{\prg_case_tl_aux:NNn}
% Same as |\prg_case_dim:nnn| except it is for token list variables.
% \begin{macrocode}
@@ -1835,6 +1786,7 @@
%
%
% \begin{macro}{\prg_quicksort:n}
+% \UnitTested
% A simple version. Sorts a list of tokens, uses the function
% |\prg_quicksort_compare:nnTF| to compare items, and places the
% function |\prg_quicksort_function:n| in front of each of them.
@@ -1844,7 +1796,9 @@
% \end{macro}
%
% \begin{macro}{\prg_quicksort_function:n}
+% \UnitTested
% \begin{macro}{\prg_quicksort_compare:nnTF}
+% \UnitTested
% \begin{macrocode}
\cs_set:Npn \prg_quicksort_function:n {\ERROR}
\cs_set:Npn \prg_quicksort_compare:nnTF {\ERROR}
diff --git a/Master/texmf-dist/source/latex/expl3/l3quark.dtx b/Master/texmf-dist/source/latex/expl3/l3quark.dtx
index d5db2374451..eb1c092e172 100644
--- a/Master/texmf-dist/source/latex/expl3/l3quark.dtx
+++ b/Master/texmf-dist/source/latex/expl3/l3quark.dtx
@@ -36,7 +36,7 @@
\RequirePackage{l3names}
%</driver|package>
%\fi
-\GetIdInfo$Id: l3quark.dtx 2036 2010-09-20 20:33:54Z joseph $
+\GetIdInfo$Id: l3quark.dtx 2172 2011-03-03 10:56:49Z will $
{L3 Experimental Quark Commands}
%\iffalse
%<*driver>
@@ -44,9 +44,9 @@
\ProvidesFile{\filename.\filenameext}
[\filedate\space v\fileversion\space\filedescription]
%\iffalse
-\documentclass[full]{l3doc}
+\documentclass[full,checktest]{l3doc}
\begin{document}
-\DocInput{\filename.\filenameext}
+\DocInput{l3quark.dtx}
\end{document}
%</driver>
% \fi
@@ -79,7 +79,6 @@
%
% The documentation needs some updating.
%
-%
% \section{Functions}
%
% \begin{function}{ \quark_new:N }
@@ -90,10 +89,8 @@
% \end{function}
%
% \begin{function}{%
-% \quark_if_no_value_p:n / (EXP) |
-% \quark_if_no_value:n / (TF)(EXP) |
-% \quark_if_no_value_p:N / (EXP) |
-% \quark_if_no_value:N / (TF)(EXP) |
+% \quark_if_no_value:n / (pTF) ,
+% \quark_if_no_value:N / (pTF) ,
% }
% \begin{syntax}
% "\quark_if_no_value:nTF" \Arg{token list} \Arg{true code} \Arg{false code}
@@ -120,8 +117,7 @@
% \end{function}
%
% \begin{function}{%
-% \quark_if_nil_p:N / (EXP) |
-% \quark_if_nil:N / (TF)(EXP) |
+% \quark_if_nil:N / (pTF) ,
% }
% \begin{syntax}
% "\quark_if_nil:NTF" <token> \Arg{true code} \Arg{false code}
@@ -135,12 +131,9 @@
%
%
% \begin{function}{%
-% \quark_if_nil_p:n / (EXP) |
-% \quark_if_nil_p:V / (EXP) |
-% \quark_if_nil_p:o / (EXP) |
-% \quark_if_nil:n / (TF)(EXP) |
-% \quark_if_nil:V / (TF)(EXP) |
-% \quark_if_nil:o / (TF)(EXP) |
+% \quark_if_nil:n / (pTF) ,
+% \quark_if_nil:V / (pTF) ,
+% \quark_if_nil:o / (pTF) ,
% }
% \begin{syntax}
% "\quark_if_nil:nTF" \Arg{tokens} \Arg{true code} \Arg{false code}
@@ -171,9 +164,9 @@
% \end{variable}
%
% \begin{function}{%
-% \quark_if_recursion_tail_stop:N / (EXP) |
-% \quark_if_recursion_tail_stop:n / (EXP) |
-% \quark_if_recursion_tail_stop:o / (EXP) |
+% \quark_if_recursion_tail_stop:N / (EXP) ,
+% \quark_if_recursion_tail_stop:n / (EXP) ,
+% \quark_if_recursion_tail_stop:o / (EXP) ,
% }
% \begin{syntax}
% "\quark_if_recursion_tail_stop:n" \Arg{list element} \\
@@ -193,9 +186,9 @@
% \end{function}
%
% \begin{function}{%
-% \quark_if_recursion_tail_stop_do:Nn / (EXP) |
-% \quark_if_recursion_tail_stop_do:nn / (EXP) |
-% \quark_if_recursion_tail_stop_do:on / (EXP) |
+% \quark_if_recursion_tail_stop_do:Nn / (EXP) ,
+% \quark_if_recursion_tail_stop_do:nn / (EXP) ,
+% \quark_if_recursion_tail_stop_do:on / (EXP) ,
% }
% \begin{syntax}
% "\quark_if_recursion_tail_stop_do:nn"
@@ -239,6 +232,8 @@
%
% \section{\pkg{l3quark} implementation}
%
+% \TestFiles{m3quark001.lvt}
+%
% We start by ensuring that the required packages are loaded.
% We check for \texttt{l3expan} since this a basic package that is
% essential for use of any higher-level package.
@@ -253,12 +248,13 @@
%
% \begin{macro}{\quark_new:N}
% Allocate a new quark.
+% \UnitTested
% \begin{macrocode}
\cs_new_protected_nopar:Npn \quark_new:N #1 { \tl_const:Nn #1 {#1} }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\q_stop,\q_no_value,\q_nil}
+% \begin{variable}{\q_stop,\q_no_value,\q_nil}
% |\q_stop| is often used as a marker in parameter text,
% |\q_no_value| is the canonical missing value, and |\q_nil|
% represents a nil pointer in some data structures.
@@ -267,9 +263,9 @@
\quark_new:N \q_no_value
\quark_new:N \q_nil
% \end{macrocode}
-% \end{macro}
+% \end{variable}
%
-% \begin{macro}{\q_error,\q_mark}
+% \begin{variable}{\q_error,\q_mark}
% We need two additional quarks. |\q_error| delimits the end of
% the computation for purposes of error recovery. |\q_mark| is
% used in parameter text when we need a scanning boundary that is
@@ -278,10 +274,10 @@
\quark_new:N\q_error
\quark_new:N\q_mark
% \end{macrocode}
-% \end{macro}
+% \end{variable}
%
%
-% \begin{macro}{\q_recursion_tail,\q_recursion_stop}
+% \begin{variable}{\q_recursion_tail,\q_recursion_stop}
% Quarks for ending recursions. Only ever used there!
% |\q_recursion_tail| is appended to whatever list structure we are
% doing recursion on, meaning it is added as a proper list item with
@@ -291,11 +287,12 @@
\quark_new:N\q_recursion_tail
\quark_new:N\q_recursion_stop
% \end{macrocode}
-% \end{macro}
+% \end{variable}
%
-% \begin{macro}{\quark_if_recursion_tail_stop:n}
-% \begin{macro}{\quark_if_recursion_tail_stop:N}
-% \begin{macro}{\quark_if_recursion_tail_stop:o}
+% \begin{macro}{\quark_if_recursion_tail_stop:n,
+% \quark_if_recursion_tail_stop:N,
+% \quark_if_recursion_tail_stop:o}
+% \UnitTested
% When doing recursions it is easy to spend a lot of time testing if
% we found the end marker. To avoid this, we use a recursion end
% marker every time we do this kind of task. Also, if the recursion
@@ -315,12 +312,14 @@
\cs_generate_variant:Nn \quark_if_recursion_tail_stop:n {o}
% \end{macrocode}
% \end{macro}
-% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\quark_if_recursion_tail_stop_do:nn}
-% \begin{macro}{\quark_if_recursion_tail_stop_do:Nn}
-% \begin{macro}{\quark_if_recursion_tail_stop_do:on}
+% \begin{macro}{\quark_if_recursion_tail_stop_do:nn,
+% \quark_if_recursion_tail_stop_do:Nn,
+% \quark_if_recursion_tail_stop_do:on}
+% \UnitTested
+% These functions are variants of the above that
+% inserts tokens into the input stream after a
+% recursion process is finalised.
% \begin{macrocode}
\cs_new:Npn \quark_if_recursion_tail_stop_do:nn #1#2 {
\exp_after:wN\if_meaning:w
@@ -342,8 +341,6 @@
\cs_generate_variant:Nn \quark_if_recursion_tail_stop_do:nn {on}
% \end{macrocode}
% \end{macro}
-% \end{macro}
-% \end{macro}
%
% \begin{macro}[aux]{\quark_if_recursion_tail_aux:w}
% \begin{macrocode}
@@ -351,8 +348,8 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\quark_if_no_value_p:N,\quark_if_no_value_p:n}
-% \begin{macro}[TF]{\quark_if_no_value:N,\quark_if_no_value:n}
+% \begin{macro}[pTF]{\quark_if_no_value:N,\quark_if_no_value:n}
+% \UnitTested
% Here we test if we found a special quark as the first argument.
% We better start with |\q_no_value| as the first argument since
% the whole thing may otherwise loop if |#1| is wrongly given
@@ -375,10 +372,9 @@
}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\quark_if_nil_p:N}
-% \begin{macro}[TF]{\quark_if_nil:N}
+% \begin{macro}[pTF]{\quark_if_nil:N}
+% \UnitTested
% A function to check for the presence of |\q_nil|.
% \begin{macrocode}
\prg_new_conditional:Nnn \quark_if_nil:N {p,TF,T,F} {
@@ -386,10 +382,9 @@
}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
-% \begin{macro}{\quark_if_nil_p:n,\quark_if_nil_p:V,\quark_if_nil_p:o}
-% \begin{macro}[TF]{\quark_if_nil:n,\quark_if_nil:V,\quark_if_nil:o}
+% \begin{macro}[pTF]{\quark_if_nil:n,\quark_if_nil:V,\quark_if_nil:o}
+% \UnitTested
% A function to check for the presence of |\q_nil|.
% \begin{macrocode}
\prg_new_conditional:Nnn \quark_if_nil:n {p,TF,T,F} {
@@ -409,13 +404,11 @@
\cs_generate_variant:Nn \quark_if_nil:nF {o}
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
%
%
% Show token usage:
% \begin{macrocode}
-
%<*showmemory>
\showMemUsage
%</showmemory>
diff --git a/Master/texmf-dist/source/latex/expl3/l3skip.dtx b/Master/texmf-dist/source/latex/expl3/l3skip.dtx
index 75e1982a573..02961cc188f 100644
--- a/Master/texmf-dist/source/latex/expl3/l3skip.dtx
+++ b/Master/texmf-dist/source/latex/expl3/l3skip.dtx
@@ -36,7 +36,7 @@
\RequirePackage{l3names}
%</driver|package>
%\fi
-\GetIdInfo$Id: l3skip.dtx 2121 2011-01-07 08:46:09Z joseph $
+\GetIdInfo$Id: l3skip.dtx 2149 2011-02-15 20:50:02Z mittelba $
{L3 Experimental skip registers}
%\iffalse
%<*driver>
@@ -832,9 +832,10 @@
% \end{macro}
%
% \begin{macro}{\skip_eval:n}
-% Evaluating a calc expression.
+% Evaluating a calc expression. This is expandable and works inside an ``x''
+% type of argument.
% \begin{macrocode}
-\cs_new_protected_nopar:Npn \skip_eval:n #1 {
+\cs_new_nopar:Npn \skip_eval:n #1 {
\tex_the:D \etex_glueexpr:D #1 \scan_stop:
}
% \end{macrocode}
@@ -1125,9 +1126,10 @@
% \end{macro}
%
% \begin{macro}{\dim_eval:n}
-% Evaluating a calc expression.
+% Evaluating a calc expression. This is expandable and works inside an ``x''
+% type of argument.
% \begin{macrocode}
-\cs_new_protected_nopar:Npn \dim_eval:n #1 {
+\cs_new_nopar:Npn \dim_eval:n #1 {
\tex_the:D \etex_dimexpr:D #1 \scan_stop:
}
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/expl3/l3tl.dtx b/Master/texmf-dist/source/latex/expl3/l3tl.dtx
index 00ab46f152d..fe6ecd271f1 100644
--- a/Master/texmf-dist/source/latex/expl3/l3tl.dtx
+++ b/Master/texmf-dist/source/latex/expl3/l3tl.dtx
@@ -36,7 +36,7 @@
\RequirePackage{l3names}
%</driver|package>
%\fi
-\GetIdInfo$Id: l3tl.dtx 2138 2011-01-26 08:15:27Z joseph $
+\GetIdInfo$Id: l3tl.dtx 2184 2011-03-07 18:07:12Z joseph $
{L3 Experimental Token Lists}
%\iffalse
%<*driver>
@@ -1900,24 +1900,23 @@
\_tl_replace_in_aux:NNnn \tl_set_eq:NN
}
\cs_new_protected:Npn \_tl_replace_in_aux:NNnn #1#2#3#4 {
- \cs_set:Npn \_tl_tmp:w ##1 #3 ##2 \q_stop
+ \cs_set_protected:Npn \_tl_tmp:w ##1 #3 ##2 \q_stop
{
\quark_if_no_value:nF {##2}
{
\tl_set:No \_l_tl_replace_tl { ##1 #4 }
- \cs_set:Npn \_tl_tmp:w ####1 #3 \q_no_value {
- \tl_put_right:No \_l_tl_replace_tl {####1}
- }
+ \cs_set_protected:Npn \_tl_tmp:w ####1 \q_nil #3 \q_no_value
+ { \tl_put_right:No \_l_tl_replace_tl {####1} }
\_tl_tmp:w \prg_do_nothing: ##2
#1 #2 \_l_tl_replace_tl
}
}
- \use:n
+ \use:n
{
\exp_after:wN \_tl_tmp:w \exp_after:wN
\prg_do_nothing:
- }
- #2 #3 \q_no_value \q_stop
+ }
+ #2 \q_nil #3 \q_no_value \q_stop
}
\cs_new_protected_nopar:Npn \tl_greplace_in:Nnn {
\_tl_replace_in_aux:NNnn \tl_gset_eq:NN
@@ -1947,21 +1946,25 @@
}
\cs_new_protected:Npn \_tl_replace_all_in_aux:NNnn #1#2#3#4 {
\tl_clear:N \_l_tl_replace_tl
- \cs_set:Npn \_tl_tmp:w ##1 #3 ##2 \q_stop
+ \cs_set_protected:Npn \_tl_tmp:w ##1 #3 ##2 \q_stop
{
\quark_if_no_value:nTF {##2}
- { \tl_put_right:No \_l_tl_replace_tl {##1} }
+ {
+ \cs_set_protected:Npn \_tl_tmp:w ####1 \q_nil ####2 \q_stop
+ { \tl_put_right:No \_l_tl_replace_tl {####1} }
+ \_tl_tmp:w ##1 \q_stop
+ }
{
\tl_put_right:No \_l_tl_replace_tl { ##1 #4 }
\_tl_tmp:w \prg_do_nothing: ##2 \q_stop
}
}
- \use:n
+ \use:n
{
\exp_after:wN \_tl_tmp:w \exp_after:wN
\prg_do_nothing:
- }
- #2 #3 \q_no_value \q_stop
+ }
+ #2 \q_nil #3 \q_no_value \q_stop
#1 #2 \_l_tl_replace_tl
}
\cs_generate_variant:Nn \tl_replace_all_in:Nnn { c }
diff --git a/Master/texmf-dist/source/latex/expl3/l3token.dtx b/Master/texmf-dist/source/latex/expl3/l3token.dtx
index 81e70af0bcf..9482c3865a0 100644
--- a/Master/texmf-dist/source/latex/expl3/l3token.dtx
+++ b/Master/texmf-dist/source/latex/expl3/l3token.dtx
@@ -35,7 +35,7 @@
\RequirePackage{l3names}
%</driver|package>
%\fi
-\GetIdInfo$Id: l3token.dtx 2063 2010-10-03 08:26:49Z mittelba $
+\GetIdInfo$Id: l3token.dtx 2151 2011-02-16 06:58:12Z will $
{L3 Experimental token investigation and manipulation}
%\iffalse
%<*driver>
@@ -708,7 +708,7 @@
%
% \subsection{Documentation of internal functions}
%
-% \begin{variable}{%
+% \begin{variabledoc}{%
% \l_peek_true_tl |
% \l_peek_false_tl |
% }
@@ -716,13 +716,13 @@
% \end{syntax}
% These token list variables are used internally when choosing either
% the true or false branches of a test.
-% \end{variable}
+% \end{variabledoc}
%
-% \begin{variable}{ \l_peek_search_tl }
+% \begin{variabledoc}{ \l_peek_search_tl }
% \begin{syntax}
% \end{syntax}
% Used to store "\l_peek_search_token".
-% \end{variable}
+% \end{variabledoc}
%
% \begin{function}{%
% \peek_tmp:w |
@@ -732,7 +732,7 @@
% Scratch function used to gobble tokens from the input stream.
% \end{function}
%
-% \begin{variable}{%
+% \begin{variabledoc}{%
% \l_peek_true_aux_tl |
% \c_peek_true_remove_next_tl |
% }
@@ -740,7 +740,7 @@
% \end{syntax}
% These token list variables are used internally when choosing either
% the true or false branches of a test.
-% \end{variable}
+% \end{variabledoc}
%
% \begin{function}{%
% \peek_ignore_spaces_execute_branches: |
diff --git a/Master/texmf-dist/source/latex/expl3/l3xref.dtx b/Master/texmf-dist/source/latex/expl3/l3xref.dtx
index 5996ed3506b..5c84cce4d55 100644
--- a/Master/texmf-dist/source/latex/expl3/l3xref.dtx
+++ b/Master/texmf-dist/source/latex/expl3/l3xref.dtx
@@ -36,7 +36,7 @@
\RequirePackage{l3names}
%</driver|package|testfile>
%\fi
-\GetIdInfo$Id: l3xref.dtx 1786 2010-02-09 12:52:45Z joseph $
+\GetIdInfo$Id: l3xref.dtx 2151 2011-02-16 06:58:12Z will $
{L3 Experimental cross referencing}
%\iffalse
%<*testfile>
@@ -113,15 +113,15 @@
%
% \subsection{Internal functions and variables}
%
-% \begin{variable}{ \g_xref_all_curr_immediate_fields_prop |
+% \begin{variabledoc}{ \g_xref_all_curr_immediate_fields_prop |
% \g_xref_all_curr_deferred_fields_prop }
% What they say they are ":)"
-% \end{variable}
+% \end{variabledoc}
%
-% \begin{variable}{ \xref_write }
+% \begin{variabledoc}{ \xref_write }
% A stream for writing cross references, although they are not required
% to be in a separate file.
-% \end{variable}
+% \end{variabledoc}
%
% \begin{function}{\xref_define_label:nn}
% \begin{syntax}
diff --git a/Master/texmf-dist/source/latex/expl3/source3.tex b/Master/texmf-dist/source/latex/expl3/source3.tex
deleted file mode 100644
index 74199936ca1..00000000000
--- a/Master/texmf-dist/source/latex/expl3/source3.tex
+++ /dev/null
@@ -1,102 +0,0 @@
-% \iffalse
-%% File: source3.dtx Copyright (C) 1990-2010 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.
-%%
-%% -----------------------------------------------------------------------
-%%
-%% 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 LaTeX Project Team.
-%%
-%% -----------------------------------------------------------------------
-%% \fi
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% This document will typeset the LaTeX3 sources as a single document.
-% This will produce quite a large file (more than 400 pages) and may
-% take a long time on a slow machine.
-%
-% 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{\Team}
-
-\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
-
-%% \DocInput{l3vers.dtx} % Current version date
-
-\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/expl3/source3body.tex b/Master/texmf-dist/source/latex/expl3/source3body.tex
deleted file mode 100644
index 017efe6530c..00000000000
--- a/Master/texmf-dist/source/latex/expl3/source3body.tex
+++ /dev/null
@@ -1,391 +0,0 @@
-% \iffalse
-%% File: source3body.tex Copyright (C) 1990-2010 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.
-%%
-%% -----------------------------------------------------------------------
-%%
-%% 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 LaTeX Project Team.
-%%
-%% -----------------------------------------------------------------------
-%% \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{\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 ``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} (``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 though 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}: the plain \TeX\ \cs{edef}.
- \item[\texttt{f}] The \texttt{f} specifier stands for \emph{full
- expansion}, and in contrast to \emph{x} stops at the first
- non-expandable item without trying to execute it.
- \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{dim}] `Rigid' lengths.
- \item[\texttt{int}] Integer-valued count register.
- \item[\texttt{num}] A `fake' integer type using only macros. Useful for
- setting up allocation routines.
- \item[\texttt{prop}] Property list.
- \item[\texttt{skip}] `Rubber' lengths.
- \item[\texttt{seq}] `Sequence': a data-type used to implement lists
- (with access at both ends) and stacks.
- \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.
- \item[\texttt{toks}] Token register.
-\end{description}
-
-\subsubsection{Terminological inexactitude}
-
-A word of warning. In this document, and others referring to the \pkg{expl3}
-programming modules, we often refer to `variables' and `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 mayn't 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 `function' with no arguments and a `token
-list variable' are in truth one and the same. On the other hand, some
-`variables' are actually registers that must be initialised and their values
-set and retreived with specific functions.
-
-The conventions of the \pkg{expl3} code are designed to clearly separate the
-ideas of `macros that contain data' and `macros that contain code', and a
-consistent wrapper is applied to all forms of `data' whether they be macros or
-actually registers. This means that sometimes we will use phrases like `the
-function returns a value', when actually we just mean `the macro expands to
-something'. Similarly, the term `execute' might be used in place of `expand'
-or it might refer to the more specific case of `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 ``user'' name, this might read:
-\begin{function}{
- \ExplSyntaxOn |
- \ExplSyntaxOff
- }
- \begin{syntax}
- "\ExplSyntaxOn" \dots\ "\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}
- "\seq_new:N" <sequence>
- \end{syntax}
- When a number of variants are described, the arguments are usually
- illustrated only for the base function. Here, <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}
-
-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}).
-These fully expandable functions are indicated in the documentation by
-a star:
-\begin{function}{
- \cs_to_str:N / (EXP)
- }
- \begin{syntax}
- "\cs_to_str:N" <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 <cs>,
- shorthand for a <control sequence>.
-\end{function}
-
-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 `true'/`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}{
- \xetex_if_engine: / (TF) (EXP)
- }
- \begin{syntax}
- "\xetex_if_engine:TF" <true code> <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 <true code>
- and <false code> will be shown. The two variant forms \texttt{T} and
- \texttt{F} take only <true code> and <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 `\textbf{\TeX{}hackers
-note}' section:
-\begin{function}{
- \token_to_str:N / (EXP)
- }
- \begin{syntax}
- "\token_to_str:N" <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}
-
-\DisableImplementation
-
-\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{l3toks.dtx}
-\DocInput{l3seq.dtx}
-\DocInput{l3clist.dtx}
-\DocInput{l3prop.dtx}
-
-\DocInput{l3io.dtx}
-\DocInput{l3msg.dtx}
-\DocInput{l3box.dtx}
-\DocInput{l3xref.dtx}
-\DocInput{l3keyval.dtx}
-\DocInput{l3keys.dtx}
-%\DocInput{l3calc.dtx}
-\DocInput{l3file.dtx}
-
-% \DocInput{l3precom.dtx}
-% \DocInput{l3alloc.dtx}
-% \DocInput{l3chk.dtx}
-
-\DocInput{l3fp.dtx}
-\DocInput{l3luatex.dtx}
-
-\endinput