mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-10-31 21:29:41 +01:00 
			
		
		
		
	 356a3d1609
			
		
	
	
		356a3d1609
		
	
	
	
	
		
			
			* provided local copies or required styles since debian does not
    supply the listings.sty anymore
		
	
			
		
			
				
	
	
		
			818 lines
		
	
	
		
			19 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
			
		
		
	
	
			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'.
 |