diff options
Diffstat (limited to 'Master')
38 files changed, 2000 insertions, 1277 deletions
diff --git a/Master/texmf-dist/doc/latex/expl3/expl3.pdf b/Master/texmf-dist/doc/latex/expl3/expl3.pdf Binary files differindex 1c079761cf7..6ae7f5f29d1 100644 --- a/Master/texmf-dist/doc/latex/expl3/expl3.pdf +++ b/Master/texmf-dist/doc/latex/expl3/expl3.pdf diff --git a/Master/texmf-dist/source/latex/expl3/interface3.tex b/Master/texmf-dist/doc/latex/expl3/interface3.tex index cb2d3d88335..cb2d3d88335 100644 --- a/Master/texmf-dist/source/latex/expl3/interface3.tex +++ b/Master/texmf-dist/doc/latex/expl3/interface3.tex diff --git a/Master/texmf-dist/doc/latex/expl3/l3calc.pdf b/Master/texmf-dist/doc/latex/expl3/l3calc.pdf Binary files differindex 49e994124a6..f70c06bc799 100644 --- a/Master/texmf-dist/doc/latex/expl3/l3calc.pdf +++ b/Master/texmf-dist/doc/latex/expl3/l3calc.pdf diff --git a/Master/texmf-dist/doc/latex/expl3/source3.pdf b/Master/texmf-dist/doc/latex/expl3/source3.pdf Binary files differindex 5f95838412d..91801d0783b 100644 --- a/Master/texmf-dist/doc/latex/expl3/source3.pdf +++ b/Master/texmf-dist/doc/latex/expl3/source3.pdf diff --git a/Master/texmf-dist/source/latex/expl3/source3.tex b/Master/texmf-dist/doc/latex/expl3/source3.tex index 74199936ca1..74199936ca1 100644 --- a/Master/texmf-dist/source/latex/expl3/source3.tex +++ b/Master/texmf-dist/doc/latex/expl3/source3.tex diff --git a/Master/texmf-dist/source/latex/expl3/source3body.tex b/Master/texmf-dist/doc/latex/expl3/source3body.tex index 017efe6530c..9700fc44dbf 100644 --- a/Master/texmf-dist/source/latex/expl3/source3body.tex +++ b/Master/texmf-dist/doc/latex/expl3/source3body.tex @@ -372,9 +372,11 @@ note}' section: \DocInput{l3clist.dtx} \DocInput{l3prop.dtx} +\DocInput{l3font.dtx} +\DocInput{l3box.dtx} + \DocInput{l3io.dtx} \DocInput{l3msg.dtx} -\DocInput{l3box.dtx} \DocInput{l3xref.dtx} \DocInput{l3keyval.dtx} \DocInput{l3keys.dtx} 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/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/tex/latex/expl3/expl3.sty b/Master/texmf-dist/tex/latex/expl3/expl3.sty index c300e06c1e3..cec0003dbd8 100644 --- a/Master/texmf-dist/tex/latex/expl3/expl3.sty +++ b/Master/texmf-dist/tex/latex/expl3/expl3.sty @@ -49,7 +49,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3names} -\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}% \ProvidesExplPackage {\filename}{\filedate}{\fileversion}{\filedescription} @@ -88,7 +88,8 @@ l3xref, l3file, l3fp, - l3luatex + l3luatex, + l3font } \RequirePackage{calc} \bool_if:nT { \@l@expl@check@declarations@bool } { diff --git a/Master/texmf-dist/tex/latex/expl3/l3basics.sty b/Master/texmf-dist/tex/latex/expl3/l3basics.sty index 1c0e8c5243b..8afc6cdeb81 100644 --- a/Master/texmf-dist/tex/latex/expl3/l3basics.sty +++ b/Master/texmf-dist/tex/latex/expl3/l3basics.sty @@ -15,7 +15,7 @@ %% Do not distribute a modified version of this file. %% %% -%% 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 @@ -48,7 +48,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3names} -\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} \ProvidesExplPackage {\filename}{\filedate}{\fileversion}{\filedescription} @@ -396,6 +396,10 @@ \cs_set_eq:NwN \c_minus_one\m@ne \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~ +\tex_mathchardef:D \c_max_register_int = 32767 \tex_relax:D \cs_set_protected_nopar:Npn \iow_log:x { \tex_immediate:D \iow_shipout_x:Nn \c_minus_one } diff --git a/Master/texmf-dist/tex/latex/expl3/l3box.sty b/Master/texmf-dist/tex/latex/expl3/l3box.sty index ad546da7c67..7b06929a060 100644 --- a/Master/texmf-dist/tex/latex/expl3/l3box.sty +++ b/Master/texmf-dist/tex/latex/expl3/l3box.sty @@ -15,7 +15,7 @@ %% Do not distribute a modified version of this file. %% %% -%% 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 @@ -48,7 +48,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3names} -\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} \ProvidesExplPackage {\filename}{\filedate}{\fileversion}{\filedescription} diff --git a/Master/texmf-dist/tex/latex/expl3/l3clist.sty b/Master/texmf-dist/tex/latex/expl3/l3clist.sty index 2e40898a0dc..abbf7133cea 100644 --- a/Master/texmf-dist/tex/latex/expl3/l3clist.sty +++ b/Master/texmf-dist/tex/latex/expl3/l3clist.sty @@ -15,7 +15,7 @@ %% Do not distribute a modified version of this file. %% %% -%% 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 @@ -48,7 +48,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3names} -\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} \ProvidesExplPackage {\filename}{\filedate}{\fileversion}{\filedescription} @@ -106,8 +106,8 @@ \clist_if_empty_err:N #1 \exp_after:wN \clist_get_aux:w #1,\q_stop } -\cs_new_protected:Npn \clist_get_aux:w #1,#2\q_stop #3 { \tl_set:Nn #3{#1} } \cs_generate_variant:Nn \clist_get:NN {cN} +\cs_new_protected:Npn \clist_get_aux:w #1,#2\q_stop #3 { \tl_set:Nn #3{#1} } \cs_new_protected:Npn \clist_pop_aux:nnNN #1#2#3 { \clist_if_empty_err:N #3 \exp_after:wN \clist_pop_aux:w #3,\q_nil\q_stop #1#2#3 diff --git a/Master/texmf-dist/tex/latex/expl3/l3doc.cls b/Master/texmf-dist/tex/latex/expl3/l3doc.cls index 09ece930f47..e79e3fbee21 100644 --- a/Master/texmf-dist/tex/latex/expl3/l3doc.cls +++ b/Master/texmf-dist/tex/latex/expl3/l3doc.cls @@ -53,11 +53,11 @@ \let \filedateOld \filedate \let \fileversionOld \fileversion \let \filedescriptionOld \filedescription -\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} \ProvidesExplClass {\filename}{\filedate}{\fileversion}{\filedescription} -\RequirePackage{expl3} +\RequirePackage{expl3,xparse} \let \filename \filenameOld \let \filenameext \filenameextOld \let \filedate \filedateOld @@ -73,14 +73,17 @@ \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 \DeclareOption{full}{ \bool_set_true:N \g_doc_full_bool } \DeclareOption{onlydoc}{ \bool_set_false:N \g_doc_full_bool } \DeclareOption{check}{ \bool_set_true:N \g_doc_checkfunc_bool } \DeclareOption{nocheck}{ \bool_set_false:N \g_doc_checkfunc_bool } +\DeclareOption{checktest}{ \bool_set_true:N \g_doc_checktest_bool } +\DeclareOption{nochecktest}{ \bool_set_false:N \g_doc_checktest_bool } \DeclareOption{cm-default}{ \bool_set_false:N \g_doc_lmodern_bool } \DeclareOption{lm-default}{ \bool_set_true:N \g_doc_lmodern_bool } \DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}} -\ExecuteOptions{full,a4paper,nocheck,lm-default} +\ExecuteOptions{full,a4paper,nocheck,nochecktest,lm-default} \InputIfFileExists{l3doc.cfg} { \typeout{*************************************^^J @@ -165,13 +168,20 @@ \index{TeX~and~LaTeX2e~commands\actualchar \string\TeX{}~and~\string\LaTeXe{}~commands:\levelchar #1\actualchar{\string\ttfamily\string\bslash{}#1}}} -\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 @@ -193,6 +203,7 @@ \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: @@ -206,7 +217,7 @@ \function_aux:n } \group_end: -\cs_set_eq:NN \variable \function +\cs_set_eq:NN \variabledoc \function \group_begin: \char_make_other:N \| \cs_gset_nopar:Npn \function_aux:n #1 { @@ -215,7 +226,7 @@ \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: @@ -233,6 +244,7 @@ } \group_end: \bool_new:N \l_doc_meta_TF_bool +\bool_new:N \l_doc_meta_pTF_bool \bool_new:N \l_doc_meta_EXP_bool \cs_new_nopar:Npn \doc_showmacro_aux:w #1 / #2 \q_stop { @@ -246,6 +258,19 @@ }{ \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 } @@ -257,11 +282,17 @@ \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 + } } \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 }{ @@ -277,6 +308,12 @@ \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} + } } \dim_new:N \g_doc_syntax_dim \dim_set:Nn \g_doc_syntax_dim {0.7\textwidth} @@ -317,14 +354,25 @@ \cs_set_nopar:Npn #1 { \unskip \, $ {} \sb { \use:c { char_other_\string #1 } } $ } } \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 \char_make_letter:N \\ @@ -335,13 +383,34 @@ } \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} } + } } \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 } +\cs_set:Npn \doc_predicate_from_base:w #1:#2 \q_nil {#1_p:#2} +\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 @@ -368,11 +437,17 @@ \cs_set_eq:NN \doc_macroname_suffix: \doc_typeset_TF: } - \cs_set_nopar:Npx \@tempa { + \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} {} + } + + \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 { @@ -395,17 +470,167 @@ \global\advance \c@CodelineNo \m@ne \ignorespaces } +\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! + } +} +\providecommand \MacroLongFont { + \fontfamily{lmtt}\fontseries{lc}\small } \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} } +\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 +\DeclareDocumentCommand \TestFiles {m} { + \par + {\itshape + The~ following~ test~ files~ are~ used~ for~ this~ code:~ \textsf{#1}. + } + \par\ignorespaces +} +\DeclareDocumentCommand \UnitTested {} { + \testfile* +} +\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} } +} +\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 + } +} +\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)} + } + } +} \newcommand*{\DescribeOption}{ \leavevmode \@bsphack @@ -624,6 +849,7 @@ } \seq_new:N \g_doc_functions_seq \seq_new:N \g_doc_macros_seq +\seq_new:N \g_doc_not_tested_seq \iow_open:Nn \g_write_func_stream { \jobname.cmds } \cs_new_nopar:Npn \doc_show_functions_defined: { \bool_if:nT { \g_doc_implementation_bool && \g_doc_checkfunc_bool } { @@ -668,6 +894,49 @@ \tl_clear:N \l_tmpa_tl } } +\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: } \g@addto@macro\theindex{\MakePrivateLetters} \cs_set:Npn \verbatimchar {&} \setcounter{IndexColumns}{2} diff --git a/Master/texmf-dist/tex/latex/expl3/l3font.sty b/Master/texmf-dist/tex/latex/expl3/l3font.sty new file mode 100644 index 00000000000..78a6f23ec48 --- /dev/null +++ b/Master/texmf-dist/tex/latex/expl3/l3font.sty @@ -0,0 +1,105 @@ +%% +%% This is file `l3font.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% l3font.dtx (with options: `package') +%% +%% +%% EXPERIMENTAL CODE +%% +%% Do not distribute this file without also distributing the +%% source files specified above. +%% +%% Do not distribute a modified version of this file. +%% +%% +%% File: 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. +%% +%% ----------------------------------------------------------------------- +\RequirePackage{l3names} +\GetIdInfo$Id: l3font.dtx 2175 2011-03-03 12:16:46Z will $ + {L3 Experimental Font Loading} +\ProvidesExplPackage + {\filename}{\filedate}{\fileversion}{\filedescription} +\package_check_loaded_expl: +\cs_new_protected:Npn \font_set:Nnn #1#2#3 { \tex_font:D #1 = #2 ~at~ #3 \scan_stop: } +\cs_new_protected:Npn \font_gset:Nnn #1#2#3 { + \tex_global:D \tex_font:D #1 = #2 ~at~ #3 \scan_stop: +} +\cs_generate_variant:Nn \font_set:Nnn {c} +\cs_generate_variant:Nn \font_gset:Nnn {c} +\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 } +\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 +} +\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. +} +\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 of file `l3font.sty'. diff --git a/Master/texmf-dist/tex/latex/expl3/l3fp.sty b/Master/texmf-dist/tex/latex/expl3/l3fp.sty index 6ac5741afb0..4ce67fbb7d9 100644 --- a/Master/texmf-dist/tex/latex/expl3/l3fp.sty +++ b/Master/texmf-dist/tex/latex/expl3/l3fp.sty @@ -15,7 +15,7 @@ %% Do not distribute a modified version of this file. %% %% -%% 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 @@ -48,7 +48,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3names} -\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} \ProvidesExplPackage {\filename}{\filedate}{\fileversion}{\filedescription} diff --git a/Master/texmf-dist/tex/latex/expl3/l3int.sty b/Master/texmf-dist/tex/latex/expl3/l3int.sty index 276059fb0bf..97db73b44cd 100644 --- a/Master/texmf-dist/tex/latex/expl3/l3int.sty +++ b/Master/texmf-dist/tex/latex/expl3/l3int.sty @@ -48,7 +48,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3names} -\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} \ProvidesExplPackage {\filename}{\filedate}{\fileversion}{\filedescription} @@ -654,7 +654,6 @@ \cs_set:Npn \int_do_until:nNnn #1#2#3#4{ #4 \int_compare:nNnF {#1}#2{#3}{\int_do_until:nNnn {#1}#2{#3}{#4}} } - \cs_new_protected_nopar:Npn \int_const:Nn #1#2 { \int_compare:nTF { #2 > \c_minus_one } { @@ -674,7 +673,6 @@ } } \cs_generate_variant:Nn \int_const:Nn { c } -\tex_mathchardef:D \c_max_register_int = 32767 \scan_stop: %% \tex_countdef:D \c_minus_one = 10 \scan_stop: %% \c_minus_one = -1 \scan_stop: %% in l3basics \int_const:Nn \c_one {1} @@ -682,13 +680,10 @@ \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_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_thirteen {13} \int_const:Nn \c_fourteen {14} \int_const:Nn \c_fifteen {15} @@ -720,6 +715,7 @@ \int_const:cn { c_int_from_roman_D_int } { 500 } \int_const:cn { c_int_from_roman_M_int } { 1000 } \int_new:N \g_tl_inline_level_int +\int_new:N\g_prg_inline_level_int \cs_set_eq:NN \intexpr_value:w \int_value:w \cs_set_eq:NN \intexpr_eval:w \int_eval:w \cs_set_eq:NN \intexpr_eval_end: \int_eval_end: diff --git a/Master/texmf-dist/tex/latex/expl3/l3prg.sty b/Master/texmf-dist/tex/latex/expl3/l3prg.sty index 8dc053e7c5f..5e18591892b 100644 --- a/Master/texmf-dist/tex/latex/expl3/l3prg.sty +++ b/Master/texmf-dist/tex/latex/expl3/l3prg.sty @@ -48,26 +48,23 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3names} -\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} \ProvidesExplPackage {\filename}{\filedate}{\fileversion}{\filedescription} \package_check_loaded_expl: \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: } \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: } \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: } \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: + \prg_return_true: \else: \prg_return_false: \fi: } \cs_new_nopar:Npn \group_align_safe_begin: { \if_false:{\fi:\if_num:w`}=\c_zero\fi:} @@ -147,7 +144,6 @@ {#2}{#3}{#4} } } -\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} diff --git a/Master/texmf-dist/tex/latex/expl3/l3quark.sty b/Master/texmf-dist/tex/latex/expl3/l3quark.sty index 3fb3d4ee1f8..65935330d67 100644 --- a/Master/texmf-dist/tex/latex/expl3/l3quark.sty +++ b/Master/texmf-dist/tex/latex/expl3/l3quark.sty @@ -48,7 +48,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3names} -\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} \ProvidesExplPackage {\filename}{\filedate}{\fileversion}{\filedescription} @@ -121,7 +121,6 @@ \cs_generate_variant:Nn \quark_if_nil:nTF {o} \cs_generate_variant:Nn \quark_if_nil:nT {o} \cs_generate_variant:Nn \quark_if_nil:nF {o} - %% %% %% End of file `l3quark.sty'. diff --git a/Master/texmf-dist/tex/latex/expl3/l3skip.sty b/Master/texmf-dist/tex/latex/expl3/l3skip.sty index 7248309d1cb..9dae6498cc0 100644 --- a/Master/texmf-dist/tex/latex/expl3/l3skip.sty +++ b/Master/texmf-dist/tex/latex/expl3/l3skip.sty @@ -48,7 +48,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3names} -\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} \ProvidesExplPackage {\filename}{\filedate}{\fileversion}{\filedescription} @@ -106,7 +106,7 @@ \cs_generate_variant:Nn \skip_use:N {c} \cs_new_eq:NN \skip_show:N \kernel_register_show:N \cs_generate_variant:Nn \skip_show:N {c} -\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: } %%\chk_if_free_cs:N \l_tmpa_skip @@ -189,7 +189,7 @@ \dim_new:N \g_tmpb_dim \cs_new_eq:NN \c_zero_dim \c_zero_skip \cs_new_eq:NN \c_max_dim \c_max_skip -\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: } \cs_new_eq:NN \if_dim:w \tex_ifdim:D diff --git a/Master/texmf-dist/tex/latex/expl3/l3tl.sty b/Master/texmf-dist/tex/latex/expl3/l3tl.sty index e334d246130..cacec3e0fdf 100644 --- a/Master/texmf-dist/tex/latex/expl3/l3tl.sty +++ b/Master/texmf-dist/tex/latex/expl3/l3tl.sty @@ -48,7 +48,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3names} -\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} \ProvidesExplPackage {\filename}{\filedate}{\fileversion}{\filedescription} @@ -446,14 +446,13 @@ \_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 } @@ -463,7 +462,7 @@ \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 @@ -478,10 +477,14 @@ } \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 @@ -492,7 +495,7 @@ \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/tex/latex/expl3/l3token.sty b/Master/texmf-dist/tex/latex/expl3/l3token.sty index 826763a5693..4fa8cc3f704 100644 --- a/Master/texmf-dist/tex/latex/expl3/l3token.sty +++ b/Master/texmf-dist/tex/latex/expl3/l3token.sty @@ -48,7 +48,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3names} -\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} \ProvidesExplPackage {\filename}{\filedate}{\fileversion}{\filedescription} diff --git a/Master/texmf-dist/tex/latex/expl3/l3xref.sty b/Master/texmf-dist/tex/latex/expl3/l3xref.sty index 43a67abdcda..44e5bc5e554 100644 --- a/Master/texmf-dist/tex/latex/expl3/l3xref.sty +++ b/Master/texmf-dist/tex/latex/expl3/l3xref.sty @@ -48,7 +48,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3names} -\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} \ProvidesExplPackage {\filename}{\filedate}{\fileversion}{\filedescription} |