]> git.donarmstrong.com Git - lilypond.git/commitdiff
Allow user-defined predefined fretboard hash-table
authorCarl Sorensen <c_sorensen@byu.edu>
Fri, 24 Sep 2010 04:50:45 +0000 (22:50 -0600)
committerCarl Sorensen <c_sorensen@byu.edu>
Sat, 13 Nov 2010 01:54:50 +0000 (18:54 -0700)
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

Documentation/notation/fretted-strings.itely
Documentation/snippets/customizing-fretboard-fret-diagrams.ly
Documentation/snippets/new/fretboards-alternate-tables.ly
ly/declarations-init.ly
ly/predefined-fretboards-init.ly

index 90f126fb4521f5f78f2c379aaf43c62e1f79ec38..0b0c9549c1baeaa594191f33c499bb5c591674b8 100644 (file)
@@ -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 <c e g c' e'>
+\storePredefinedDiagram #default-fret-table
+                        <c e g c' e'>
                         #guitar-tuning
                         #"x;3-1-(;5-2;5-3;5-4;3-1-1-);"
 <<
index ec649ca11af6c7af92fcc50950451bb89b70c6db..25edb8898593fe5f1ce42053cf759300fc79e03a 100644 (file)
@@ -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-);"
 <<
index ec4cff1f0f8db9d7a3ff4bcdd53ba673fc03b610..f332928e644d690fe9a3499d9a8d2c6372e8255c 100644 (file)
@@ -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 |
+      }
+    >>
   }
 >>
 
index bddd34e58208602ea0648094b1cc2e9700acbcbc..403bb0d01d8b24bddbfc9386f78153d728ea7547 100644 (file)
@@ -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)
index 9e91ed2220252025d8db37b764f898acc7aa79a5..d190430fb2f68b50de71415ab857b60460ef80fa 100644 (file)
@@ -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}.")