On Mon, Apr 27, 2015 at 12:16 PM, David Nalesnik <david.nales...@gmail.com> wrote:
> > > On Mon, Apr 27, 2015 at 12:12 PM, David Nalesnik <david.nales...@gmail.com > > wrote: > > Here's a code snippet to show that it is possible to tell if a grob has >> been altered. Right now you have to add the procedure for each grob you >> want to examine. >> >> > The following covers all changed grobs. Thanks, Urs, for your posting at http://lilypondblog.org/2014/04/music-functions-4-recursion/ -- I adapted one of your functions there to apply the override to all objects with a stencil property. (Rather than using a long string of laboriously typed overrides.) --DN %%%%%%%%%%%% \version "2.19.17" #(define (grobs-with-stencils) (let loop ((all all-grob-descriptions) (result '())) (if (null? all) result (if (assoc-get 'stencil (cdar all)) (loop (cdr all) (cons (caar all) result)) (loop (cdr all) result))))) #(define (mark-tweak grob) (let* ((default (assoc-get (grob::name grob) all-grob-descriptions)) (default-after-line (assoc-get 'after-line-breaking default)) (props (ly:grob-basic-properties grob)) ;; Our procedure has been added to the head of grob's basic ;; properties. Let's not count it as a tweak! (props (remove (lambda (p) (and (procedure? (cdr p)) (eq? (procedure-name (cdr p)) 'mark-tweak))) props)) (diff (lset-difference eq? props default))) ;; Tweaks will not appear in the "basic properties" alist of our grob, but ;; we can find them through the music event which led to the grob. This ;; is available through the stream-event which caused our grob. (if (null? diff) (let* ((cause (event-cause grob)) (tweaks (and cause (ly:music-property (ly:event-property cause 'music-cause) 'tweaks)))) (if (pair? tweaks) (set! (ly:grob-property grob 'color) red))) (set! (ly:grob-property grob 'color) green)) ;; Return any default setting of after-line-breaking. (or default-after-line '()))) markAllAlteredGrobs = #(define-music-function (parser location) () (let loop ((grobs (grobs-with-stencils))) (if (null? grobs) #{ #} #{ \override #(list 'Score (car grobs) 'after-line-breaking) = #mark-tweak #(loop (cdr grobs)) #}))) { \markAllAlteredGrobs c' \once \override NoteHead.font-size = 3 c' c' \tweak font-size 3 c' c' %\override Slur.after-line-breaking = #mark-tweak c'( e') \shape #'((0 . 0) (0 . -0.5) (0 . -0.5) (0 . 0)) Slur c'( e') c'( e') c'-\tweak Slur.positions #'(-5 . -5) ( e') \override Hairpin.color = #blue c'\< e'\! <c' e'>\arpeggio \once \override Staff.Arpeggio.positions = #'(-6 . 6) <c' e'>\arpeggio }
_______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user