summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/eijkhout/repeat.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/generic/eijkhout/repeat.tex')
-rw-r--r--Master/texmf-dist/tex/generic/eijkhout/repeat.tex158
1 files changed, 82 insertions, 76 deletions
diff --git a/Master/texmf-dist/tex/generic/eijkhout/repeat.tex b/Master/texmf-dist/tex/generic/eijkhout/repeat.tex
index 6d149e15ee7..0bbb0785f6c 100644
--- a/Master/texmf-dist/tex/generic/eijkhout/repeat.tex
+++ b/Master/texmf-dist/tex/generic/eijkhout/repeat.tex
@@ -1,31 +1,18 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
-% Repeat loop macro, version 0.92, December 2000
-% Copyright Victor Eijkhout 2000
+% Repeat loop macro, version 0.93a, September 2006
+% Copyright Victor Eijkhout 1999-2006
% file name: repeat.tex
%
% Author:
% Victor Eijkhout
-% Department of Computer Science
-% University of Tennessee, Knoxville TN 37996
+% Texas Advanced Computing Center
+% The University of Texas at Austin, Austin TX 78758, USA
%
% victor@eijkhout.net
%
-% This program is free software; you can redistribute it and/or
-% modify it under the terms of the GNU General Public License
-% as published by the Free Software Foundation; either version 2
-% of the License, or (at your option) any later version.
-%
-% This program is distributed in the hope that it will be useful,
-% but WITHOUT ANY WARRANTY; without even the implied warranty of
-% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-% GNU General Public License for more details.
-%
-% For a copy of the GNU General Public License, write to the
-% Free Software Foundation, Inc.,
-% 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA,
-% or find it on the net, for instance at
-% http://www.gnu.org/copyleft/gpl.html
+% This program is released under the LaTeX Project Public License
+% see <http://www.latex-project.org/lppl/> for further information.
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
@@ -35,8 +22,6 @@
% \until{<cond>} \while{<cond>}
% \do { <loop body> }
% where all control sequences in between \repeat and \do are optional.
-% The space after each argument is mandatory!
-% (This implies that you will have to write "\from\i" as "\from{\i}".)
%
% var: characters to form a control sequence;
% after \for{index} you can access the loop counter as \index.
@@ -52,10 +37,12 @@
% at the beginning of the loop body.
%
% Exit from middle of loop: \breakrepeat
-% use this at any place in the loop; in case of a conditional, use
+% use this at any place in the loop; in case of a conditional use
% \ifsomething ... \expandafter \breakrepeat \fi
%
-% There are some examples at the end of this file, after the \endinput line.
+% There are some examples at the end of this file, after the \endinput line;
+% remove the \endinput statement to see the examples executed.
+% Note that the line ends do not cause spaces in the output.
%
% Technical details:
% The loop body is not executed in a group: the braces are those
@@ -69,8 +56,9 @@
% csarg-like control sequences made REP...
% counter update made global in case the body issues grouping,
% copyright notice, February 1999
-% 0.92 installed trace switches, eliminated unwanted space caused by
-% "\for{ijk} \do{...}"
+% 0.92 installed trace switches
+% 0.93 spaces are now ignored after each argument group. Author info updated.
+% 0.93a removed \bye from \endinput line.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
@@ -78,7 +66,7 @@
%% Prevent multiple loading of this file
%%
\expandafter\ifx\csname REPdepth\endcsname\relax
- \message{Loading loop macro, version 0.92}%
+ \message{Loading loop macro, version 0.93a}%
\else \endinput \fi
%%
@@ -87,9 +75,6 @@
\def\REPcsarg#1#2{\expandafter#1\csname#2\endcsname}
\def\REPcsrom#1{\csname #1\romannumeral\REPdepth\endcsname}
\def\REPcsargrom#1#2{\expandafter#1\csname#2\romannumeral\REPdepth\endcsname}
-%\def\cscsarg#1#2#3{\expandafter#1\expandafter#2\csname#3\endcsname}
-%\def\REPcsREPcsargrom#1#2#3{\expandafter#1\expandafter#2%
-% \csname#3\romannumeral\REPdepth\endcsname}
\newcount\REPdepth
\let\endrepeat\relax \def\csprotect{}
@@ -104,8 +89,7 @@
%% - scoop up body in token list; after the assignment define and
%% execute body
%%
-\def\repeat#1\do{
- \REPtraceinit % exit in \breakrepeat
+\def\repeat#1\do{\REPtraceinit % exit in \breakrepeat
\advance\REPdepth by 1\relax
\REPcsargrom\ifx{REPcount}\relax
\REPcsargrom{\csname newcount\expandafter\endcsname}{REPcount}%
@@ -124,10 +108,10 @@
\REPcsargrom\the{REPwtest}%
\noexpand\the\REPcsargrom\noexpand{REPtoks}%
\REPcsargrom\the{REPutest}%
- \global\REPcsargrom\advance{REPcount} by \REPsign\REPcsrom{REPinc}\relax%
+ \global\REPcsargrom\advance{REPcount} by \REPsign\REPcsrom{REPinc}\relax
\noexpand\endrepeat
\REPcsargrom\noexpand{REPrepeat}}%
- \REPcsrom{REPbody}}
+ \REPcsrom{REPbody}\ignorespaces}
%%
%% Stop test
%% In order to stop, issue a
@@ -142,24 +126,34 @@
%%
\def\REPsetup#1{%
\begingroup
- \def\for##1 {\edef\REPtmp{%
- \global\let\REPcsarg\noexpand{##1}\REPcsrom{REPcount}}\REPtmp}%
- \def\from##1 {\REPcsargrom\global{REPcount}##1\relax}%
- \def\to##1 {\edef\REPtmp{\global\REPcsargrom\noexpand{REPwtest}=
+ \def\for##1{%
+ \edef\REPtmp{%
+ \global\let\REPcsarg\noexpand{##1}\REPcsrom{REPcount}\ignorespaces}%
+ \REPtmp}%
+ \def\from##1{\REPcsargrom\global{REPcount}##1\ignorespaces}%
+ \def\to##1{%
+ \edef\REPtmp{\global\REPcsargrom\noexpand{REPwtest}=
{\REPcsargrom\the{REPwtest}%
\noexpand\ifnum\REPcsargrom\noexpand{REPcount}\REPcomp##1\relax
- \noexpand\expandafter \noexpand\breakrepeat \noexpand\fi}}\REPtmp}%
- \def\downto##1 {\gdef\REPsign{-}\gdef\REPcomp{<}\to{##1}}%
- \def\by##1 {\ifnum##1<0 \message{REPEAT: increment has to be >0}%
+ \noexpand\expandafter \noexpand\breakrepeat
+ \noexpand\fi}\ignorespaces}%
+ \REPtmp}%
+ \def\downto##1{%
+ \gdef\REPsign{-}\gdef\REPcomp{<}\to{##1}\ignorespaces}%
+ \def\by##1{\ifnum##1<0 \message{REPEAT: increment has to be >0}%
\REPcsargrom\gdef{REPinc}{-##1}\else
- \REPcsargrom\gdef{REPinc}{##1}\fi}
- \def\until##1 {\edef\REPtmp{\global\REPcsargrom\noexpand{REPutest}=
- {\noexpand##1\relax
- \noexpand\expandafter \noexpand\breakrepeat \noexpand\fi}}\REPtmp}%
- \def\while##1 {\edef\REPtmp{\global\REPcsargrom\noexpand{REPwtest}=
- {\noexpand##1\relax \noexpand\else
- \noexpand\expandafter \noexpand\breakrepeat \noexpand\fi}}\REPtmp}%
- \from{1} \by{1} #1%
+ \REPcsargrom\gdef{REPinc}{##1}\fi\ignorespaces}%
+ \def\until##1{%
+ \edef\REPtmp{\global\REPcsargrom\noexpand{REPutest}=
+ {\noexpand##1\relax
+ \noexpand\expandafter \noexpand\breakrepeat \noexpand\fi}\ignorespaces}%
+ \REPtmp}%
+ \def\while##1{%
+ \edef\REPtmp{\global\REPcsargrom\noexpand{REPwtest}=
+ {\noexpand##1\relax \noexpand\else
+ \noexpand\expandafter \noexpand\breakrepeat \noexpand\fi}\ignorespaces}%
+ \REPtmp}%
+ \from{1}\by{1}#1%
\endgroup}
\def\REPzero
{\REPcsrom{REPtoks}{}\REPcsrom{REPutest}{}\REPcsrom{REPwtest}{}%
@@ -168,37 +162,49 @@
\endinput
%\tracingmacros2
-\repeat \for{i} \by{2} \do {
- \ifnum\i=13 \expandafter\breakrepeat \fi
- \message{doing \number\i}
-}
-
-\repeat \for{iii} \to{8} \do {}
-\message{After loop: \number\iii}
-
-\repeat \for{i} \from{10} \by{2} \downto{0} \do {
- \message{countdown \number\i}
-}
-
-\repeat \for{x} \while{\ifnum\x<7} \do {
- \message{going \number\x}
-}
-
-\repeat \to{3} \do {
- \message{hello there!}
-}
-
-\newcount\tmpcount
+\newcount\tmpcount % used in some examples below
+1
+\repeat \for{i}
+ \by{2}
+ \do {%
+ \ifnum\i=13 \expandafter\breakrepeat \fi
+ \message{doing \number\i}%
+}%
+2
+\repeat \for{iii}
+ \to{8}
+ \do {}
+\message{After loop: \number\iii}%
+3
+\repeat \for{i}
+ \from{10}
+ \by{2}
+ \downto{0}
+ \do {\message{countdown \number\i}}
+4
+\repeat \for{x} \while{\ifnum\x<7}
+ \do {\message{going \number\x}}
+5
+\repeat \to{3} \do {\message{hello there!}}
+6
\repeat \for{j}
\until{\tmpcount\j \divide\tmpcount by 37 \noexpand\ifnum\tmpcount=1}
- \do {
- \message{testing \number\j}
-}
-
+ \do {\message{testing \number\j}}
+7
\repeat \for{i} \by{2} \to{10} \do
- {\repeat \for{j} \from{\i} \by{3} \to{18} \do
- {\message{(\number\i.\number\j)}
- }}
+ {\repeat \for{j} \from{\i} \by{3} \to{18}
+ \do {\message{(\number\i.\number\j)}}
+ }
+8
+
+1
+2
+3
+4
+5
+6
+7
+8
% infinite loop
%\repeat \do {}