%<+package> [2003/08/25 1.08 Syntax typesetting (MDW)]
% \end{meta-comment}
%
-% \CheckSum{1616}
+% \CheckSum{1627}
%% \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
% blank lines. You can use the normal |\\| command to perform line-breaking
% of a production rule. Note that a production rule must begin with a
% nonterminal name enclosed in angle brackets (|<| \dots |>|), followed by
-% whitespace, then some kind of production operator (usually `::=') and then
-% some more whitespace. You can control how this text is actually typeset,
-% however.
+% any decorative material, whitespace, some kind of production operator
+% (usually `::=') and then some more whitespace. You can control how this
+% text is actually typeset, however.
%
% \DescribeMacro{\[[}
% \DescribeMacro{\]]}
%
% \end{description}
%
-% \DescribeMacro\grammarlabel
+% \DescribeMacro\grammarlabelx
% You can also control how the `label' is typeset by redefining the
-% |\grammarlabel| command. The command is given two arguments: the name of
-% the nonterminal (which was enclosed in angle brackets), and the `production
-% operator'. The command is expected to produce the label. By default, it
-% typesets the nonterminal name using |\synt| and the operator at opposite
-% ends of the label, separated by an |\hfill|.
+% |\grammarlabelx| command. The command is given three arguments: the name
+% of the nonterminal (which was enclosed in angle brackets), the following
+% decorative material, and the `production operator'. The command is
+% expected to produce the label. By default, it typesets the nonterminal
+% name using |\synt| followed by the decoration, and the operator, at
+% opposite ends of the label, separated by an |\hfill|.
+%
+% \DescribeMacro\grammarlabel
+% For compatibility, if there is no decorative material, the macro
+% |\grammarlabel| is called instead, with just two arguments: the nonterminal
+% name and the operator. The default implementation of |\grammarlabel| just
+% calls |\grammarlabelx| with empty decoration.
%
% \subsection{Syntax diagrams}
%
% commands. Well, almost \dots
%
% \begin{macrocode}
-\newcommand{\grammarlabel}[3][]{%
- \synt{#2}#1 \hfill#3%
-}
+\newcommand{\grammarlabel}[2]{\grammarlabelx{#1}{}{#2}}
+\newcommand{\grammarlabelx}[3]{\synt{#1}#2 \hfill#3}
% \end{macrocode}
%
% Now for a bit of hacking to make the item stuff work properly. This gets
%
% \begin{macrocode}
\def\gr@implitem<#1>#2 #3 {%
- \sbox\z@{\hskip\labelsep\grammarlabel[{#2}]{#1}{#3}}%
+ \sbox\z@{%
+ \hskip\labelsep%
+ \def\@tempa{#2}%
+ \ifx\@tempa\@empty\grammarlabel{#1}{#3}%
+ \else\grammarlabelx{#1}{#2}{#3}\fi%
+ }%
\strut\@@par%
\vskip-\parskip%
\vskip-\baselineskip%