diff options
Diffstat (limited to 'Master/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex')
-rw-r--r-- | Master/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex | 663 |
1 files changed, 334 insertions, 329 deletions
diff --git a/Master/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex b/Master/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex index 47969aaba48..5ff18417bc6 100644 --- a/Master/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex +++ b/Master/texmf-dist/tex/generic/pgf/utilities/pgffor.code.tex @@ -31,10 +31,10 @@ \pgffor@stack={{}{}{}} \def\pgffor@stackpush#1{% - \def\pgffor@stacktemp{#1}% - \expandafter\expandafter\expandafter\pgffor@stack\expandafter\expandafter\expandafter=% - \expandafter\expandafter\expandafter{\expandafter\expandafter\expandafter% - {\expandafter\pgffor@stacktemp\expandafter}\the\pgffor@stack}% + \def\pgffor@stacktemp{#1}% + \expandafter\expandafter\expandafter\pgffor@stack\expandafter\expandafter\expandafter=% + \expandafter\expandafter\expandafter{\expandafter\expandafter\expandafter% + {\expandafter\pgffor@stacktemp\expandafter}\the\pgffor@stack}% } \def\pgffor@stackpop{\expandafter\pgffor@@stackpop\the\pgffor@stack\pgffor@stackstop} @@ -43,40 +43,40 @@ \def\pgffor@emptyvalues{, \pgffor@stop,}% \def\pgffor@foreach{% - \pgffor@atbeginforeach% - \let\pgffor@assign@before@code=\pgfutil@empty% - \let\pgffor@assign@after@code=\pgfutil@empty% - \let\pgffor@assign@once@code=\pgfutil@empty% - \let\pgffor@remember@code=\pgfutil@empty% - \let\pgffor@remember@once@code=\pgfutil@empty% - \pgffor@alphabeticsequencefalse% - \pgffor@contextfalse% - % - \let\pgffor@var=\pgfutil@empty - % - \pgffor@vars% -} - + \pgffor@atbeginforeach% + \let\pgffor@assign@before@code=\pgfutil@empty% + \let\pgffor@assign@after@code=\pgfutil@empty% + \let\pgffor@assign@once@code=\pgfutil@empty% + \let\pgffor@remember@code=\pgfutil@empty% + \let\pgffor@remember@once@code=\pgfutil@empty% + \pgffor@alphabeticsequencefalse% + \pgffor@contextfalse% + % + \let\pgffor@var=\pgfutil@empty + % + \pgffor@vars% +} + \let\foreach=\pgffor@foreach \def\pgffor@vars{% - \pgfutil@ifnextchar i{\pgffor@@vars@end}{% - \pgfutil@ifnextchar[{\pgffor@@vars@opt}{%] - \pgfutil@ifnextchar/{\pgffor@@vars@slash@gobble}{% - \pgffor@@vars}}}}% - + \pgfutil@ifnextchar i{\pgffor@@vars@end}{% + \pgfutil@ifnextchar[{\pgffor@@vars@opt}{%] + \pgfutil@ifnextchar/{\pgffor@@vars@slash@gobble}{% + \pgffor@@vars}}}}% + \def\pgffor@@vars@end in{\pgfutil@ifnextchar\bgroup{\pgffor@normal@list}{\pgffor@macro@list}} \def\pgffor@@vars@opt[#1]{\pgfkeys{/pgf/foreach/.cd,#1}\pgffor@vars} \def\pgffor@@vars#1{\pgffor@var@add#1\pgffor@stop\pgffor@vars} \def\pgffor@@vars@slash@gobble/{\pgffor@@vars} \def\pgffor@var@add#1#2\pgffor@stop{% - \ifx\pgffor@var\pgfutil@empty% - \def\pgffor@var{#1}% - \def\pgffor@mainvar{#1}% - \else% - \expandafter\def\expandafter\pgffor@var\expandafter{\pgffor@var/#1}% - \fi% + \ifx\pgffor@var\pgfutil@empty% + \def\pgffor@var{#1}% + \def\pgffor@mainvar{#1}% + \else% + \expandafter\def\expandafter\pgffor@var\expandafter{\pgffor@var/#1}% + \fi% } \def\pgffor@macro@list#1{% @@ -105,14 +105,14 @@ \pgffor@collectbody% } \long\def\pgffor@collectargument#1{% - \expandafter\pgfutil@in@\expandafter\foreach\expandafter{\pgffor@body}% - \ifpgfutil@in@% - \expandafter\long\expandafter\def\expandafter\pgffor@body\expandafter% - {\pgffor@body{#1}}% - \else% - \expandafter\long\expandafter\def\expandafter\pgffor@body\expandafter% - {\pgffor@body#1}% - \fi% + \expandafter\pgfutil@in@\expandafter\foreach\expandafter{\pgffor@body}% + \ifpgfutil@in@% + \expandafter\long\expandafter\def\expandafter\pgffor@body\expandafter% + {\pgffor@body{#1}}% + \else% + \expandafter\long\expandafter\def\expandafter\pgffor@body\expandafter% + {\pgffor@body#1}% + \fi% \pgffor@iterate% } @@ -131,12 +131,12 @@ { \catcode`\;=\active - + \gdef\pgffor@collectactivesemicolon#1;{% \expandafter\long\expandafter\def\expandafter\pgffor@body\expandafter{\pgffor@body#1;}% \pgffor@iterate% } -} +} \def\pgffor@iterate{% % Must do all of these in case the internal stack is used. @@ -145,7 +145,7 @@ \let\pgffor@dotsend=\pgfutil@empty% \let\pgffor@dots@pre=\pgfutil@empty% \let\pgffor@dots@post=\pgfutil@empty% - % + % \expandafter\pgffor@scan\pgffor@values} \def\pgffor@stop{\pgffor@stop}% @@ -159,11 +159,11 @@ % Check for dots. \newif\ifpgffor@dots@in@ \def\pgffor@dots@in@#1...#2#3\pgffor@stop{% - \ifx\pgffor@dots@@#2% - \pgffor@dots@in@false% - \else% - \pgffor@dots@in@true% - \fi% + \ifx\pgffor@dots@@#2% + \pgffor@dots@in@false% + \else% + \pgffor@dots@in@true% + \fi% } \def\pgffor@dots@@{\pgffor@dots@@} @@ -172,9 +172,9 @@ \ifx\pgffor@value\pgffor@stop% \let\pgffor@next=\pgffor@after% Done! \else% - % Check for dots. Quicker than \pgfutil@in@ and not suceptable - % to false-positives when a token sequence ends in a single full-stop. - \expandafter\pgffor@dots@in@\pgffor@value\pgffor@dots@...\pgffor@dots@@\pgffor@stop% + % Check for dots. Quicker than \pgfutil@in@ and not suceptable + % to false-positives when a token sequence ends in a single full-stop. + \expandafter\pgffor@dots@in@\pgffor@value\pgffor@dots@...\pgffor@dots@@\pgffor@stop% \ifpgffor@dots@in@% \let\pgffor@next=\pgffor@handledots% \else% @@ -192,17 +192,17 @@ \global\pgffor@continuetrue% \pgffor@atendforeach% \pgffor@afterhook} - + \def\pgffor@handlevalue{% - \let\pgffor@prevlast=\pgffor@last% + \let\pgffor@prevlast=\pgffor@last% \let\pgffor@last=\pgffor@value% \pgffor@invokebody% \pgffor@scan% } - + \def\pgffor@invokebody{% - \pgffor@begingroup% + \pgffor@begingroup% \expandafter\pgfutil@in@\expandafter/\expandafter{\pgffor@var}% \ifpgfutil@in@% \expandafter\def\expandafter\pgffor@valuerest\expandafter{\pgffor@value//\relax}% @@ -212,21 +212,21 @@ \fi% % Execute assign once code. \ifx\pgffor@assign@once@code\pgfutil@empty% - \else% - \pgffor@assign@once@code% - \fi% + \else% + \pgffor@assign@once@code% + \fi% % Execute assign before code. \ifx\pgffor@assign@before@code\pgfutil@empty% \else% - \pgffor@assign@before@code% - \fi% - % + \pgffor@assign@before@code% + \fi% + % \expandafter\expandafter\expandafter\pgffor@reset@hooks\expandafter\pgffor@beginhook\expandafter\pgffor@body\pgffor@endhook% % Execute assign after code. \ifx\pgffor@assign@after@code\pgfutil@empty% \else% - \pgffor@assign@after@code% - \fi% + \pgffor@assign@after@code% + \fi% % \pgffor@endgroup% } @@ -245,66 +245,68 @@ \def\pgffor@multiassignrest{\expandafter\pgffor@multiassignfinal\pgffor@valuerest} \def\pgffor@multiassignfinal#1/#2/\relax{% - \def\pgffor@temp{#1}% - \ifx\pgffor@currentvar\pgffor@mainvar% - \ifpgffor@alphabeticsequence% - \pgffor@makealphabetic\pgffor@temp% - \fi% + \def\pgffor@temp{#1}% + \ifx\pgffor@currentvar\pgffor@mainvar% + \ifpgffor@alphabeticsequence% + \pgffor@makealphabetic\pgffor@temp% + \fi% \fi% \def\pgffor@test{#2}% \ifx\pgffor@test\pgfutil@empty% - \expandafter\def\expandafter\pgffor@valuerest\expandafter{\pgffor@temp//\relax}% repeat + \expandafter\def\expandafter\pgffor@valuerest\expandafter{\pgffor@temp//\relax}% repeat \else% \def\pgffor@valuerest{#2/\relax}% \fi% \expandafter\expandafter\expandafter\def\expandafter\pgffor@currentvar\expandafter{\pgffor@temp}% - % + % \expandafter\pgffor@multiassign\pgffor@rest/\relax% -} +} \def\pgffor@gobblespaces#1{\pgfutil@ifnextchar x{#1}{#1}} \def\pgffor@handledots{% - \pgffor@gobblespaces{\expandafter\pgffor@@handledots\pgffor@value\pgffor@@stop}% + \pgffor@gobblespaces{\expandafter\pgffor@@handledots\pgffor@value\pgffor@@stop}% } \newif\ifpgffor@context \def\pgffor@@handledots#1...#2\pgffor@@stop{% - % Define the context if any. - \def\pgffor@dots@pre{#1}% - \def\pgffor@dots@post{#2}% - \def\pgffor@dots@stripcontext#1##1#2\pgffor@@stop{\def\pgffor@dotsvalue{##1}}% - \pgffor@contexttrue% - \ifx\pgffor@dots@pre\pgfutil@empty% - \ifx\pgffor@dots@post\pgfutil@empty% - \pgffor@contextfalse% - \def\pgffor@dots@stripcontext##1\pgffor@@stop{\def\pgffor@dotsvalue{##1}}% - \fi% - \fi% - \pgffor@gobblespaces{\pgffor@dotsscanend}% + % Define the context if any. + \def\pgffor@dots@pre{#1}% + \def\pgffor@dots@post{#2}% + \def\pgffor@dots@stripcontext#1##1#2\pgffor@@stop{\def\pgffor@dotsvalue{##1}}% + \pgffor@contexttrue% + \ifx\pgffor@dots@pre\pgfutil@empty% + \ifx\pgffor@dots@post\pgfutil@empty% + \pgffor@contextfalse% + \def\pgffor@dots@stripcontext##1\pgffor@@stop{\def\pgffor@dotsvalue{##1}}% + \fi% + \fi% + \pgffor@gobblespaces{\pgffor@dotsscanend}% } \def\pgffor@dots@value@process#1{% - \expandafter\pgffor@dots@stripcontext#1\pgffor@@stop% - \expandafter\pgffor@dots@charcheck\pgffor@dotsvalue\pgffor@@stop% + \expandafter\pgffor@dots@stripcontext#1\pgffor@@stop% + \expandafter\pgffor@dots@charcheck\pgffor@dotsvalue\pgffor@@stop% \ifpgffor@alphabeticsequence \else - \begingroup - \pgfkeys{/pgf/fpu/false/.try}% - \pgfmathparse{\pgffor@dotsvalue}% - \pgfmath@smuggleone\pgfmathresult - \endgroup - \let\pgffor@dotsvalue=\pgfmathresult + \ifpgffor@assign@parse + \begingroup + \pgfkeys{/pgf/fpu/false/.try}% + \pgfmathparse{\pgffor@dotsvalue}% + \pgfmath@smuggleone\pgfmathresult + \endgroup + \let\pgffor@dotsvalue=\pgfmathresult + \fi \fi - \let#1=\pgffor@dotsvalue% + \let#1=\pgffor@dotsvalue% } \def\pgffor@dotsscanend#1,{% - \pgffor@alphabeticsequencefalse% - % Strip context and check for a character sequence. - \def\pgffor@dotsend{#1}% - \pgffor@dots@value@process{\pgffor@dotsend}% + \pgffor@alphabeticsequencefalse% + % Strip context and check for a character sequence. + \def\pgffor@dotsend{#1}% + \pgffor@dots@value@process{\pgffor@dotsend}% % \pgffor@dots@value@process{\pgffor@last}% % @@ -316,7 +318,7 @@ \pgffor@skip=-1pt% \fi% \else% - \pgffor@dots@value@process{\pgffor@prevlast}% + \pgffor@dots@value@process{\pgffor@prevlast}% \pgffor@skip=\pgffor@last pt% \pgffor@iter=\pgffor@prevlast pt% \advance\pgffor@skip by-\pgffor@iter% @@ -346,8 +348,8 @@ } \def\pgffor@endloop{% - \pgffor@alphabeticsequencefalse% - \pgffor@scan% + \pgffor@alphabeticsequencefalse% + \pgffor@scan% } {\catcode`\p=12\catcode`\t=12\gdef\Pgffor@geT#1pt{#1}} @@ -365,168 +367,168 @@ \expandafter\def\expandafter\pgffor@valuerest\expandafter{\pgffor@temp//\relax}% \expandafter\pgffor@multiassign\pgffor@var/\pgffor@stop/\pgffor@stop/\relax% \else% - % Convert to alphabetic sequence, if necessary. - \ifpgffor@alphabeticsequence% - \pgffor@makealphabetic\pgffor@temp% - \expandafter\let\pgffor@var=\pgffor@temp% - \else% - \expandafter\expandafter\expandafter\def\expandafter\pgffor@var\expandafter{\pgffor@temp}% + % Convert to alphabetic sequence, if necessary. + \ifpgffor@alphabeticsequence% + \pgffor@makealphabetic\pgffor@temp% + \expandafter\let\pgffor@var=\pgffor@temp% + \else% + \expandafter\expandafter\expandafter\def\expandafter\pgffor@var\expandafter{\pgffor@temp}% \fi% \fi% % Insert any context, if any. \ifpgffor@context% \let\pgffor@temp=\pgffor@dots@pre% - \expandafter\pgfutil@append@macrotomacro\expandafter% - {\expandafter\pgffor@temp\expandafter}\expandafter{\pgffor@var}% - \expandafter\pgfutil@append@macrotomacro\expandafter% - {\expandafter\pgffor@temp\expandafter}\expandafter{\pgffor@dots@post}% - \expandafter\let\pgffor@var=\pgffor@temp% - \fi% - % Perform assignments before loop body. - \ifx\pgffor@assign@before@code\pgfutil@empty% + \expandafter\pgfutil@append@macrotomacro\expandafter% + {\expandafter\pgffor@temp\expandafter}\expandafter{\pgffor@var}% + \expandafter\pgfutil@append@macrotomacro\expandafter% + {\expandafter\pgffor@temp\expandafter}\expandafter{\pgffor@dots@post}% + \expandafter\let\pgffor@var=\pgffor@temp% + \fi% + % Perform assignments before loop body. + \ifx\pgffor@assign@before@code\pgfutil@empty% \else% - \pgffor@assign@before@code% - \fi% - % + \pgffor@assign@before@code% + \fi% + % \expandafter\expandafter\expandafter\pgffor@reset@hooks\expandafter\pgffor@beginhook\expandafter\pgffor@body\pgffor@endhook% % % Perform assignments after loop body. - \ifx\pgffor@assign@after@code\pgfutil@empty% + \ifx\pgffor@assign@after@code\pgfutil@empty% \else% - \pgffor@assign@after@code% - \fi% + \pgffor@assign@after@code% + \fi% \pgffor@endgroup% - \pgffor@loop% + \pgffor@loop% } \def\pgffor@strip#1.0{\def\pgffor@temp{#1}} \def\breakforeach{\global\pgffor@continuefalse} - + \def\pgffor@gobbletil@pgffor@@stop#1\pgffor@@stop{} \newif\ifpgffor@registeriscount \def\pgffor@ifcsregister#1{% - \expandafter\pgffor@@ifcsregister\meaning#1\pgffor@stop} + \expandafter\pgffor@@ifcsregister\meaning#1\pgffor@stop} \def\pgffor@@ifcsregister#1#2#3#4#5\pgffor@stop{% - \if#1m% It is an ordinary (m)acro. - \pgffor@registeriscountfalse% - \let\pgffor@csnext=\pgfutil@secondoftwo% - \else% - \if#1u% It is (u)ndefined. - \let\pgffor@csnext=\pgfutil@secondoftwo% - \pgffor@registeriscountfalse% - \else% - \let\pgffor@csnext=\pgfutil@firstoftwo% - \if#4u% It is a co(u)nt - \pgffor@registeriscounttrue% - \else% Assume it is a dimen or skip (bad assumption in the general case). - \pgffor@registeriscountfalse% - \let\pgffor@csnext=\pgfutil@firstoftwo% - \fi% - \fi% - \fi% - \pgffor@csnext} - + \if#1m% It is an ordinary (m)acro. + \pgffor@registeriscountfalse% + \let\pgffor@csnext=\pgfutil@secondoftwo% + \else% + \if#1u% It is (u)ndefined. + \let\pgffor@csnext=\pgfutil@secondoftwo% + \pgffor@registeriscountfalse% + \else% + \let\pgffor@csnext=\pgfutil@firstoftwo% + \if#4u% It is a co(u)nt + \pgffor@registeriscounttrue% + \else% Assume it is a dimen or skip (bad assumption in the general case). + \pgffor@registeriscountfalse% + \let\pgffor@csnext=\pgfutil@firstoftwo% + \fi% + \fi% + \fi% + \pgffor@csnext} + \newif\ifpgffor@alphabeticsequence -% +% \def\pgffor@dots@charcheck#1\pgffor@@stop{% \edef\pgffor@dots@charcheck@temp{#1}% \expandafter\expandafter\expandafter\pgffor@@dotscharcheck\expandafter\meaning\pgffor@dots@charcheck@temp\pgffor@@stop% } \def\pgffor@@dotscharcheck#1#2\pgffor@@stop{% - \if#1t% - \afterassignment\pgffor@gobbletil@pgffor@@stop% - \expandafter\chardef\expandafter\pgffor@char\expandafter=\expandafter`\pgffor@dots@charcheck@temp\relax\pgffor@@stop% - \edef\pgffor@char{\the\pgffor@char}% - \ifnum\pgffor@char>64\relax% From A-Z? - \ifnum\pgffor@char<91\relax% - \let\pgffor@dotsvalue=\pgffor@char% - \pgffor@alphabeticsequencetrue% - \else% - \ifnum\pgffor@char>96\relax% From a-z? - \ifnum\pgffor@char<123\relax% - \let\pgffor@dotsvalue=\pgffor@char% - \pgffor@alphabeticsequencetrue% - \fi% - \fi% - \fi% - \fi% - \fi% + \if#1t% + \afterassignment\pgffor@gobbletil@pgffor@@stop% + \expandafter\chardef\expandafter\pgffor@char\expandafter=\expandafter`\pgffor@dots@charcheck@temp\relax\pgffor@@stop% + \edef\pgffor@char{\the\pgffor@char}% + \ifnum\pgffor@char>64\relax% From A-Z? + \ifnum\pgffor@char<91\relax% + \let\pgffor@dotsvalue=\pgffor@char% + \pgffor@alphabeticsequencetrue% + \else% + \ifnum\pgffor@char>96\relax% From a-z? + \ifnum\pgffor@char<123\relax% + \let\pgffor@dotsvalue=\pgffor@char% + \pgffor@alphabeticsequencetrue% + \fi% + \fi% + \fi% + \fi% + \fi% } \def\pgffor@makealphabetic#1{% - % Convert the number in the macro passed as #1 to a-z or A-Z. - \pgfutil@tempcnta=#1\relax% - \ifnum\pgfutil@tempcnta>95\relax% - \advance\pgfutil@tempcnta by-96\relax% - \edef#1{\pgffor@alpha\pgfutil@tempcnta}% - \else% - \advance\pgfutil@tempcnta by-64 % - \edef#1{\pgffor@Alpha\pgfutil@tempcnta}% - \fi% + % Convert the number in the macro passed as #1 to a-z or A-Z. + \pgfutil@tempcnta=#1\relax% + \ifnum\pgfutil@tempcnta>95\relax% + \advance\pgfutil@tempcnta by-96\relax% + \edef#1{\pgffor@alpha\pgfutil@tempcnta}% + \else% + \advance\pgfutil@tempcnta by-64 % + \edef#1{\pgffor@Alpha\pgfutil@tempcnta}% + \fi% } \def\pgffor@Alpha#1{% - \ifcase#1\relax\or A\or B\or C\or D\or E\or F\or G\or H\or I\or J\or K\or L\or M% - \or N\or O\or P\or Q\or R\or S\or T\or U\or V\or W\or X\or Y\or Z\else?\fi% + \ifcase#1\relax\or A\or B\or C\or D\or E\or F\or G\or H\or I\or J\or K\or L\or M% + \or N\or O\or P\or Q\or R\or S\or T\or U\or V\or W\or X\or Y\or Z\else?\fi% } \def\pgffor@alpha#1{% - \ifcase#1\relax\or a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or k\or l\or m% - \or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or y\or z\else?\fi% + \ifcase#1\relax\or a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or k\or l\or m% + \or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or y\or z\else?\fi% } \newtoks\pgffor@toks \def\pgffor@addcstotoks#1{% - \expandafter\def\expandafter\pgffor@tokstemp\expandafter{\expandafter\def\expandafter#1\expandafter{#1}}% - \pgffor@@addcstotoks} + \expandafter\def\expandafter\pgffor@tokstemp\expandafter{\expandafter\def\expandafter#1\expandafter{#1}}% + \pgffor@@addcstotoks} \def\pgffor@addregtotoks#1{% - \expandafter\def\expandafter\pgffor@tokstemp\expandafter{\expandafter#1\expandafter=\the#1}% - \pgffor@@addcstotoks} + \expandafter\def\expandafter\pgffor@tokstemp\expandafter{\expandafter#1\expandafter=\the#1}% + \pgffor@@addcstotoks} \def\pgffor@addiftotoks#1{% - \begingroup% - \escapechar=-1\relax% - \expandafter\pgffor@@addiftotoks\string#1\pgffor@stop} + \begingroup% + \escapechar=-1\relax% + \expandafter\pgffor@@addiftotoks\string#1\pgffor@stop} \def\pgffor@@addiftotoks#1#2#3#4\pgffor@stop{% - \endgroup - \csname if#3#4\endcsname% - \expandafter\def\expandafter\pgffor@tokstemp\expandafter{\csname#3#4true\endcsname}% - \else% - \expandafter\def\expandafter\pgffor@tokstemp\expandafter{\csname#3#4false\endcsname}% - \fi% - \pgffor@@addcstotoks% + \endgroup + \csname if#3#4\endcsname% + \expandafter\def\expandafter\pgffor@tokstemp\expandafter{\csname#3#4true\endcsname}% + \else% + \expandafter\def\expandafter\pgffor@tokstemp\expandafter{\csname#3#4false\endcsname}% + \fi% + \pgffor@@addcstotoks% } \def\pgffor@@addcstotoks{% - \expandafter\expandafter\expandafter\pgffor@toks\expandafter\expandafter\expandafter=% - \expandafter\expandafter\expandafter{\expandafter\pgffor@tokstemp\the\pgffor@toks}% + \expandafter\expandafter\expandafter\pgffor@toks\expandafter\expandafter\expandafter=% + \expandafter\expandafter\expandafter{\expandafter\pgffor@tokstemp\the\pgffor@toks}% } % Set up the pgffor scopes. \def\pgffor@atbeginforeach{% - \begingroup% + \begingroup% } \def\pgffor@atendforeach{% - \global\edef\pgffor@remember@expanded{\pgffor@remember@code}% + \global\edef\pgffor@remember@expanded{\pgffor@remember@code}% \endgroup% \ifx\pgffor@remember@expanded\pgfutil@empty% \else% - \pgffor@remember@expanded% - \global\let\pgffor@remember@expanded=\pgfutil@empty% + \pgffor@remember@expanded% + \global\let\pgffor@remember@expanded=\pgfutil@empty% \fi% } \def\pgffor@default@begingroup{% - \begingroup% + \begingroup% } \let\pgffor@remember@once@expanded=\pgfutil@empty @@ -564,30 +566,30 @@ \let\pgffor@begingroup=\pgffor@default@begingroup \let\pgffor@endgroup=\pgffor@default@endgroup - + \def\pgffor@stack@begingroup{% - \pgffor@toks={}% - \pgffor@addcstotoks{\pgffor@mainvar}% - \pgffor@addcstotoks{\pgffor@var}% - \pgffor@addcstotoks{\pgffor@body}% - % - \pgffor@addcstotoks{\pgffor@last}% - \pgffor@addcstotoks{\pgffor@prevlast}% - \pgffor@addcstotoks{\pgffor@dotsend}% - % - \pgffor@addcstotoks{\pgffor@assign@before@code}% - \pgffor@addcstotoks{\pgffor@assign@after@code}% - \pgffor@addcstotoks{\pgffor@remember@code}% - \pgffor@addcstotoks{\pgffor@remember@once@code}% - \pgffor@addcstotoks{\pgffor@dots@pre}% - \pgffor@addcstotoks{\pgffor@dots@post}% - % - \pgffor@addregtotoks{\pgffor@iter}% - \pgffor@addregtotoks{\pgffor@skip}% - % - \pgffor@addiftotoks{\ifpgffor@alphabeticsequence}% - \pgffor@addiftotoks{\ifpgffor@context}% - \expandafter\pgffor@stackpush\expandafter{\the\pgffor@toks}% + \pgffor@toks={}% + \pgffor@addcstotoks{\pgffor@mainvar}% + \pgffor@addcstotoks{\pgffor@var}% + \pgffor@addcstotoks{\pgffor@body}% + % + \pgffor@addcstotoks{\pgffor@last}% + \pgffor@addcstotoks{\pgffor@prevlast}% + \pgffor@addcstotoks{\pgffor@dotsend}% + % + \pgffor@addcstotoks{\pgffor@assign@before@code}% + \pgffor@addcstotoks{\pgffor@assign@after@code}% + \pgffor@addcstotoks{\pgffor@remember@code}% + \pgffor@addcstotoks{\pgffor@remember@once@code}% + \pgffor@addcstotoks{\pgffor@dots@pre}% + \pgffor@addcstotoks{\pgffor@dots@post}% + % + \pgffor@addregtotoks{\pgffor@iter}% + \pgffor@addregtotoks{\pgffor@skip}% + % + \pgffor@addiftotoks{\ifpgffor@alphabeticsequence}% + \pgffor@addiftotoks{\ifpgffor@context}% + \expandafter\pgffor@stackpush\expandafter{\the\pgffor@toks}% } \def\pgffor@stack@endgroup{\pgffor@stackpop} @@ -596,163 +598,166 @@ \newif\ifpgffor@assign@evaluate \newif\ifpgffor@assign@once +\newif\ifpgffor@assign@parse \pgfkeys{/pgf/foreach/.cd, - var/.code=\pgffor@var@add#1\pgffor@stop, - scope iterations/.code={ - \csname if#1\endcsname% - \let\pgffor@begingroup=\pgffor@default@begingroup% - \let\pgffor@endgroup=\pgffor@default@endgroup% - \else% - \let\pgffor@begingroup=\pgffor@stack@begingroup% - \let\pgffor@endgroup=\pgffor@stack@endgroup% - \fi% - }, - evaluate/.code=\pgffor@assign@evaluatetrue\pgffor@assign@oncefalse\pgffor@assign@parse{#1},% - assign/.code=\pgffor@assign@evaluatefalse\pgffor@assign@oncefalse\pgffor@assign@parse{#1},% - evaluate once/.code=\pgffor@assign@evaluatetrue\pgffor@assign@oncetrue\pgffor@assign@parse{#1},% - assign once/.code=\pgffor@assign@evaluatefalse\pgffor@assign@oncetrue\pgffor@assign@parse{#1},% - remember/.code=\pgffor@remember@parse{#1},% - count/.code=\pgffor@count@parse#1\pgffor@stop + var/.code=\pgffor@var@add#1\pgffor@stop, + scope iterations/.code={ + \csname if#1\endcsname% + \let\pgffor@begingroup=\pgffor@default@begingroup% + \let\pgffor@endgroup=\pgffor@default@endgroup% + \else% + \let\pgffor@begingroup=\pgffor@stack@begingroup% + \let\pgffor@endgroup=\pgffor@stack@endgroup% + \fi% + }, + evaluate/.code=\pgffor@assign@evaluatetrue\pgffor@assign@oncefalse\pgffor@assign@parse{#1},% + assign/.code=\pgffor@assign@evaluatefalse\pgffor@assign@oncefalse\pgffor@assign@parse{#1},% + evaluate once/.code=\pgffor@assign@evaluatetrue\pgffor@assign@oncetrue\pgffor@assign@parse{#1},% + assign once/.code=\pgffor@assign@evaluatefalse\pgffor@assign@oncetrue\pgffor@assign@parse{#1},% + remember/.code=\pgffor@remember@parse{#1},% + count/.code=\pgffor@count@parse#1\pgffor@stop, + parse/.is if=pgffor@assign@parse, + parse/.default=false, } \def\pgffor@assign@parse#1{% - \pgfutil@in@;{#1}% - \ifpgfutil@in@% - \else% - \pgfutil@in@={#1}% - \fi% - \ifpgfutil@in@% - \pgffor@assign@@parse#1;\pgffor@stop;% - \else% - \pgffor@assign@parse@old#1\pgffor@stop%% - \fi% + \pgfutil@in@;{#1}% + \ifpgfutil@in@% + \else% + \pgfutil@in@={#1}% + \fi% + \ifpgfutil@in@% + \pgffor@assign@@parse#1;\pgffor@stop;% + \else% + \pgffor@assign@parse@old#1\pgffor@stop%% + \fi% } \def\pgffor@stop{\pgffor@stop} \def\pgffor@assign@@parse#1;{% - \def\pgffor@test{#1}% - \ifx\pgffor@test\pgffor@stop% - \let\pgffor@next=\relax% - \else% - \let\pgffor@next=\pgffor@assign@@parse% - \ifx\pgffor@test\pgfutil@empty% - \else% - \pgfutil@in@={#1}% - \ifpgfutil@in@% - \pgffor@assign@@@parse#1\pgffor@stop% - \else% - \pgffor@assign@@@parse#1=#1\pgffor@stop% - \fi% - \fi% - \fi% - \pgffor@next} - + \def\pgffor@test{#1}% + \ifx\pgffor@test\pgffor@stop% + \let\pgffor@next=\relax% + \else% + \let\pgffor@next=\pgffor@assign@@parse% + \ifx\pgffor@test\pgfutil@empty% + \else% + \pgfutil@in@={#1}% + \ifpgfutil@in@% + \pgffor@assign@@@parse#1\pgffor@stop% + \else% + \pgffor@assign@@@parse#1=#1\pgffor@stop% + \fi% + \fi% + \fi% + \pgffor@next} + \def\pgffor@assign@@@parse#1=#2\pgffor@stop{% - \ifpgffor@assign@evaluate% - \ifpgffor@assign@once% - \pgfutil@append@tomacro{\pgffor@assign@once@code}{\pgfmathparse{#2}\let#1=\pgfmathresult}% - \pgfutil@append@tomacro{\pgffor@remember@once@code}{\noexpand\def\noexpand#1{#2}}% - \else - \pgfutil@append@tomacro{\pgffor@assign@before@code}{\pgfmathparse{#2}\let#1=\pgfmathresult}% - \fi% - \else% - \ifpgffor@assign@once% - \pgfutil@append@tomacro{\pgffor@assign@once@code}{\def#1{#2}}% - \pgfutil@append@tomacro{\pgffor@remember@once@code}{\noexpand\def\noexpand#1{#2}}% - \else - \pgfutil@append@tomacro{\pgffor@assign@before@code}{\def#1{#2}}% - \fi% - \fi% + \ifpgffor@assign@evaluate% + \ifpgffor@assign@once% + \pgfutil@append@tomacro{\pgffor@assign@once@code}{\pgfmathparse{#2}\let#1=\pgfmathresult}% + \pgfutil@append@tomacro{\pgffor@remember@once@code}{\noexpand\def\noexpand#1{#2}}% + \else + \pgfutil@append@tomacro{\pgffor@assign@before@code}{\pgfmathparse{#2}\let#1=\pgfmathresult}% + \fi% + \else% + \ifpgffor@assign@once% + \pgfutil@append@tomacro{\pgffor@assign@once@code}{\def#1{#2}}% + \pgfutil@append@tomacro{\pgffor@remember@once@code}{\noexpand\def\noexpand#1{#2}}% + \else + \pgfutil@append@tomacro{\pgffor@assign@before@code}{\def#1{#2}}% + \fi% + \fi% } \def\pgffor@assign@parse@old#1#2\pgffor@stop{% - \pgffor@assign@@parse@old#2\pgffor@stop as#1using #1\pgffor@@stop} + \pgffor@assign@@parse@old#2\pgffor@stop as#1using #1\pgffor@@stop} \def\pgffor@assign@@parse@old#1as#2#3\pgffor@@stop{% - \pgffor@assign@@@parse@old{#2}#1#3\pgffor@stop\pgffor@@stop} + \pgffor@assign@@@parse@old{#2}#1#3\pgffor@stop\pgffor@@stop} \def\pgffor@assign@@@parse@old#1#2using #3\pgffor@stop#4\pgffor@@stop{% - \pgffor@assign@@@parse#1=#3\pgffor@stop} - + \pgffor@assign@@@parse#1=#3\pgffor@stop} + \def\pgffor@remember@parse#1{% - \pgfutil@in@ a{#1}% This matches the 'a' in 'as' or 'intially'. - \ifpgfutil@in@% - \pgffor@remember@parse@old#1\pgffor@stop% - \else% - \pgffor@remember@@parse#1;\pgffor@stop;% - \fi% + \pgfutil@in@ a{#1}% This matches the 'a' in 'as' or 'initially'. + \ifpgfutil@in@% + \pgffor@remember@parse@old#1\pgffor@stop% + \else% + \pgffor@remember@@parse#1;\pgffor@stop;% + \fi% } \def\pgffor@remember@@parse#1;{% - \def\pgffor@test{#1}% - \ifx\pgffor@test\pgffor@stop% - \let\pgffor@next=\relax% - \else% - \let\pgffor@next=\pgffor@remember@@parse% - \ifx\pgffor@test\pgfutil@empty% - \else% - \pgfutil@in@={#1}% - \ifpgfutil@in@% - \pgffor@remember@@@parse#1\pgffor@stop% - \else% - \pgffor@ifcsregister{#1}{% - \pgfutil@append@tomacro{\pgffor@remember@code}{\noexpand#1=\the#1\noexpand\relax}% - }% - {% - \pgfutil@append@tomacro{\pgffor@remember@code}{\noexpand\def\noexpand#1{#1}}% - }% - \fi% - \fi% - \fi% - \pgffor@next% + \def\pgffor@test{#1}% + \ifx\pgffor@test\pgffor@stop% + \let\pgffor@next=\relax% + \else% + \let\pgffor@next=\pgffor@remember@@parse% + \ifx\pgffor@test\pgfutil@empty% + \else% + \pgfutil@in@={#1}% + \ifpgfutil@in@% + \pgffor@remember@@@parse#1\pgffor@stop% + \else% + \pgffor@ifcsregister{#1}{% + \pgfutil@append@tomacro{\pgffor@remember@code}{\noexpand#1=\the#1\noexpand\relax}% + }% + {% + \pgfutil@append@tomacro{\pgffor@remember@code}{\noexpand\def\noexpand#1{#1}}% + }% + \fi% + \fi% + \fi% + \pgffor@next% } \def\pgffor@remember@@@parse#1=#2\pgffor@stop{% - \pgffor@ifcsregister{#2}{% - \pgfutil@append@tomacro{\pgffor@assign@after@code}{\expandafter\def\expandafter#1\expandafter{\the#2}}% - \pgfutil@append@tomacro{\pgffor@remember@code}{\noexpand\def\noexpand#1{#1}}% - }% - {% - \pgfutil@append@tomacro{\pgffor@assign@after@code}{\expandafter\def\expandafter#1\expandafter{#2}}% - \pgfutil@append@tomacro{\pgffor@remember@code}{\noexpand\def\noexpand#1{#1}}% - }% + \pgffor@ifcsregister{#2}{% + \pgfutil@append@tomacro{\pgffor@assign@after@code}{\expandafter\def\expandafter#1\expandafter{\the#2}}% + \pgfutil@append@tomacro{\pgffor@remember@code}{\noexpand\def\noexpand#1{#1}}% + }% + {% + \pgfutil@append@tomacro{\pgffor@assign@after@code}{\expandafter\def\expandafter#1\expandafter{#2}}% + \pgfutil@append@tomacro{\pgffor@remember@code}{\noexpand\def\noexpand#1{#1}}% + }% } \def\pgffor@remember@parse@old#1#2\pgffor@stop{% - \pgffor@remember@@parse@old#1#2\pgffor@stop as#1(initially )\pgffor@@stop} + \pgffor@remember@@parse@old#1#2\pgffor@stop as#1(initially )\pgffor@@stop} \def\pgffor@remember@@parse@old#1#2as#3#4\pgffor@@stop{% - \pgffor@remember@@@parse@old{#1}{#3}#2#4\pgffor@stop\pgffor@@stop} + \pgffor@remember@@@parse@old{#1}{#3}#2#4\pgffor@stop\pgffor@@stop} \def\pgffor@remember@@@parse@old#1#2#3(initially #4)#5\pgffor@stop#6\pgffor@@stop{% - \pgfutil@append@tomacro{\pgffor@assign@after@code}{\edef#2{#1}}% - \pgfutil@append@tomacro{\pgffor@remember@code}{\noexpand\def\noexpand#2{#2}}% - \def\pgffor@test{#4}% - \ifx\pgffor@test\pgfutil@empty% - \else% - \pgfutil@append@tomacro{\pgffor@assign@once@code}{\def#2{#4}}% - \fi% + \pgfutil@append@tomacro{\pgffor@assign@after@code}{\edef#2{#1}}% + \pgfutil@append@tomacro{\pgffor@remember@code}{\noexpand\def\noexpand#2{#2}}% + \def\pgffor@test{#4}% + \ifx\pgffor@test\pgfutil@empty% + \else% + \pgfutil@append@tomacro{\pgffor@assign@once@code}{\def#2{#4}}% + \fi% } \def\pgffor@count@parse#1#2\pgffor@stop{% - \pgffor@count@@parse#1#2\pgffor@stop from 1\pgffor@stop\pgffor@@stop} + \pgffor@count@@parse#1#2\pgffor@stop from 1\pgffor@stop\pgffor@@stop} \def\pgffor@count@@parse#1#2from#3\pgffor@stop#4\pgffor@@stop{% - \pgfutil@append@tomacro\pgffor@remember@code{\noexpand\def\noexpand#1{#1}}% - \pgfutil@append@tomacro\pgffor@assign@before@code{\pgfmathparse{int(#1+1)}\let#1=\pgfmathresult}% - \pgfmathparse{int(#3-1)}\let#1=\pgfmathresult% + \pgfutil@append@tomacro\pgffor@remember@code{\noexpand\def\noexpand#1{#1}}% + \pgfutil@append@tomacro\pgffor@assign@before@code{\pgfmathparse{int(#1+1)}\let#1=\pgfmathresult}% + \pgfmathparse{int(#3-1)}\let#1=\pgfmathresult% } \def\pgfutil@append@macrotomacro#1#2{% - \expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter% - #1\expandafter\expandafter\expandafter{\expandafter#1#2}} + \expandafter\expandafter\expandafter\def\expandafter\expandafter\expandafter% + #1\expandafter\expandafter\expandafter{\expandafter#1#2}} \def\pgfutil@append@tomacro#1#2{% - \expandafter\def\expandafter#1\expandafter{#1#2}} - + \expandafter\def\expandafter#1\expandafter{#1#2}} + \endinput |