From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/backnaur/README | 29 ++ macros/latex/contrib/backnaur/backnaur.dtx | 680 +++++++++++++++++++++++++++++ macros/latex/contrib/backnaur/backnaur.ins | 82 ++++ macros/latex/contrib/backnaur/backnaur.pdf | Bin 0 -> 256076 bytes 4 files changed, 791 insertions(+) create mode 100644 macros/latex/contrib/backnaur/README create mode 100644 macros/latex/contrib/backnaur/backnaur.dtx create mode 100644 macros/latex/contrib/backnaur/backnaur.ins create mode 100644 macros/latex/contrib/backnaur/backnaur.pdf (limited to 'macros/latex/contrib/backnaur') diff --git a/macros/latex/contrib/backnaur/README b/macros/latex/contrib/backnaur/README new file mode 100644 index 0000000000..701b06c692 --- /dev/null +++ b/macros/latex/contrib/backnaur/README @@ -0,0 +1,29 @@ +The backnaur package typesets Backus-Naur Form (BNF) +definitions. It prints formatted lists of productions, +with numbers if required. It can also print in line BNF +expressions using math mode. + +To install the package, run LaTeX on the installation script +backnaur.ins and follow the instructions provided by the script +itself. + +Run LaTeX on backnaur.dtx to get the package's documentation. +Comment out this files 'OnlyDescription' line to include the +implementation documentation. + +Copyright (C) 2019 by Adrian P Robson + adrian.robson@nepsweb.co.uk + +This work may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either +version 1.3c of this license or (at your option) any later +version. The latest version of this license is in + http://www.latex-project.org/lppl.txt + +This work has the LPPL maintenance status `maintained'. +The Current Maintainer of this work is Adrian Robson. + +This work consists of the files backnaur.dtx and + backnaur.ins +and the derived files backnaur.sty and + backnaur.pdf diff --git a/macros/latex/contrib/backnaur/backnaur.dtx b/macros/latex/contrib/backnaur/backnaur.dtx new file mode 100644 index 0000000000..14a9264b4f --- /dev/null +++ b/macros/latex/contrib/backnaur/backnaur.dtx @@ -0,0 +1,680 @@ +% \iffalse meta-comment +% +% backnaur.dtx +% 7 June 2019 +% +% Documented LaTeX file for the backnaur package. +% +% Run LaTeX on backnaur.ins to make the package's +% backnaur.sty file. +% +% Run LaTeX on this file to produce the package +% documentation. +% +% Copyright (C) 2019 by Adrian P Robson +% adrian.robson@nepsweb.co.uk +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either +% version 1.3c of this license or (at your option) any later +% version. The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Adrian Robson. +% +% This work consists of the files backnaur.dtx and +% backnaur.ins +% and the derived files backnaur.sty and +% backnaur.pdf +% ----------------------------------------------------------- +% \fi +% +% \iffalse +%\NeedsTeXFormat{LaTeX2e}[2011/06/27] +%\ProvidesPackage{backnaur} +%[2019/06/18 3.1 Typesetting for Backus-Naur Form (BNF) definitions] +%<*driver> +\documentclass[10pt,a4paper]{ltxdoc} +\usepackage{backnaur} +\usepackage[T1]{fontenc} +\usepackage{lmodern} +\usepackage{textcomp} +\usepackage{bigstrut} +\EnableCrossrefs +\CodelineIndex +\RecordChanges +\OnlyDescription % comment out for code implementation +\begin{document} +\DocInput{backnaur.dtx} +\end{document} +% +% \fi +% +%^^A------------------------------------------------------------------- +%^^A Change log... +%^^A-------------- +%^^A +%^^A 15 November 2012 +%^^A The original was based on a non-packaged version that was used +%^^A in 2008 for the LaTeX editions of the author's foggy times +%^^A reports. +% \changes{v1.0}{2012/11/15} +% {Initial version of the package.} +%^^A +%^^A 3 December 2012 +%^^A Add tstt option and generally rewrite documentation. +% \changes{v1.1}{2012/12/12} +% {Updated and improved documentation.} +% +%^^A +%^^A 7 June 2019 +%^^A Remove tstt option, add line number management, add altpo option +%^^A and updated and improve documentation. +% \changes{v3.0}{2019/06/07} +% {Updated and improved documentation.} +% +%^^A------------------------------------------------------------------- +% +% \CheckSum{0} %^^A no checksum for development +%^^A \CheckSum{80} +% +% \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 +% Digits \0\1\2\3\4\5\6\7\8\9 +% Exclamation \! Double quote \" Hash (number) \# +% Dollar \$ Percent \% Ampersand \& +% Acute accent \' Left paren \( Right paren \) +% Asterisk \* Plus \+ Comma \, +% Minus \- Point \. Solidus \/ +% Colon \: Semicolon \; Less than \< +% Equals \= Greater than \> Question mark \? +% Commercial at \@ Left bracket \[ Backslash \\ +% Right bracket \] Circumflex \^ Underscore \_ +% Grave accent \` Left brace \{ Vertical bar \| +% Right brace \} Tilde \~} +% +% \GetFileInfo{backnaur.sty} +% +% \title{The \texttt{backnaur} package} +% \author{Adrian P. Robson\thanks{\texttt{adrian.robson@nepsweb.co.uk}}} +% \date{Version 3.1\\[0.5ex]18 June 2019} +% +% \maketitle +% +%^^A------------------------------------------------------------------- +%^^A Start report body +%^^A------------------------------------------------------------------- +% +% \section{Introduction} +% +% The \texttt{backnaur} package typesets Backus-Naur Form (BNF) definitions. +% It creates aligned lists of productions, with numbers if required. +% It can also print in line BNF expressions using math mode. +% +% Backus-Naur Form is a notation for defining context free grammars. +% It is used to describe such things as programming languages, communication protocols +% and command syntaxes, but it can be useful whenever a rigorous definition of language is needed. +% +% \section{BNF Definitions} +% +% The following is a BNF definition of a semicolon separated list: +% \begin{bnf*} +% \bnfprod{list} +% {\bnfpn{listitems} \bnfor \bnfes}\\ +% \bnfprod{listitems} +% {\bnfpn{item} \bnfor \bnfpn{item} +% \bnfsp \bnfts{;} \bnfsp \bnfpn{listitems}}\\ +% \bnfprod{item} +% { \bnftd{description of item}} +% \end{bnf*} +% +% \noindent +% Here, $\bnfpo$ signifies \emph{produces}, $\mid$ is an \emph{or} operator, $\langle$...$\rangle$ +% are \emph{production names}, +% and $\bnfes$ represents the \emph{empty string}. +% However, some BNF users prefer alternative terminologies, +% where $\bnfpo$ stands for \emph{is defined as}, +% $\langle$...$\rangle$ is a \emph{category name} or \emph{nonterminal}, +% and $\bnfes$ is refered to as \emph{null} or \emph{empty}. +% +% The above definition was created with the following code: +% +%\begin{verbatim} +%\usepackage{backnaur} +%... +%\begin{bnf*} +% \bnfprod{list} +% {\bnfpn{listitems} \bnfor \bnfes}\\ +% \bnfprod{listitems} +% {\bnfpn{item} \bnfor \bnfpn{item} +% \bnfsp \bnfts{;} \bnfsp \bnfpn{listitems}}\\ +% \bnfprod{item} +% {\bnftd{description of item}} +%\end{bnf*} +% +%\end{verbatim} +% +% \noindent +% Each BNF production is defined by a |\bnfprod| command, which has two arguments +% giving its left and right sides. +% The right hand side of each production is specified with the commands described in +% \S\ref{prodef} below. +% Terminal (|\bnfts{;}|) and nonterminal (|\bnfpn{item}|), elements are separated +% by spaces (|\bnfsp|) and OR symbols (|\bnfor|). +% The |\bnfes| command gives the symbol for the empty string. +% +% \section{Package Commands}\label{commandDesc} +% +% \subsection{Loading and options}\label{packopts} +% +% The package is loaded with +% +% \medskip\noindent +% \hspace{2.5em}|\usepackage{backnaur}| \\ +% or\\ +% \hspace*{2.5em}|\usepackage[||]{backnaur}| +% \medskip +% +% \noindent +% Possible options are +% +% \vspace{-1.5ex} +% \begin{tabbing} +% xxxxxxxxx \=\kill +% |perp| \>The empty string symbol is $\perp$\\ +% |epsilon| \> The empty string symbol is $\epsilon$\\ +% |tsrm| \> Terminal string typeface is roman\\ +% |altpo| \> Production operator is $::=$ +%^^A |tstt| \> Terminal string typeface is typewriter (default) +% \end{tabbing} +% \vspace{-1ex} +% +% \noindent +% The defaults are: the empty string symbol is $\lambda$, +% the production operator is $\models$, +% and the terminal string typeface is typewriter. +% +% \subsection{Environments} +% +% \DescribeEnv{bnf} +% BNF productions are defined in a |bnf| or |bnf*| environment, +% which respectively give numbered or unnumbered lists of productions. +% \DescribeEnv{bnf*} +% \begin{quote} +% \begin{minipage}{0.5\linewidth} +% |\begin{bnf}|\\ +% \hspace*{1em}\\ +% |\end{bnf}| +% \end{minipage} +% \begin{minipage}{0.45\linewidth} +% |\begin{bnf*}|\\ +% \hspace*{1em}\\ +% |\end{bnf*}| +% \end{minipage} +% \end{quote} +% +% \subsection{Productions} +% +% \DescribeMacro{\bnfprod} +% \DescribeMacro{\bnfprod*} +% A production is defined by |\bnfprod| or |\bnfprod*|, +% which respectively give a numbered or unnumbered line in the {\tt bnf} environment. +% They have identical unnumbered behaviour in the {\tt bnf*} enviromment. +% They take two arguments: +% \begin{quote} +% |\bnfprod{||}{||}|\\ +% |\bnfprod*{||}{||}| +% \end{quote} +% +% \DescribeMacro{\bnfmore} +% \DescribeMacro{\bnfmore*} +% A production can be continued on addition lines by |\bnfmore| or |\bnfmore*|, +% which respectively give a numbered or unnumbered line in the {\tt bnf} environment. +% They are treated the same in the {\tt bnf*} environment. +% They take one arguments: +% \begin{quote} +% |\bnfmore{||}|\\ +% |\bnfmore*{||}| +% \end{quote} +% +% \subsection{Production definitions}\label{prodef} +% +% The following commands are used to compose the right hand side of a production. +% They are deployed in the second argument of the |\bnfprod| command. +% +% \DescribeMacro{\bnfpn} +% The |\bnfpn| command generates a production name. +% It takes a single argument that is the name. +% It is used as follows: +% \begin{quote} +% \begin{minipage}{0.6\linewidth} +% |\bnfpn{list item}| +% \end{minipage} +% \begin{minipage}{0.3\linewidth} +% $\bnfpn{list item}$ +% \end{minipage} +% \end{quote} +% +% There are three types of terminal item: a literal string, a descriptive phrase and an empty string. +% \DescribeMacro{\bnftm} +% A literal terminal string is specified by the |\bnftm| command, which takes a single argument. +% By default literal terminal strings are printed in typewriter font, but this can be changed as a package option (see \S\ref{packopts}). +% \DescribeMacro{\bnftd} +% The |\bnftd| command generates a descriptive phrase, as an alternative to a literal string. +% \DescribeMacro{\bnfes} +% The |\bnfes| command generates a token that represents the empty string. +% This is normally $\bnfes$, but it can be changed to $\epsilon$ or $\perp$ as a package option +% (see \S\ref{packopts}). +% \begin{quote} +% \begin{minipage}{0.6\linewidth} +% |\bnfts{terminal}|\\ +% |\bnftd{description}|\\ +% |\bnfes| +% \end{minipage} +% \begin{minipage}{0.3\linewidth} +% $\bnfts{terminal}$\\ +% $\bnftd{description}$\\ +% $\bnfes$ +% \end{minipage} +% \end{quote} +% +% \DescribeMacro{\bnfsk} +% Some literal terminal strings can be abbreviated with the `skip' token, +% which is generated by the |\bnfsk| command. +% This substitutes for a sequence of terminal characters. +% It is used like this: +% \begin{quote} +% \begin{minipage}{0.6\linewidth} +% |\bnfts{A} \bnfsk \bnfts{Z}| +% \end{minipage} +% \begin{minipage}{0.3\linewidth} +% $\bnfts{A} \bnfsk \bnfts{Z}$ +% \end{minipage} +% \end{quote} +% +% \DescribeMacro{\bnfor} +% All items should be separated by an OR or a space. +% The |\bnfor| command generates the OR symbol, and the |\bnfsp| command introduces a space. +% \DescribeMacro{\bnfsp} +% A space can be considered equivalent to an AND operator. +% \begin{quote} +% \begin{minipage}{0.6\linewidth} +% |\bnfpn{abc} \bnfor \bnfts{xzy}|\\ +% |\bnfpn{abc} \bnfsp \bnfts{xzy}| +% \end{minipage} +% \begin{minipage}{0.3\linewidth} +% $\bnfpn{abc} \bnfor \bnfts{xzy}$\\ +% $\bnfpn{abc} \bnfsp \bnfts{xzy}$ +% \end{minipage} +% \end{quote} +% +% \subsection{Inline expressions} +% The |\bnfprod| and |\bnfmore| macros cannot be used inline, so the |\bnfpn| and |\bnfpo| macros +% are provided to support typeseting productions inline using maths mode. +% \DescribeMacro{\bnfpn} +% \DescribeMacro{\bnfpo} +% The production's name can be typeset with |\bnfpn{name}| and the production operator with +% |\bnfpo|. +% By default the production operator is $\bnfpo$, but it can be changed to $::=$ with +% a package option (see \S\ref{packopts}). +% The right side of the production can be defined with the usual macros (see \S\ref{prodef}). +% So |$\bnfpn{name} \bnfpo \bnftd{description}$| gives $\bnfpn{name} \bnfpo \bnftd{description}$. +% +% \subsection{Command summary} +% +% The commands that can be used to define a BNF production in a |bnf| or |bnf*| environment +% are as follows: +% +% \begin{center} +% \begin{tabular}{lll} +% \hline +% Command & Operator & Outcome \bigstrut \\ +% \hline +% |\bnprod| & production line & $\bnfpo$ {\it def} \bigstrut[t] \\ +% |\bnmore| & extra line & \hspace{38.8pt} $\bnfpo$ {\it def} \\[1ex] +% |\bnfor| & OR operator & $\bnfor$ \\ +% |\bnfsk| & skip & $\bnfsk$ \\ +% |\bnfsp| & space/AND operator & $\bnfsp$ \\ +% |\bnfes| & empty string & $\bnfes$ \\ +% |\bnfts{}| & terminal string & $\bnfts{terminal}$ \\ +% |\bnftd{}| & terminal description & $\bnftd{description}$ \\[1ex] +% |\bnfpn{}| & production name & $\bnfpn{name}$ \\ +% |\bnfpo| & production operator & $\bnfpo$ \bigstrut[b] \\ +% \hline +% \end{tabular} +% \end{center} +% +% \section{Example}\label{example} +% +% A more significant example is the following definition of a $\bnfpn{sentence}$, +% where $\bnfpn{cchar}$ are countable characters, and $\bnfpn{ichar}$ are characters +% that should be ignored: +% +% \begin{samepage} +% \small +%\begin{verbatim} +%\begin{bnf*} +% \bnfprod{sentence} +% {\bnfpn{start} \bnfsp \bnfpn{rest} \bnfsp \bnfts{.}}\\ +% \bnfprod{start} +% {\bnfpn{space} \bnfor \bnfes}\\ +% \bnfprod{rest} +% {\bnfpn{word} \bnfsp \bnfpn{space} \bnfsp \bnfpn{rest} +% \bnfor \bnfpn{word} \bnfor \bnfes}\\ +% \bnfprod{word} +% {\bnfpn{wchar} \bnfsp \bnfpn{word} \bnfor \bnfpn{wchar}}\\ +% \bnfprod{space} +% {\bnfpn{schar} \bnfsp \bnfpn{space} \bnfor \bnfpn{schar}}\\ +% \bnfprod{wchar} +% {\bnfpn{cchar} \bnfor \bnfpn{ichar} }\\ +% \bnfprod{cchar} +% {\bnfts{A} \bnfsk \bnfts{Z} \bnfor \bnfts{a} \bnfsk +% \bnfts{z} \bnfor \bnfts{0} \bnfsk \bnfts{9} \bnfor +% \bnfts{\textquotesingle}}\\ +% \bnfprod{ichar} +% {\bnfts{-}} +% \bnfprod{schar} +% {\bnfts{`\hspace{1em}'} \bnfor \bnfts{!} \bnfor \bnfts{"} +% \bnfor \bnfts{(} \bnfor \bnfts{)} \bnfor \bnfts{\{} +% \bnfor \bnfts{\}} \bnfor }\\ +% \bnfmore{\bnfts{:} \bnfor \bnfts{;} \bnfor \bnfts{?} \bnfor +% \bnfts{,} } +%\end{bnf*} +%\end{verbatim} +% \end{samepage} +% +% \noindent +% This creates the following BNF definition: +%\begin{bnf} +% \bnfprod{sentence} +% {\bnfpn{start} \bnfsp \bnfpn{rest} \bnfsp \bnfts{.}}\\ +% \bnfprod{start} +% {\bnfpn{space} \bnfor \bnfes}\\ +% \bnfprod{rest} +% {\bnfpn{word} \bnfsp \bnfpn{space} \bnfsp \bnfpn{rest} +% \bnfor \bnfpn{word} \bnfor \bnfes }\\ +% \bnfprod{word} +% {\bnfpn{wchar} \bnfsp \bnfpn{word} \bnfor \bnfpn{wchar}}\\ +% \bnfprod{space} +% {\bnfpn{schar} \bnfsp \bnfpn{space} \bnfor \bnfpn{schar}}\\ +% \bnfprod{wchar} +% {\bnfpn{cchar} \bnfor \bnfpn{ichar} }\\ +% \bnfprod{cchar} +% {\bnfts{A} \bnfsk \bnfts{Z} \bnfor \bnfts{a} \bnfsk +% \bnfts{z} \bnfor \bnfts{0} \bnfsk \bnfts{9} \bnfor +% \bnfts{\textquotesingle} }\\ +% \bnfprod{ichar} +% {\bnfts{-}}\\ +% \bnfprod*{schar} +% {\textrm{`\hspace{1em}'} \bnfor \bnfts{!} \bnfor \bnfts{"} +% \bnfor \bnfts{(} \bnfor \bnfts{)} \bnfor \bnfts{\{} +% \bnfor \bnfts{\}} \bnfor }\\ +% \bnfmore{\bnfts{:} \bnfor \bnfts{;} \bnfor \bnfts{?} \bnfor +% \bnfts{,} } +%\end{bnf} +% +% \noindent +%^^A Notice the kludge in production 9: \verb|\textrm{`\hspace{1em}'}|. +% Notice the kludge in production 9. +% We use \verb|\textrm{`\hspace{1em}'}| to typeset a representation for a space +% character. +% This is needed because we do not want to print in typewriter font, +% which would imply the quotes were part of an actual terminal string. +% The \verb|\textrm| is needed because are in maths mode. +% +%^^AT \appendix +% \section{Terminal string characters} +% +% The characters used with \verb|\bnfts{}| (terminal string) are just standard +% LaTeX that is typeset in either a roman or typewriter font. +% This means we might have to use some escape pairs and a few special characters. +% Apostrophes and speech marks can be confusing. There are some of the possibilities: +% +% \begin{tabbing} +% xxxxxxxx \= xxxxxxxxxxxxxxxxxxxxxxxxxx \= xxxxxxxxxxxxxxxxx\= \kill +% alpha \> \verb|\bnfts{abcdABCD}| \> $\texttt{abcdABCD}$ \> $\textrm{abcdABCD}$\\ +% numeric \> \verb|\bnfts{01234}| \> $\texttt{01234}$ \> $\textrm{01234}$\\ +% +% simple \> \verb|\bnfts{<>[]()*+-=}| \> $\texttt{<>[]()*+-=}$ \> $\textrm{<>[]()*+-=}$\\ +% simple \> \verb|\bnfts{@!?/,.;:}| \> $\texttt{@!?/,.;:}$ \> $\textrm{@!?/,.;:}$\\ +% +% escaped \> \verb|\bnfts{\{\}\$\%\&\_\#}| \> $\texttt{\{\}\$\%\&\_\#}$ +% \> $\textrm{\{\}\$\%\&\_\#}$\\ +% +% quotes \> \verb|\bnfts{' ` " `` ''}| \> $\texttt{' ` " `` ''}$ +% \> $\textrm{' ` " `` ''}$\\ +% quotes \> \verb|\bnfts{\textquotesingle}| \> $\texttt{\textquotesingle}$ +% \> $\textrm{\textquotesingle}$\\ +% +% pound \> \verb|\bnfts{\pounds}| \> $\texttt{\pounds}$ \> $\textrm{\pounds}$\\ +% hat \> \verb|\bnfts{\textasciicircum}| \> $\texttt{\textasciicircum}$ +% \> $\textrm{\textasciicircum}$\\ +% backslash \> \verb|\bnfts{\textbackslash}| \> $\texttt{\textbackslash}$ +% \> $\textrm{\textbackslash}$\\ +% tilde \> \verb|\bnfts{\textasciitilde}| \> $\texttt{\textasciitilde}$ \> +% $\textrm{\textasciitilde}$ +% \end{tabbing} +% +% +% \noindent +% The \verb|\textquotesingle| symbol needs the {\tt textcomp} package, which provides +% lots of other interesting symbols. Consult the excellent \emph{The Comprehensive LATEX Symbol List} by Scott Pakin for more information. +% +%^^A------------------------------------------------------------------- +%^^A Start code implementation +%^^A------------------------------------------------------------------- +% +%^^A \StopEventually{} +% \StopEventually{\PrintChanges} +%^^A -> Run pdfLaTeX backnaur.dtx +%^^A makeindex -s gglo.ist -o backnaur.gls backnaur.glo +%^^A pdfLaTeX backnaur.dtx +%^^A \StopEventually{\PrintIndex} +%^^A -> Run pdfLaTeX backnaur.dtx +%^^A makeindex -s gind.ist -o backnaur.ind backnaur.idx +%^^A pdfLaTeX backnaur.dtx +% +% \newpage +% \section{Implementation} +% +% The implementation of |backnaur.sty| uses only \LaTeX{} commands. +% +% \subsection{Environments}\label{environ} +% +% There are two environments defined: +% +% \begin{environment}{bnf} +% A production list with numbers. It is simply implemented as an |eqnarray|. +% Surplus space is removed with an |\ignorespacesafterend| and |%| characters. +% \begin{macrocode} +\newenvironment{bnf}% +{\begin{eqnarray}}% +{\end{eqnarray}\ignorespacesafterend} +% \end{macrocode} +% \end{environment} +% +% \begin{environment}{bnf*} +% A lists without numbers. It is implemented with an |eqnarray*|, +% and extra space is removed as in the |bnf| environment above. +% \begin{macrocode} +\newenvironment{bnf*}% +{\begin{eqnarray*}}% +{\end{eqnarray*}\ignorespacesafterend} +% \end{macrocode} +% \end{environment} +% +% \subsection{Definition Commands} +% +% All of these commands run in the math mode supplied by the +% |bnf| and |bnf*| environments (see \S\ref{environ}). +% +% \begin{macro}{\bnfpn} +% Production name / nonterminal. +% \changes{v3.1}{2019/06/18}{Fix font handling} +% \begin{macrocode} +\newcommand{\bnfpn}[1]{\langle \textrm{#1} \rangle} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bnfor} +% OR operator. +% \begin{macrocode} +\newcommand{\bnfor}{\; \mid \;} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bnfsp} +% Space or AND operator. +% \begin{macrocode} +\newcommand{\bnfsp}{\;} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bnfes} +% Empty string symbol. This is the default if no package options are given. +% \begin{macrocode} +\newcommand{\bnfes}{\lambda} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bnfts}\label{codebnfts} +% \changes{v1.1}{2012/12/12}{Support for {\tt tstt} option added} +% \changes{v3.1}{2019/06/18}{Fix font handling} +% \begin{macro}{\bnf@tsfont} +% Terminal string. The font is controlled by the |\bnf@tsfont| macro, +% and this macro can be redefined by the |tsrm| option (see \S\ref{codeoptions}). +% The default is typewriter font. +% \begin{macrocode} +\newcommand{\bnf@tsfont}[1]{\texttt{#1}} +\newcommand{\bnfts}[1]{\bnf@tsfont{#1}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\bnfpo} +% Terminal description. +% \changes{v3.1}{2019/06/18}{Fix font handling} +% \begin{macrocode} +\newcommand{\bnftd}[1]{\textit{#1}} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bnfsk} +% Skip symbol. +% \begin{macrocode} +\newcommand{\bnfsk}{\dots} +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\bnfpo} +% Production operator. +% \begin{macrocode} +\newcommand{\bnfpo}{\models} +% \end{macrocode} +% \end{macro} +% +% \subsection{Production Commands} +% +%^^A \newcommand{\bnfprod}{\@ifstar{\bnf@prodnn}{\bnf@prodyn}} +%^^A \newcommand{\bnf@prodyn}[2]{\bnfpn{#1} & \bnfpo & #2} +%^^A \newcommand{\bnf@prodnn}[2]{\nonumber \bnfpn{#1} & \bnfpo & #2} +%^^A \newcommand{\bnfmore}{\@ifstar{\bnf@morenn}{\bnf@moreyn}} +%^^A \newcommand{\bnf@moreyn}[1]{ & & #1} +%^^A \newcommand{\bnf@morenn}[1]{\nonumber & & #1} +% +% \begin{macro}{\bnfprod} +% \begin{macro}{\bnfprod*} +% \changes{v3.0}{2019/06/07}{Added {\tt *} version of the macro.} +% \begin{macro}{\bnf@prodyn} +% \begin{macro}{\bnf@prodnn} +% A Backus-Naur Form production. +% This command is designed to exploit the behaviour the |equarray| used in +% the |bnf| and |bnf*| environments. +% In particular, the |\bnfpo| character will be vertically aligned. +% The {\tt *} version suppresses the line number% \begin{macrocode} +\newcommand{\bnfprod}{\@ifstar{\bnf@prodnn}{\bnf@prodyn}} +\newcommand{\bnf@prodyn}[2]{\bnfpn{#1} & \bnfpo & #2} +\newcommand{\bnf@prodnn}[2]{\nonumber \bnfpn{#1} & \bnfpo & #2} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\bnfmore} +% \changes{v2.0}{2019/04/07}{Added macro.} +% \begin{macro}{\bnfmore*} +% \changes{v3.0}{2019/06/07}{Added {\tt *} version of the macro.} +% \begin{macro}{\bnf@moreyn} +% \begin{macro}{\bnf@morenn} +% A continuation of a Backus-Naur Form production. +% This command is designed to exploit the behaviour the |equarray| used in +% the |bnf| and |bnf*| environments to correctly align with preceding +% |\bnfprod| and |\bnfmore| macros. +% The {\tt *} version suppresses the line number. +% \begin{macrocode} +\newcommand{\bnfmore}{\@ifstar{\bnf@morenn}{\bnf@moreyn}} +\newcommand{\bnf@moreyn}[1]{ & & #1} +\newcommand{\bnf@morenn}[1]{\nonumber & & #1} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \subsection{Options}\label{codeoptions} +% +%\begin{macro}{tstt} +% \changes{v1.1}{2012/12/12}{New option} +% \changes{v2.0}{2019/04/14}{Changed to be default} +% \changes{v3.0}{2019/06/07}{Option removed but still default} +% The |tstt| option is depreciated and can no longer be used. +% Nevertheless, typewriter font for terminal stings, which it selected, +% is still the package's default. +%\end{macro} +% +% \begin{macro}{tsrm} +% \changes{v2.0}{2019/04/14}{New option} +% \begin{macro}{\bnf@tsfont} +% The |tsrm| option redefines |\bnf@tsfont| to change the +% terminal string font used in the |\bnfts| command (see \S\ref{codebnfts}) to roman font. +% \begin{macrocode} +\DeclareOption{tsrm}{\renewcommand{\bnf@tsfont}[1]{\textrm{#1}}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{perp} +% \begin{macro}{epsilon} +% \begin{macro}{\bnfes} +% The |perp| and |epsilon| options redefine |\bnfes|, +% which is the empty string command: +% \begin{macrocode} +\DeclareOption{perp}{\renewcommand{\bnfes}{\perp}} +\DeclareOption{epsilon}{\renewcommand{\bnfes}{\epsilon}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{altpo} +% \changes{v3.0}{2019/06/07}{New option} +% \begin{macro}{\bnfpo} +% The |altpo| option redefines |\bnfpo| +% which prints the production operator: +% \begin{macrocode} +\DeclareOption{altpo}{\renewcommand{\bnfpo}{::=}} +% \end{macrocode} +% \end{macro} +% \end{macro} +%\noindent +% Finally, the options that have been selected are executed: +% \begin{macrocode} +\ProcessOptions\relax +% \end{macrocode} +% +% \Finale +\endinput diff --git a/macros/latex/contrib/backnaur/backnaur.ins b/macros/latex/contrib/backnaur/backnaur.ins new file mode 100644 index 0000000000..a62e0749c5 --- /dev/null +++ b/macros/latex/contrib/backnaur/backnaur.ins @@ -0,0 +1,82 @@ +% backnaur.ins +% 7 April 2019 +% +% Installation file for the backnaur package. +% +% Run LaTeX on this file, with backnaur.dtx in the same +% folder to make the package's backnaur.sty file. +% +% Run LaTeX on backnaur.dtx to produce the package +% documentation. +% +% Copyright (C) 2019 by Adrian P Robson +% adrian.robson@nepsweb.co.uk +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either +% version 1.3c of this license or (at your option) any later +% version. The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Adrian Robson. +% +% This work consists of the files backnaur.dtx and +% backnaur.ins +% and the derived files backnaur.sty and +% backnaur.pdf +% ----------------------------------------------------------- + +\input docstrip.tex +\keepsilent +\askforoverwritefalse + +\preamble + +Copyright (C) 2019 by Adrian P Robson + adrian.robson@nepsweb.co.uk + +This work may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either +version 1.3c of this license or (at your option) any later +version. The latest version of this license is in + http://www.latex-project.org/lppl.txt + +This work has the LPPL maintenance status `maintained'. +The Current Maintainer of this work is Adrian Robson. + +This work consists of the files backnaur.dtx and + backnaur.ins +and the derived files backnaur.sty and + backnaur.pdf + +\endpreamble + +\Msg{} +\Msg{**********************************************************} +\Msg{* The backnaur package} +\Msg{* backnaur.ins and backnaur.dtx are being processed} +\Msg{**********************************************************} + +\generate{\file{backnaur.sty}{\from{backnaur.dtx}{package}}} + +\Msg{**********************************************************} +\Msg{* Processing complete ...} +\Msg{*} +\Msg{* To finish the installation, put backnaur.sty in a} +\Msg{* suitable place on your system's TeX search path.} +\Msg{*} +\Msg{* Run LaTeX on backnaur.dtx to produce the documentation.} +\Msg{* Comment out its 'OnlyDescription' line to include the} +\Msg{* implementation documentation. } +\Msg{*} +\Msg{* You might like to keep backnaur.ins and backnaur.dtx} +\Msg{* somewhere safe as a backup, or in case you want to } +\Msg{* pass the backnaur package on to someone.} +\Msg{*} +\Msg{* Do not forget to delete the auxiliary files.} +\Msg{**********************************************************} +\Msg{} + +\endbatchfile \ No newline at end of file diff --git a/macros/latex/contrib/backnaur/backnaur.pdf b/macros/latex/contrib/backnaur/backnaur.pdf new file mode 100644 index 0000000000..88a0302833 Binary files /dev/null and b/macros/latex/contrib/backnaur/backnaur.pdf differ -- cgit v1.2.3