diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/leadsheets/leadsheets.library.templates.code.tex |
Initial commit
Diffstat (limited to 'macros/latex/contrib/leadsheets/leadsheets.library.templates.code.tex')
-rw-r--r-- | macros/latex/contrib/leadsheets/leadsheets.library.templates.code.tex | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/macros/latex/contrib/leadsheets/leadsheets.library.templates.code.tex b/macros/latex/contrib/leadsheets/leadsheets.library.templates.code.tex new file mode 100644 index 0000000000..c09744aa3e --- /dev/null +++ b/macros/latex/contrib/leadsheets/leadsheets.library.templates.code.tex @@ -0,0 +1,110 @@ +% -------------------------------------------------------------------------- +% the LEADSHEETS package +% +% typesetting leadsheets and songbooks +% +% -------------------------------------------------------------------------- +% Clemens Niederberger +% E-Mail: contact@mychemistry.eu +% -------------------------------------------------------------------------- +% Copyright 2014-2017 Clemens Niederberger +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% 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 +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Clemens Niederberger. +% -------------------------------------------------------------------------- +\LeadsheetsExplLibrary{templates} + {2014/08/10 template mechanism for song titles and verses} + +\msg_new:nnn {leadsheets} {unknown-template} + { Unknown~ #1~ template~ `#2'~ \msg_line_context: } + +\tl_new:N \l__leadsheets_songtitle_template_tl +\prop_new:N \l__leadsheets_songtitle_template_prop + +% \NewDocumentCommand \songtitle {} { \leadsheets_songtitle: } + +% the following is shamelessly adapted from the `needspace' package by +% Peter Wilson and Herries Press: +\cs_new_protected:Npn \__leadsheets_needspace:n #1 + { + \group_begin: + \dim_set:Nn \l__leadsheets_tmpa_dim { #1 } + \skip_vertical:n { \c_zero_dim + \l__leadsheets_tmpa_dim } + \tex_penalty:D -100 + \skip_vertical:n { \c_zero_dim - \l__leadsheets_tmpa_dim } + \skip_vertical:N \l__leadsheets_tmpa_dim + \tex_penalty:D 9999 + \skip_vertical:n { - \l__leadsheets_tmpa_dim } + \skip_vertical:N \c_zero_dim + \group_end: + } + +\cs_new_protected:Npn \__leadsheets_songtitle: + { + \__leadsheets_use_songtitle_template:V \l__leadsheets_songtitle_template_tl + \__leadsheets_needspace:n { 3\baselineskip } + } + +\cs_new_protected:Npn \__leadsheets_use_songtitle_template:n #1 + { + \prop_get:NnNTF \l__leadsheets_songtitle_template_prop + {#1} + \l__leadsheets_tmpa_tl + { \l__leadsheets_tmpa_tl } + { \msg_error:nnnn {leadsheets} {unknown-template} {songtitle} {#1} } + } +\cs_generate_variant:Nn \__leadsheets_use_songtitle_template:n { V } + +\cs_new_protected:Npn \leadsheets_define_songtitle_template:nn #1#2 + { \prop_put:Nnn \l__leadsheets_songtitle_template_prop {#1} {#2} } + + +\NewDocumentCommand \definesongtitletemplate {m+m} + { \leadsheets_define_songtitle_template:nn {#1} {#2} } + +\NewDocumentCommand \expandcode {+m} { \use:x {#1} } + + +% verse-type templates +\prop_new:N \l__leadsheets_verse_begin_template_prop +\prop_new:N \l__leadsheets_verse_end_template_prop + +% #1: template name +% #2: begin code +% #3: end code +\cs_new_protected:Npn \leadsheets_define_verse_template:nnn #1#2#3 + { + \prop_put:Nnn \l__leadsheets_verse_begin_template_prop {#1} {#2} + \prop_put:Nnn \l__leadsheets_verse_end_template_prop {#1} {#3} + } + +\cs_new_protected:Npn \leadsheets_use_verse_template:nn #1#2 + { + \exp_args:Nnc + \prop_get:cVNTF {l__leadsheets_verse_#1_template_prop} + {l__leadsheets_#2_template_tl} + \l__leadsheets_tmpa_tl + { \tl_use:N \l__leadsheets_tmpa_tl } + { + \msg_error:nnxx {leadsheets} {unknown-template} + {verse-type} + {\use:c{l__leadsheets_#2_template_tl}} + } + } + +\DeclareExpandableDocumentCommand \ifobeylines {} + { \bool_if:NTF \l__leadsheets_obey_lines_bool } + +\NewDocumentCommand \defineversetypetemplate {m+m+m} + { \leadsheets_define_verse_template:nnn {#1} {#2} {#3} } + +\file_input_stop: |