summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/expl3/l3toks.dtx
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2007-05-22 17:46:23 +0000
committerKarl Berry <karl@freefriends.org>2007-05-22 17:46:23 +0000
commitf4eb27d3314d15838f674a3872000159d029f88b (patch)
tree6e9ab33c5a2d702912b4a969ade4e4e2ac586d62 /Master/texmf-dist/source/latex/expl3/l3toks.dtx
parent14af3f447439750920f754792b89f113d019076a (diff)
update expl3
git-svn-id: svn://tug.org/texlive/trunk@4335 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/expl3/l3toks.dtx')
-rw-r--r--Master/texmf-dist/source/latex/expl3/l3toks.dtx421
1 files changed, 362 insertions, 59 deletions
diff --git a/Master/texmf-dist/source/latex/expl3/l3toks.dtx b/Master/texmf-dist/source/latex/expl3/l3toks.dtx
index 7e233e725fc..fd37864c815 100644
--- a/Master/texmf-dist/source/latex/expl3/l3toks.dtx
+++ b/Master/texmf-dist/source/latex/expl3/l3toks.dtx
@@ -1,15 +1,50 @@
% \iffalse
-%% File: l3toks.dtx Copyright (C) 1990-1998 LaTeX3 project
+%% File: l3toks.dtx Copyright (C) 1990-2006 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/cgi-bin/cvsweb.cgi/
+%%
+%% 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.
+%%
+%% -----------------------------------------------------------------------
%
+%<package>\RequirePackage{l3names}
%<*dtx>
- \ProvidesFile{l3toks.dtx}
+%\fi
+\def\GetIdInfo$Id: #1.dtx #2 #3-#4-#5 #6 #7$#8{%
+ \def\fileversion{#2}%
+ \def\filedate{#3/#4/#5}%
+ \ProvidesFile{#1.dtx}[#3/#4/#5 v#2 #8]%
+}
+%\iffalse
%</dtx>
-%<package>\NeedsTeXFormat{LaTeX2e}
-%<package>\ProvidesPackage{l3toks}
-%<driver> \ProvidesFile{l3toks.drv}
-% \fi
-% \ProvidesFile{l3toks.dtx}
- [1998/05/14 v1.0g L3 Experimental Token Registers]
+%\fi
+\GetIdInfo$Id: l3toks.dtx 580 2006-11-26 15:56:47Z morten $
+ {L3 Experimental Token Registers}
%
% \iffalse
%<*driver>
@@ -22,7 +57,6 @@
% \fi
%
%
-% \GetFileInfo{l3toks.dtx}
% \title{The \textsf{l3toks} package\thanks{This file
% has version number \fileversion, last
% revised \filedate.}\\
@@ -32,38 +66,46 @@
% \maketitle
%
% \section {Token Registers}
-%
+%
% There is a second form beside token list pointers in which \LaTeX3
% stores token lists, namely the internal \TeX{} token registers.
% Functions dealing with these registers got the prefix "\toks_". Unlike
% token list pointers we have an accessing function as one can see
% below.
-%
-% The main difference between <toks> (token registers) and <tlp> (token
-% list pointers) is their behavior regarding expansion. While <tlp>'s
+%
+% The main difference between \m{toks} (token registers) and \m{tlp} (token
+% list pointers) is their behavior regarding expansion. While \m{tlp}'s
% expand fully (i.e., until only unexpandable tokens are left) inside
% an argument that is subject to expansion (i.e., denote by |x|)
-% <toks>'s expand always only up to one level, i.e., passing their
+% \m{toks}'s expand always only up to one level, i.e., passing their
% contents without further expansion.
-%
+%
% \subsection{Functions}
-%
-% \begin{function}{\toks_new:N}
+%
+% \begin{function}{%
+% \toks_new:N |
+% \toks_new:c |
+% \toks_new_l:N}
% \begin{syntax}
% "\toks_new:N" <toks>
% \end{syntax}
% Defines <toks> to be a new token list register.
-% token list pointer.
% \begin{texnote}
% This is the \LaTeX3 allocation for what was called \tn{newtoks} in
% plain \TeX.
% \end{texnote}
% \end{function}
-%
+%
% \begin{function}{%
% \toks_set:Nn |
% \toks_set:No |
+% \toks_set:Nd |
+% \toks_set:Nf |
% \toks_set:Nx |
+% \toks_set:cn |
+% \toks_set:co |
+% \toks_set:cf |
+% \toks_set:cx |
% \toks_gset:Nn |
% \toks_gset:No |
% \toks_gset:Nx}
@@ -83,7 +125,7 @@
% \TeX.
% \end{texnote}
% \end{function}
-%
+%
% \begin{function}{%
% \toks_gset_eq:NN |
% }
@@ -94,7 +136,7 @@
% "\toks_gset:Nn" for this purpose if the second argument is also a
% token register.
% \end{function}
-%
+%
% \begin{function}{%
% \toks_clear:N |
% \toks_gclear:N |
@@ -104,12 +146,15 @@
% \end{syntax}
% The <toks> is locally or globally cleared.
% \end{function}
-%
+%
% \begin{function}{%
% \toks_put_left:Nn |
% \toks_gput_left:Nn |
% \toks_put_right:Nn |
+% \toks_put_right:No |
+% \toks_put_right:Nx |
% \toks_gput_right:Nn |
+% \toks_gput_right:No |
% \toks_gput_right:Nx |
% }
% \begin{syntax}
@@ -119,7 +164,7 @@
% <toks>. Assignment is done either locally or globally. If possible
% append to the right since this operation is faster.
% \end{function}
-%
+%
% \begin{function}{\toks_use:N}
% \begin{syntax}
% "\toks_use:N" <toks>
@@ -130,7 +175,7 @@
% Something like \tn{the} <toks>.
% \end{texnote}
% \end{function}
-%
+%
% \begin{function}{\toks_use_clear:N |
% \toks_use_gclear:N}
% \begin{syntax}
@@ -143,22 +188,31 @@
% function is not exactly the same as calling "\toks_use:N" <toks>
% "\toks_clear:N" <toks> in sequence.
% \end{function}
-%
-% \subsection{Predicates}
-%
-% \begin{function}{\toks_empty:NTF}
+%
+% \subsection{Predicates and conditionals}
+%
+% \begin{function}{
+% \toks_if_empty_p:N|
+% \toks_if_empty:NTF|
+% \toks_if_empty:NT |
+% \toks_if_empty:NF|
+% \toks_if_empty_p:c|
+% \toks_if_empty:cTF |
+% \toks_if_empty:cT |
+% \toks_if_empty:cF
+% }
% \begin{syntax}
-% "\toks_empty:NTF" <toks> "{"<true code>"}{"<false code>"}"
+% "\toks_if_empty:NTF" <toks> "{"<true code>"}{"<false code>"}"
% \end{syntax}
% Tests if <toks> is empty.
% \end{function}
-%
+%
% \subsection{Variable and constants}
-%
+%
% \begin{variable}{\c_empty_toks}
% Constant that is always empty.
% \end{variable}
-%
+%
% \begin{variable}{%
% \l_tmpa_toks |
% \l_tmpb_toks |
@@ -168,24 +222,24 @@
% Scratch register for immediate use. They are not used by conditionals
% or predicate functions.
% \end{variable}
-%
+%
% \subsubsection{Internal functions}
-%
+%
% \begin{function}{\toks_put_left_aux:w}
% Used by "\toks_put_left:Nn" and its variants.
% \end{function}
-%
-% \begin{function}{\def_toks:D}
+%
+% \begin{function}{\tex_toksdef:D}
% Primitive function for defining a <cs> to correspond to a token
% register should not be used by a programmer.
% \begin{texnote}
% This function was named \tn{toksdef}.
% \end{texnote}
% \end{function}
-%
+%
% \StopEventually{}
%
-% \section{The code}
+% \subsection{The Implementation}
%
% We start by ensuring that the required packages are loaded.
% We check for \texttt{l3expan} since this a basic package that is
@@ -193,16 +247,25 @@
% \begin{macrocode}
%<package&check>\RequirePackage{l3chk}\par
%<package>\RequirePackage{l3expan}\par
-%<*package>
+%<*initex|package>
% \end{macrocode}
%
% \begin{macro}{\toks_new:N}
+% \begin{macro}{\toks_new_l:N}
+% \begin{macro}{\toks_new:c}
% Allocates a new token register. This function is already defined above.
% \begin{macrocode}
-\def_new:Npn \toks_new:N {}
-\let:NN \toks_new:N \newtoks % nick from LaTeX for the moment
+%<*initex>
+\alloc_setup_type:nnn {toks} \c_zero \c_max_register_num
+\def_new:Npn \toks_new:N #1{\alloc_reg:NnNN g {toks} \tex_toksdef:D #1}
+\def_new:Npn \toks_new_l:N #1{\alloc_reg:NnNN l {toks} \tex_toksdef:D #1}
+%</initex>
+%<package>\let:NN \toks_new:N \newtoks % nick from LaTeX for the moment
+\def_new:Npn \toks_new:c {\exp_args:Nc\toks_new:N}
% \end{macrocode}
% \end{macro}
+% \end{macro}
+% \end{macro}
%
% \begin{macro}{\toks_clear:N}
% \begin{macro}{\toks_gclear:N}
@@ -224,11 +287,14 @@
% \end{macro}
%
% \begin{macro}{\toks_use:N}
+% \begin{macro}{\toks_use:c}
% This function just returns the contents of a token register.
% \begin{macrocode}
\let_new:NN \toks_use:N \the_internal:D
+\def_new:Npn \toks_use:c {\exp_args:Nc\toks_use:N}
% \end{macrocode}
% \end{macro}
+% \end{macro}
%
% \begin{macro}{\toks_use_clear:N}
% \begin{macro}{\toks_use_gclear:N}
@@ -258,24 +324,35 @@
% \end{macro}
%
% \begin{macro}{\toks_put_left:Nn}
+% \begin{macro}{\toks_put_left:No}
% \begin{macro}{\toks_gput_left:Nn}
-% |\toks_put_left:Nn |\zz{toks}\zv{stuff\/} adds the tokens of {\sl
-% stuff\/} on the `left-side' of the token register \m{toks}.
+% \begin{macro}{\toks_gput_left:Nx}
+% \begin{macro}{\toks_put_left_aux:w}
+% |\toks_put_left:Nn |\zz{toks}\zv{stuff\/} adds the tokens of
+% \textsl{stuff} on the `left-side' of the token register
+% \m{toks}. |\toks_put_left:No| does the same, but expands the
+% tokens once. We need to look out for brace stripping so we add a
+% token, which is then later removed.
% \begin{macrocode}
-\def_new:Npn \toks_put_left:Nn #1{\exp_after:NN\toks_put_left_aux:w
+\def_new:Npn \toks_put_left:Nn #1{
+ \exp_after:NN\toks_put_left_aux:w\exp_after:NN\q_mark
\toks_use:N #1\q_stop #1}
+\def_new:Npn \toks_put_left:No {\exp_args:NNo \toks_put_left:Nn}
\def_new:Npn \toks_gput_left:Nn {
%<*check>
\pref_global_chk:
%</check>
%<-check> \pref_global:D
\toks_put_left:Nn}
+\def_new:Npn \toks_gput_left:Nx {\exp_args:NNx \toks_gput_left:Nn}
% \end{macrocode}
-% A helper function for |\toks_put_left:Nn|. Its arguments are
-% subsequently the tokens of \zv{stuff\/}, the token register
-% \zz{toks} and the current contents of \zz{toks}.
+% A helper function for |\toks_put_left:Nn|. Its arguments are
+% subsequently the tokens of \zv{stuff\/}, the token register
+% \zz{toks} and the current contents of \zz{toks}. We make sure to
+% remove the token we inserted earlier.
% \begin{macrocode}
-\def_long_new:Npn \toks_put_left_aux:w #1\q_stop #2#3{#2{#3#1}
+\def_long_new:Npn \toks_put_left_aux:w #1\q_stop #2#3{
+ #2\exp_after:NN{\use_arg_i:nn{#3}#1}
%<*check>
\chk_local_or_pref_global:N #2
%</check>
@@ -283,9 +360,17 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
%
% \begin{macro}{\toks_put_right:Nn}
% \begin{macro}{\toks_gput_right:Nn}
+% \begin{macro}{\toks_put_right:No}
+% \begin{macro}{\toks_put_right:Nd}
+% \begin{macro}{\toks_put_right:Nf}
+% \begin{macro}{\toks_put_right:Nx}
+% \begin{macro}{\toks_gput_right:No}
% \begin{macro}{\toks_gput_right:Nx}
% These macros add a list of tokens to the right of a token register.
% \begin{macrocode}
@@ -303,15 +388,43 @@
% \end{macrocode}
% |\toks_gput_right:Nx| expands its (second) argument.
% \begin{macrocode}
-\def_new:Npn \toks_gput_right:Nx {\exp_args:Nnx\toks_gput_right:Nn}
+%<check>\def_new:Npn \toks_put_right:No {\exp_args:NNo \toks_put_right:Nn }
+%<-check>\def_long_new:Npn\toks_put_right:No#1#2{#1\exp_after:NN\exp_after:NN
+%<-check>\exp_after:NN{\exp_after:NN\toks_use:N\exp_after:NN #1#2}}
+%<check>\def_new:Npn \toks_put_right:Nd {\exp_args:NNd \toks_put_right:Nn }
+%<-check>\def_long_new:Npn\toks_put_right:Nd#1#2{
+%<-check> \exp_after:NN\toks_put_right:No\exp_after:NN#1\exp_after:NN{#2}}
% \end{macrocode}
+% We implement |\toks_put_right:Nf| by hand because I think I might
+% use it in the \textsf{l3keyval} module in which case it is going to
+% be used a lot.
+% \begin{macrocode}
+%<check>\def_new:Npn \toks_put_right:Nf {\exp_args:NNf \toks_put_right:Nn }
+%<-check>\def_long_new:Npn \toks_put_right:Nf #1#2{
+%<-check> #1\exp_after:NN\exp_after:NN\exp_after:NN{
+%<-check> \exp_after:NN\toks_use:N\exp_after:NN #1\int_to_roman:w -`0#2}}
+\def_new:Npn \toks_put_right:Nx {\exp_args:NNx \toks_put_right:Nn }
+\def_new:Npn \toks_gput_right:No {\exp_args:NNo\toks_gput_right:Nn}
+\def_new:Npn \toks_gput_right:Nx {\exp_args:NNx\toks_gput_right:Nn}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\toks_set:Nn}
% \begin{macro}{\toks_set:No}
+% \begin{macro}{\toks_set:Nd}
+% \begin{macro}{\toks_set:Nf}
% \begin{macro}{\toks_set:Nx}
+% \begin{macro}{\toks_set:cn}
+% \begin{macro}{\toks_set:co}
+% \begin{macro}{\toks_set:cf}
+% \begin{macro}{\toks_set:cx}
% |\toks_set:Nn|\m{toks}\m{stuff} stores \m{stuff} without expansion
% in \m{toks}. |\toks_set:No| and |\toks_set:Nx| expand \m{stuff} once
% and fully.
@@ -320,13 +433,34 @@
\def_new:Npn \toks_set:Nn #1{\chk_local:N #1#1}
%</check>
% \end{macrocode}
-% If we don't check if \m{toks} is a local register then the
+% If we don't check if \m{toks} is a local register then the
% |\toks_set:Nn| function has nothing to do.
% \begin{macrocode}
%<-check> \let_new:NN \toks_set:Nn\use_noop:
-\def_new:Npn \toks_set:No {\exp_args:NNo \toks_set:Nn}
+%<-check> \def_long_new:Npn \toks_set:No#1#2{#1\exp_after:NN{#2}}
+%<-check> \def_long_new:Npn \toks_set:Nd#1#2{
+%<-check> #1\exp_after:NN\exp_after:NN\exp_after:NN{#2}}
+%<check> \def_new:Npn \toks_set:No {\exp_args:NNo \toks_set:Nn}
+%<check> \def_new:Npn \toks_set:Nd {\exp_args:NNd \toks_set:Nn}
\def_new:Npn \toks_set:Nx {\exp_args:NNx \toks_set:Nn}
% \end{macrocode}
+% We implement |\toks_set:Nf| by hand when not checking because this
+% is going to be used \emph{extensively} in keyval processing!
+% \begin{macrocode}
+%<check>\def_new:Npn \toks_set:Nf {\exp_args:NNf \toks_set:Nn}
+%<-check>\def_long_new:Npn\toks_set:Nf #1#2{
+%<-check> #1\exp_after:NN{\int_to_roman:w -`0#2}}
+\def_new:Npn \toks_set:cf {\exp_args:Nc\toks_set:Nf}
+\def_new:Npn \toks_set:cn {\exp_args:Nc\toks_set:Nn}
+\def_new:Npn \toks_set:co {\exp_args:Nc\toks_set:No}
+\def_new:Npn \toks_set:cx {\exp_args:Nc\toks_set:Nx}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
@@ -334,6 +468,9 @@
% \begin{macro}{\toks_gset:Nn}
% \begin{macro}{\toks_gset:No}
% \begin{macro}{\toks_gset:Nx}
+% \begin{macro}{\toks_gset:cn}
+% \begin{macro}{\toks_gset:co}
+% \begin{macro}{\toks_gset:cx}
% These functions are the global variants of the above.
% \begin{macrocode}
%<*check>
@@ -342,13 +479,25 @@
%<-check> \let_new:NN \toks_gset:Nn\pref_global:D
\def_new:Npn \toks_gset:No {\exp_args:NNo \toks_gset:Nn}
\def_new:Npn \toks_gset:Nx {\exp_args:NNx \toks_gset:Nn}
+\def_new:Npn \toks_gset:cn {\exp_args:Nc \toks_gset:Nn}
+\def_new:Npn \toks_gset:co {\exp_args:Nc \toks_gset:No}
+\def_new:Npn \toks_gset:cx {\exp_args:Nc \toks_gset:Nx}
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
%
% \begin{macro}{\toks_set_eq:NN}
+% \begin{macro}{\toks_set_eq:Nc}
+% \begin{macro}{\toks_set_eq:cN}
+% \begin{macro}{\toks_set_eq:cc}
% \begin{macro}{\toks_gset_eq:NN}
+% \begin{macro}{\toks_gset_eq:Nc}
+% \begin{macro}{\toks_gset_eq:cN}
+% \begin{macro}{\toks_gset_eq:cc}
% |\toks_set_eq:NN|\m{toks1}\m{toks2} copies the contents of \m{toks2}
% in \m{toks1}.
% \begin{macrocode}
@@ -364,20 +513,102 @@
%</check>
%<-check> \let_new:NN \toks_set_eq:NN \use_noop:
%<-check> \let_new:NN \toks_gset_eq:NN \pref_global:D
+\def_new:Npn \toks_set_eq:Nc {\exp_args:NNc\toks_set_eq:NN}
+\def_new:Npn \toks_set_eq:cN {\exp_args:Nc\toks_set_eq:NN}
+\def_new:Npn \toks_set_eq:cc {\exp_args:Ncc\toks_set_eq:NN}
+\def_new:Npn \toks_gset_eq:Nc {\exp_args:NNc\toks_gset_eq:NN}
+\def_new:Npn \toks_gset_eq:cN {\exp_args:Nc\toks_gset_eq:NN}
+\def_new:Npn \toks_gset_eq:cc {\exp_args:Ncc\toks_gset_eq:NN}
% \end{macrocode}
% \end{macro}
% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
%
-% \begin{macro}{\toks_empty:NTF}
-% |\toks_empty:NTF|\m{toks}\m{true code}\m{false code} tests if
-% a token register is empty and executes either \m{true code} or
-% \m{false code}.
+% \begin{macro}{\toks_if_empty_p:N}
+% \begin{macro}{\toks_if_empty_p:c}
+% \begin{macro}{\toks_if_empty:NTF}
+% \begin{macro}{\toks_if_empty:cTF}
+% \begin{macro}{\toks_if_empty:NT}
+% \begin{macro}{\toks_if_empty:cT}
+% \begin{macro}{\toks_if_empty:NF}
+% \begin{macro}{\toks_if_empty:cF}
+% |\toks_if_empty:NTF|\m{toks}\m{true code}\m{false code} tests if a
+% token register is empty and executes either \m{true code} or
+% \m{false code}. This test had the advantage of being
+% expandable. Otherwise one has to do an |x| type expansion in order
+% to prevent problems with parameter tokens.
% \begin{macrocode}
-\def_new:Npn\toks_empty:NTF#1{
- \tlp_set:No\l_testa_tlp{\toks_use:N#1}
- \tlp_empty:NTF\l_testa_tlp}
+\def_new:Npn\toks_if_empty_p:N#1{
+ \if:w \tlist_if_empty_p:o{\toks_use:N #1}
+ \c_true
+ \else:
+ \c_false
+ \fi:
+}
+\def_test_function_new:npn{toks_if_empty:N}#1{\if:w \toks_if_empty_p:N #1}
+\def_new:Npn\toks_if_empty:cTF{\exp_args:Nc\toks_if_empty:NTF}
+\def_new:Npn\toks_if_empty:cT{\exp_args:Nc\toks_if_empty:NT}
+\def_new:Npn\toks_if_empty:cF{\exp_args:Nc\toks_if_empty:NF}
% \end{macrocode}
% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\toks_if_eq:NNTF}
+% \begin{macro}{\toks_if_eq:NNT}
+% \begin{macro}{\toks_if_eq:NNF}
+% \begin{macro}{\toks_if_eq:NcTF}
+% \begin{macro}{\toks_if_eq:NcT}
+% \begin{macro}{\toks_if_eq:NcF}
+% \begin{macro}{\toks_if_eq:cNTF}
+% \begin{macro}{\toks_if_eq:cNT}
+% \begin{macro}{\toks_if_eq:cNF}
+% \begin{macro}{\toks_if_eq:ccTF}
+% \begin{macro}{\toks_if_eq:ccT}
+% \begin{macro}{\toks_if_eq:ccF}
+% This function test whether two token registers contain the same.
+% \begin{macrocode}
+\def_new:NNn \toks_if_eq:NNTF 2 {
+ \tlist_if_eq:xxTF{\toks_use:N #1}{\toks_use:N #2}
+}
+\def_new:NNn \toks_if_eq:NNT 2 {
+ \tlist_if_eq:xxT{\toks_use:N #1}{\toks_use:N #2}
+}
+\def_new:NNn \toks_if_eq:NNF 2 {
+ \tlist_if_eq:xxF{\toks_use:N #1}{\toks_use:N #2}
+}
+\def_new:Npn \toks_if_eq:NcTF {\exp_args:NNc \toks_if_eq:NNTF}
+\def_new:Npn \toks_if_eq:NcT {\exp_args:NNc \toks_if_eq:NNT}
+\def_new:Npn \toks_if_eq:NcF {\exp_args:NNc \toks_if_eq:NNF}
+\def_new:Npn \toks_if_eq:cNTF {\exp_args:Nc \toks_if_eq:NNTF}
+\def_new:Npn \toks_if_eq:cNT {\exp_args:Nc \toks_if_eq:NNT}
+\def_new:Npn \toks_if_eq:cNF {\exp_args:Nc \toks_if_eq:NNF}
+\def_new:Npn \toks_if_eq:ccTF {\exp_args:Ncc \toks_if_eq:NNTF}
+\def_new:Npn \toks_if_eq:ccT {\exp_args:Ncc \toks_if_eq:NNT}
+\def_new:Npn \toks_if_eq:ccF {\exp_args:Ncc \toks_if_eq:NNF}
+% \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}
%
% \begin{macro}{\l_tmpa_toks}
% \begin{macro}{\l_tmpb_toks}
@@ -388,6 +619,7 @@
% Some scratch register \ldots
% \begin{macrocode}
\tex_toksdef:D \l_tmpa_toks = 255
+%<initex>\seq_put_right:Nn \g_toks_allocation_seq {255}
\toks_new:N \l_tmpb_toks
\toks_new:N \l_tmpc_toks
\toks_new:N \g_tmpa_toks
@@ -408,10 +640,81 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\toks_remove_extra_brace_group:N}
+% \begin{macro}{\toks_remove_extra_brace_group_aux:NNw}
+% Small function for removing an extra brace group if present. Hmm,
+% not really needed anymore.
+% \begin{macrocode}
+\def_new:Npn \toks_remove_extra_brace_group:N #1{
+ \exp_after:NN \toks_remove_extra_brace_group_aux:NNw
+ \exp_after:NN \toks_set:Nn \exp_after:NN #1
+ \toks_use:N#1\q_nil
+}
+\def_long_new:Npn\toks_remove_extra_brace_group_aux:NNw #1#2#3\q_nil{#1#2{#3}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
% Show token usage:
% \begin{macrocode}
-%</package>
+%</initex|package>
%<*showmemory>
\showMemUsage
%</showmemory>
% \end{macrocode}
+%
+% \endinput
+%
+% $Log$
+% Revision 1.25 2006/08/01 01:54:12 morten
+% Prevent brace stripping in \toks_put_left:Nn and friends.
+%
+% Revision 1.24 2006/03/20 18:26:40 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.23 2006/02/16 23:32:49 braams
+% Imported \toks_put_left:No from l3messages
+%
+% Revision 1.22 2006/01/21 11:43:20 morten
+% Tuned some of the \toks_set and \toks_put_right functions since they
+% are going to be used intensively in the l3keyval module which is again
+% going to be heavily used.
+%
+% Revision 1.21 2006/01/20 12:22:44 morten
+% Minor changes plus added \toks_remove_extra_brace_group:N for l3keyval
+% module
+%
+% Revision 1.20 2005/12/27 10:03:39 morten
+% Changed RCS information retrieval
+%
+% Revision 1.19 2005/12/23 13:24:39 morten
+% Added a few functions from template
+%
+% Revision 1.18 2005/12/21 20:44:04 morten
+% Corrected typo.
+%
+% Revision 1.17 2005/12/02 15:56:48 morten
+% Added some more functions and improved test for emptiness.
+%
+% Revision 1.16 2005/04/12 13:22:37 morten
+% More functions added
+%
+% Revision 1.15 2005/04/07 08:18:17 morten
+% Only put 255 in the toks stack when running initex
+%
+% Revision 1.14 2005/04/06 22:35:50 braams
+% Now we have register allocation fitted
+%
+% Revision 1.13 2005/04/06 21:37:50 morten
+% Added some more functions
+%
+% Revision 1.12 2005/03/15 23:39:21 braams
+% Some fiddling to get it loaded by initex; needs a way to allocate
+% token registers for it to work.
+%
+% Revision 1.11 2005/03/11 21:25:06 braams
+% Changed copyright year, fixed use of RCS values;
+% fixed a few typos in the documentation;
+% \c_if_empty_toks had to be \c_empty_toks
+%