fpc/install/debian/syntax.sty
2000-08-15 03:52:57 +00:00

818 lines
19 KiB
TeX

%%
%% 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%
\sd@mid.5\sd@mid%
\sd@upper\sdrulewidth%
\advance\sd@upper\sd@mid%
\sd@lower\sdrulewidth%
\advance\sd@lower-\sd@mid%
\sd@topcirc-.5\sdcirclediam%
\advance\sd@topcirc\sd@mid%
\sd@botcirc-.5\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\tw@.5\sdcirclediam%
\kern-\tw@\sdrulewidth%
\raise\sd@mid\box\tw@%
\kern.5\sdcirclediam%
}}
\def\sd@trcirc{{%
\sd@circ0%
\ht\tw@\sdrulewidth%
\dp\tw@.5\sdcirclediam%
\kern.5\sdcirclediam%
\raise\sd@mid\box\tw@%
}}
\def\sd@blcirc{{%
\sd@circ2%
\ht\tw@.5\sdcirclediam%
\dp\tw@\sdrulewidth%
\kern-\tw@\sdrulewidth%
\raise\sd@mid\box\tw@%
\kern.5\sdcirclediam%
}}
\def\sd@brcirc{{%
\sd@circ1%
\ht\tw@.5\sdcirclediam%
\dp\tw@\sdrulewidth%
\kern.5\sdcirclediam%
\raise\sd@mid\box\tw@%
}}
\def\sd@llc#1{%
\hb@xt@.5\sdcirclediam{%
\sd@rule\hskip.5\sdcirclediam%
\hss%
#1%
}%
}
\def\sd@rlc#1{%
\hb@xt@.5\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'.