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.sty |
Initial commit
Diffstat (limited to 'macros/latex/contrib/leadsheets/leadsheets.sty')
-rw-r--r-- | macros/latex/contrib/leadsheets/leadsheets.sty | 254 |
1 files changed, 254 insertions, 0 deletions
diff --git a/macros/latex/contrib/leadsheets/leadsheets.sty b/macros/latex/contrib/leadsheets/leadsheets.sty new file mode 100644 index 0000000000..5e6464dfcc --- /dev/null +++ b/macros/latex/contrib/leadsheets/leadsheets.sty @@ -0,0 +1,254 @@ +% -------------------------------------------------------------------------- +% 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. +% -------------------------------------------------------------------------- +% required packages: +\RequirePackage{expl3,l3keys2e,xparse,translations} + +% -------------------------------------------------------------------------- +% package information: +\ExplSyntaxOn +\tl_const:Nn \leadsheetsdate {2017/09/26} +\tl_const:Nn \leadsheetsversion {0.5b} +\tl_const:Nn \leadsheetsinfo {Typesetting leadsheets and songbooks} + +\ProvidesExplPackage + {leadsheets} + {\leadsheetsdate} + {\leadsheetsversion} + {\leadsheetsinfo \c_space_tl (CN)} + +% -------------------------------------------------------------------------- +% messages: +\msg_new:nnn {leadsheets} {library-missing} + { + You've~ requested~ the~ leadsheets~ library~ `#1'~ but~ it~ appears~ to~ + be~ missing~ on~ your~ system.~ Maybe~ you've~ misspelled~ the~ name?~ + Loading~ the~ library~ will~ abort~ \msg_line_context: + } + +\msg_new:nnn {leadsheets} {loading-library} + { + (leadsheets) \c_space_tl \c_space_tl \c_space_tl \c_space_tl + Loading~ library~ `#1'... + } + +% -------------------------------------------------------------------------- +% variants of kernel functions: +\cs_generate_variant:Nn \tl_if_eq:nnTF { xx , V } +\cs_generate_variant:Nn \seq_set_split:Nnn { Nnx } +\cs_generate_variant:Nn \prop_item:Nn { NV } +\cs_generate_variant:Nn \seq_item:Nn { cV } +\cs_generate_variant:Nn \int_to_arabic:n { V } +\cs_generate_variant:Nn \tl_replace_once:Nnn { NnV } +\cs_generate_variant:Nn \prop_gput:Nnn { cxx , NVf } +\cs_generate_variant:Nn \msg_error:nnn { nnV } +\cs_generate_variant:Nn \msg_warning:nnn { nnV } +\cs_generate_variant:Nn \vbox_set:Nn { NV } + +% -------------------------------------------------------------------------- +% temporary variables: +\tl_new:N \l__leadsheets_tmpa_tl +\tl_new:N \l__leadsheets_tmpb_tl +\tl_new:N \l__leadsheets_tmpc_tl +\tl_new:N \l__leadsheets_tmpd_tl +\tl_new:N \g__leadsheets_tmpa_tl + +\bool_new:N \l__leadsheets_tmpa_bool + +\dim_new:N \l__leadsheets_tmpa_dim + +\seq_new:N \l__leadsheets_tmpa_seq +\seq_new:N \l__leadsheets_tmpb_seq + +\int_new:N \l__leadsheets_tmpa_int +\int_new:N \l__leadsheets_tmpb_int +\int_new:N \l__leadsheets_tmpc_int + +\box_new:N \l__leadsheets_tmpa_box + +% -------------------------------------------------------------------------- +\prg_new_conditional:Npnn \leadsheets_if_package_loaded:n #1 {p,T,F,TF} + { + \cs_if_exist:cTF {ver@#1.sty} + { \prg_return_true: } + { \prg_return_false: } + } + +\DeclareExpandableDocumentCommand \leadsheetsifpackageloaded {m} + { \leadsheets_if_package_loaded:nTF {#1} } + +% % -------------------------------------------------------------------------- +% \seq_new:N \l__leadsheets_safed_commands_seq + +% \cs_new_protected:Npn \leadsheets_safe_define_protected:Npn #1 +% { +% \seq_if_in:NnTF \l__leadsheets_safed_commands_seq {#1} +% {} % error +% { +% \seq_gput_right:Nn \l__leadsheets_safed_commands_seq {#1} +% \cs_gset_eq:cN {__leadsheets_ \cs_to_str:N #1:} #1 +% \cs_set_protected:Npn #1 +% } +% } + +% \cs_new_protected:Npn \leadsheets_restore:N #1 +% { +% \seq_if_in:NnTF \l__leadsheets_safed_commands_seq {#1} +% { \cs_set_eq:Nc #1 {__leadsheets_ \cs_to_str:N #1:} } +% {} % error +% \seq_gremove_all:Nn \l__leadsheets_safed_commands_seq {#1} +% } + +% -------------------------------------------------------------------------- +% library mechanism: +\tl_const:Nn \c__leadsheets_library_extension_tl {code.tex} +\tl_const:Nn \c__leadsheets_library_prefix_tl {leadsheets.library} + +\cs_new_protected:Npn \leadsheets_load_libraries:n #1 + { \clist_map_inline:nn {#1} { \leadsheets_load_library:n {##1} } } + +\cs_new_protected:Npn \leadsheets_load_library:n #1 + { + \tl_set:Nx \l__leadsheets_tmpa_tl { \tl_trim_spaces:n {#1} } + \__leadsheets_load_library:V \l__leadsheets_tmpa_tl + } + +\prg_new_conditional:Npnn \leadsheets_if_library:n #1 {p,T,F,TF} + { + \cs_if_exist:cTF {leadsheets-library-#1-loaded} + { \prg_return_true: } + { \prg_return_false: } + } + +\DeclareExpandableDocumentCommand \leadsheetsiflibrary {m} + { \leadsheets_if_library:nTF {#1} } + +\cs_new_protected:Npn \__leadsheets_load_library:n #1 + { + \leadsheets_if_library:nF {#1} + { + \file_if_exist:nTF + {\c__leadsheets_library_prefix_tl.#1.\c__leadsheets_library_extension_tl} + { + \msg_log:nnn {leadsheets} {loading-library} {#1} + \@onefilewithoptions + {\c__leadsheets_library_prefix_tl.#1}[][] + \c__leadsheets_library_extension_tl + } + { \msg_warning:nnn {leadsheets} {library-missing} {#1} } + } + } +\cs_generate_variant:Nn \__leadsheets_load_library:n { V } + +\cs_new_protected:Npn \__leadsheets_library:nn #1#2 + { + \cs_new:cpn {leadsheets-library-#1-loaded} {leadsheets:~`#1'~library} + \ProvidesFile + {\c__leadsheets_library_prefix_tl.#1.\c__leadsheets_library_extension_tl} + [ + \leadsheetsdate + \c_space_tl + v \leadsheetsversion + \c_space_tl + leadsheets~ library~ `#1'~ #2 + ] + } + +% +\cs_new:Npn \LeadsheetSurvive #1 \LeadsheetEndSurvive {#1} + +% -------------------------------------------------------------------------- +% one of those defines a leadsheets library, either using expl syntax or 2e +% package syntax: +\NewDocumentCommand \LeadsheetsExplLibrary {mm} + { \__leadsheets_library:nn {#1} {#2} \ExplSyntaxOn } + +\NewDocumentCommand \LeadsheetsLibrary {mm} + { \__leadsheets_library:nn {#1} {#2} } + +% -------------------------------------------------------------------------- +% commands for loading libraries: +\NewDocumentCommand \useleadsheetslibraries {m} + { \leadsheets_load_libraries:n {#1} } + +\NewDocumentCommand \useleadsheetslibrary {m} + { \leadsheets_load_library:n {#1} } + +% -------------------------------------------------------------------------- +% a setup command: +\NewDocumentCommand \setleadsheets {m} + { \keys_set:nn {leadsheets} {#1} } + +% -------------------------------------------------------------------------- +% package options: +\bool_new:N \l__leadsheets_with_options_bool + +\keys_define:nn {leadsheets} + { + musicsymbols .code:n = + \bool_set_true:N \l__leadsheets_with_options_bool + \leadsheets_load_library:n {musicsymbols} , + chords .code:n = + \bool_set_true:N \l__leadsheets_with_options_bool + \leadsheets_load_library:n {chords} , + musejazz .code:n = + \bool_set_true:N \l__leadsheets_with_options_bool + \leadsheets_load_library:n {musejazz} , + songs .code:n = + \bool_set_true:N \l__leadsheets_with_options_bool + \leadsheets_load_library:n {songs} , + external .code:n = + \bool_set_true:N \l__leadsheets_with_options_bool + \leadsheets_load_library:n {external} , + minimal .code:n = + \bool_set_true:N \l__leadsheets_with_options_bool , + full .code:n = + \bool_set_true:N \l__leadsheets_with_options_bool + \leadsheets_load_libraries:n + { + musicsymbols , + chordnames , + songs , + chords , + shorthands , + properties , + transposing , + templates , + translations , + external + } + } +\ProcessKeysOptions{leadsheets} + +\bool_if:NF \l__leadsheets_with_options_bool + { \leadsheets_load_library:n {songs} } + +% -------------------------------------------------------------------------- +\file_input_stop: + +2016/08/18 - new commands: \leadsheetsifpackageloaded, \leadsheetsiflibrary + - new class `leadsheet' + - new library `external' + - minor chords can now be typeset with lowercase letters + (chordnames) + |