From: Carl Sorensen Date: Fri, 24 Sep 2010 04:50:45 +0000 (-0600) Subject: Allow user-defined predefined fretboard hash-table X-Git-Tag: release/2.13.39-1~12 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=47c3d16c5044555afa49637310a7ee324b06af51;p=lilypond.git Allow user-defined predefined fretboard hash-table Add fretboard-table argument to \storePredefined Diagram Add rule to convertrules.py Modify all predefined-*-fretboards.ly Modify regression tests Modify docs Update relevant snippets --- diff --git a/Documentation/notation/fretted-strings.itely b/Documentation/notation/fretted-strings.itely index 90f126fb45..0b0c9549c1 100644 --- a/Documentation/notation/fretted-strings.itely +++ b/Documentation/notation/fretted-strings.itely @@ -1098,15 +1098,18 @@ mychords = \chordmode{ @cindex adding custom fret diagrams Fret diagrams can be added to the fret diagram table. To add a diagram, -you must specify the chord for the diagram, the tuning to be used, and -a definition for the diagram. The diagram definition can be either a +you must specify the hash table for the diagram, the chord for the +diagram, the tuning to be used, and +a definition for the diagram. Normally, the hash table will be +@var{default-fret-table}. The diagram definition can be either a fret-diagram-terse definition string or a fret-diagram-verbose marking list. @lilypond[verbatim, ragged-right, quote] \include "predefined-guitar-fretboards.ly" -\storePredefinedDiagram #default-fret-table \chordmode { c:maj9 } +\storePredefinedDiagram #default-fret-table + \chordmode { c:maj9 } #guitar-tuning #"x;3-2;o;o;o;o;" @@ -1132,7 +1135,8 @@ default octave are used for transposing fretboards. @lilypond[verbatim, ragged-right, quote] \include "predefined-guitar-fretboards.ly" -\storePredefinedDiagram #default-fret-table \chordmode { c'' } +\storePredefinedDiagram #default-fret-table + \chordmode { c'' } #guitar-tuning #(offset-fret 2 (chord-shape 'bes guitar-tuning)) @@ -1177,10 +1181,12 @@ marking lists. % add some new chords based on the power chord shape -\storePredefinedDiagram #default-fret-table \chordmode { f'' } +\storePredefinedDiagram #default-fret-table + \chordmode { f'' } #guitar-tuning #(chord-shape 'powerf guitar-tuning) -\storePredefinedDiagram #default-fret-table \chordmode { g'' } +\storePredefinedDiagram #default-fret-table + \chordmode { g'' } #guitar-tuning #(offset-fret 2 (chord-shape 'powerf guitar-tuning)) @@ -1215,6 +1221,9 @@ predefined fret diagram, the interface properties belong to @lilypondfile[verbatim,lilyquote,texidoc,doctitle] {chordchanges-for-fretboards.ly} +@lilypondfile[verbatim,lilyquote,texidoc,doctitle] +{fretboards-alternate-tables.ly} + @seealso Notation Reference: @@ -1225,7 +1234,8 @@ Notation Reference: Installed Files: @file{ly/@/predefined@/-guitar@/-fretboards@/.ly}, -@file{ly/@/predefined@/-guitar@/-ninth@/-fretboards@/.ly}. +@file{ly/@/predefined@/-guitar@/-ninth@/-fretboards@/.ly}, +@file{ly/@/predefined@/-ukulele@/-fretboards@/.ly}. Snippets: @rlsr{Fretted strings}. @@ -1278,7 +1288,8 @@ commands: @lilypond[quote,ragged-right,verbatim] -\storePredefinedDiagram #default-fret-table +\storePredefinedDiagram #default-fret-table + #guitar-tuning #"x;3-1-(;5-2;5-3;5-4;3-1-1-);" << diff --git a/Documentation/snippets/customizing-fretboard-fret-diagrams.ly b/Documentation/snippets/customizing-fretboard-fret-diagrams.ly index ec649ca11a..25edb88985 100644 --- a/Documentation/snippets/customizing-fretboard-fret-diagrams.ly +++ b/Documentation/snippets/customizing-fretboard-fret-diagrams.ly @@ -76,7 +76,6 @@ can be omitted in property overrides. \include "predefined-guitar-fretboards.ly" \storePredefinedDiagram #default-fret-table \chordmode { c' } - #guitar-tuning #"x;1-1-(;3-2;3-3;3-4;1-1-);" << diff --git a/Documentation/snippets/new/fretboards-alternate-tables.ly b/Documentation/snippets/new/fretboards-alternate-tables.ly index ec4cff1f0f..f332928e64 100644 --- a/Documentation/snippets/new/fretboards-alternate-tables.ly +++ b/Documentation/snippets/new/fretboards-alternate-tables.ly @@ -10,6 +10,9 @@ order to have alternate fretboards for a given chord. In order to use an alternate fretboard table, the table must first be created. Fretboards are then added to the table. +The created fretboard table can be blank, or it can be copied +from an existing table. + The table to be used in displaying predefined fretboards is selected by the property @code{\predefinedDiagramTable}. " @@ -19,15 +22,19 @@ by the property @code{\predefinedDiagramTable}. \include "predefined-guitar-fretboards.ly" -#(define custom-fretboard-table-one (make-hash-table 101)) +% Make a blank new fretboard table +#(define custom-fretboard-table-one (make-fretboard-table)) -#(define custom-fretboard-table-two (make-hash-table 101)) +% Make a new fretboard table as a copy of default-fret-table +#(define custom-fretboard-table-two (make-fretboard-table default-fret-table)) +% Add a chord to custom-fretboard-table-one \storePredefinedDiagram #custom-fretboard-table-one \chordmode{c} #guitar-tuning "3-(;3;5;5;5;3-);" +% Add a chord to custom-fretboard-table-two \storePredefinedDiagram #custom-fretboard-table-two \chordmode{c} #guitar-tuning @@ -35,27 +42,34 @@ by the property @code{\predefinedDiagramTable}. << \chords { - c1 | - c1 | - c1 + c1 | d1 | + c1 | d1 | + c1 | d1 | } \new FretBoards { \chordmode { \set predefinedDiagramTable = #default-fret-table - c1 + c1 | d1 | \set predefinedDiagramTable = #custom-fretboard-table-one - c1 + c1 | d1 | \set predefinedDiagramTable = #custom-fretboard-table-two - c1 + c1 | d1 | } } \new Staff { \clef "treble_8" - \chordmode { - c1 | - c1 | - c1 - } + << + \chordmode { + c1 | d1 | + c1 | d1 | + c1 | d1 | + } + { + s1_\markup "Default table" | s1 | + s1_\markup \column {"New table" "from empty"} | s1 | + s1_\markup \column {"New table" "from default"} | s1 | + } + >> } >> diff --git a/ly/declarations-init.ly b/ly/declarations-init.ly index bddd34e582..403bb0d01d 100644 --- a/ly/declarations-init.ly +++ b/ly/declarations-init.ly @@ -39,6 +39,9 @@ pitchnames = #default-language \include "chord-repetition-init.ly" +#(define default-fret-table (make-hash-table 101)) +#(define chord-shape-table (make-hash-table 29)) + % declarations for standard directions left = #-1 right = #1 @@ -83,9 +86,6 @@ escapedBiggerSymbol = #(make-span-event 'DecrescendoEvent START) escapedSmallerSymbol = #(make-span-event 'CrescendoEvent START) -#(define default-fret-table (make-hash-table 100)) -#(define chord-shape-table (make-hash-table 100)) - \include "scale-definitions-init.ly" melisma = #(context-spec-music (make-property-set 'melismaBusy #t) 'Bottom) diff --git a/ly/predefined-fretboards-init.ly b/ly/predefined-fretboards-init.ly index 9e91ed2220..d190430fb2 100644 --- a/ly/predefined-fretboards-init.ly +++ b/ly/predefined-fretboards-init.ly @@ -42,12 +42,28 @@ hash with the key @var{(cons key-symbol tuning)}.") #(define (chord-shape shape-code tuning) (get-chord-shape shape-code tuning chord-shape-table)) +% scheme function for copying/creating fretboard tables + +#(define (make-fretboard-table . rest) + "Create a new fretboard table. @code{rest} is an optional table name. +If present, the new fretboard table starts as a copy of the fretboard +table @code{rest}." + (if (null? rest) + (make-hash-table 101) + (let ((source-table (car rest))) + (hash-fold + (lambda (key value tab) + (hash-set! tab key value) + tab) + (make-hash-table 101) + source-table)))) + % music function for adding a predefined diagram to % fretboard-table storePredefinedDiagram = -#(define-music-function (parser location - fretboard-table chord tuning diagram-definition) +#(define-music-function + (parser location fretboard-table chord tuning diagram-definition) (hash-table? ly:music? pair? string-or-pair?) (_i "Add predefined fret diagram defined by @var{diagram-definition} for the chord pitches @var{chord} and the stringTuning @var{tuning}.")