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/ _______________________________________________ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel