Re: Automatically adding extender lines in lyrics

2023-12-23 Thread Jon Arnold
Ope- I found where I got it:
https://lists.gnu.org/archive/html/lilypond-user/2020-08/msg00171.html

On Sat, Dec 23, 2023 at 1:09 PM Jon Arnold 
wrote:

> I'm not sure where I found it, but the file that I have is slightly
> different. It's worked well for me.
>
> Here's the content:
>
>> \version "2.20.0"
>>
>> #(define (conditional-kill-lyric-extender-callback . args)
>>   (lambda (grob)
>>(let* ((orig (ly:grob-original grob))
>>  (siblings (ly:spanner-broken-into orig))
>>   (minimum-length
>>(if (null? args)
>> (ly:grob-property grob 'minimum-length 0)
>> (car args)))
>>   (X-extent (ly:stencil-extent (ly:grob-property grob 'stencil
>> empty-stencil) X))
>>   (natural-length (- (cdr X-extent) (car X-extent
>> (if (and (> minimum-length natural-length)
>> (<= (length siblings) 1)) ;; never kill a broken extender
>>  (ly:grob-suicide! grob)
>>
>> \layout {
>>   \context {
>> \Lyrics
>> \override LyricExtender.minimum-length = #1
>> \override LyricExtender.after-line-breaking =
>> #(conditional-kill-lyric-extender-callback)
>>   }
>> }
>>
>> autoextenders =
>> #(define-music-function (lyrics) (ly:music?)
>>(let* ((has-hyphen?
>>(lambda (event)
>>  (let* ((art (ly:music-property event 'articulations))
>> (is-hyphen? (lambda (ev) (eq? (ly:music-property ev
>> 'name) 'HyphenEvent
>>(find is-hyphen? art
>>   (has-extender?
>>(lambda (event)
>>  (let* ((art (ly:music-property event 'articulations))
>> (is-hyphen? (lambda (ev) (eq? (ly:music-property ev
>> 'name) 'ExtenderEvent
>>(find is-hyphen? art
>>   (add-extender!
>>(lambda (event)
>>  (ly:music-set-property! event 'articulations
>>(append (ly:music-property event 'articulations) (list
>> (make-music 'ExtenderEvent
>>  event)))
>>  (music-map
>>   (lambda (event)
>> (if (and (eq? (ly:music-property event 'name) 'LyricEvent)
>>  ; do not add extenders below hyphens
>>  (not (has-hyphen? event))
>>  ; do not duplicate extenders
>>  (not (has-extender? event))
>>  ; do not add additional extenders after _ (internally
>> equivalent to " ")
>>  ; to avoid killed extenders
>>  (not (equal? (ly:music-property event 'text) " "))
>>  ; do not add extenders after "" to allow ending extenders
>>  ; within _ _ _ _ skip sequences with _ _ "" _ _
>>  (not (equal? (ly:music-property event 'text) ""))
>>  ; ditto, with _ _ \markup{|null} _ _
>>  (not (equal? (ly:music-property event 'text) (markup
>> #:null)))
>>  )
>> (add-extender! event))
>> event)
>>   lyrics)))
>>
>> #(set! toplevel-music-functions
>>(cons (lambda (music) (autoextenders music))
>>  toplevel-music-functions))
>>
>
> On Sat, Dec 23, 2023 at 10:39 AM Werner LEMBERG  wrote:
>
>>
>> > Often, multiple voices in a score have the same lyrics, or the
>> > lyrics have repeating components (such as lines from a poem).  Is
>> > there a way to automatically add extender lines to melismata in the
>> > lyrics?
>>
>> Examples, please, both a scan from a real-world example, and ideally
>> some LilyPond code that demonstrates how you want to do it.
>>
>> Have you already checked our issues database?  Maybe the problem is
>> already filed.
>>
>>   https://gitlab.com/lilypond/lilypond/-/issues
>>
>>
>>  Werner
>>
>>


Re: Automatically adding extender lines in lyrics

2023-12-23 Thread Jon Arnold
I'm not sure where I found it, but the file that I have is slightly
different. It's worked well for me.

Here's the content:

> \version "2.20.0"
>
> #(define (conditional-kill-lyric-extender-callback . args)
>   (lambda (grob)
>(let* ((orig (ly:grob-original grob))
>  (siblings (ly:spanner-broken-into orig))
>   (minimum-length
>(if (null? args)
> (ly:grob-property grob 'minimum-length 0)
> (car args)))
>   (X-extent (ly:stencil-extent (ly:grob-property grob 'stencil
> empty-stencil) X))
>   (natural-length (- (cdr X-extent) (car X-extent
> (if (and (> minimum-length natural-length)
> (<= (length siblings) 1)) ;; never kill a broken extender
>  (ly:grob-suicide! grob)
>
> \layout {
>   \context {
> \Lyrics
> \override LyricExtender.minimum-length = #1
> \override LyricExtender.after-line-breaking =
> #(conditional-kill-lyric-extender-callback)
>   }
> }
>
> autoextenders =
> #(define-music-function (lyrics) (ly:music?)
>(let* ((has-hyphen?
>(lambda (event)
>  (let* ((art (ly:music-property event 'articulations))
> (is-hyphen? (lambda (ev) (eq? (ly:music-property ev
> 'name) 'HyphenEvent
>(find is-hyphen? art
>   (has-extender?
>(lambda (event)
>  (let* ((art (ly:music-property event 'articulations))
> (is-hyphen? (lambda (ev) (eq? (ly:music-property ev
> 'name) 'ExtenderEvent
>(find is-hyphen? art
>   (add-extender!
>(lambda (event)
>  (ly:music-set-property! event 'articulations
>(append (ly:music-property event 'articulations) (list
> (make-music 'ExtenderEvent
>  event)))
>  (music-map
>   (lambda (event)
> (if (and (eq? (ly:music-property event 'name) 'LyricEvent)
>  ; do not add extenders below hyphens
>  (not (has-hyphen? event))
>  ; do not duplicate extenders
>  (not (has-extender? event))
>  ; do not add additional extenders after _ (internally
> equivalent to " ")
>  ; to avoid killed extenders
>  (not (equal? (ly:music-property event 'text) " "))
>  ; do not add extenders after "" to allow ending extenders
>  ; within _ _ _ _ skip sequences with _ _ "" _ _
>  (not (equal? (ly:music-property event 'text) ""))
>  ; ditto, with _ _ \markup{|null} _ _
>  (not (equal? (ly:music-property event 'text) (markup
> #:null)))
>  )
> (add-extender! event))
> event)
>   lyrics)))
>
> #(set! toplevel-music-functions
>(cons (lambda (music) (autoextenders music))
>  toplevel-music-functions))
>

On Sat, Dec 23, 2023 at 10:39 AM Werner LEMBERG  wrote:

>
> > Often, multiple voices in a score have the same lyrics, or the
> > lyrics have repeating components (such as lines from a poem).  Is
> > there a way to automatically add extender lines to melismata in the
> > lyrics?
>
> Examples, please, both a scan from a real-world example, and ideally
> some LilyPond code that demonstrates how you want to do it.
>
> Have you already checked our issues database?  Maybe the problem is
> already filed.
>
>   https://gitlab.com/lilypond/lilypond/-/issues
>
>
>  Werner
>
>


Re: Automatically adding extender lines in lyrics

2023-12-23 Thread Werner LEMBERG


> Often, multiple voices in a score have the same lyrics, or the
> lyrics have repeating components (such as lines from a poem).  Is
> there a way to automatically add extender lines to melismata in the
> lyrics?

Examples, please, both a scan from a real-world example, and ideally
some LilyPond code that demonstrates how you want to do it.

Have you already checked our issues database?  Maybe the problem is
already filed.

  https://gitlab.com/lilypond/lilypond/-/issues


 Werner



Automatically adding extender lines in lyrics

2023-12-23 Thread YTG 1234

Hello,

Often, multiple voices in a score have the same lyrics, or the lyrics 
have repeating components (such as lines from a poem). Is there a way to 
automatically add extender lines to melismata in the lyrics?


I found this old project: 
https://github.com/lyp-packages/auto-extenders, but, at as far as I can 
understand the code, it adds extenders indiscriminately to /every/ syllable.


I think the best way to go about this is to check whether the note or 
chord in the associated voice at the same musical moment as a lyric has 
a shorter duration than the lyric, and add an extender if it does. 
Alternatively, perhaps one could emulate the manner in which Lilypond 
itself detects melismata (by slurs, manual beams when auto beaming is 
off, or by the \melisma command).


I would appreciate some help with actually implementing that, as I don't 
know enough about Lilypond internals to do it by myself.


P. S. I found an old (~2007) message on the lilypond-devel list, asking 
for something similar, though it doesn't appear to have any replies.