syntax.dtx: Allow decorative material following nonterminal name in `grammar'.
authorMark Wooding <mdw@distorted.org.uk>
Tue, 17 Nov 2015 22:34:11 +0000 (22:34 +0000)
committerMark Wooding <mdw@distorted.org.uk>
Tue, 17 Nov 2015 22:34:11 +0000 (22:34 +0000)
syntax.dtx

index 1b1965f..cbe09df 100644 (file)
@@ -35,7 +35,7 @@
 %<+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%