]> git.donarmstrong.com Git - lilypond.git/blobdiff - ly/music-functions-init.ly
Fix 1460.
[lilypond.git] / ly / music-functions-init.ly
index 0e5093e8a5b8c899ba5ad5eda25d6d9957742027..bd7e60e691066a330497dd92a1976a724d485b81 100644 (file)
@@ -198,13 +198,14 @@ bookOutputSuffix =
    (set! book-output-suffix newsuffix)
    (make-music 'SequentialMusic 'void #t))
 
-%% why a function?
+%% \breathe is defined as a music function rather than an event identifier to
+%% ensure it gets useful input location information: as an event identifier,
+%% it would have to be wrapped in an EventChord to prevent it from being
+%% treated as a post_event by the parser
 breathe =
 #(define-music-function (parser location) ()
    (_i "Insert a breath mark.")
-   (make-music 'EventChord
-              'origin location
-              'elements (list (make-music 'BreathingEvent))))
+   (make-music 'BreathingEvent))
 
 
 
@@ -301,7 +302,33 @@ grace =
 #(def-grace-function startGraceMusic stopGraceMusic
    (_i "Insert @var{music} as grace notes."))
 
-
+harmonicByFret = #(define-music-function (parser location fret music) (number? ly:music?)
+  (let* ((fret (number->string fret))
+         (pitch (fret->pitch fret)))
+        (make-sequential-music
+         (list
+          #{
+            \override TabNoteHead #'stencil = #(tab-note-head::print-custom-fret-label $fret)
+          #}
+          (make-harmonic
+            (calc-harmonic-pitch pitch music))
+          #{
+            \revert TabNoteHead #'stencil
+          #}))))
+
+harmonicByRatio = #(define-music-function (parser location ratio music) (number? ly:music?)
+  (let ((pitch (ratio->pitch ratio))
+        (fret (ratio->fret ratio)))
+       (make-sequential-music
+        (list
+         #{
+           \override TabNoteHead #'stencil = #(tab-note-head::print-custom-fret-label $fret)
+         #}
+         (make-harmonic
+           (calc-harmonic-pitch pitch music))
+         #{
+            \revert TabNoteHead #'stencil
+         #}))))
 
 instrumentSwitch =
 #(define-music-function
@@ -360,6 +387,29 @@ label =
                                           'page-label label))))
 
 
+language =
+#(define-music-function (parser location language) (string?)
+   (_i "Set note names for language @var{language}.")
+   (note-names-language parser language)
+   (make-music 'Music 'void #t))
+
+languageSaveAndChange =
+#(define-music-function (parser location language) (string?)
+  (_i "Store the previous pitchnames alist, and set a new one.")
+  (set! previous-pitchnames pitchnames)
+  (note-names-language parser language)
+  (make-music 'Music 'void #t))
+
+languageRestore =
+#(define-music-function (parser location) ()
+   (_i "Restore a previously-saved pitchnames alist.")
+   (if previous-pitchnames
+       (begin
+        (set! pitchnames previous-pitchnames)
+        (ly:parser-set-note-names parser pitchnames))
+      (ly:warning (_ "No other language was defined previously. Ignoring.")))
+   (make-music 'Music 'void #t))
+
 
 makeClusters =
 #(define-music-function (parser location arg) (ly:music?)
@@ -599,6 +649,27 @@ that they share a staff.")
    (make-part-combine-music parser
                             (list part1 part2)))
 
+partcombineForce =
+#(define-music-function (location parser type once) (symbol-or-boolean? boolean?)
+   (_i "Override the part-combiner.")
+   (make-music 'EventChord
+              'elements (list (make-music 'PartCombineForceEvent
+                                          'forced-type type
+                                          'once once))))
+partcombineApart = \partcombineForce #'apart ##f
+partcombineApartOnce = \partcombineForce #'apart ##t
+partcombineChords = \partcombineForce #'chords ##f
+partcombineChordsOnce = \partcombineForce #'chords ##t
+partcombineUnisono = \partcombineForce #'unisono ##f
+partcombineUnisonoOnce = \partcombineForce #'unisono ##t
+partcombineSoloI = \partcombineForce #'solo1 ##f
+partcombineSoloIOnce = \partcombineForce #'solo1 ##t
+partcombineSoloII = \partcombineForce #'solo2 ##f
+partcombineSoloIIOnce = \partcombineForce #'solo2 ##t
+partcombineAutomatic = \partcombineForce ##f ##f
+partcombineAutomaticOnce = \partcombineForce ##f ##t
+
+
 pitchedTrill =
 #(define-music-function
    (parser location main-note secondary-note)