diff options
Diffstat (limited to 'Master/texmf-dist/source/latex/expl3/l3quark.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/expl3/l3quark.dtx | 375 |
1 files changed, 134 insertions, 241 deletions
diff --git a/Master/texmf-dist/source/latex/expl3/l3quark.dtx b/Master/texmf-dist/source/latex/expl3/l3quark.dtx index 80328f6a768..c5c5a22c00c 100644 --- a/Master/texmf-dist/source/latex/expl3/l3quark.dtx +++ b/Master/texmf-dist/source/latex/expl3/l3quark.dtx @@ -1,5 +1,5 @@ % \iffalse -%% File: l3quark.dtx Copyright (C) 1990-2006 LaTeX3 project +%% File: l3quark.dtx Copyright (C) 1990-2009 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 @@ -17,7 +17,7 @@ %% %% The development version of the bundle can be found at %% -%% http://www.latex-project.org/cgi-bin/cvsweb.cgi/ +%% http://www.latex-project.org/svnroot/experimental/trunk/ %% %% for those people who are interested. %% @@ -36,7 +36,7 @@ \RequirePackage{l3names} %</driver|package> %\fi -\GetIdInfo$Id: l3quark.dtx 761 2008-08-04 21:35:13Z morten $ +\GetIdInfo$Id: l3quark.dtx 1365 2009-05-31 17:26:17Z mittelba $ {L3 Experimental Quark Commands} %\iffalse %<*driver> @@ -44,7 +44,7 @@ \ProvidesFile{\filename.\filenameext} [\filedate\space v\fileversion\space\filedescription] %\iffalse -\documentclass{l3doc} +\documentclass[full]{l3doc} \begin{document} \DocInput{\filename.\filenameext} \end{document} @@ -60,10 +60,7 @@ % \date{\filedate} % \maketitle % -% -% \section{Quarks} -%^^A \label{sec:quarks} -% +% \begin{documentation} % % A special type of constants in \LaTeX3 are `quarks'. These are control % sequences that expand to themselves and should therefore NEVER be @@ -74,7 +71,7 @@ % following ingenious trick: when you pick up a token in a temporary, % and you want to know whether you have picked up a particular quark, % all you have to do is compare the temporary to the quark using -% "\if_meaning:NN". A set of special quark testing functions is set up +% "\if_meaning:w". A set of special quark testing functions is set up % below. All the quark testing functions are expandable although the % ones testing only single tokens are much faster. % @@ -83,45 +80,37 @@ % The documentation needs some updating. % % -% \subsection{Functions} +% \section{Functions} % -% \begin{function}{% -% \quark_new:N | -% } +% \begin{function}{ \quark_new:N } % \begin{syntax} -% "\quark_new:N" <quark> +% "\quark_new:N" <quark> % \end{syntax} % Defines <quark> to be a new constant of type "quark". % \end{function} % % \begin{function}{% -% \quark_if_no_value_p:n | -% \quark_if_no_value:nTF | -% \quark_if_no_value:nF | -% \quark_if_no_value:nT | -% \quark_if_no_value_p:N | -% \quark_if_no_value:NTF | -% \quark_if_no_value:NT | -% \quark_if_no_value:NF | +% \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) | % } % \begin{syntax} -% "\quark_if_no_value:nTF" "{"<token list>"}" -% " {"<true code>"}{"<false code>"}" -% "\quark_if_no_value:NTF" <tlp> -% " {"<true code>"}{"<false code>"}" +% "\quark_if_no_value:nTF" \Arg{token list} \Arg{true code} \Arg{false code} +% "\quark_if_no_value:NTF" <tl var.> \Arg{true code} \Arg{false code} % \end{syntax} % This tests whether or not <token list> contains only the quark % "\q_no_value". % -% If <token list> to be tested is stored in a token list pointer use +% If <token list> to be tested is stored in a token list variable use % "\quark_if_no_value:NTF", or "\quark_if_no_value:NF" or check the -% value directly with "\if_meaning:NN". All those cases are faster then +% value directly with "\if_meaning:w". All those cases are faster then % "\quark_if_no_value:nTF" so should be preferred.\footnote{Clarify % semantic of the ``n'' case \ldots{} i think it is not implement % according to what we originally intended /FMi} % % \begin{texnote} -% But be aware of the fact that "\if_meaning:NN" can result in an +% But be aware of the fact that "\if_meaning:w" can result in an % overflow of \TeX{}'s parameter stack since it leaves the corresponding % "\fi:" on the input until the whole replacement text is processed. It % is therefore better in recursions to use "\quark_if_no_value:NTF" as @@ -131,14 +120,11 @@ % \end{function} % % \begin{function}{% -% \quark_if_nil_p:N | -% \quark_if_nil:NTF | -% \quark_if_nil:NT | -% \quark_if_nil:NF | +% \quark_if_nil_p:N / (EXP) | +% \quark_if_nil:N / (TF)(EXP) | % } % \begin{syntax} -% "\quark_if_nil:NTF" <token> -% " {"<true code>"}{"<false code>"}" +% "\quark_if_nil:NTF" <token> \Arg{true code} \Arg{false code} % \end{syntax} % This tests whether or not <token> is equal to the quark % "\q_nil". @@ -149,18 +135,15 @@ % % % \begin{function}{% -% \quark_if_nil_p:n | -% \quark_if_nil:nTF | -% \quark_if_nil:nT | -% \quark_if_nil:nF | -% \quark_if_nil_p:o | -% \quark_if_nil:oTF | -% \quark_if_nil:oT | -% \quark_if_nil:oF | +% \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) | % } % \begin{syntax} -% "\quark_if_nil:nTF" "{"<tokens>"}" -% "{"<true code>"}{"<false code>"}" +% "\quark_if_nil:nTF" \Arg{tokens} \Arg{true code} \Arg{false code} % \end{syntax} % This tests whether or not <tokens> is equal to the quark % "\q_nil". @@ -169,7 +152,7 @@ % "\q_nil" as an end marker. % \end{function} % -% \subsection{Recursion} +% \section{Recursion} % % This module provides a uniform interface to intercepting and % terminating loops as when one is doing tail recursion. The building @@ -188,12 +171,12 @@ % \end{variable} % % \begin{function}{% -% \quark_if_recursion_tail_stop:N | -% \quark_if_recursion_tail_stop:n | -% \quark_if_recursion_tail_stop:o | +% \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" "{"<list element>"}" \\ +% "\quark_if_recursion_tail_stop:n" \Arg{list element} \\ % "\quark_if_recursion_tail_stop:N" <list element> % \end{syntax} % This tests whether or not <list element> is equal to @@ -205,26 +188,26 @@ % to use the "n". If you wish to use the "N" form you \emph{must} % ensure it is really a single token such as if you have % \begin{quote} -% "\tlp_set:Nn \l_tmpa_tlp {" <list element> "}" +% "\tl_set:Nn \l_tmpa_tl {" <list element> "}" % \end{quote} % \end{function} % % \begin{function}{% -% \quark_if_recursion_tail_stop_do:Nn | -% \quark_if_recursion_tail_stop_do:nn | -% \quark_if_recursion_tail_stop_do:on | +% \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"\\ -% "{"<list element>"}" "{" <post action> "}" +% "\quark_if_recursion_tail_stop_do:nn" +% ~~~~\Arg{list element} \Arg{post action} % "\quark_if_recursion_tail_stop_do:Nn" -% <list element> "{" <post action> "}" +% ~~~~<list element> \Arg{post action} % \end{syntax} % Same as "\quark_if_recursion_tail_stop:N" except here the second % argument is executed after the recursion has been terminated. % \end{function} % -% \subsection{Constants} +% \section{Constants} % % \begin{variable}{\q_no_value} The canonical `missing value quark' % that is returned by certain functions to denote that a requested value @@ -240,30 +223,42 @@ % This constant represent the nil pointer in pointer structures. % \end{variable} % -% \StopEventually{} +% \begin{variable}{\q_error} +% Delimits the end of +% the computation for purposes of error recovery. +% \end{variable} +% +% \begin{variable}{\q_mark} +% Used in parameter text when we need a scanning boundary that is +% distinct from |\q_stop|. +% \end{variable} % -% \subsection{The Implementation} +% \end{documentation} +% +% \begin{implementation} +% +% \section{\pkg{l3quark} implementation} % % 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. % \begin{macrocode} -%<package>\ProvidesExplPackage -%<package> {\filename}{\filedate}{\fileversion}{\filedescription} -%<package>\RequirePackage{l3expan}\par +%<*package> +\ProvidesExplPackage + {\filename}{\filedate}{\fileversion}{\filedescription} +\package_check_loaded_expl: +%</package> %<*initex|package> % \end{macrocode} % % \begin{macro}{\quark_new:N} % Allocate a new quark. % \begin{macrocode} -\def_new:Npn \quark_new:N #1{\tlp_new:Nn #1{#1}} +\cs_new_nopar:Npn \quark_new:N #1{\tl_new:Nn #1{#1}} % \end{macrocode} % \end{macro} % -% \begin{macro}{\q_stop} -% \begin{macro}{\q_no_value} -% \begin{macro}{\q_nil} +% \begin{macro}{\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. @@ -273,11 +268,8 @@ \quark_new:N \q_nil % \end{macrocode} % \end{macro} -% \end{macro} -% \end{macro} % -% \begin{macro}{\q_error} -% \begin{macro}{\q_mark} +% \begin{macro}{\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 @@ -287,11 +279,9 @@ \quark_new:N\q_mark % \end{macrocode} % \end{macro} -% \end{macro} % % -% \begin{macro}{\q_recursion_tail} -% \begin{macro}{\q_recursion_stop} +% \begin{macro}{\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 @@ -302,7 +292,6 @@ \quark_new:N\q_recursion_stop % \end{macrocode} % \end{macro} -% \end{macro} % % \begin{macro}{\quark_if_recursion_tail_stop:n} % \begin{macro}{\quark_if_recursion_tail_stop:N} @@ -312,20 +301,18 @@ % marker every time we do this kind of task. Also, if the recursion % end marker is found, we wrap things up and finish. % \begin{macrocode} -\def_long_new:Npn \quark_if_recursion_tail_stop:n #1 { - \exp_after:NN\if_meaning:NN +\cs_new:Npn \quark_if_recursion_tail_stop:n #1 { + \exp_after:wN\if_meaning:w \quark_if_recursion_tail_aux:w #1?\q_nil\q_recursion_tail\q_recursion_tail - \exp_after:NN \use_none_delimit_by_q_recursion_stop:w + \exp_after:wN \use_none_delimit_by_q_recursion_stop:w \fi: } -\def_long_new:Npn \quark_if_recursion_tail_stop:N #1 { - \if_meaning:NN#1\q_recursion_tail - \exp_after:NN \use_none_delimit_by_q_recursion_stop:w +\cs_new:Npn \quark_if_recursion_tail_stop:N #1 { + \if_meaning:w#1\q_recursion_tail + \exp_after:wN \use_none_delimit_by_q_recursion_stop:w \fi: } -\def_new:Npn \quark_if_recursion_tail_stop:o{ - \exp_args:No\quark_if_recursion_tail_stop:n -} +\cs_generate_variant:Nn \quark_if_recursion_tail_stop:n {o} % \end{macrocode} % \end{macro} % \end{macro} @@ -335,77 +322,52 @@ % \begin{macro}{\quark_if_recursion_tail_stop_do:Nn} % \begin{macro}{\quark_if_recursion_tail_stop_do:on} % \begin{macrocode} -\def_long_new:Npn \quark_if_recursion_tail_stop_do:nn #1#2 { - \exp_after:NN\if_meaning:NN +\cs_new:Npn \quark_if_recursion_tail_stop_do:nn #1#2 { + \exp_after:wN\if_meaning:w \quark_if_recursion_tail_aux:w #1?\q_nil\q_recursion_tail\q_recursion_tail - \exp_after:NN \use_arg_i_delimit_by_q_recursion_stop:nw + \exp_after:wN \use_i_delimit_by_q_recursion_stop:nw \else: - \exp_after:NN\use_none:n + \exp_after:wN\use_none:n \fi: {#2} } -\def_long_new:Npn \quark_if_recursion_tail_stop_do:Nn #1#2 { - \if_meaning:NN #1\q_recursion_tail - \exp_after:NN \use_arg_i_delimit_by_q_recursion_stop:nw +\cs_new:Npn \quark_if_recursion_tail_stop_do:Nn #1#2 { + \if_meaning:w #1\q_recursion_tail + \exp_after:wN \use_i_delimit_by_q_recursion_stop:nw \else: - \exp_after:NN\use_none:n + \exp_after:wN\use_none:n \fi: {#2} } -\def_new:Npn \quark_if_recursion_tail_stop_do:on{ - \exp_args:No\quark_if_recursion_tail_stop_do:nn -} +\cs_generate_variant:Nn \quark_if_recursion_tail_stop_do:nn {on} % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % -% \begin{macro}{\quark_if_recursion_tail_aux:w} -% \begin{macro}{\use_none_delimit_by_q_recursion_stop:w} -% \begin{macro}{\use_arg_i_delimit_by_q_recursion_stop:nw} -% Helper macros for picking up the first token of a list to see if -% it is "\q_recursion_tail" and to stop the recursion. +% \begin{macro}[aux]{\quark_if_recursion_tail_aux:w} % \begin{macrocode} -\def_long_new:Npn \quark_if_recursion_tail_aux:w - #1#2\q_nil\q_recursion_tail{#1} -\def_long_new:Npn\use_none_delimit_by_q_recursion_stop:w - #1\q_recursion_stop {} -\def_long_new:Npn\use_arg_i_delimit_by_q_recursion_stop:nw - #1#2\q_recursion_stop {#1} +\cs_new:Npn \quark_if_recursion_tail_aux:w #1#2 \q_nil \q_recursion_tail {#1} % \end{macrocode} % \end{macro} -% \end{macro} -% \end{macro} -% % -% \begin{macro}{\quark_if_no_value_p:N} -% \begin{macro}{\quark_if_no_value:NTF} -% \begin{macro}{\quark_if_no_value:NT} -% \begin{macro}{\quark_if_no_value:NF} -% \begin{macro}{\quark_if_no_value_p:n} -% \begin{macro}{\quark_if_no_value:nTF} -% \begin{macro}{\quark_if_no_value:nT} -% \begin{macro}{\quark_if_no_value:nF} -% \begin{macro}{\quark_if_no_value:nFT} +% \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} % Here we test if we found a special quark as the first argument. -% \begin{macrocode} -\def_long_test_function_new:npn {quark_if_no_value:N} #1 { -% \end{macrocode} % We better start with |\q_no_value| as the first argument since % the whole thing may otherwise loop if |#1| is wrongly given % a string like |aabc| instead of a single token.\footnote{It may % still loop in special circumstances however!} % \begin{macrocode} - \if_meaning:NN\q_no_value#1} -\def_long_new:Npn \quark_if_no_value_p:N #1{ - \if_meaning:NN \q_no_value #1 \c_true - \else: \c_false \fi: +\prg_new_conditional:Nnn \quark_if_no_value:N {p,TF,T,F} { + \if_meaning:w \q_no_value #1 + \prg_return_true: \else: \prg_return_false: \fi: } % \end{macrocode} % We also provide an |n| type. If run under a sufficiently new % pdf\eTeX, it uses a built-in primitive for string comparisons, % otherwise it uses the slower |\str_if_eq_var_p:nf| function. In the -% latter case it would be faster to use a temporary token list pointer +% latter case it would be faster to use a temporary token list variable % but it would render the function non-expandable. Using the pdf\eTeX\ % primitive is the preferred approach. Note that we have to add a % manual space token in the first part of the comparison, otherwise it @@ -415,156 +377,87 @@ % latter test function and unfortunately this example turned up in one % application. % \begin{macrocode} -\cs_if_really_free:cTF{pdf_strcmp:D}{ - \def_long_new:Npn \quark_if_no_value_p:n #1{ - \if:w \exp_args:No \str_if_eq_var_p:nf -%<package> {\token_to_string:N\q_no_value\space} -%<initex> {\token_to_string:N\q_no_value\text_put_sp:} - {\tlist_to_str:n{#1}} - \c_true - \else: - \c_false +\cs_if_exist:cTF {pdf_strcmp:D} +{ + \prg_new_conditional:Nnn \quark_if_no_value:n {p,TF,T,F} { + \if_num:w \pdf_strcmp:D + {\exp_not:N \q_no_value} + {\exp_not:n{#1}} = \c_zero + \prg_return_true: \else: \prg_return_false: \fi: } } { - \def_long_new:Npn \quark_if_no_value_p:n #1{ - \if_num:w - \pdf_strcmp:D {\exp_not:N \q_no_value}{\exp_not:n{#1}}=\c_zero - \c_true \else: \c_false \fi: - } -} -\def_long_test_function_new:npn {quark_if_no_value:n} #1 { - \if:w \quark_if_no_value_p:n{#1}} -% \end{macrocode} -% We also define a version where the true and false code is ordered -% differently. -% \begin{macrocode} -\def_long:Npn \quark_if_no_value:nFT #1{ - \if:w \quark_if_no_value_p:n{#1} - \exp_after:NN\use_arg_ii:nn - \else: - \exp_after:NN\use_arg_i:nn + \prg_new_conditional:Nnn \quark_if_no_value:n {p,TF,T,F} { + \exp_args:NNo + \if_predicate:w \str_if_eq_var_p:nf + {\token_to_str:N\q_no_value\iow_space:} + {\tl_to_str:n{#1}} + \prg_return_true: \else: \prg_return_false: \fi: + } } % \end{macrocode} % \end{macro} % \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} % % \begin{macro}{\quark_if_nil_p:N} -% \begin{macro}{\quark_if_nil:NTF} -% \begin{macro}{\quark_if_nil:NT} -% \begin{macro}{\quark_if_nil:NF} +% \begin{macro}[TF]{\quark_if_nil:N} % A function to check for the presence of |\q_nil|. % \begin{macrocode} -\def_long_new:Npn \quark_if_nil_p:N #1{ - \if_meaning:NN \q_nil #1 \c_true - \else: \c_false \fi: +\prg_new_conditional:Nnn \quark_if_nil:N {p,TF,T,F} { + \if_meaning:w \q_nil #1 \prg_return_true: \else: \prg_return_false: \fi: } -\def_long_test_function_new:npn {quark_if_nil:N}#1{ - \if_meaning:NN\q_nil#1} % \end{macrocode} % \end{macro} % \end{macro} -% \end{macro} -% \end{macro} % -% \begin{macro}{\quark_if_nil_p:n} -% \begin{macro}{\quark_if_nil:nTF} -% \begin{macro}{\quark_if_nil:nT} -% \begin{macro}{\quark_if_nil:nF} -% \begin{macro}{\quark_if_nil_p:o} -% \begin{macro}{\quark_if_nil:oTF} -% \begin{macro}{\quark_if_nil:oT} -% \begin{macro}{\quark_if_nil:oF} +% \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} % A function to check for the presence of |\q_nil|. % \begin{macrocode} -\cs_if_really_free:cTF{pdf_strcmp:D}{ - \def_long_new:Npn \quark_if_nil_p:n #1{ - \if:w \exp_args:No \str_if_eq_var_p:nf -%<package> {\token_to_string:N\q_nil\space} -%<initex> {\token_to_string:N\q_nil\text_put_sp:} - {\tlist_to_str:n{#1}} - \c_true - \else: - \c_false +\cs_if_exist:cTF {pdf_strcmp:D} { + \prg_new_conditional:Nnn \quark_if_nil:n {p,TF,T,F} { + \if_num:w \pdf_strcmp:D + {\exp_not:N \q_nil} + {\exp_not:n{#1}} = \c_zero + \prg_return_true: \else: \prg_return_false: \fi: } } { - \def_long_new:Npn \quark_if_nil_p:n #1{ - \if_num:w - \pdf_strcmp:D {\exp_not:N \q_nil}{\exp_not:n{#1}}=\c_zero - \c_true \else: \c_false \fi: + \prg_new_conditional:Nnn \quark_if_nil:n {p,TF,T,F} { + \exp_args:NNo + \if_predicate:w \str_if_eq_var_p:nf + {\token_to_str:N\q_nil\iow_space:} + {\tl_to_str:n{#1}} + \prg_return_true: \else: \prg_return_false: + \fi: } } -\def_long_test_function_new:npn {quark_if_nil:n} #1 { - \if:w \quark_if_nil_p:n{#1}} -\def_new:Npn \quark_if_nil_p:o{\exp_args:No\quark_if_nil_p:n} -\def_new:Npn \quark_if_nil:oTF{\exp_args:No\quark_if_nil:nTF} -\def_new:Npn \quark_if_nil:oT {\exp_args:No\quark_if_nil:nT} -\def_new:Npn \quark_if_nil:oF {\exp_args:No\quark_if_nil:nF} +\cs_generate_variant:Nn \quark_if_nil_p:n {V} +\cs_generate_variant:Nn \quark_if_nil:nTF {V} +\cs_generate_variant:Nn \quark_if_nil:nT {V} +\cs_generate_variant:Nn \quark_if_nil:nF {V} +\cs_generate_variant:Nn \quark_if_nil_p:n {o} +\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{macrocode} % \end{macro} % \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} +% +% % % Show token usage: % \begin{macrocode} -%</initex|package> + %<*showmemory> \showMemUsage %</showmemory> % \end{macrocode} % -% \endinput -% -% $Log$ -% Revision 1.22 2006/07/30 14:39:02 morten -% Changed all quark functions to be expandable regardless of whether -% \pdfstrcmp is available. -% -% Revision 1.21 2006/07/25 15:34:21 morten -% Added the non-expandable \quark_if_nil:nTF plus variants. -% -% Revision 1.20 2006/07/23 13:43:47 morten -% Fixed minor bug in \quark_if_no_value_p:n -% -% Revision 1.19 2006/03/20 18:26:38 braams -% Updated the copyright notice (2006) and demoted all implementation -% sections to subsections and so on to clean up the toc for source3.tex -% -% Revision 1.18 2006/01/04 01:18:31 morten -% Changed \quark_if_no_value:nTF to be expandable. Added a few predicate -% functions and updated documentation. -% -% Revision 1.17 2005/12/27 10:04:41 morten -% Minor changes plus changed RCS information retrieval -% -% Revision 1.16 2005/10/27 14:12:28 morten -% Added gobble-until-quark functions. -% -% Revision 1.15 2005/07/14 18:50:31 morten -% Added \quark_if_nil:NF -% -% Revision 1.14 2005/04/06 13:55:57 morten -% Fixed \quark_if_nil:NTF -% -% Revision 1.13 2005/03/16 22:35:57 braams -% Added the tweaks necessary to be able to load with initex -% -% Revision 1.12 2005/03/11 21:41:27 braams -% Fixed the use of RCS information; added \StopEventually +% \end{implementation} +% \PrintIndex % +% \endinput |