%%% ==================================================================== %%% @LaTeX-style-file{ %%% author = "Mario Wolczko", %%% version = "3", %%% date = "21 May 1992", %%% time = "21:02:11 BST", %%% filename = "smalltalk.sty", %%% address = "Dept of Computer Science %%% The University of Manchester %%% Oxford Road %%% Manchester M13 9PL %%% UK", %%% telephone = "+44-61-275-6146", %%% FAX = "+44-61-275-6236", %%% checksum = "56043 161 377 5156", %%% email = "mario@cs.man.ac.uk (Internet)", %%% codetable = "ISO/ASCII", %%% keywords = "LaTeX, Smalltalk programming language", %%% supported = "yes", %%% docstring = "Useful for typesetting small fragments of %%% the Smalltalk programming language", %%% } %%% ==================================================================== % % example: % % \begin{smalltalk} % \category{Magnitudes-Numbers} % \class{Integer} % \superclass{Object} % \instvars{a b c} % \protocol{arithmetic functions} % \begin{method}{factorial} % | f | % self isZero % ifTrue: [n _ 1] % ifFalse: [n _ self * (self - 1) factorial]. % ^n % \end{method} % \classmeths % ... % \end{smalltalk} % % warning: if you put a Smalltalk environment inside a list (e.g., % itemize, description, etc, then don't have a paragraph skip between % it and the next item. Example: % \begin{itemize} % \item blah blah % \begin{smalltalk} % code % \end{smalltalk} % don't put a blank line after this % \item .... % \def\@fmtname{lplain} \def\@psfmtname{pslplain} \newenvironment{smalltalk}{\@beginst}{\@endst} \def\st{\protect\@st} \def\@st{\@setSTcatcodes\smalltalkfont} % for in-line code \newdimen\stindent \stindent=\parindent \def\@beginst{\everymath{}\vskip1ex \leftskip=\stindent \baselineskip=\stbaselineskip \parskip=0pt % \parskip=\stbaselineskip \@setSTcatcodes\@vobeyspaces\obeylines\noindent\smalltalkfont} \newdimen\stbaselineskip \stbaselineskip\baselineskip \def\@endst{\vskip1ex \global\everypar={{\setbox0=\lastbox}% \global\everypar={}% \global\let\par=\@@par} \global\let\par=\@undonoindent} \def\@undonoindent{\global\everypar={}\global\let\par=\@@par\@@par} \def\class#1{\noindent\hbox to 7em{\rm class\hfil}\smalltalkfont #1\par\vskip 1ex\relax} \def\category#1{\noindent\hbox to 7em{\rm category\hfil}\smalltalkfont #1\par\vskip 1ex\relax} \def\protocol#1{\noindent\hbox to 7em{\rm protocol\hfil}\smalltalkfont #1\par\vskip 1ex\relax} \def\superclass#1{\noindent\hbox to 7em{\rm superclass\hfil}\smalltalkfont #1\par\vskip 1ex\relax} \def\instvars#1{\noindent\hbox to 9em{\rm instance variables\hfil}\smalltalkfont #1\par\vskip 1ex\relax} \def\classmeths{\noindent\rm class methods\par\vskip 1ex\relax} \newenvironment{method}{\@beginmethod}{\@endmethod} \ifx\fmtname\@fmtname % standard LaTeX is OK \ifx\selectfont\@undefined \def\smalltalkfont{\sf} \ifcase\@ptsize \font\smalltalkboldfont=cmssbx10 \or \font\smalltalkboldfont=cmssbx10 scaled\magstep1 \or \font\smalltalkboldfont=cmssbx10 scaled\magstep2 \fi \else \def\smalltalkfont{\family{cmss}\series{m}\shape{n}\selectfont} \def\smalltalkboldfont{\family{cmss}\series{bx}\shape{n}\selectfont} \fi \else \ifx\fmtname\@psfmtname % so is pslatex \ifx\selectfont\@undefined \def\smalltalkfont{\sf} \ifcase\@ptsize \font\smalltalkboldfont=phvb0 at 9pt \or \font\smalltalkboldfont=phvb0 at 10pt \or \font\smalltalkboldfont=phvb0 at 11pt \fi \else \def\smalltalkfont{\family\sfdefault\series{m}\shape{n}\selectfont} \def\smalltalkboldfont{\family\sfdefault\series{b}\shape{n}\selectfont} \fi \else % SliTeX is different \font\smalltalkboldfont=cmssbx10 at 20.74pt \def\smalltalkfont{\rm} \fi\fi \def\@beginmethod#1{\vbox\bgroup\noindent{\smalltalkboldfont#1}} \def\@st@under{$\leftarrow$} \def\@st@uparrow{$\uparrow$} \def\@st@bar{$\mid$} \def\@st@lt{$\mathchar"313C$} \def\@st@gt{$\mathchar"313E$} %\def\@st@minus{$\mathchar"2200$} {\catcode`\_=\active \catcode`\^=\active \catcode`\|=\active \catcode`\<=\active \catcode`\>=\active%\catcode`\-=\active \gdef\@setSTcatcodes{% \@makeother\#\@makeother\%\@makeother\~% \catcode`\_=\active \catcode`\^=\active \catcode`\|=\active \catcode`\<=\active \catcode`\>=\active%\catcode`\-=\active \let_\@st@under \let^\@st@uparrow \let|\@st@bar \let<\@st@lt \let>\@st@gt}} %\let-\@st@minus}} %{\catcode`\_=\active \catcode`\^=\active \catcode`\|=\active % \catcode`\<=\active \catcode`\>=\active%\catcode`\-=\active % \gdef\@setSTcatcodes{% % \@makeother\#\@makeother\%\@makeother\~% % \catcode`\_=\active \catcode`\^=\active \catcode`\|=\active % \catcode`\<=\active \catcode`\>=\active%\catcode`\-=\active % \def_{$\leftarrow$}\def^{$\uparrow$}\def|{$\mid$}% % \def<{$\mathchar"313C$}\def>{$\mathchar"313E$}}} % \def-{$\mathchar"2200$}}} \def\@endmethod{\strut\egroup}