(_i "Insert a breath mark.")
(make-music 'BreathingEvent))
-
+%% Make slide indication for chords
+chordGlissando =
+#(define-music-function (parser location mus1 mus2) (ly:music? ly:music?)
+ "Make a glissando between the notes of triads @code{mus1} and @code{mus2}."
+
+ (define (add-glissando musChord)
+ (let ((els (ly:music-property musChord 'elements)))
+ (ly:music-set-property! musChord 'elements (append els (list (make-music 'GlissandoEvent))))
+ musChord))
+
+ (define (get-notes musicChord)
+ (filter (lambda(x) (eq? (ly:music-property x 'name) 'NoteEvent))
+ (ly:music-property musicChord 'elements)))
+
+ (define (select-note musChord index)
+ (let* ((notes (get-notes musChord))
+ (non-notes (filter (lambda (x)
+ (not (eq? (ly:music-property x 'name)
+ 'NoteEvent)))
+ (ly:music-property musChord 'elements)))
+ (selected-note (list-ref notes index))
+ (new-els (cons selected-note non-notes))
+ (new-mus (ly:music-deep-copy musChord)))
+ (ly:music-set-property! new-mus 'elements new-els)
+ new-mus))
+
+ (define (add-glissando-line mus1 mus2 index)
+ (context-spec-music
+ (context-spec-music
+ (make-sequential-music
+ (list
+ hideNotes
+ (make-grob-property-set 'StringNumber 'transparent #t)
+ (make-grob-property-set 'NoteColumn 'ignore-collision #t)
+ ;; obviously, this isn't equivalent to \once,
+ ;; so could be changed if required
+ (make-grob-property-set 'Glissando 'thickness 2)
+ (make-grob-property-set 'DynamicText 'transparent #t)
+ (make-grob-property-set 'DynamicLineSpanner 'transparent #t)
+ (make-grob-property-set 'DynamicTextSpanner 'transparent #t)
+ (add-glissando (select-note mus1 index))
+ (select-note mus2 index)))
+ 'Bottom (symbol->string (gensym)))
+ 'Staff))
+
+ (let* ((notes1 (get-notes mus1))
+ (notes2 (get-notes mus2))
+ (note-count (min (length notes1) (length notes2))))
+
+ #{
+ \once \override Glissando #'minimum-length = #4
+ \once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods
+ <<
+ {
+ $(add-glissando mus1)
+ $mus2
+ }
+ $(make-simultaneous-music
+ (map (lambda (x)
+ (add-glissando-line mus1 mus2 x))
+ (iota note-count)))
+ >>
+ \revert NoteColumn #'ignore-collision
+ #}))
clef =
#(define-music-function (parser location type) (string?)
argument))
-
+footnoteGrob =
+#(define-music-function (parser location grob-name offset text footnote)
+ (symbol? number-pair? markup? markup?)
+ (_i "Attach @var{text} to @var{grob-name} at offset @var{offset},
+ with @var{text} referring to @var{footnote} (use like @code{\\once})")
+ (make-music 'FootnoteEvent
+ 'symbol grob-name
+ 'X-offset (car offset)
+ 'Y-offset (cdr offset)
+ 'text text
+ 'footnote-text footnote))
+
+footnote =
+#(define-music-function (parser location offset text footnote)
+ (number-pair? markup? markup?)
+ (_i "Attach @var{text} at @var{offset} with @var{text} referring
+ to @var{footnote} (use like @code{\\tweak})")
+ (make-music 'FootnoteEvent
+ 'X-offset (car offset)
+ 'Y-offset (cdr offset)
+ 'text text
+ 'footnote-text footnote))
grace =
#(def-grace-function startGraceMusic stopGraceMusic