On Sun, Dec 16, 2012 at 1:11 PM, Ben Rudiak-Gould <benrud...@gmail.com>wrote:
> I have hacked something up (see code below), but it doesn't work very well: > > * It works for slurs on either end as long as they span at least two > notes. I can get it to work with single-note slurs at the end of the > line by writing c'( s1*0) or c'( <>), but I get the warning > "programming error: bounds of this piece aren't breakable." I haven't > found a way to make it work with single-note slurs at the beginning of > the line. > > * It works for lyric hyphens and extenders if there's an extra note > with no lyric to extend to. I have to use "" as the lyric for this > note, not _. This has the side effect that the lyric syllable isn't > aligned properly at the end of the line (it's centered under the note > instead of left-aligned). > > * I can't get it to work for ties in either direction no matter what I try. > > * It doesn't do anything to explicit beams (not that I suppose anyone > would want to break beams this way), and it doesn't work properly with > ligature brackets or tuplet brackets -- the bracket extends to the bar > line but appears to begin/end there instead of being broken. > > MS, I hope you can tell me if there's a way to work around these > problems in Scheme alone. > > -- Ben > > --------8<-------- > > \version "2.17.9" > > % This is necessary to avoid a warning > #(set-object-property! 'fake-break-left 'backend-type? boolean?) > #(set-object-property! 'fake-break-right 'backend-type? boolean?) > > #(define (fake-break-engraver score-context) > > (let ((last-barline #f) (open-spanners '())) > > (define (handle-barline barline) > (set! last-barline barline) > (set! open-spanners (filter try-extend-right open-spanners)) ) > > (define (try-extend-right spanner) > (let ((still-open (null? (ly:spanner-bound spanner RIGHT)))) > (if (not still-open) > (ly:spanner-set-bound! spanner RIGHT last-barline) ) > still-open )) > > (define (handle-spanner-start spanner) > (if (eq? #t (ly:grob-property spanner 'fake-break-left)) > (if last-barline > (ly:spanner-set-bound! spanner LEFT last-barline) )) > (if (eq? #t (ly:grob-property spanner 'fake-break-right)) > (set! open-spanners (cons spanner open-spanners)) )) > > `((acknowledgers > > (paper-column-interface . > ,(lambda (engraver grob source-engraver) > (if (and (eq? 'NonMusicalPaperColumn > (assoc-ref (ly:grob-property grob 'meta) 'name) ) > (not (null? (ly:grob-property grob 'measure-length))) > ) > (handle-barline grob) ))) > > (spanner-interface . > ,(lambda (engraver grob source-engraver) > (handle-spanner-start grob) )))))) > > > \layout { \context { \Score \consists #fake-break-engraver } } > > \paper { ragged-right = ##t } > > \score { > << > \new Staff { > c' d' \once \override PhrasingSlur #'fake-break-right = ##t e'\( f'\) > } > \addlyrics { > First to \once \override LyricHyphen #'fake-break-right = ##t sec -- > "" > } > \new Staff { > \once \override Slur #'fake-break-left = ##t g'( a') b'2 > } > \addlyrics { > \once \override LyricHyphen #'fake-break-left = ##t _ -- ond. > } > \new Staff { > c'16 c' c' c' c'4 c' c'16 c' c' c' > } > >> > } > > --------8<-------- Greetings, Ben Rudiak-Gould - I was hoping someone else would respond, but I haven't seen anything, so here goes . . . I know almost nothing about Scheme, so I won't try to evaluate your snippet. However, the function would be valuable, so I would encourage you to submit your snippet to the Snippet Repository so that others can use it. Do you want to make this a feature request? All the best, Ralph _______________________________________________ bug-lilypond mailing list bug-lilypond@gnu.org https://lists.gnu.org/mailman/listinfo/bug-lilypond