Excellent, Thank you so much!  This works wonderfully.

*Benjamin Bloomfield*


On Thu, Sep 19, 2013 at 12:12 PM, David Nalesnik
<[email protected]>wrote:

>
>
>
> On Thu, Sep 19, 2013 at 11:01 AM, David Nalesnik <[email protected]
> > wrote:
>
>> Hi Benjamin,
>>
>>
> [...]
>
>
>> This is what I come up with:
>>
>
> [...]
>
> OK, that was unnecessarily roundabout.  Why bother with columns when I
> have access to all grobs, and I can just compare LyricText grobs?
>
> Try this:
>
> (Again, should work on 2.16.1.)
>
> %%%%%%%%%%%%%%%%%%%%
>
> \version "2.17.25"
>
> #(define (my-callback grob)
>    (let* ((text (ly:grob-property-data grob 'text))
>           (refp (ly:grob-system grob))
>           ; This returns all grobs in a line.
>           (all-grobs (ly:grob-array->list
>                       (ly:grob-object refp 'all-elements)))
>           ; We're only interested in LyricText grobs.
>           (just-syllables
>             (filter
>               (lambda (x) (grob::has-interface x
> 'lyric-syllable-interface))
>               all-grobs))
>           ; We want the first LyricText grob in the system.  We must
> locate this
>           ; by position, since grobs don't seem to be listed in order in
> the
>           ; 'all-elements grob array.
>           (first-syl
>              (fold
>                (lambda (elem prev)
>                  (if (< (ly:grob-relative-coordinate elem refp X)
>                         (ly:grob-relative-coordinate prev refp X))
>                      elem
>                      prev))
>               (car just-syllables)
>               just-syllables)))
>
>      ; If our LyricText grob is the first on the line, override its
> stencil.
>      (if (eq? grob first-syl)
>          (begin
>            (ly:grob-set-property! grob 'text
>              #{ \markup \combine #text \translate #'(1.6 . -0.5)
> \draw-line #'(-4 . 0) #})
>            (ly:grob-set-property! grob 'stencil (lyric-text::print
> grob))))))
>
> melody = \repeat unfold 16 g'4
> lyr = \lyricmode {
>   \repeat unfold 16 sol
> }
> \score {
>   \new Staff <<
>     \new Voice = "voice" {
>       \melody
>     }
>     \new Lyrics \with {
>       \override LyricText #'after-line-breaking = #my-callback
>     } \lyricsto "voice" \lyr
>   >>
> }
> \paper {
>   indent = 0
>   line-width = 5.5\cm
> }
>
>
_______________________________________________
lilypond-user mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to