]> git.donarmstrong.com Git - lilypond.git/blobdiff - ly/music-functions-init.ly
Merge branch 'master' into translation
[lilypond.git] / ly / music-functions-init.ly
index 59c452065c3a03cc33fda0e489908c5f15faff69..842da9ace606dc026169808b6b5e664603cfc214 100644 (file)
@@ -178,7 +178,7 @@ barNumberCheck =
                                         cbn n))))))
 
 bendAfter =
-#(define-music-function (parser location delta) (real?)
+#(define-event-function (parser location delta) (real?)
    (_i "Create a fall or doit of pitch interval @var{delta}.")
    (make-music 'BendAfterEvent
               'delta-step delta))
@@ -186,13 +186,13 @@ bendAfter =
 bookOutputName =
 #(define-void-function (parser location newfilename) (string?)
    (_i "Direct output for the current book block to @var{newfilename}.")
-   (set! book-filename newfilename))
+   (set! (paper-variable parser #f 'output-filename) newfilename))
 
 bookOutputSuffix =
 #(define-void-function (parser location newsuffix) (string?)
    (_i "Set the output filename suffix for the current book block to
 @var{newsuffix}.")
-   (set! book-output-suffix newsuffix))
+   (set! (paper-variable parser #f 'output-suffix) newsuffix))
 
 %% \breathe is defined as a music function rather than an event identifier to
 %% ensure it gets useful input location information: as an event identifier,
@@ -315,7 +315,12 @@ without the need of a specific end spanner.")
         (ly:input-message location (_ "argument endSpanners is not an EventChord: ~a") music)
         music)))
 
-
+eventChords =
+#(define-music-function (parser location music) (ly:music?)
+   (_i "Compatibility function wrapping @code{EventChord} around
+isolated rhythmic events occuring since version 2.15.28, after
+expanding repeat chords @samp{q}.")
+   (event-chord-wrap! music parser))
 
 featherDurations=
 #(define-music-function (parser location factor argument) (ly:moment? ly:music?)
@@ -337,7 +342,7 @@ featherDurations=
      argument))
 
 footnote =
-#(define-music-function (parser location text offset grob-name footnote)
+#(define-event-function (parser location text offset grob-name footnote)
    ((markup?) number-pair? (symbol? '()) markup?)
    (_i "Attach @var{text} at @var{offset} with @var{text} referring to
 @var{footnote}.  If @var{text} is given as @code{\\default}, use
@@ -369,37 +374,43 @@ in the format of @code{all-grob-descriptions}.")
         descriptions)))
 
 harmonicByFret = #(define-music-function (parser location fret music) (number? ly:music?)
-  (_i "Convert @var{music} into harmonics; the resulting notes resemble
-harmonics played on a fretted instrument by touching the strings above @var{fret}.")
-  (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
-          #}))))
+  (_i "Convert @var{music} into mixed harmonics; the resulting notes resemble
+harmonics played on a fretted instrument by touching the strings at @var{fret}.")
+  #{
+    \set harmonicDots = ##t
+    \override TabNoteHead #'stencil = #(tab-note-head::print-custom-fret-label (number->string fret))
+    \override NoteHead #'Y-extent = #(ly:make-unpure-pure-container ly:grob::stencil-height
+                                       (lambda (grob start end)
+                                               (ly:grob::stencil-height grob)))
+    \override NoteHead #'stencil = #(lambda (grob) (ly:grob-set-property! grob 'style 'harmonic-mixed)
+                                            (ly:note-head::print grob))
+    $(make-harmonic
+       (calc-harmonic-pitch (fret->pitch (number->string fret)) music))
+    \unset harmonicDots
+    \revert TabNoteHead #'stencil
+    \revert NoteHead #'Y-extent
+    \revert NoteHead #'stencil
+  #})
 
 harmonicByRatio = #(define-music-function (parser location ratio music) (number? ly:music?)
-    (_i "Convert @var{music} into harmonics; the resulting notes resemble
-harmonics played on a fretted instrument by touching the strings above the point
+    (_i "Convert @var{music} into mixed harmonics; the resulting notes resemble
+harmonics played on a fretted instrument by touching the strings at the point
 given through @var{ratio}.")
-  (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
-         #}))))
+  #{
+    \set harmonicDots = ##t
+    \override TabNoteHead #'stencil = #(tab-note-head::print-custom-fret-label (ratio->fret ratio))
+    \override NoteHead #'Y-extent = #(ly:make-unpure-pure-container ly:grob::stencil-height
+                                       (lambda (grob start end)
+                                               (ly:grob::stencil-height grob)))
+    \override NoteHead #'stencil = #(lambda (grob) (ly:grob-set-property! grob 'style 'harmonic-mixed)
+                                            (ly:note-head::print grob))
+    $(make-harmonic
+      (calc-harmonic-pitch (ratio->pitch ratio) music))
+    \unset harmonicDots
+    \revert TabNoteHead #'stencil
+    \revert NoteHead #'Y-extent
+    \revert NoteHead #'stencil
+  #})
 
 instrumentSwitch =
 #(define-music-function
@@ -692,7 +703,9 @@ Example:
 ")
    (let* ((voices (apply circular-list (make-list (length voice-ids) (list))))
          (current-voices voices)
-         (current-sequence (list)))
+         (current-sequence (list))
+         (original music)
+         (wrapper #f))
      ;;
      ;; utilities
      (define (push-music m)
@@ -718,6 +731,16 @@ Example:
                       (let ((origins (remove not (map music-origin
                                                       (ly:music-property music 'elements)))))
                         (and (not (null? origins)) (car origins)))))))
+     (while (music-is-of-type? music 'music-wrapper-music)
+           (set! wrapper music)
+           (set! music (ly:music-property wrapper 'element)))
+     (if wrapper
+        (set! (ly:music-property wrapper 'element)
+                                 (make-music 'SequentialMusic
+                                             'origin location))
+        (set! original
+              (make-music 'SequentialMusic
+                          'origin location)))
      ;;
      ;; first, split the music and fill in voices
      ;; We flatten direct layers of SequentialMusic since they are
@@ -758,9 +781,12 @@ Example:
      ;; bind voice identifiers to the voices
      (for-each (lambda (voice-id voice)
            (ly:parser-define! parser voice-id
-                              (make-music 'SequentialMusic
-                                          'origin location
-                                          'elements voice)))
+                              (let ((v (ly:music-deep-copy original)))
+                                (set! (ly:music-property
+                                       (car (extract-named-music
+                                             v 'SequentialMusic))
+                                       'elements) voice)
+                                v)))
          voice-ids voices)))
 
 parenthesize =
@@ -926,7 +952,7 @@ for time signatures of @var{time-signature}.")
    (revert-time-signature-setting time-signature))
 
 rightHandFinger =
-#(define-music-function (parser location finger) (number-or-string?)
+#(define-event-function (parser location finger) (number-or-string?)
    (_i "Apply @var{finger} as a fingering indication.")
 
    (make-music
@@ -962,21 +988,27 @@ a context modification duplicating their effect.")
               (list 'unset
                     (ly:music-property m 'symbol)))
              ((OverrideProperty)
-              (list 'push
-                    (ly:music-property m 'symbol)
-                    (ly:music-property m 'grob-property-path)
-                    (ly:music-property m 'grob-value)))
+              (cons* 'push
+                     (ly:music-property m 'symbol)
+                     (ly:music-property m 'grob-value)
+                     (ly:music-property m 'grob-property-path)))
              ((RevertProperty)
-              (list 'pop
-                    (ly:music-property m 'symbol)
-                    (ly:music-property m 'grob-property-path)))))
+              (cons* 'pop
+                     (ly:music-property m 'symbol)
+                     (ly:music-property m 'grob-property-path)))))
           (case (ly:music-property m 'name)
-            ((SequentialMusic SimultaneousMusic)
-             (for-each musicop (ly:music-property m 'elements)))
+            ((ApplyContext)
+             (ly:add-context-mod mods
+                                 (list 'apply
+                                       (ly:music-property m 'procedure))))
             ((ContextSpeccedMusic)
              (if (or (not ctx)
                      (eq? ctx (ly:music-property m 'context-type)))
-                 (musicop (ly:music-property m 'element)))))))
+                 (musicop (ly:music-property m 'element))))
+            (else
+             (let ((callback (ly:music-property m 'elements-callback)))
+               (if (procedure? callback)
+                   (for-each musicop (callback m))))))))
      (musicop music)
      mods))
 
@@ -1019,14 +1051,6 @@ styledNoteHeads =
    (_i "Set @var{heads} in @var{music} to @var{style}.")
    (style-note-heads heads style music))
 
-
-
-tabChordRepetition =
-#(define-music-function (parser location) ()
-   (_i "Include the string information in a chord repetition.")
-   (ly:parser-set-repetition-function parser tab-repeat-chord)
-   (make-music 'SequentialMusic 'void #t))
-
 tag =
 #(define-music-function (parser location tag arg) (symbol? ly:music?)