Jonathan Kulp wrote:
> > Actually, just a couple of days ago, Neil Puttock helped me
> > implement some changes that will allow this to produce no
> > warnings. I'll send an updated macro when I get a chance.
> > - Mark
> >
> Cool!  Looking forward to it.

Well, the warnings will be gone in 2.13.1, but users of 2.13.0 and
earlier (of which I am one) will have to put up with the warnings
for now.

Here is the updated file anyway. Lower the version number as
needed, but I like the original to reflect the version for which
it was developed.

Enjoy.
- Mark


      
%% In 2.13.0 and earlier, the following
%% warning may be triggered multiple times:
%%   warning: Ignoring grob for slur: <grob>. avoid-slur not set?
%% This issue has been resolved in 2.13.1
\version "2.13.1"

#(define (parse-grob-sym grob-sym)
   (let* ((grob-str  (symbol->string grob-sym))
          (dot-index (string-index grob-str #\.))
          (context   (if dot-index
                         (string-take grob-str dot-index)
                         "Voice"))
          (grob      (if dot-index
                         (substring grob-str (+ dot-index 1))
                         grob-str)))
     (cons context grob)))
       
hideCurvesFrom =
#(define-music-function
   (parser location grob-sym x-padding y-padding)
   (symbol? pair? pair?)
   (let* ((context  (car (parse-grob-sym grob-sym)))
          (top-grob (cdr (parse-grob-sym grob-sym))))
#{
  \override Tie #'layer = #-2
  \override Slur #'layer = #-2
  \override PhrasingSlur #'layer = #-2
  
  \override $context . $top-grob #'avoid-slur = #'ignore
  \override $context . $top-grob #'layer = #-1
  \override $context . $top-grob #'stencil =
    #(lambda (grob)
       (define (get-stil-proc alist)
         ;; removes the first 'stencil entry from the grob-property
         ;; alist, implicitly created by this callback:
         ;;   (stencil . #<procedure #f (grob)>)
         ;; and then retrieves the original 'stencil procedure.
         (let ((stil-proc (ly:assoc-get 'stencil alist)))
           (if (procedure-name stil-proc)
               stil-proc
               (begin (set! alist (assoc-remove! alist 'stencil))
                      (get-stil-proc alist)))))
       (let* ((basic-props (ly:grob-basic-properties grob))
              (stil-proc (get-stil-proc basic-props))
              (this-stil (stil-proc grob))
              (stil-x-ext (ly:stencil-extent this-stil 0))
              (stil-y-ext (ly:stencil-extent this-stil 1))
              (box-x-ext (cons (- (car stil-x-ext) (car $x-padding))
                               (+ (cdr stil-x-ext) (cdr $x-padding))))
              (box-y-ext (cons (- (car stil-y-ext) (car $y-padding))
                               (+ (cdr stil-y-ext) (cdr $y-padding))))
              (box-w (- (cdr box-x-ext) (car box-x-ext)))
              (box-h (- (cdr box-y-ext) (car box-y-ext))))
      (ly:stencil-add
       (ly:make-stencil
        (list 'embedded-ps
         (ly:format
          (string-append "gsave\n"
                         "currentpoint translate\n"
                         "1 setgray\n"
                         "~4f ~4f ~4f ~4f rectfill\n"
                         "grestore\n")
          (car box-x-ext)
          (car box-y-ext)
          box-w
          box-h))
        stil-x-ext
        stil-y-ext)
       this-stil)))
#}))

revertHideCurvesFrom =
#(define-music-function
   (parser location grob-sym)
   (symbol?)
   (let* ((context  (car (parse-grob-sym grob-sym)))
          (top-grob (cdr (parse-grob-sym grob-sym))))
#{
  \revert Tie #'layer
  \revert Slur #'layer
  \revert PhrasingSlur #'layer
  \revert $context . $top-grob #'avoid-slur
  \revert $context . $top-grob #'layer
  \revert $context . $top-grob #'stencil
#}))

%%%%%%%%%%%%%%%%%% EXAMPLE %%%%%%%%%%%%%%%%%%
%{
\version "2.13.1"

\pointAndClickOff

\relative {
  \repeat volta 2 {
    
    %% syntax: \hideCurvesFrom [grob] [x-padding] [y-padding]
        
    % always call \hideCurvesFrom before the curve starts:
    \hideCurvesFrom #'Fingering           #'(0.3 . 0.3) #'(0 . 0)
    \hideCurvesFrom #'Staff.KeySignature  #'(0.3 . 0.3) #'(0 . 0)
    \hideCurvesFrom #'Staff.TimeSignature #'(0.3 . 0.3) #'(0 . 0)
    
    % a negative padding value can prevent whiteout near an edge:
    \hideCurvesFrom #'Staff.Clef          #'(0.3 . 0.3) #'(0 . -0.5)
    
    \clef bass
      \once \override TextScript #'extra-offset = #'(-8 . 0)
      e,2.\(^\markup \fontsize #-1 \italic
               {tacet la \concat {1 \super \lower #0.5 ma} volta:}
      d4( |
    
    \clef treble \key g \major
      c''4)^2 c2 b4~ |
    
    \time 3/4
      b2\) 
      % updating a previously entered command:
      \hideCurvesFrom #'Staff.Clef #'(0.3 . 0.3) #'(0 . 0)
      fis4( |
    
    \clef bass \time 2/4
      d,4)
      % always call \hideCurvesFrom before the curve starts:
      \hideCurvesFrom #'Score.VoltaBracket #'(0.3 . 0.8) #'(3 . 0)
      e4( |
  }
  
  \alternative {
    { r2 | }
    {
      % revert commands independently as needed:
      \revertHideCurvesFrom #'Score.VoltaBracket
      d2)
    }
  }
    % revert commands when no longer needed:
    \revertHideCurvesFrom #'Fingering
    \revertHideCurvesFrom #'Staff.Clef
    \revertHideCurvesFrom #'Staff.KeySignature
    \revertHideCurvesFrom #'Staff.TimeSignature
}
%}
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
http://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to