Hi Kieren,

On Tue, May 5, 2015 at 8:57 AM, Kieren MacMillan <
kieren_macmil...@sympatico.ca> wrote:

> Hi David,
>
> > And it works with that editionEngraver example.
>
> It definitely works with a minimal EE example… Nice work!
>
> However, I added it to my current (definitely non-minimal!) score, and it
> fails with:
>
>   In procedure ly:music-property in expression (ly:music-property
> (ly:event-property cause #) (quote tweaks)):
>   [file-path here] Wrong type argument in position 1 (expecting Music): ()
>
> That line is
>
> #(define (mark-tweak grob)
>      [%%%SNIP%%%]
>      (if (null? diff)
>          (let* ((cause (event-cause grob))
>                 (tweaks (and cause
>                              (ly:music-property    %%%%%%  THIS ONE!!!!
>                               (ly:event-property cause 'music-cause)
>                               'tweaks))))
>
> Can’t spend time tracking down the issue further now, but wanted you to
> know.
>
> Thanks!
>

The fix here is no problem.  Quoting just mark-tweak:

 #(define (mark-tweak grob)
   "Color @var{grob} if it has been tweaked.  The color to use is stored
in the global variables @var{override-color} and @var{tweak-color}."
   (let* ((default (assoc-get (grob::name grob) all-grob-descriptions))
          (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))
          ;; We're using after-line-breaking to set color of stencil, but
          ;; let's preserve its last setting
          (after-line-return (assoc-get 'after-line-breaking props))
          ;; Clef.glyph doesn't appear in all-grob-descriptions, but it
          ;; is set at some point automatically.  Don't mark it unless
          ;; it genuinely is a user override.  There may be other
          ;; such grobs.
          (props
           (if (eq? (grob::name grob) 'Clef)
               (reverse (remove-first 'glyph (reverse props)))
               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))
                (music-cause
                 (if (ly:stream-event? cause)
                     (ly:event-property cause 'music-cause)
                     #f))
                (tweaks (and (ly:music? music-cause)
                             (ly:music-property
                              music-cause
                              'tweaks))))
           (if (pair? tweaks)
               (set! (ly:grob-property grob 'color) tweak-color)))
         (set! (ly:grob-property grob 'color) override-color))

     ;; Return any default setting of after-line-breaking.
     after-line-return))

%%%

Thanks for pointing this out!

David
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to