Distribute stamp-html.in so that the HTML files don't get recreated
[become] / manual / syntax.sty
1 %%
2 %% This is file `syntax.sty',
3 %% generated with the docstrip utility.
4 %%
5 %% The original source files were:
6 %%
7 %% syntax.dtx (with options: `package')
8 %% doafter.dtx (with options: `macro')
9 %%
10 %% IMPORTANT NOTICE
11 %%
12 %% syntax package -- typesetting syntax descriptions
13 %% Copyright (c) 1996 Mark Wooding
14 %%
15 %% This program is free software; you can redistribute it and/or modify
16 %% it under the terms of the GNU General Public License as published by
17 %% the Free Software Foundation; either version 2 of the License, or
18 %% (at your option) any later version.
19 %%
20 %% This program is distributed in the hope that it will be useful,
21 %% but WITHOUT ANY WARRANTY; without even the implied warranty of
22 %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 %% GNU General Public License for more details.
24 %%
25 %% You should have received a copy of the GNU General Public License
26 %% along with this program; if not, write to the Free Software
27 %% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
28 %%
29 \NeedsTeXFormat{LaTeX2e}
30 \ProvidesPackage{syntax}
31 [1996/05/17 1.9 Syntax typesetting (MDW)]
32 %% \CharacterTable
33 %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
34 %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
35 %% Digits \0\1\2\3\4\5\6\7\8\9
36 %% Exclamation \! Double quote \" Hash (number) \#
37 %% Dollar \$ Percent \% Ampersand \&
38 %% Acute accent \' Left paren \( Right paren \)
39 %% Asterisk \* Plus \+ Comma \,
40 %% Minus \- Point \. Solidus \/
41 %% Colon \: Semicolon \; Less than \<
42 %% Equals \= Greater than \> Question mark \?
43 %% Commercial at \@ Left bracket \[ Backslash \\
44 %% Right bracket \] Circumflex \^ Underscore \_
45 %% Grave accent \` Left brace \{ Vertical bar \|
46 %% Right brace \} Tilde \~}
47 %%
48 \DeclareOption{rounded}{\sd@roundtrue}
49 \DeclareOption{square}{\sd@roundfalse}
50 \DeclareOption{nounderscore}{\@uscorefalse}
51 \newif\ifsd@round
52 \newif\if@uscore\@uscoretrue
53 \ExecuteOptions{square}
54 \ProcessOptions
55 \def\addspecial#1{%
56 \remspecial{#1}%
57 \expandafter\def\expandafter\dospecials\expandafter{\dospecials\do#1}%
58 \expandafter\def\expandafter\@santize\expandafter{%
59 \@sanitize\@makeother#1}%
60 }
61 \def\remspecial#1{%
62 \def\do##1{\ifnum`#1=`##1 \else\noexpand\do\noexpand##1\fi}%
63 \edef\dospecials{\dospecials}%
64 \def\@makeother##1{\ifnum`#1=`##1 \else%
65 \noexpand\@makeother\noexpand##1\fi}%
66 \edef\@sanitize{\@sanitize}%
67 \def\@makeother##1{\catcode`##112}%
68 }
69 \def\underscore{%
70 \leavevmode%
71 \kern.06em%
72 \vbox{%
73 \hrule\@width.6em\@depth.4ex\@height-.34ex%
74 }%
75 \ifdim\fontdimen\@ne\font=\z@%
76 \kern.06em%
77 \fi%
78 }
79 \let\usc@builtindischyphen\-
80 \def\@uscore.{%
81 \ifmmode%
82 \expandafter\@firstoftwo%
83 \else%
84 \expandafter\@secondoftwo%
85 \fi%
86 \sb%
87 {\textunderscore\@ifnextchar_{}{\usc@builtindischyphen}}%
88 }
89 \if@uscore
90 \AtBeginDocument{%
91 \catcode`\_\active%
92 \begingroup%
93 \lccode`\~`\_%
94 \lowercase{\endgroup\def~{\protect\@uscore.}}%
95 }
96 \fi
97 \expandafter\let\csname?\string\textunderscore\endcsname\underscore
98 \def\shortverb#1{%
99 \@ifundefined{cc@\string#1}{%
100 \addspecial#1%
101 \begingroup%
102 \lccode`\~`#1%
103 \lowercase{%
104 \endgroup%
105 \expandafter\let\csname mn@\string#1\endcsname~%
106 \expandafter\edef\csname cc@\string#1\endcsname{%
107 \catcode`\noexpand#1\the\catcode`#1%
108 \let\noexpand~\expandafter\noexpand%
109 \csname mn@\string#1\endcsname%
110 \noexpand\remspecial\noexpand#1%
111 \let\csname cc@\string#1\endcsname\relax%
112 }%
113 \def~{\verb~\syn@ttspace}%
114 }%
115 \catcode`#1\active%
116 }{%
117 \PackageWarning{syntax}{Character `\expandafter\@gobble\string#1'
118 is already a verbatim\MessageBreak
119 delimiter}%
120 }%
121 }
122 \def\unverb#1{%
123 \@ifundefined{cc@\string#1}{%
124 \PackageWarning{syntax}{Character `\expandafter\@gobble\string#1'
125 is not a verbatim\MessageBreak
126 delimiter}%
127 }{%
128 \csname cc@\string#1\endcsname%
129 }%
130 }
131 \newcommand{\syntleft}{$\langle$\normalfont\itshape}
132 \newcommand{\syntright}{$\rangle$}
133 \newcommand{\ulitleft}{\normalfont\ttfamily\syn@ttspace\frenchspacing}
134 \newcommand{\ulitright}{}
135 \newcommand{\litleft}{`\bgroup\ulitleft}
136 \newcommand{\litright}{\ulitright\egroup'}
137 \def\synt#1{\mbox{\syntleft{#1\/}\syntright}}
138 \def\lit{\@ifstar{\lit@i\ulitleft\ulitright}{\lit@i\litleft\litright}}
139 \def\lit@i#1#2#3{\mbox{#1{#3\/}#2}}
140 \def\syn@ttspace@{\spaceskip.35em\@plus.2em\@minus.15em\relax}
141 \def\ttthinspace{\let\syn@ttspace\syn@ttspace@}
142 \def\ttthickspace{\let\syn@ttspace\@empty}
143 \ttthinspace
144 \def\readupto#1#2#3{%
145 \bgroup%
146 \verb@eol@error%
147 \let\do\@makeother\dospecials%
148 #2%
149 \catcode`#1\active%
150 \lccode`\~`#1%
151 \gdef\verb@balance@group{\verb@egroup%
152 \@latex@error{\noexpand\verb illegal in command argument}\@ehc}%
153 \def\@vhook{\verb@egroup#3}%
154 \aftergroup\verb@balance@group%
155 \lowercase{\let~\@vhook}%
156 }
157 \def\syn@assist#1#2#3#4#5{%
158 \mbox\bgroup%
159 \chardef\\`\\%
160 \chardef\>`\>%
161 \chardef\'`\'%
162 \chardef\"`\"%
163 \chardef\ `\ %
164 \def\ch##1{\char`##1}%
165 \def\act##1{%
166 \catcode`##1\active%
167 \begingroup%
168 \lccode`\~`##1%
169 \lowercase{\endgroup\def~}%
170 }%
171 #1%
172 \begingroup%
173 \readupto#3{%
174 \catcode`\\0%
175 \catcode`\ 10%
176 #2%
177 }{%
178 \/\endgroup#4\egroup#5%
179 }%
180 }
181 \begingroup
182 \catcode`\<\active
183 \catcode`\|\active
184 \catcode`\"\active
185 \catcode`\`\active
186 \gdef\syn@shorts#1#2{%
187 \def<{%
188 #1%
189 \syn@assist%
190 \syntleft%
191 {\act_{\@foundunderscore}}%
192 >%
193 \syntright%
194 {#2}%
195 }%
196 \def`{%
197 #1%
198 \syn@assist%
199 \litleft%
200 \relax%
201 '%
202 \litright%
203 {#2}%
204 }%
205 \def"{%
206 #1%
207 \syn@assist%
208 \ulitleft%
209 \relax%
210 "%
211 \ulitright%
212 {#2}%
213 }%
214 \def|{\textbar}%
215 }
216 \endgroup
217 \def\syntaxShortcuts#1#2{%
218 \syn@shorts{#1}{#2}%
219 \addspecial\`%
220 \addspecial\<%
221 \addspecial\|%
222 \addspecial\"%
223 \catcode`\|\active%
224 \catcode`\<\active%
225 \catcode`\"\active%
226 \catcode`\`\active%
227 }
228 \def\synshorts{\syntaxShortcuts\relax\relax}
229 \def\synshortsoff{%
230 \catcode`\|12%
231 \catcode`\<12%
232 \catcode`\"12%
233 \catcode`\`12%
234 }
235 \def\syntax#{\bgroup\syntaxShortcuts\relax\relax\let\@let@token}
236 \newskip\grammarparsep
237 \grammarparsep8\p@\@plus\p@\@minus\p@
238 \newdimen\grammarindent
239 \grammarindent2em
240 \newcommand{\grammarlabel}[2]{%
241 \synt{#1} \hfill#2%
242 }
243 \def\gr@implitem<#1> #2 {%
244 \sbox\z@{\hskip\labelsep\grammarlabel{#1}{#2}}%
245 \strut\@@par%
246 \vskip-\parskip%
247 \vskip-\baselineskip%
248 \hrule\@height\z@\@depth\z@\relax%
249 \item[\unhbox\z@]%
250 \catcode`\<\active%
251 }
252 \let\gr@leftsq\[
253 \let\gr@rightsq\]
254 \def\[{\gr@leftsq}
255 \def\]{\gr@rightsq}
256 \newenvironment{grammar}{%
257 \list{}{%
258 \labelwidth\grammarindent%
259 \leftmargin\grammarindent%
260 \advance\grammarindent\labelsep
261 \itemindent\z@%
262 \listparindent\z@%
263 \parsep\grammarparsep%
264 }%
265 \let\\\@normalcr
266 \syntaxShortcuts\relax\relax%
267 \def\alt{\\\llap{\textbar\quad}}%
268 \def\gr@setpar{%
269 \def\par{%
270 \parshape\@ne\@totalleftmargin\linewidth%
271 \@@par%
272 \catcode`\<12%
273 \everypar{%
274 \everypar{}%
275 \catcode`\<\active%
276 \gr@implitem%
277 }%
278 }%
279 }%
280 \gr@setpar%
281 \par%
282 \def\gr@endsyntdiag]{\end{syntdiag}\gr@setpar\par}%
283 \def\[{\@ifnextchar[{\begin{syntdiag}\@gobble}\gr@leftsq}%
284 \def\]{\@ifnextchar]\gr@endsyntdiag\gr@rightsq}%
285 }{%
286 \@newlistfalse%
287 \everypar{}%
288 \endlist%
289 }
290 \newskip\sdstartspace
291 \newskip\sdendspace
292 \newskip\sdmidskip
293 \newskip\sdtokskip
294 \newskip\sdfinalskip
295 \newdimen\sdrulewidth
296 \newdimen\sdcirclediam
297 \newdimen\sdindent
298 \dimendef\sd@lower\z@
299 \dimendef\sd@upper\tw@
300 \dimendef\sd@mid4
301 \dimendef\sd@topcirc6
302 \dimendef\sd@botcirc8
303 \def\sd@setsize{%
304 \sd@mid\ht\strutbox%
305 \advance\sd@mid-\dp\strutbox%
306 \sd@mid.5\sd@mid%
307 \sd@upper\sdrulewidth%
308 \advance\sd@upper\sd@mid%
309 \sd@lower\sdrulewidth%
310 \advance\sd@lower-\sd@mid%
311 \sd@topcirc-.5\sdcirclediam%
312 \advance\sd@topcirc\sd@mid%
313 \sd@botcirc-.5\sdcirclediam%
314 \advance\sd@botcirc-\sd@mid%
315 }
316 \newcommand{\sdsize}{%
317 \small%
318 }
319 \newcommand{\sdlengths}{%
320 \setlength{\sdstartspace}{1em minus 10pt}%
321 \setlength{\sdendspace}{1em minus 10pt}%
322 \setlength{\sdmidskip}{0.5em plus 0.0001fil}%
323 \setlength{\sdtokskip}{0.25em plus 0.0001fil}%
324 \setlength{\sdfinalskip}{0.5em plus 10000fil}%
325 \setlength{\sdrulewidth}{0.2pt}%
326 \setlength{\sdcirclediam}{8pt}%
327 \setlength{\sdindent}{0pt}%
328 }
329 \newif\ifsd@base
330 \newif\ifsd@top
331 \newif\ifsd@toplayer
332 \newif\ifsd@backwards
333 \def\sd@err{\PackageError{syntax}}
334 \def\sd@arrow{%
335 \ht\tw@\z@%
336 \dp\tw@\z@%
337 \raise\sd@mid\box\tw@%
338 \egroup%
339 }
340 \def\sd@rightarr{%
341 \bgroup%
342 \setbox\tw@\hbox{\kern-6\p@\@linefnt\char'55}%
343 \sd@arrow%
344 }
345 \def\sd@leftarr{%
346 \bgroup%
347 \raise\sd@mid\hbox{\@linefnt\char'33\kern-6\p@}%
348 \sd@arrow%
349 }
350 \def\sd@uparr{%
351 \bgroup%
352 \setbox\tw@\hb@xt@\z@{\kern-\sdrulewidth\@linefnt\char'66\hss}%
353 \setbox\tw@\hbox{\lower10\p@\box\tw@}%
354 \sd@arrow%
355 }
356 \def\sd@downarr{%
357 \bgroup%
358 \setbox\tw@\hb@xt@\z@{\kern-\sdrulewidth\@linefnt\char'77\hss}%
359 \sd@arrow%
360 }
361 \def\sd@circ#1{%
362 \@getcirc\sdcirclediam%
363 \advance\@tempcnta#1%
364 \setbox\tw@\hbox{\lower\sdrulewidth%
365 \hbox{\@circlefnt\char\@tempcnta}}%
366 \wd\tw@\z@%
367 \leavevmode%
368 }
369 \def\sd@tlcirc{{%
370 \sd@circ3%
371 \ht\tw@\sdrulewidth%
372 \dp\tw@.5\sdcirclediam%
373 \kern-\tw@\sdrulewidth%
374 \raise\sd@mid\box\tw@%
375 \kern.5\sdcirclediam%
376 }}
377 \def\sd@trcirc{{%
378 \sd@circ0%
379 \ht\tw@\sdrulewidth%
380 \dp\tw@.5\sdcirclediam%
381 \kern.5\sdcirclediam%
382 \raise\sd@mid\box\tw@%
383 }}
384 \def\sd@blcirc{{%
385 \sd@circ2%
386 \ht\tw@.5\sdcirclediam%
387 \dp\tw@\sdrulewidth%
388 \kern-\tw@\sdrulewidth%
389 \raise\sd@mid\box\tw@%
390 \kern.5\sdcirclediam%
391 }}
392 \def\sd@brcirc{{%
393 \sd@circ1%
394 \ht\tw@.5\sdcirclediam%
395 \dp\tw@\sdrulewidth%
396 \kern.5\sdcirclediam%
397 \raise\sd@mid\box\tw@%
398 }}
399 \def\sd@llc#1{%
400 \hb@xt@.5\sdcirclediam{%
401 \sd@rule\hskip.5\sdcirclediam%
402 \hss%
403 #1%
404 }%
405 }
406 \def\sd@rlc#1{%
407 \hb@xt@.5\sdcirclediam{%
408 #1%
409 \hss%
410 \sd@rule\hskip.5\sdcirclediam%
411 }%
412 }
413 \def\sd@rule{\leaders\hrule\@height\sd@upper\@depth\sd@lower}
414 \def\sd@gap#1{%
415 \ifsd@base%
416 \skip@#1%
417 \divide\skip\z@\tw@%
418 \nobreak\sd@rule\hskip\skip@%
419 \discretionary{%
420 \sd@qarrow{->}%
421 }{%
422 \hbox{%
423 \sd@qarrow{>-}%
424 \sd@rule\hskip\sdstartspace%
425 \sd@rule\hskip3.5\p@%
426 }%
427 }{%
428 }%
429 \nobreak\sd@rule\hskip\skip@%
430 \else%
431 \sd@rule\hskip#1%
432 \fi%
433 }
434 \def\syntdiag{%
435 \syntaxShortcuts\sd@tok@i\sd@tok@ii%
436 \@ifnextchar[\syntdiag@i{\syntdiag@i[]}%
437 }
438 \def\syntdiag@i[#1]{%
439 \sdsize\sdlengths%
440 #1%
441 \sd@setsize%
442 \list{}{%
443 \leftmargin\sdindent%
444 \rightmargin\leftmargin%
445 \labelsep\z@%
446 \labelwidth\z@%
447 }%
448 \item[]%
449 \parfillskip\z@%
450 \noindent%
451 \sd@qarrow{>>-}%
452 \nobreak\sd@rule\hskip\sdstartspace%
453 \sd@basetrue%
454 \sloppy%
455 \interlinepenalty100%
456 \hyphenpenalty0%
457 \catcode`\ 9%
458 \catcode`\^^M9%
459 \def\gr@leftsq{\begin{stack}\\}%
460 \def\gr@rightsq{\end{stack}}%
461 \def\({\begin{stack}}%
462 \def\){\end{stack}}%
463 \def\<{\begin{rep}}%
464 \def\>{\end{rep}}%
465 \let\\\sd@newline%
466 \ignorespaces%
467 }
468 \def\endsyntdiag{%
469 \unskip%
470 \nobreak\sd@rule\hskip\sdmidskip%
471 \sd@rule\hskip\sdfinalskip%
472 \sd@qarrow{-><}%
473 \endlist%
474 }
475 \@namedef{syntdiag*}{%
476 \syntaxShortcuts\sd@tok@i\sd@tok@ii%
477 \@ifnextchar[\syntdiag@s@i{\syntdiag@s@i[]}%
478 }
479 \def\syntdiag@s@i[#1]{%
480 \@ifnextchar[{\syntdiag@s@ii{#1}}{\syntdiag@s@iii{#1}{\hbox}}%
481 }
482 \def\syntdiag@s@ii#1[#2]{\syntdiag@s@iii{#1}{\hb@xt@#2}}
483 \def\syntdiag@s@iii#1#2{%
484 \leavevmode%
485 #2\bgroup%
486 \let\@@left\left%
487 \let\@@right\right%
488 \def\left##1{\def\sd@startarr{##1}}%
489 \def\right##1{\def\sd@endarr{##1}}%
490 \left{>-}\right{->}%
491 \sdsize\sdlengths%
492 #1%
493 \sd@setsize%
494 \let\left\@@left%
495 \let\right\@@right%
496 \sd@qarrow\sd@startarr%
497 \sd@rule\hskip\sdmidskip%
498 \sd@basefalse%
499 \catcode`\ 9%
500 \catcode`\^^M9%
501 \ignorespaces%
502 }
503 \@namedef{endsyntdiag*}{%
504 \unskip%
505 \sd@rule\hskip\sdmidskip%
506 \sd@rule\hskip\sdfinalskip%
507 \sd@qarrow\sd@endarr%
508 \egroup%
509 }
510 \def\sd@qarrow#1{%
511 \begingroup%
512 \lccode`\~=`\<\lowercase{\def~{<}}%
513 \hbox{\csname sd@arr@#1\endcsname}%
514 \endgroup%
515 }
516 \@namedef{sd@arr@>>-}{\sd@rightarr\kern-.5\p@\sd@rightarr\kern-\p@}
517 \@namedef{sd@arr@>-}{\sd@rightarr\kern-\p@}
518 \@namedef{sd@arr@->}{\sd@rightarr}
519 \@namedef{sd@arr@-><}{\sd@rightarr\kern-\p@\sd@leftarr}
520 \@namedef{sd@arr@...}{$\cdots$}
521 \@namedef{sd@arr@-}{}
522 \def\sd@newline{\@ifstar{\vadjust{\penalty\@M}\sd@nl@i}\sd@nl@i}
523 \def\sd@nl@i{\@ifnextchar[\sd@nl@ii\sd@nl@iii}
524 \def\sd@nl@ii[#1]{\vspace{#1}\sd@nl@iii}
525 \def\sd@nl@iii{%
526 \nobreak\sd@rule\hskip\sdmidskip%
527 \sd@rule\hskip\sdfinalskip%
528 \kern-3\p@%
529 \sd@rightarr%
530 \newline%
531 \sd@rightarr%
532 \nobreak\sd@rule\hskip\sdstartspace%
533 \sd@rule\hskip3.5\p@%
534 }
535 \def\sdbox#1{%
536 \@tempskipa#1\relax%
537 \sd@gap\@tempskipa%
538 \setbox\z@\hbox\bgroup%
539 \begingroup%
540 \catcode`\ 10%
541 \catcode`\^^M5%
542 \synshortsoff%
543 }
544 \def\endsdbox{%
545 \endgroup%
546 \egroup%
547 \@tempdima\ht\z@%
548 \advance\@tempdima-\dp\z@%
549 \advance\@tempdima-\tw@\sd@mid%
550 \lower.5\@tempdima\box\z@%
551 \sd@gap\@tempskipa%
552 }
553 \def\sd@tok@i{%
554 \sdbox\sdtokskip%
555 \strut%
556 \space%
557 }
558 \def\sd@tok@ii{%
559 \space%
560 \endsdbox%
561 }
562 \def\tok#{%
563 \sdbox\sdtokskip%
564 \strut%
565 \enspace%
566 \syntaxShortcuts\relax\relax%
567 \doafter\sd@tok%
568 }
569 \def\sd@tok{%
570 \enspace%
571 \endsdbox%
572 }
573 \newcommand\stack[1][t]{%
574 \sd@gap\sdmidskip%
575 \begingroup\sd@basefalse%
576 \sd@toplayertrue%
577 \let\\\sd@stackcr%
578 \if#1t%
579 \let\@tempa\vtop%
580 \sd@toptrue%
581 \ifsd@round\llap{\sd@trcirc\kern\tw@\sdrulewidth}\fi%
582 \else\if#1b%
583 \let\@tempa\vbox%
584 \sd@topfalse%
585 \ifsd@round\llap{\sd@brcirc\kern\tw@\sdrulewidth}\fi%
586 \else%
587 \sd@err{Bad position argument passed to stack}%
588 {The positioning argument must be one of `t' or `b'. I%
589 have^^Jassumed you meant to type `t'.}%
590 \let\@tempa\vtop%
591 \fi\fi%
592 \@tempa\bgroup%
593 \offinterlineskip%
594 \ialign\bgroup%
595 ##\cr%
596 \setbox\z@\hbox\bgroup%
597 \strut%
598 }
599 \def\endstack{%
600 \egroup%
601 \ifsd@toplayer%
602 \sd@dostack\sd@upper\sd@lower\relax\relax%
603 \else%
604 \ifsd@round%
605 \ifsd@top%
606 \sd@dostack{\ht\z@}\sd@botcirc\sd@blcirc\sd@brcirc%
607 \else%
608 \sd@dostack{\ht\z@}\sd@botcirc\relax\relax%
609 \fi%
610 \else%
611 \sd@dostack{\ht\z@}\sd@lower\relax\relax%
612 \fi%
613 \fi%
614 \egroup%
615 \egroup%
616 \ifsd@round%
617 \ifsd@top
618 \rlap{\kern\tw@\sdrulewidth\sd@tlcirc}%
619 \else%
620 \rlap{\kern\tw@\sdrulewidth\sd@blcirc}%
621 \fi%
622 \fi%
623 \endgroup\sd@gap\sdmidskip%
624 }
625 \def\sd@stackcr{%
626 \egroup%
627 \ifsd@toplayer%
628 \ifsd@round%
629 \ifsd@top%
630 \sd@dostack\sd@topcirc{\dp\z@}\relax\relax%
631 \else%
632 \sd@dostack\sd@topcirc{\dp\z@}\sd@tlcirc\sd@trcirc%
633 \fi%
634 \else%
635 \sd@dostack\sd@upper{\dp\z@}\relax\relax%
636 \fi%
637 \else%
638 \ifsd@round%
639 \ifsd@top%
640 \sd@dostack{\ht\z@}{\dp\z@}\sd@blcirc\sd@brcirc%
641 \else%
642 \sd@dostack{\ht\z@}{\dp\z@}\sd@tlcirc\sd@trcirc%
643 \fi%
644 \else%
645 \sd@dostack{\ht\z@}{\dp\z@}\relax\relax%
646 \fi%
647 \fi%
648 \sd@toplayerfalse%
649 \setbox\z@\hbox\bgroup%
650 \strut%
651 }
652 \def\sd@dostack#1#2#3#4{%
653 \@tempdima#1%
654 \@tempdimb#2%
655 \kern-\tw@\sdrulewidth%
656 \vrule\@height\@tempdima\@depth\@tempdimb\@width\tw@\sdrulewidth%
657 #3%
658 \sd@rule\hfill%
659 \sd@gap\sdtokskip%
660 \unhbox\z@%
661 \sd@gap\sdtokskip%
662 \sd@rule\hfill%
663 #4%
664 \vrule\@height\@tempdima\@depth\@tempdimb\@width\tw@\sdrulewidth%
665 \kern-\tw@\sdrulewidth%
666 \cr%
667 }
668 \newcommand\rep[1][t]{%
669 \sd@gap\sdmidskip%
670 \begingroup\sd@basefalse%
671 \ifsd@backwards\sd@backwardsfalse\else\sd@backwardstrue\fi%
672 \let\\\sd@loop%
673 \if#1t%
674 \let\@tempa\vbox%
675 \sd@toptrue%
676 \else\if#1b%
677 \let\@tempa\vtop%
678 \sd@topfalse%
679 \else%
680 \sd@err{Bad position argument passed to loop}%
681 {The positioning argument must be `t' or `b'. I have^^J%
682 assumed you meant to type `t'.}%
683 \let\@tempa\vbox%
684 \sd@toptrue%
685 \fi\fi%
686 \@tempa\bgroup%
687 \setbox\tw@\copy\strutbox%
688 \setbox\z@\hbox\bgroup\strut%
689 }
690 \def\endrep{%
691 \egroup%
692 \ifsd@top%
693 \ifsd@round%
694 \sd@doloop\tw@\z@\relax\relax%
695 \sd@tlcirc\sd@trcirc{\sd@rlc\sd@blcirc}{\sd@llc\sd@brcirc}%
696 \else%
697 \sd@doloop\tw@\z@\relax\sd@downarr\relax\relax\relax\relax%
698 \fi%
699 \else%
700 \ifsd@round%
701 \sd@doloop\z@\tw@\relax\relax%
702 {\sd@rlc\sd@tlcirc}{\sd@llc\sd@trcirc}\sd@blcirc\sd@brcirc%
703 \else%
704 \sd@doloop\z@\tw@\sd@uparr\relax\relax\relax\relax\relax%
705 \fi%
706 \fi%
707 \egroup%
708 \endgroup\sd@gap\sdmidskip%
709 }
710 \def\sd@loop{%
711 \egroup%
712 \def\\{\sd@err{Too many \string\\\space commands in loop}\@ehc}%
713 \setbox\tw@\hbox\bgroup\strut%
714 }
715 \def\sd@doloop#1#2#3#4#5#6#7#8{%
716 \@tempdima\dp#1\relax%
717 \@tempdimb\ht#2\relax%
718 \offinterlineskip%
719 \ialign{%
720 ##\cr%
721 \ifsd@round%
722 \sd@doloop@i#1#3\sd@topcirc\@tempdima{#5}{#6}%
723 \sd@doloop@i#2#4\@tempdimb\sd@botcirc{#7}{#8}%
724 \else%
725 \sd@doloop@i#1#3\sd@upper\@tempdima{#5}{#6}%
726 \sd@doloop@i#2#4\@tempdimb\sd@lower{#7}{#8}%
727 \fi%
728 }%
729 }
730 \def\sd@doloop@i#1#2#3#4#5#6{%
731 \ifsd@backwards#2\fi%
732 \kern-\tw@\sdrulewidth%
733 \vrule\@height#3\@depth#4\@width\tw@\sdrulewidth%
734 #5%
735 \sd@rule\hfill%
736 \sd@gap\sdtokskip%
737 \unhbox#1%
738 \sd@gap\sdtokskip%
739 \sd@rule\hfill%
740 #6%
741 \vrule\@height#3\@depth#4\@width\tw@\sdrulewidth%
742 \ifsd@backwards\else#2\fi%
743 \kern-\tw@\sdrulewidth%
744 \cr%
745 }
746 %%
747 %% doafter package -- insert a token really after a group
748 %% Copyright (c) 1996 Peter Schmitt and Mark Wooding
749 %%
750 \let\@@aftergroup\aftergroup
751 \def\doafter#1{%
752 \def\@tempa{\@@aftergroup#1}%
753 \afterassignment\doafter@i\let\@let@token%
754 }
755 \def\doafter@i{%
756 \@let@token%
757 \let\aftergroup\@my@aftergroup%
758 \@@aftergroup\@prepare@after\@tempa%
759 }
760 \def\ag@cnt@local{0 }
761 \let\ag@cnt@global\ag@cnt@local
762 \def\@my@aftergroup{%
763 \begingroup%
764 \count@\ag@cnt@local%
765 \advance\count@\@ne%
766 \xdef\ag@cnt@global{\the\count@\space}%
767 \endgroup%
768 \let\ag@cnt@local\ag@cnt@global%
769 \@@aftergroup\@after@token\@@aftergroup%
770 }
771 \def\@after@token{%
772 \@start@after@group%
773 \@after@token%
774 }
775 \def\@start@after@group{%
776 \begingroup%
777 \count@\ag@cnt@global%
778 \clubpenalty\ag@cnt@local%
779 \let\@after@token\@after@token@i%
780 }
781 \def\@after@token@i{%
782 \advance\count@\m@ne%
783 \ifnum\count@=\clubpenalty%
784 \global\let\ag@cnt@global\ag@cnt@local%
785 \expandafter\@after@aftertoken\expandafter\@after@all%
786 \else%
787 \expandafter\@@aftergroup%
788 \fi%
789 }
790 \let\@after@all\endgroup
791 \def\@prepare@after{%
792 \ifx\ag@cnt@local\ag@cnt@global\else%
793 \expandafter\@prepare@after@i%
794 \fi%
795 }
796 \def\@prepare@after@i#1{%
797 \@start@after@group%
798 \def\@after@all{\@@aftergroup#1\endgroup}%
799 }
800 \def\@after@aftertoken#1{%
801 \let\bgroup\relax\let\egroup\relax%
802 \toks@{#1}%
803 \futurelet\@let@token\@after@aftertoken@i%
804 }
805 \def\@after@aftertoken@i{%
806 \ifcat\noexpand\@let@token{%
807 \@@aftergroup{%
808 \else\ifcat\noexpand\@let@token}%
809 \@@aftergroup}%
810 \else%
811 \def\@tempa##1{\@@aftergroup##1\the\toks@}%
812 \expandafter\expandafter\expandafter\@tempa%
813 \fi\fi%
814 }
815 \endinput
816 %%
817 %% End of file `syntax.sty'.