123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817 |
- %%
- %% This is file `syntax.sty',
- %% generated with the docstrip utility.
- %%
- %% The original source files were:
- %%
- %% syntax.dtx (with options: `package')
- %% doafter.dtx (with options: `macro')
- %%
- %% IMPORTANT NOTICE
- %%
- %% syntax package -- typesetting syntax descriptions
- %% Copyright (c) 1996 Mark Wooding
- %%
- %% 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.
- %%
- %% You should have received a copy of the GNU General Public License
- %% along with this program; if not, write to the Free Software
- %% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- %%
- \NeedsTeXFormat{LaTeX2e}
- \ProvidesPackage{syntax}
- [1996/05/17 1.9 Syntax typesetting (MDW)]
- %% \CharacterTable
- %% {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
- %% 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
- %% Digits \0\1\2\3\4\5\6\7\8\9
- %% Exclamation \! Double quote \" Hash (number) \#
- %% Dollar \$ Percent \% Ampersand \&
- %% Acute accent \' Left paren \( Right paren \)
- %% Asterisk \* Plus \+ Comma \,
- %% Minus \- Point \. Solidus \/
- %% Colon \: Semicolon \; Less than \<
- %% Equals \= Greater than \> Question mark \?
- %% Commercial at \@ Left bracket \[ Backslash \\
- %% Right bracket \] Circumflex \^ Underscore \_
- %% Grave accent \` Left brace \{ Vertical bar \|
- %% Right brace \} Tilde \~}
- %%
- \DeclareOption{rounded}{\sd@roundtrue}
- \DeclareOption{square}{\sd@roundfalse}
- \DeclareOption{nounderscore}{\@uscorefalse}
- \newif\ifsd@round
- \newif\if@uscore\@uscoretrue
- \ExecuteOptions{square}
- \ProcessOptions
- \def\addspecial#1{%
- \remspecial{#1}%
- \expandafter\def\expandafter\dospecials\expandafter{\dospecials\do#1}%
- \expandafter\def\expandafter\@santize\expandafter{%
- \@sanitize\@makeother#1}%
- }
- \def\remspecial#1{%
- \def\do##1{\ifnum`#1=`##1 \else\noexpand\do\noexpand##1\fi}%
- \edef\dospecials{\dospecials}%
- \def\@makeother##1{\ifnum`#1=`##1 \else%
- \noexpand\@makeother\noexpand##1\fi}%
- \edef\@sanitize{\@sanitize}%
- \def\@makeother##1{\catcode`##112}%
- }
- \def\underscore{%
- \leavevmode%
- \kern.06em%
- \vbox{%
- \hrule\@width.6em\@depth.4ex\@height-.34ex%
- }%
- \ifdim\fontdimen\@ne\font=\z@%
- \kern.06em%
- \fi%
- }
- \let\usc@builtindischyphen\-
- \def\@uscore.{%
- \ifmmode%
- \expandafter\@firstoftwo%
- \else%
- \expandafter\@secondoftwo%
- \fi%
- \sb%
- {\textunderscore\@ifnextchar_{}{\usc@builtindischyphen}}%
- }
- \if@uscore
- \AtBeginDocument{%
- \catcode`\_\active%
- \begingroup%
- \lccode`\~`\_%
- \lowercase{\endgroup\def~{\protect\@uscore.}}%
- }
- \fi
- \expandafter\let\csname?\string\textunderscore\endcsname\underscore
- \def\shortverb#1{%
- \@ifundefined{cc@\string#1}{%
- \addspecial#1%
- \begingroup%
- \lccode`\~`#1%
- \lowercase{%
- \endgroup%
- \expandafter\let\csname mn@\string#1\endcsname~%
- \expandafter\edef\csname cc@\string#1\endcsname{%
- \catcode`\noexpand#1\the\catcode`#1%
- \let\noexpand~\expandafter\noexpand%
- \csname mn@\string#1\endcsname%
- \noexpand\remspecial\noexpand#1%
- \let\csname cc@\string#1\endcsname\relax%
- }%
- \def~{\verb~\syn@ttspace}%
- }%
- \catcode`#1\active%
- }{%
- \PackageWarning{syntax}{Character `\expandafter\@gobble\string#1'
- is already a verbatim\MessageBreak
- delimiter}%
- }%
- }
- \def\unverb#1{%
- \@ifundefined{cc@\string#1}{%
- \PackageWarning{syntax}{Character `\expandafter\@gobble\string#1'
- is not a verbatim\MessageBreak
- delimiter}%
- }{%
- \csname cc@\string#1\endcsname%
- }%
- }
- \newcommand{\syntleft}{$\langle$\normalfont\itshape}
- \newcommand{\syntright}{$\rangle$}
- \newcommand{\ulitleft}{\normalfont\ttfamily\syn@ttspace\frenchspacing}
- \newcommand{\ulitright}{}
- \newcommand{\litleft}{`\bgroup\ulitleft}
- \newcommand{\litright}{\ulitright\egroup'}
- \def\synt#1{\mbox{\syntleft{#1\/}\syntright}}
- \def\lit{\@ifstar{\lit@i\ulitleft\ulitright}{\lit@i\litleft\litright}}
- \def\lit@i#1#2#3{\mbox{#1{#3\/}#2}}
- \def\syn@ttspace@{\spaceskip.35em\@plus.2em\@minus.15em\relax}
- \def\ttthinspace{\let\syn@ttspace\syn@ttspace@}
- \def\ttthickspace{\let\syn@ttspace\@empty}
- \ttthinspace
- \def\readupto#1#2#3{%
- \bgroup%
- \verb@eol@error%
- \let\do\@makeother\dospecials%
- #2%
- \catcode`#1\active%
- \lccode`\~`#1%
- \gdef\verb@balance@group{\verb@egroup%
- \@latex@error{\noexpand\verb illegal in command argument}\@ehc}%
- \def\@vhook{\verb@egroup#3}%
- \aftergroup\verb@balance@group%
- \lowercase{\let~\@vhook}%
- }
- \def\syn@assist#1#2#3#4#5{%
- \mbox\bgroup%
- \chardef\\`\\%
- \chardef\>`\>%
- \chardef\'`\'%
- \chardef\"`\"%
- \chardef\ `\ %
- \def\ch##1{\char`##1}%
- \def\act##1{%
- \catcode`##1\active%
- \begingroup%
- \lccode`\~`##1%
- \lowercase{\endgroup\def~}%
- }%
- #1%
- \begingroup%
- \readupto#3{%
- \catcode`\\0%
- \catcode`\ 10%
- #2%
- }{%
- \/\endgroup#4\egroup#5%
- }%
- }
- \begingroup
- \catcode`\<\active
- \catcode`\|\active
- \catcode`\"\active
- \catcode`\`\active
- \gdef\syn@shorts#1#2{%
- \def<{%
- #1%
- \syn@assist%
- \syntleft%
- {\act_{\@foundunderscore}}%
- >%
- \syntright%
- {#2}%
- }%
- \def`{%
- #1%
- \syn@assist%
- \litleft%
- \relax%
- '%
- \litright%
- {#2}%
- }%
- \def"{%
- #1%
- \syn@assist%
- \ulitleft%
- \relax%
- "%
- \ulitright%
- {#2}%
- }%
- \def|{\textbar}%
- }
- \endgroup
- \def\syntaxShortcuts#1#2{%
- \syn@shorts{#1}{#2}%
- \addspecial\`%
- \addspecial\<%
- \addspecial\|%
- \addspecial\"%
- \catcode`\|\active%
- \catcode`\<\active%
- \catcode`\"\active%
- \catcode`\`\active%
- }
- \def\synshorts{\syntaxShortcuts\relax\relax}
- \def\synshortsoff{%
- \catcode`\|12%
- \catcode`\<12%
- \catcode`\"12%
- \catcode`\`12%
- }
- \def\syntax#{\bgroup\syntaxShortcuts\relax\relax\let\@let@token}
- \newskip\grammarparsep
- \grammarparsep8\p@\@plus\p@\@minus\p@
- \newdimen\grammarindent
- \grammarindent2em
- \newcommand{\grammarlabel}[2]{%
- \synt{#1} \hfill#2%
- }
- \def\gr@implitem<#1> #2 {%
- \sbox\z@{\hskip\labelsep\grammarlabel{#1}{#2}}%
- \strut\@@par%
- \vskip-\parskip%
- \vskip-\baselineskip%
- \hrule\@height\z@\@depth\z@\relax%
- \item[\unhbox\z@]%
- \catcode`\<\active%
- }
- \let\gr@leftsq\[
- \let\gr@rightsq\]
- \def\[{\gr@leftsq}
- \def\]{\gr@rightsq}
- \newenvironment{grammar}{%
- \list{}{%
- \labelwidth\grammarindent%
- \leftmargin\grammarindent%
- \advance\grammarindent\labelsep
- \itemindent\z@%
- \listparindent\z@%
- \parsep\grammarparsep%
- }%
- \let\\\@normalcr
- \syntaxShortcuts\relax\relax%
- \def\alt{\\\llap{\textbar\quad}}%
- \def\gr@setpar{%
- \def\par{%
- \parshape\@ne\@totalleftmargin\linewidth%
- \@@par%
- \catcode`\<12%
- \everypar{%
- \everypar{}%
- \catcode`\<\active%
- \gr@implitem%
- }%
- }%
- }%
- \gr@setpar%
- \par%
- \def\gr@endsyntdiag]{\end{syntdiag}\gr@setpar\par}%
- \def\[{\@ifnextchar[{\begin{syntdiag}\@gobble}\gr@leftsq}%
- \def\]{\@ifnextchar]\gr@endsyntdiag\gr@rightsq}%
- }{%
- \@newlistfalse%
- \everypar{}%
- \endlist%
- }
- \newskip\sdstartspace
- \newskip\sdendspace
- \newskip\sdmidskip
- \newskip\sdtokskip
- \newskip\sdfinalskip
- \newdimen\sdrulewidth
- \newdimen\sdcirclediam
- \newdimen\sdindent
- \dimendef\sd@lower\z@
- \dimendef\sd@upper\tw@
- \dimendef\sd@mid4
- \dimendef\sd@topcirc6
- \dimendef\sd@botcirc8
- \def\sd@setsize{%
- \sd@mid\ht\strutbox%
- \advance\sd@mid-\dp\strutbox%
- \[email protected]\sd@mid%
- \sd@upper\sdrulewidth%
- \advance\sd@upper\sd@mid%
- \sd@lower\sdrulewidth%
- \advance\sd@lower-\sd@mid%
- \[email protected]\sdcirclediam%
- \advance\sd@topcirc\sd@mid%
- \[email protected]\sdcirclediam%
- \advance\sd@botcirc-\sd@mid%
- }
- \newcommand{\sdsize}{%
- \small%
- }
- \newcommand{\sdlengths}{%
- \setlength{\sdstartspace}{1em minus 10pt}%
- \setlength{\sdendspace}{1em minus 10pt}%
- \setlength{\sdmidskip}{0.5em plus 0.0001fil}%
- \setlength{\sdtokskip}{0.25em plus 0.0001fil}%
- \setlength{\sdfinalskip}{0.5em plus 10000fil}%
- \setlength{\sdrulewidth}{0.2pt}%
- \setlength{\sdcirclediam}{8pt}%
- \setlength{\sdindent}{0pt}%
- }
- \newif\ifsd@base
- \newif\ifsd@top
- \newif\ifsd@toplayer
- \newif\ifsd@backwards
- \def\sd@err{\PackageError{syntax}}
- \def\sd@arrow{%
- \ht\tw@\z@%
- \dp\tw@\z@%
- \raise\sd@mid\box\tw@%
- \egroup%
- }
- \def\sd@rightarr{%
- \bgroup%
- \setbox\tw@\hbox{\kern-6\p@\@linefnt\char'55}%
- \sd@arrow%
- }
- \def\sd@leftarr{%
- \bgroup%
- \raise\sd@mid\hbox{\@linefnt\char'33\kern-6\p@}%
- \sd@arrow%
- }
- \def\sd@uparr{%
- \bgroup%
- \setbox\tw@\hb@xt@\z@{\kern-\sdrulewidth\@linefnt\char'66\hss}%
- \setbox\tw@\hbox{\lower10\p@\box\tw@}%
- \sd@arrow%
- }
- \def\sd@downarr{%
- \bgroup%
- \setbox\tw@\hb@xt@\z@{\kern-\sdrulewidth\@linefnt\char'77\hss}%
- \sd@arrow%
- }
- \def\sd@circ#1{%
- \@getcirc\sdcirclediam%
- \advance\@tempcnta#1%
- \setbox\tw@\hbox{\lower\sdrulewidth%
- \hbox{\@circlefnt\char\@tempcnta}}%
- \wd\tw@\z@%
- \leavevmode%
- }
- \def\sd@tlcirc{{%
- \sd@circ3%
- \ht\tw@\sdrulewidth%
- \dp\[email protected]\sdcirclediam%
- \kern-\tw@\sdrulewidth%
- \raise\sd@mid\box\tw@%
- \kern.5\sdcirclediam%
- }}
- \def\sd@trcirc{{%
- \sd@circ0%
- \ht\tw@\sdrulewidth%
- \dp\[email protected]\sdcirclediam%
- \kern.5\sdcirclediam%
- \raise\sd@mid\box\tw@%
- }}
- \def\sd@blcirc{{%
- \sd@circ2%
- \ht\[email protected]\sdcirclediam%
- \dp\tw@\sdrulewidth%
- \kern-\tw@\sdrulewidth%
- \raise\sd@mid\box\tw@%
- \kern.5\sdcirclediam%
- }}
- \def\sd@brcirc{{%
- \sd@circ1%
- \ht\[email protected]\sdcirclediam%
- \dp\tw@\sdrulewidth%
- \kern.5\sdcirclediam%
- \raise\sd@mid\box\tw@%
- }}
- \def\sd@llc#1{%
- \hb@[email protected]\sdcirclediam{%
- \sd@rule\hskip.5\sdcirclediam%
- \hss%
- #1%
- }%
- }
- \def\sd@rlc#1{%
- \hb@[email protected]\sdcirclediam{%
- #1%
- \hss%
- \sd@rule\hskip.5\sdcirclediam%
- }%
- }
- \def\sd@rule{\leaders\hrule\@height\sd@upper\@depth\sd@lower}
- \def\sd@gap#1{%
- \ifsd@base%
- \skip@#1%
- \divide\skip\z@\tw@%
- \nobreak\sd@rule\hskip\skip@%
- \discretionary{%
- \sd@qarrow{->}%
- }{%
- \hbox{%
- \sd@qarrow{>-}%
- \sd@rule\hskip\sdstartspace%
- \sd@rule\hskip3.5\p@%
- }%
- }{%
- }%
- \nobreak\sd@rule\hskip\skip@%
- \else%
- \sd@rule\hskip#1%
- \fi%
- }
- \def\syntdiag{%
- \syntaxShortcuts\sd@tok@i\sd@tok@ii%
- \@ifnextchar[\syntdiag@i{\syntdiag@i[]}%
- }
- \def\syntdiag@i[#1]{%
- \sdsize\sdlengths%
- #1%
- \sd@setsize%
- \list{}{%
- \leftmargin\sdindent%
- \rightmargin\leftmargin%
- \labelsep\z@%
- \labelwidth\z@%
- }%
- \item[]%
- \parfillskip\z@%
- \noindent%
- \sd@qarrow{>>-}%
- \nobreak\sd@rule\hskip\sdstartspace%
- \sd@basetrue%
- \sloppy%
- \interlinepenalty100%
- \hyphenpenalty0%
- \catcode`\ 9%
- \catcode`\^^M9%
- \def\gr@leftsq{\begin{stack}\\}%
- \def\gr@rightsq{\end{stack}}%
- \def\({\begin{stack}}%
- \def\){\end{stack}}%
- \def\<{\begin{rep}}%
- \def\>{\end{rep}}%
- \let\\\sd@newline%
- \ignorespaces%
- }
- \def\endsyntdiag{%
- \unskip%
- \nobreak\sd@rule\hskip\sdmidskip%
- \sd@rule\hskip\sdfinalskip%
- \sd@qarrow{-><}%
- \endlist%
- }
- \@namedef{syntdiag*}{%
- \syntaxShortcuts\sd@tok@i\sd@tok@ii%
- \@ifnextchar[\syntdiag@s@i{\syntdiag@s@i[]}%
- }
- \def\syntdiag@s@i[#1]{%
- \@ifnextchar[{\syntdiag@s@ii{#1}}{\syntdiag@s@iii{#1}{\hbox}}%
- }
- \def\syntdiag@s@ii#1[#2]{\syntdiag@s@iii{#1}{\hb@xt@#2}}
- \def\syntdiag@s@iii#1#2{%
- \leavevmode%
- #2\bgroup%
- \let\@@left\left%
- \let\@@right\right%
- \def\left##1{\def\sd@startarr{##1}}%
- \def\right##1{\def\sd@endarr{##1}}%
- \left{>-}\right{->}%
- \sdsize\sdlengths%
- #1%
- \sd@setsize%
- \let\left\@@left%
- \let\right\@@right%
- \sd@qarrow\sd@startarr%
- \sd@rule\hskip\sdmidskip%
- \sd@basefalse%
- \catcode`\ 9%
- \catcode`\^^M9%
- \ignorespaces%
- }
- \@namedef{endsyntdiag*}{%
- \unskip%
- \sd@rule\hskip\sdmidskip%
- \sd@rule\hskip\sdfinalskip%
- \sd@qarrow\sd@endarr%
- \egroup%
- }
- \def\sd@qarrow#1{%
- \begingroup%
- \lccode`\~=`\<\lowercase{\def~{<}}%
- \hbox{\csname sd@arr@#1\endcsname}%
- \endgroup%
- }
- \@namedef{sd@arr@>>-}{\sd@rightarr\kern-.5\p@\sd@rightarr\kern-\p@}
- \@namedef{sd@arr@>-}{\sd@rightarr\kern-\p@}
- \@namedef{sd@arr@->}{\sd@rightarr}
- \@namedef{sd@arr@-><}{\sd@rightarr\kern-\p@\sd@leftarr}
- \@namedef{sd@arr@...}{$\cdots$}
- \@namedef{sd@arr@-}{}
- \def\sd@newline{\@ifstar{\vadjust{\penalty\@M}\sd@nl@i}\sd@nl@i}
- \def\sd@nl@i{\@ifnextchar[\sd@nl@ii\sd@nl@iii}
- \def\sd@nl@ii[#1]{\vspace{#1}\sd@nl@iii}
- \def\sd@nl@iii{%
- \nobreak\sd@rule\hskip\sdmidskip%
- \sd@rule\hskip\sdfinalskip%
- \kern-3\p@%
- \sd@rightarr%
- \newline%
- \sd@rightarr%
- \nobreak\sd@rule\hskip\sdstartspace%
- \sd@rule\hskip3.5\p@%
- }
- \def\sdbox#1{%
- \@tempskipa#1\relax%
- \sd@gap\@tempskipa%
- \setbox\z@\hbox\bgroup%
- \begingroup%
- \catcode`\ 10%
- \catcode`\^^M5%
- \synshortsoff%
- }
- \def\endsdbox{%
- \endgroup%
- \egroup%
- \@tempdima\ht\z@%
- \advance\@tempdima-\dp\z@%
- \advance\@tempdima-\tw@\sd@mid%
- \lower.5\@tempdima\box\z@%
- \sd@gap\@tempskipa%
- }
- \def\sd@tok@i{%
- \sdbox\sdtokskip%
- \strut%
- \space%
- }
- \def\sd@tok@ii{%
- \space%
- \endsdbox%
- }
- \def\tok#{%
- \sdbox\sdtokskip%
- \strut%
- \enspace%
- \syntaxShortcuts\relax\relax%
- \doafter\sd@tok%
- }
- \def\sd@tok{%
- \enspace%
- \endsdbox%
- }
- \newcommand\stack[1][t]{%
- \sd@gap\sdmidskip%
- \begingroup\sd@basefalse%
- \sd@toplayertrue%
- \let\\\sd@stackcr%
- \if#1t%
- \let\@tempa\vtop%
- \sd@toptrue%
- \ifsd@round\llap{\sd@trcirc\kern\tw@\sdrulewidth}\fi%
- \else\if#1b%
- \let\@tempa\vbox%
- \sd@topfalse%
- \ifsd@round\llap{\sd@brcirc\kern\tw@\sdrulewidth}\fi%
- \else%
- \sd@err{Bad position argument passed to stack}%
- {The positioning argument must be one of `t' or `b'. I%
- have^^Jassumed you meant to type `t'.}%
- \let\@tempa\vtop%
- \fi\fi%
- \@tempa\bgroup%
- \offinterlineskip%
- \ialign\bgroup%
- ##\cr%
- \setbox\z@\hbox\bgroup%
- \strut%
- }
- \def\endstack{%
- \egroup%
- \ifsd@toplayer%
- \sd@dostack\sd@upper\sd@lower\relax\relax%
- \else%
- \ifsd@round%
- \ifsd@top%
- \sd@dostack{\ht\z@}\sd@botcirc\sd@blcirc\sd@brcirc%
- \else%
- \sd@dostack{\ht\z@}\sd@botcirc\relax\relax%
- \fi%
- \else%
- \sd@dostack{\ht\z@}\sd@lower\relax\relax%
- \fi%
- \fi%
- \egroup%
- \egroup%
- \ifsd@round%
- \ifsd@top
- \rlap{\kern\tw@\sdrulewidth\sd@tlcirc}%
- \else%
- \rlap{\kern\tw@\sdrulewidth\sd@blcirc}%
- \fi%
- \fi%
- \endgroup\sd@gap\sdmidskip%
- }
- \def\sd@stackcr{%
- \egroup%
- \ifsd@toplayer%
- \ifsd@round%
- \ifsd@top%
- \sd@dostack\sd@topcirc{\dp\z@}\relax\relax%
- \else%
- \sd@dostack\sd@topcirc{\dp\z@}\sd@tlcirc\sd@trcirc%
- \fi%
- \else%
- \sd@dostack\sd@upper{\dp\z@}\relax\relax%
- \fi%
- \else%
- \ifsd@round%
- \ifsd@top%
- \sd@dostack{\ht\z@}{\dp\z@}\sd@blcirc\sd@brcirc%
- \else%
- \sd@dostack{\ht\z@}{\dp\z@}\sd@tlcirc\sd@trcirc%
- \fi%
- \else%
- \sd@dostack{\ht\z@}{\dp\z@}\relax\relax%
- \fi%
- \fi%
- \sd@toplayerfalse%
- \setbox\z@\hbox\bgroup%
- \strut%
- }
- \def\sd@dostack#1#2#3#4{%
- \@tempdima#1%
- \@tempdimb#2%
- \kern-\tw@\sdrulewidth%
- \vrule\@height\@tempdima\@depth\@tempdimb\@width\tw@\sdrulewidth%
- #3%
- \sd@rule\hfill%
- \sd@gap\sdtokskip%
- \unhbox\z@%
- \sd@gap\sdtokskip%
- \sd@rule\hfill%
- #4%
- \vrule\@height\@tempdima\@depth\@tempdimb\@width\tw@\sdrulewidth%
- \kern-\tw@\sdrulewidth%
- \cr%
- }
- \newcommand\rep[1][t]{%
- \sd@gap\sdmidskip%
- \begingroup\sd@basefalse%
- \ifsd@backwards\sd@backwardsfalse\else\sd@backwardstrue\fi%
- \let\\\sd@loop%
- \if#1t%
- \let\@tempa\vbox%
- \sd@toptrue%
- \else\if#1b%
- \let\@tempa\vtop%
- \sd@topfalse%
- \else%
- \sd@err{Bad position argument passed to loop}%
- {The positioning argument must be `t' or `b'. I have^^J%
- assumed you meant to type `t'.}%
- \let\@tempa\vbox%
- \sd@toptrue%
- \fi\fi%
- \@tempa\bgroup%
- \setbox\tw@\copy\strutbox%
- \setbox\z@\hbox\bgroup\strut%
- }
- \def\endrep{%
- \egroup%
- \ifsd@top%
- \ifsd@round%
- \sd@doloop\tw@\z@\relax\relax%
- \sd@tlcirc\sd@trcirc{\sd@rlc\sd@blcirc}{\sd@llc\sd@brcirc}%
- \else%
- \sd@doloop\tw@\z@\relax\sd@downarr\relax\relax\relax\relax%
- \fi%
- \else%
- \ifsd@round%
- \sd@doloop\z@\tw@\relax\relax%
- {\sd@rlc\sd@tlcirc}{\sd@llc\sd@trcirc}\sd@blcirc\sd@brcirc%
- \else%
- \sd@doloop\z@\tw@\sd@uparr\relax\relax\relax\relax\relax%
- \fi%
- \fi%
- \egroup%
- \endgroup\sd@gap\sdmidskip%
- }
- \def\sd@loop{%
- \egroup%
- \def\\{\sd@err{Too many \string\\\space commands in loop}\@ehc}%
- \setbox\tw@\hbox\bgroup\strut%
- }
- \def\sd@doloop#1#2#3#4#5#6#7#8{%
- \@tempdima\dp#1\relax%
- \@tempdimb\ht#2\relax%
- \offinterlineskip%
- \ialign{%
- ##\cr%
- \ifsd@round%
- \sd@doloop@i#1#3\sd@topcirc\@tempdima{#5}{#6}%
- \sd@doloop@i#2#4\@tempdimb\sd@botcirc{#7}{#8}%
- \else%
- \sd@doloop@i#1#3\sd@upper\@tempdima{#5}{#6}%
- \sd@doloop@i#2#4\@tempdimb\sd@lower{#7}{#8}%
- \fi%
- }%
- }
- \def\sd@doloop@i#1#2#3#4#5#6{%
- \ifsd@backwards#2\fi%
- \kern-\tw@\sdrulewidth%
- \vrule\@height#3\@depth#4\@width\tw@\sdrulewidth%
- #5%
- \sd@rule\hfill%
- \sd@gap\sdtokskip%
- \unhbox#1%
- \sd@gap\sdtokskip%
- \sd@rule\hfill%
- #6%
- \vrule\@height#3\@depth#4\@width\tw@\sdrulewidth%
- \ifsd@backwards\else#2\fi%
- \kern-\tw@\sdrulewidth%
- \cr%
- }
- %%
- %% doafter package -- insert a token really after a group
- %% Copyright (c) 1996 Peter Schmitt and Mark Wooding
- %%
- \let\@@aftergroup\aftergroup
- \def\doafter#1{%
- \def\@tempa{\@@aftergroup#1}%
- \afterassignment\doafter@i\let\@let@token%
- }
- \def\doafter@i{%
- \@let@token%
- \let\aftergroup\@my@aftergroup%
- \@@aftergroup\@prepare@after\@tempa%
- }
- \def\ag@cnt@local{0 }
- \let\ag@cnt@global\ag@cnt@local
- \def\@my@aftergroup{%
- \begingroup%
- \count@\ag@cnt@local%
- \advance\count@\@ne%
- \xdef\ag@cnt@global{\the\count@\space}%
- \endgroup%
- \let\ag@cnt@local\ag@cnt@global%
- \@@aftergroup\@after@token\@@aftergroup%
- }
- \def\@after@token{%
- \@start@after@group%
- \@after@token%
- }
- \def\@start@after@group{%
- \begingroup%
- \count@\ag@cnt@global%
- \clubpenalty\ag@cnt@local%
- \let\@after@token\@after@token@i%
- }
- \def\@after@token@i{%
- \advance\count@\m@ne%
- \ifnum\count@=\clubpenalty%
- \global\let\ag@cnt@global\ag@cnt@local%
- \expandafter\@after@aftertoken\expandafter\@after@all%
- \else%
- \expandafter\@@aftergroup%
- \fi%
- }
- \let\@after@all\endgroup
- \def\@prepare@after{%
- \ifx\ag@cnt@local\ag@cnt@global\else%
- \expandafter\@prepare@after@i%
- \fi%
- }
- \def\@prepare@after@i#1{%
- \@start@after@group%
- \def\@after@all{\@@aftergroup#1\endgroup}%
- }
- \def\@after@aftertoken#1{%
- \let\bgroup\relax\let\egroup\relax%
- \toks@{#1}%
- \futurelet\@let@token\@after@aftertoken@i%
- }
- \def\@after@aftertoken@i{%
- \ifcat\noexpand\@let@token{%
- \@@aftergroup{%
- \else\ifcat\noexpand\@let@token}%
- \@@aftergroup}%
- \else%
- \def\@tempa##1{\@@aftergroup##1\the\toks@}%
- \expandafter\expandafter\expandafter\@tempa%
- \fi\fi%
- }
- \endinput
- %%
- %% End of file `syntax.sty'.
|