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.chordnames.code.tex |
Initial commit
Diffstat (limited to 'macros/latex/contrib/leadsheets/leadsheets.library.chordnames.code.tex')
-rw-r--r-- | macros/latex/contrib/leadsheets/leadsheets.library.chordnames.code.tex | 222 |
1 files changed, 222 insertions, 0 deletions
diff --git a/macros/latex/contrib/leadsheets/leadsheets.library.chordnames.code.tex b/macros/latex/contrib/leadsheets/leadsheets.library.chordnames.code.tex new file mode 100644 index 0000000000..d43c840c60 --- /dev/null +++ b/macros/latex/contrib/leadsheets/leadsheets.library.chordnames.code.tex @@ -0,0 +1,222 @@ +% -------------------------------------------------------------------------- +% 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{chordnames}{2016/07/05 typesetting chord names with easy syntax} + +\leadsheets_load_library:n {musicsymbols} + +\tl_new:N \l__leadsheets_chord_tl +\tl_new:N \l__leadsheets_tension_tl +\tl_new:N \l__leadsheets_format_tl + +\cs_new_protected:Npn \leadsheets_tension_sym:Nn #1#2 + { \tl_replace_all:Nnn #1 {#2} { \textsuperscript {#2} } } + +\cs_new_protected:Npn \leadsheets_tension_sym:Nnn #1#2#3 + { \tl_replace_all:Nnn #1 {#2} { \textsuperscript {#3} } } +\cs_generate_variant:Nn \leadsheets_tension_sym:Nnn {NnV} + +\cs_new_protected:Npn \leadsheets_chord_sym:Nnn #1#2#3 + { \tl_replace_all:Nnn #1 {#2} {#3} } +\cs_generate_variant:Nn \leadsheets_chord_sym:Nnn {NnV} + +\tl_new:N \l__leadsheets_sharp_tl +\tl_new:N \l__leadsheets_flat_tl +\tl_new:N \l__leadsheets_doublesharp_tl +\tl_new:N \l__leadsheets_doubleflat_tl +\tl_new:N \l__leadsheets_full_dim_tl +\tl_new:N \l__leadsheets_half_dim_tl +\tl_new:N \l__leadsheets_aug_tl +\tl_new:N \l__leadsheets_major_tl +\tl_new:N \l__leadsheets_minor_tl +\tl_new:N \l__leadsheets_sus_tl +\tl_new:N \l__leadsheets_dim_tl +\tl_new:N \l__leadsheets_add_tl +\tl_new:N \l__leadsheets_major_seven_tl +\tl_new:N \l__leadsheets_german_B_tl +\tl_new:N \l__leadsheets_german_H_tl + +\tl_set:Nn \l__leadsheets_sharp_tl {\sharp} +\tl_set:Nn \l__leadsheets_flat_tl {\flat} +\tl_set:Nn \l__leadsheets_doublesharp_tl {\doublesharp} +\tl_set:Nn \l__leadsheets_doubleflat_tl {\doubleflat} +\tl_set:Nn \l__leadsheets_half_dim_tl {\o{}} +\tl_set:Nn \l__leadsheets_full_dim_tl {o} +\tl_set:Nn \l__leadsheets_aug_tl {+} +\tl_set:Nn \l__leadsheets_major_tl {} +\tl_set:Nn \l__leadsheets_minor_tl {m} +\tl_set:Nn \l__leadsheets_sus_tl {\textsuperscript{sus}} +\tl_set:Nn \l__leadsheets_dim_tl {\textsuperscript{dim}} +\tl_set:Nn \l__leadsheets_add_tl {\textsuperscript{add}} +\tl_set:Nn \l__leadsheets_major_seven_tl {\textsuperscript{maj7}} +\tl_set:Nn \l__leadsheets_major_nine_tl {\textsuperscript{maj9}} +\tl_set:Nn \l__leadsheets_german_B_tl {B} +\tl_set:Nn \l__leadsheets_german_H_tl {H} + +\group_begin: +% for convenient input of sharps: +\char_set_catcode_other:N \# +% because ^ is active in the song environment: +\char_set_catcode_active:N \^ +% # is other so we need another parameter character: +\char_set_catcode_parameter:N \! + +\cs_gset_protected:Npn \leadsheets_chord: + { + \group_begin: + \tl_use:N \l__leadsheets_format_tl + \char_set_catcode_other:N \# + \char_set_catcode_active:N \^ + \leadsheets_chord_aux:n + } + +\cs_gset_protected:Npn \leadsheets_chord_aux:n !1 + { + \tl_set:Nn \l__leadsheets_chord_tl {!1} + \leadsheets_chord_sym:NnV \l__leadsheets_chord_tl {maj7} \l__leadsheets_major_seven_tl + \leadsheets_chord_sym:NnV \l__leadsheets_chord_tl {maj9} \l__leadsheets_major_nine_tl + \leadsheets_chord_sym:NnV \l__leadsheets_chord_tl {sus} \l__leadsheets_sus_tl + \leadsheets_chord_sym:Nnn \l__leadsheets_chord_tl {^} {\textsuperscript} + \bool_if:NT \l__leadsheets_output_notation_german_bool + { + \leadsheets_chord_sym:NnV \l__leadsheets_chord_tl {B} \l__leadsheets_german_B_tl + \leadsheets_chord_sym:NnV \l__leadsheets_chord_tl {H} \l__leadsheets_german_H_tl + } + \leadsheets_chord_sym:Nnn \l__leadsheets_chord_tl {#b} {} + \leadsheets_chord_sym:Nnn \l__leadsheets_chord_tl {b#} {} + \leadsheets_chord_sym:NnV \l__leadsheets_chord_tl {##} \l__leadsheets_doublesharp_tl + \leadsheets_chord_sym:NnV \l__leadsheets_chord_tl {bb} \l__leadsheets_doubleflat_tl + \leadsheets_chord_sym:NnV \l__leadsheets_chord_tl {#} \l__leadsheets_sharp_tl + \leadsheets_chord_sym:NnV \l__leadsheets_chord_tl {b} \l__leadsheets_flat_tl + \leadsheets_chord_sym:NnV \l__leadsheets_chord_tl {dim} \l__leadsheets_dim_tl + \leadsheets_chord_sym:NnV \l__leadsheets_chord_tl {add} \l__leadsheets_add_tl + \leadsheets_tension_sym:Nn \l__leadsheets_chord_tl {0} + \leadsheets_tension_sym:Nn \l__leadsheets_chord_tl {1} + \leadsheets_tension_sym:Nn \l__leadsheets_chord_tl {2} + \leadsheets_tension_sym:Nn \l__leadsheets_chord_tl {3} + \leadsheets_tension_sym:Nn \l__leadsheets_chord_tl {4} + \leadsheets_tension_sym:Nn \l__leadsheets_chord_tl {5} + \leadsheets_tension_sym:Nn \l__leadsheets_chord_tl {6} + \leadsheets_tension_sym:Nn \l__leadsheets_chord_tl {7} + \leadsheets_tension_sym:Nn \l__leadsheets_chord_tl {8} + \leadsheets_tension_sym:Nn \l__leadsheets_chord_tl {9} + \leadsheets_tension_sym:NnV \l__leadsheets_chord_tl {/o} \l__leadsheets_half_dim_tl + \leadsheets_tension_sym:NnV \l__leadsheets_chord_tl {o} \l__leadsheets_full_dim_tl + \leadsheets_tension_sym:NnV \l__leadsheets_chord_tl {+} \l__leadsheets_aug_tl + \leadsheets_chord_sym:Nnn \l__leadsheets_chord_tl {(} + { \leadsheets_tension:w( } + \leadsheets_chord_sym:Nnn \l__leadsheets_chord_tl {mi} + {\l__leadsheets_minor_tl} + \leadsheets_chord_sym:Nnn \l__leadsheets_chord_tl {ma} + {\l__leadsheets_major_tl} + \tl_replace_all:Nnn \l__leadsheets_chord_tl + {\textsuperscript\textsuperscript} + {\textsuperscript} + \bool_if:NT \l__leadsheets_lowercase_minor_bool + { + \tl_put_left:Nn \l__leadsheets_chord_tl { \__leadsheets_start_minor:w } + \tl_put_right:Nn \l__leadsheets_chord_tl { \q_stop } + } +% \show \l__leadsheets_chord_tl + \tl_use:N \l__leadsheets_chord_tl + \group_end: + } + +\group_end: + +% lowercase letters for minor chords: +\bool_new:N \l__leadsheets_lowercase_minor_bool + +\cs_new_protected:Npn \__leadsheets_start_minor:w #1 \q_stop + { + \tl_if_in:nnTF {#1} {\l__leadsheets_minor_tl} + { \__leadsheets_revert_minor:w #1 \q_stop } + {#1} + } + +\cs_new_protected:Npn \__leadsheets_revert_minor:w #1 \l__leadsheets_minor_tl #2 \q_stop + { \tl_lower_case:n {#1} #2 } + +\cs_new_protected:Npn \leadsheets_tension:w (#1) + { + \group_begin: + \tl_set:Nn \l__leadsheets_tension_tl {#1} + \leadsheets_chord_sym:Nnn \l__leadsheets_tension_tl + {\textsuperscript} + {\use:n} + \textsuperscript { ( \tl_use:N \l__leadsheets_tension_tl ) } + \group_end: + } + +\keys_define:nn {leadsheets/chords} + { + format .tl_set:N = \l__leadsheets_format_tl , + sharp .tl_set:N = \l__leadsheets_sharp_tl , + flat .tl_set:N = \l__leadsheets_flat_tl , + double-sharp .tl_set:N = \l__leadsheets_doublesharp_tl , + double-flat .tl_set:N = \l__leadsheets_doubleflat_tl , + half-dim .tl_set:N = \l__leadsheets_half_dim_tl , + full-dim .tl_set:N = \l__leadsheets_full_dim_tl , + aug .tl_set:N = \l__leadsheets_aug_tl , + major .tl_set:N = \l__leadsheets_major_tl , + minor .code:n = + \str_if_eq:nnTF {#1} {lowercase} + { + \bool_set_true:N \l__leadsheets_lowercase_minor_bool + \tl_clear:N \l__leadsheets_minor_tl + } + { + \bool_set_false:N \l__leadsheets_lowercase_minor_bool + \tl_set:Nn \l__leadsheets_minor_tl {#1} + } , + sus .tl_set:N = \l__leadsheets_sus_tl , + add .tl_set:N = \l__leadsheets_add_tl , + dim .tl_set:N = \l__leadsheets_dim_tl , + major-seven .tl_set:N = \l__leadsheets_major_seven_tl , + major-nine .tl_set:N = \l__leadsheets_major_nine_tl , + german-B .tl_set:N = \l__leadsheets_german_B_tl , + german-H .tl_set:N = \l__leadsheets_german_H_tl , + % since version 0.2 those are defined in the `chords` library: + % output-notation .choice: , + % input-notation .choice: , + } + +\NewDocumentCommand \setchords {m} + { \keys_set:nn {leadsheets/chords} {#1} } + +\NewDocumentCommand \chordname {} { \leadsheets_chord: } + +\file_input_stop: + +HISTORY: + +2014/08/10 - first version +2015/05/08 - drop `literal' option for input and output notation + - input/output notation is now handled by the `chords' library + - German output of B and H can be customized +2015/05/22 - improvements to the chord macros +2015/07/02 - this is not a user library any more +2016/07/05 - with option `minor=lowercase' minor chords are now printed with + lowercase letters; requires user input `Dmi' in order to get `d'; + lowercase letters can of course be input directly but then are + immune to transposing |