diff options
author | Karl Berry <karl@freefriends.org> | 2007-05-22 17:46:23 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2007-05-22 17:46:23 +0000 |
commit | f4eb27d3314d15838f674a3872000159d029f88b (patch) | |
tree | 6e9ab33c5a2d702912b4a969ade4e4e2ac586d62 /Master/texmf-dist/source/latex/expl3/l3toks.dtx | |
parent | 14af3f447439750920f754792b89f113d019076a (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.dtx | 421 |
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 +% |