summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/simplebnf
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-01-12 03:00:58 +0000
committerNorbert Preining <norbert@preining.info>2020-01-12 03:00:58 +0000
commitb0cb2086fcb39d89f7f5f6b8a9eea09f78272b52 (patch)
tree6b5e775789bf238282cfd6aa98a49d173834c74b /macros/latex/contrib/simplebnf
parent005d294a77f2494010cde294f7dac04af93c194d (diff)
CTAN sync 202001120300
Diffstat (limited to 'macros/latex/contrib/simplebnf')
-rw-r--r--macros/latex/contrib/simplebnf/LICENSE21
-rw-r--r--macros/latex/contrib/simplebnf/README.md11
-rw-r--r--macros/latex/contrib/simplebnf/simplebnf-doc.pdfbin0 -> 38470 bytes
-rw-r--r--macros/latex/contrib/simplebnf/simplebnf-doc.tex82
-rw-r--r--macros/latex/contrib/simplebnf/simplebnf.sty113
5 files changed, 227 insertions, 0 deletions
diff --git a/macros/latex/contrib/simplebnf/LICENSE b/macros/latex/contrib/simplebnf/LICENSE
new file mode 100644
index 0000000000..3a0de6d06f
--- /dev/null
+++ b/macros/latex/contrib/simplebnf/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright © 2019-2020 Jay Lee <jaeho.lee@snu.ac.kr>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
+OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/macros/latex/contrib/simplebnf/README.md b/macros/latex/contrib/simplebnf/README.md
new file mode 100644
index 0000000000..240e26de0b
--- /dev/null
+++ b/macros/latex/contrib/simplebnf/README.md
@@ -0,0 +1,11 @@
+# simplebnf
+simplebnf is a simple package to format Backus-Naur form. The package provides a simple way to format Backus-Naur form (BNF). It parses BNF expressions, possibly with annotations.
+
+## Documentation
+See the [simplebnf-doc.pdf](https://github.com/Zeta611/simplebnf/blob/master/simplebnf-doc.pdf) file.
+
+## Authors
+- Jay Lee <jaeho.lee@snu.ac.kr>
+
+## License
+simplebnf is available under the MIT license. See the [LICENSE](https://github.com/Zeta611/simplebnf/blob/master/LICENSE) file for more info.
diff --git a/macros/latex/contrib/simplebnf/simplebnf-doc.pdf b/macros/latex/contrib/simplebnf/simplebnf-doc.pdf
new file mode 100644
index 0000000000..02434f6b7f
--- /dev/null
+++ b/macros/latex/contrib/simplebnf/simplebnf-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/simplebnf/simplebnf-doc.tex b/macros/latex/contrib/simplebnf/simplebnf-doc.tex
new file mode 100644
index 0000000000..e30c524e85
--- /dev/null
+++ b/macros/latex/contrib/simplebnf/simplebnf-doc.tex
@@ -0,0 +1,82 @@
+\documentclass[a4paper]{article}
+
+\usepackage{fontspec}
+\setmainfont{Linux Libertine}
+\setsansfont{Libertinus Sans}
+\setmonofont{Inconsolata}
+
+\usepackage{hyperref}
+
+\usepackage{tcolorbox}
+\tcbuselibrary{listings,breakable}
+\tcbset{listing engine=listings,colframe=black,colback=white,size=small}
+\NewDocumentEnvironment {exampleside} {}
+ { \tcblisting{listing side text,righthand width=.4\textwidth} }
+ { \endtcblisting }
+
+\NewDocumentEnvironment { presentcommand } { b }
+ {%
+ \vspace*{0.5\baselineskip}\noindent\fbox{%
+ \begin{minipage}{\dimexpr\textwidth-2\fboxsep-2\fboxrule}
+ #1
+ \end{minipage}}\vspace*{0.5\baselineskip}
+ }
+ { }
+
+\NewDocumentCommand \cmd { m } { \texttt{\textbackslash#1} }
+\NewDocumentCommand \env { m m }
+ {
+ \texttt{%
+ \textbackslash begin\{#1\} \textrm{#2} %
+ \textbackslash end\{#1\}%
+ }%
+ }
+
+\usepackage{simplebnf}
+
+\title{%
+ \textsf{simplebnf} --- A simple package to format Backus-Naur form%
+ \footnote{This file describes v0.1.0.}}
+\author{Jay Lee\footnote{E-mail: %
+ \href{mailto:jaeho.lee@snu.ac.kr}{\texttt{jaeho.lee@snu.ac.kr}}}}
+\date{2019/12/23}
+
+\begin{document}
+\maketitle
+
+\begin{presentcommand}
+ \cmd{bnfexpr} \cmd{bnfannot}
+\end{presentcommand}
+The \cmd{bnfexpr} and the \cmd{bnfannot} commands are simply wrappers around
+\cmd{texttt} and \cmd{textit}, respectively.
+
+\begin{presentcommand}
+ \env{bnfgrammar}{text}
+\end{presentcommand}
+The \textit{term} argument of the \texttt{bnfgrammar} environment is the term
+to define a grammar.
+The text inside the environment should be formatted as:
+\begin{equation*}
+ \bnfexpr{term} \Coloneqq \langle\textit{keypairs}\rangle
+\end{equation*}
+where each pair of \textit{keypairs} represents an alternative syntactic form
+of the \textit{term} and its annotation, delimited with a colon(\verb/:/).
+If you don't need annotations, simply omit the colons and annotations
+altogether.
+
+A sample code and the result is shown below:
+\begin{exampleside}
+\begin{bnfgrammar}
+ v ::= n | $\lambda$x.e
+\end{bnfgrammar}
+
+\begin{bnfgrammar}
+ C ::=
+ []: hole
+ | C\,e: application 1
+ | v\,C: application 2
+ | C\,+\,e: addition 1
+ | v\,+\,C: addition 2
+\end{bnfgrammar}
+\end{exampleside}
+\end{document}
diff --git a/macros/latex/contrib/simplebnf/simplebnf.sty b/macros/latex/contrib/simplebnf/simplebnf.sty
new file mode 100644
index 0000000000..511a01c7d3
--- /dev/null
+++ b/macros/latex/contrib/simplebnf/simplebnf.sty
@@ -0,0 +1,113 @@
+%%
+%% This is file `simplebnf.sty'.
+%%
+%% ---------------------------------------------------------------------------
+%% The simplebnf package --- A simple package to format Backus-Naur form
+%% Maintained by Jay Lee
+%% E-mail: jaeho.lee@snu.ac.kr
+%% Released under the MIT License.
+%% ---------------------------------------------------------------------------
+%%
+\RequirePackage{expl3,xparse}
+% mathtools is needed for the \Coloneqq simbol
+\RequirePackage{mathtools}
+\ProvidesExplPackage
+ {simplebnf}
+ {2019/12/23}
+ {0.1.0}
+ {A simple package to format Backus–Naur form}
+
+
+\cs_generate_variant:Nn \seq_set_split:Nnn {NVn}
+
+\tl_new:N \g__simplebnf_defeq_tl
+\tl_gset:Nn \g__simplebnf_defeq_tl { \ensuremath{\Coloneqq} }
+
+\tl_new:N \g__simplebnf_defor_tl
+\tl_gset:Nn \g__simplebnf_defor_tl { \ensuremath{|} }
+
+\seq_new:N \l__input_seq
+\tl_new:N \l__term_tl
+\tl_new:N \l__body_tl
+\tl_new:N \l__keypairs_tl
+\seq_new:N \l__keypairs_seq
+
+\NewDocumentCommand \bnfexpr { m } { \texttt { #1 } }
+\NewDocumentCommand \bnfannot { m } { \textit{ #1 } }
+
+\NewDocumentEnvironment { bnfgrammar } { +b }
+ {
+ % Store the term to define grammar in \l__term_tl and the
+ % (alternative form: annotion) keypairs in \l__keypairs_tl
+ \regex_split:nnN { ::= } { #1 } \l__input_seq
+ \seq_pop_left:NN \l__input_seq \l__term_tl
+ \seq_pop_left:NN \l__input_seq \l__keypairs_tl
+
+ % Store keypairs
+ \seq_set_split:NnV \l__keypairs_seq { | } \l__keypairs_tl
+
+ \begin{center}
+ \tl_set:Nn \l__table_tl
+ {
+ \begin{tabular}{lcll}
+ \bnfexpr { \l__term_tl } & \g__simplebnf_defeq_tl &
+ }
+
+ \bool_set_false:N \l_tmpa_bool
+
+ \seq_map_inline:Nn \l__keypairs_seq
+ {
+ \bool_if:NTF \l_tmpa_bool
+ { \tl_put_right:Nn \l__table_tl { \\ & \g__simplebnf_defor_tl & } }
+ { \bool_set_true:N \l_tmpa_bool }
+
+ \regex_split:nnNTF { : } { ##1 } \l_tmpa_seq
+ {
+ \seq_pop_left:NNT \l_tmpa_seq \l_tmpa_tl
+ {
+ \tl_set:Nx \l_tmpa_tl { \bnfexpr { \l_tmpa_tl } }
+ \tl_put_right:NV \l__table_tl \l_tmpa_tl
+ }
+
+ \tl_put_right:Nn \l__table_tl { & }
+
+ \seq_pop_left:NNT \l_tmpa_seq \l_tmpb_tl
+ {
+ \tl_set:Nx \l_tmpb_tl { \bnfannot { \l_tmpb_tl } }
+ \tl_put_right:NV \l__table_tl \l_tmpb_tl
+ }
+ }
+ {
+ \tl_put_right:Nn \l__table_tl { \bnfexpr { ##1 } & }
+ }
+ }
+
+ \tl_put_right:Nn \l__table_tl { \end{tabular} }
+ \tl_use:N \l__table_tl
+ \end{center}
+ }
+ { }
+
+%% The MIT License (MIT)
+%%
+%% Copyright © 2019-2020 Jay Lee <jaeho.lee@snu.ac.kr>
+%%
+%% Permission is hereby granted, free of charge, to any person obtaining
+%% a copy of this software and associated documentation files (the "Software"),
+%% to deal in the Software without restriction, including without limitation
+%% the rights to use, copy, modify, merge, publish, distribute, sublicense,
+%% and/or sell copies of the Software, and to permit persons to whom the
+%% Software is furnished to do so, subject to the following conditions:
+%%
+%% The above copyright notice and this permission notice shall be included
+%% in all copies or substantial portions of the Software.
+%%
+%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+%% EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+%% OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+%% IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
+%% DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+%% TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
+%% OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+%%
+%% End of file `simplebnf.sty'.