lilypond-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Fix issues 1259 and 1433 (\breakDynamicSpan and a spanner's style=#


From: reinhold . kainhofer
Subject: Re: Fix issues 1259 and 1433 (\breakDynamicSpan and a spanner's style=#'none over a line break) (issue4630070)
Date: Wed, 06 Jul 2011 15:07:51 +0000

On 2011/07/03 23:09:21, Reinhold wrote:
I'll have to investigate tomorrow why this
\breakDynamicSpan doesn't have an effect. It properly breaks the
spanner if it
is placed right before the \p, but not if I put it immediately after
the \dim...
I.e. the following works:

   c'1 c1^\<\breakDynamicSpan c'' \break
   c,,1_\dim
   f,1\breakDynamicSpan\p \break

but this does not:

   c'1 c1^\<\breakDynamicSpan c'' \break
   c,,1_\dim\breakDynamicSpan
   f,1\p \break

I now debugged that problem and the issue is that ALL events created by
\breakDynamicSpan are sent to the engraver before any dynamic event is
sent. In particular, for c1\<\breakDynamicSpan the order of events heard
by the dynamic span engraver is:
1) break event
2) crescendo start event

Similarly, the \dim\breakDynamicSpan (with the implicit \! for the \<)
is actually observed as:
1) break event
2) crescendo end event
3) decrescendo (dim) start event

So, even though the user places the break after the \dim (because he
wants to break the dim), lilypond observes it as if it was placed before
the \dim!


In short, there is no difference if you write
c\<\breakDynamicSpan or c\breakDynamicSpan\< (because you want to break
the previous spanner)

I guess, we'll have to define how \breakDynamicSpan is supposed to work
semantically. Should it
1) End a spanner that is ended at the current moment, but not a spanner
that is created at the current moment, or should it
2) end a spanner that newly created at the current moment, but not a
spanner that was running up to the current moment

In particular, there are several cases:

a) c1\<\breakDynamicSpan c\!   => It should break the newly created \<
in all cases
b) c1\< c\breakDynamicSpan\!   => It should break the existing \<
c) c1\< c\!\breakDynamicSpan   => It should break the (no longer)
existing \< ?!?
d) c1\< c\breakDynamicSpan\> c\! => Should this break the \< or the
\>????
e) c1\< c\>\breakDynamicSpan c\! => Should this break the \< or the
\>????

From an input perspective, d) and e) should work differently (i.e. the
order of events SHOULD matter), but the problem is that the engraver
receives the events reordered, with the break event always being the
first. Is there any way around this?

Cheers,
Reinhold


http://codereview.appspot.com/4630070/



reply via email to

[Prev in Thread] Current Thread [Next in Thread]