lilypond-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: shorten a broken hairpin at a linebreak?


From: Mike Solomon
Subject: Re: shorten a broken hairpin at a linebreak?
Date: Tue, 30 Aug 2011 08:59:58 +0200


On Aug 29, 2011, at 11:56 PM, David Nalesnik wrote:



On Mon, Aug 29, 2011 at 4:50 PM, David Nalesnik <address@hidden> wrote:

\relative c' {
       \override Hairpin #'color = #red
       \key ces\major
       \eraseBrokenHairpin #(list  41 23  15 0  13 0) ;; recast as offsets from line-width

Oops, sorry -- above comment should use %% instead of ;;

David

How about:

\version "2.14.0"

#(define (has-interface? grob interface)
  (member interface
          (assoc-get 'interfaces
                     (ly:grob-property grob 'meta))))

#(define (find-system grob)
  (if (has-interface? grob 'system-interface)
      grob
      (find-system (ly:grob-parent grob X))))

#(define (first-musical-column grobl)
  (if (not (eqv? #t (ly:grob-property (car grobl) 'non-musical)))
      (car grobl)
      (first-musical-column (cdr grobl))))

#(define (change-bound grob)
  (let* ((system (find-system grob))
         (cols (ly:grob-array->list (ly:grob-object system 'columns)))
         (musical-column (first-musical-column (reverse cols))))
    (ly:spanner-set-bound! grob RIGHT musical-column)))
         
#(define (my-callback grob)
   (let* (
          ;; have we been split?
          (orig (ly:grob-original grob))

          ;; if yes, get the split pieces (our siblings)
          (siblings (if (ly:grob? orig)
                        (ly:spanner-broken-into orig)
                        '())))

     (if (and (>= (length siblings) 2)
              (not (eq? (car (reverse siblings)) grob)))
       (change-bound grob))))
{
 \override Hairpin #'after-line-breaking = #my-callback
 a\< \repeat unfold 31 { a } \break \key fis \major \repeat unfold 74 { a } a\p
}

Cheers,
MS


reply via email to

[Prev in Thread] Current Thread [Next in Thread]