% $Id: rcs-doc.sty,v 1.4 1995/08/02 12:09:06 schrod Exp $
%----------------------------------------------------------------------

%
% tags for the documentation of rcs style option
%


\ProvidesPackage{rcs-doc}


%
% Configuration of RCS fields
%

% keywords in style are prefixed by `Style', in documentation by `Doc'.
\let\RcsHandleStyleDate=\RcsHandleDate	% transform StyleDate value
\let\RcsHandleDocDate=\RcsHandleDate	% transform DocDate field

% the revision of rcs.sty is needed by the documentation
\expandafter\RCS \rcs@loaded		% creates \RCSStyleRevision

% name of the author
%
% CAVEAT: Don't define another author name without changing the text
% in the user manual where \rcsAuthor is explained!
\rcsAuthor{schrod}{Joachim Schrod}


%
% new tags
%

\def\rcsField#1{\textsf{#1}}		% name of a RCS field (ie, RCS keyword)
\def\Log{\rcsField{Log}}		% The `Log' keyword, needed often
\def\Date{\rcsField{Date}}		% The `Date' keyword, needed often


%
% \macroCall[p]{\\split \[Revision\(: \)1.1\( \]:\) \{\} \\end_value}
%
% \[...\] is param of caller, \(...\) is arg (delimiter) for \split
%	empty arg delimiter must be input as `\(\|\)'
%	may not be nested, as shown above
% in \macroCall arg: `_' and ` ' are other characters
%		     \\, \{, and \} produce characters `\', `{' and `}'
%		     \| is invisible text
% The optional arg is the character to mark the delimiter. By using
% [p] one can mark args with `\(...\)'!

\newtoks\@macroCall

\def\macroCall{%
    \@ifnextchar[%			% ] (Emacs)
	\macro@call
	{\macro@call[d]}%
    }
\def\macro@call[#1]{%
    \def\delimChar{#1}%
    \begingroup
	\catcode`\ =\CatOther
	\catcode`\_=\CatOther
	\afterassignment\showExample
	\global\@macroCall
    }

\newcount\delimCount
\def\showExample{%
    \endgroup
    \leavevmode
    \vtop{%
	\reset@font \ttfamily
	\let\[\relax	\let\]\relax
	\let\(\relax	\let\)\relax
	\chardef\\=`\\	\chardef\{=`\{	\chardef\}=`\}
	\def\|{\hskip 1sp}%		% must be >0pt, but invisible
	\baselineskip\z@skip
	\lineskip 2pt
	\delimCount\z@
	\hbox{\expandafter\showParam \the\@macroCall \endValue}%
	\hbox{\the\@macroCall}%		% the example itself
	\hbox{\expandafter\showDelimiter \the\@macroCall \(\)\endValue}%
	\hrule height \z@
	}%
    }


\def\showParam #1\[#2\]#3\endValue{%
    \hphantom{#1}%
    \setbox\z@ \hbox{#2}%
    \vbox{\hsize \wd\z@
	\centerline{\tt \#1}%
	\vskip 3pt
	\hrule
	\@@line{\hss \vrule height 3pt \hskip\hsize \vrule \hss}%
	}%
    \setbox\z@ \hbox{#3}%
    \vbox{\hsize \wd\z@
	\centerline{$s$}%
	\vskip 3pt
	\@@line{\cleaders \hbox{$\mkern 1mu.\mkern 1mu$}\hfill}\nointerlineskip
	\@@line{\hskip\hsize \vrule height 3pt \hss}%
	}%
    }

\def\showDelimiter #1\(#2\)#3\endValue{%
    \hphantom{#1}%
    \advance\delimCount \@ne
    \setbox\z@ \hbox{#2}%
    \ifdim \wd\z@=\z@
    \else
	\vtop{\hsize\wd\z@
	    \@@line{\hss \vrule depth 3pt \hskip\hsize \vrule \hss}%
	    \hrule
	    \vskip 3pt
	    \centerline{$\delimChar_{\the\delimCount}$}%
	    }%
	\showDelimiter #3\endValue
    \fi
    }



\endinput



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Local Variables:
mode: plain-TeX
TeX-master: t
TeX-brace-indent-level: 4
indent-tabs-mode: t
TeX-auto-untabify: nil
End: