From b0cb2086fcb39d89f7f5f6b8a9eea09f78272b52 Mon Sep 17 00:00:00 2001 From: Norbert Preining 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 +%% +%% 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