[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
music-function for ending TextSpanners sometimes fail for skip-events
From: |
Thomas Morley |
Subject: |
music-function for ending TextSpanners sometimes fail for skip-events |
Date: |
Tue, 23 Oct 2018 23:33:09 +0200 |
Hi,
for some reason I wanted a music-function which should end a
TextSpanner automagically at the next event which starts a new
TextSpanner or the last possible event at all.
Although it needs further testing I already found a glitch I really
can't explain or cope with: Sometimes, when the TextSpanner is
attached to skip-events, ending them gets confused. It sometimes can
be cured, if the skips are devided, i.e. s2 becomes s4 s4.
So why????
And how to fix the function, which is inspired by our endSpanners-function.
Here the code:
\version "2.19.82"
endTextSpanners =
#(define-music-function (music) (ly:music?)
(_i "Terminate a TextSpanner at the last rhythmic-event or at the next
rhythmic-event which starts a new TextSpanner, without the need to use
@code{\\stopTextSpan}.")
(let ((counter 0)
(last-rhythmic-ev #f)
(end-span-ev-chrd
(make-event-chord
(list (make-music
'TextSpanEvent
'span-direction
1)))))
(map-some-music
(lambda (m)
(and (or (music-is-of-type? m 'rhythmic-event)
(music-is-of-type? m 'skip-event))
(let* ((mus (ly:music-deep-copy m)))
(set! last-rhythmic-ev mus)
(cond ((and (zero? counter)
(pair? (extract-typed-music mus 'text-span-event)))
(begin
(set! counter (1+ counter))
mus))
((pair? (extract-typed-music mus 'text-span-event))
(make-sequential-music
(list
end-span-ev-chrd
mus)))
(else mus)))))
music)
(map-some-music
(lambda (mc)
(and (equal? mc last-rhythmic-ev)
(make-sequential-music
(list
end-span-ev-chrd
mc))))
music)
(set! counter 0)
(set! last-rhythmic-ev #f)
music))
%% Only for better viewing
\layout {
\override TextSpanner.style = #'solid
\override TextSpanner.bound-details.left.text = "X"
}
%% This returns:
%% warning: cannot find start of text spanner
\endTextSpanners
{
s2 -\startTextSpan
s2
s2
}
%% This one works !!
\endTextSpanners
{
s2 -\startTextSpan
s4 s
s2
}
%% This one as well
\endTextSpanners
{
c'2 -\startTextSpan
d'2
e'2
}
Thanks,
Harm
- music-function for ending TextSpanners sometimes fail for skip-events,
Thomas Morley <=
- Re: music-function for ending TextSpanners sometimes fail for skip-events, David Kastrup, 2018/10/23
- Re: music-function for ending TextSpanners sometimes fail for skip-events, Thomas Morley, 2018/10/23
- Re: music-function for ending TextSpanners sometimes fail for skip-events, David Kastrup, 2018/10/23
- Re: music-function for ending TextSpanners sometimes fail for skip-events, Thomas Morley, 2018/10/24
- Re: music-function for ending TextSpanners sometimes fail for skip-events, David Kastrup, 2018/10/24
- Re: music-function for ending TextSpanners sometimes fail for skip-events, Thomas Morley, 2018/10/25
- Re: music-function for ending TextSpanners sometimes fail for skip-events, David Kastrup, 2018/10/25