From 88ddb950817e0413117789eaaee3752e9630453d Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Tue, 17 Nov 2015 22:34:11 +0000 Subject: [PATCH] syntax.dtx: Allow decorative material following nonterminal name in `grammar'. --- syntax.dtx | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/syntax.dtx b/syntax.dtx index 1b1965f..cbe09df 100644 --- a/syntax.dtx +++ b/syntax.dtx @@ -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 @@ -283,9 +283,9 @@ % 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{\]]} @@ -325,13 +325,20 @@ % % \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} % @@ -1358,9 +1365,8 @@ % 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 @@ -1373,7 +1379,12 @@ % % \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% -- 2.11.0