From b0cb2086fcb39d89f7f5f6b8a9eea09f78272b52 Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Sun, 12 Jan 2020 03:00:58 +0000
Subject: CTAN sync 202001120300

---
 macros/latex/contrib/simplebnf/simplebnf.sty | 113 +++++++++++++++++++++++++++
 1 file changed, 113 insertions(+)
 create mode 100644 macros/latex/contrib/simplebnf/simplebnf.sty

(limited to 'macros/latex/contrib/simplebnf/simplebnf.sty')

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'.
-- 
cgit v1.2.3

