Hi Stefano,
I have been looking into the issue and created a branch
'refactor-override' for the edition-engraver.
The following is changed in there:
* Overrides are not applied "by hand" but send as a StreamEvent so that
once is handled by lily and not the EE
* Override (and Revert, Set, Unset) sent by the EE are marked so that
they can be distinguished from other overrides
That means once-overrides are note reverted wrong anymore and the EE
gives a warning if an overrides supersedes/overwrites an EE mod. This is
still not completely satisfactory when the EE shall override all other
settings. But at least it doesn't revert wrong.
If this branch is tested more thoroughly I will merge it into master.
Now I am looking for a way to let the EE be the last broadcaster so that
it will not be overridden by overrides sent from the actual music stream.
Jan-Peter
Am 26.02.2018 um 15:26 schrieb Stefano Troncaro:
Hi everyone! I tried to isolate the issue with Tie directions that I
posted earlier and I'm fairly confident I've stumbled upon a bug.
Look at the output of this snippet (Sorry for the length, I made it as
short as I could)
\version "2.19.80" \language "english" \include "oll-core/package.ily"
\loadPackage edition-engraver
\addEdition test
\consistToContexts #edition-engraver Voice
\layout { \context { \Score \time 6/4
\omit TimeSignature \omit Clef } } forceRebelTie =
#(define-music-function (dir) (ly:dir?)
#{
\override Tie.before-line-breaking =
#(lambda (grob)
(ly:grob-set-property! grob 'direction dir)) #} )
ovA =\once \tieDown ovB =\once \override Tie.direction = #DOWN ovC =\once \forceRebelTie #DOWN formA =\new Staff \with { instrumentName ="All V1" } << \new Voice \relative c''{ \voiceOne b~ 4 4~ 4 4~ 4} >> formB =\new Staff \with { instrumentName ="1V V1" } << \new Voice \relative c''{ b~ \voiceOne 4 \oneVoice 4~ \voiceOne 4 \oneVoice 4~ \voiceOne 4 } >> controlA =\new Staff \with { instrumentName ="No EE" } << \new Voice \relative c''{ \voiceOne \ovA b~ 4 4~ 4 4~ 4 } >> controlB =\new Staff \with { instrumentName ="No EE" } << \new Voice \relative c''{ \voiceOne \ovB b~ 4 4~ 4 4~ 4 } >> controlC =\new Staff \with { instrumentName ="No EE" } << \new Voice \relative c''{ \voiceOne \ovC b~ 4 4~ 4 4~ 4 } >> \markup "Results with \\tieDown" \editionMod test1 0 Voice.A\ovA \editionMod test1 0 Voice.B\ovA \score { \new StaffGroup << \formA \formB \controlA >> } \markup "Results with \\override Tie.direction" \editionMod test1 0 Voice.D\ovB \editionMod test1 0 Voice.E\ovB \score { \new StaffGroup << \formA \formB \controlB >> } \markup "Results with ly:grob-set-property!" \editionMod test1 0 Voice.G\ovC \editionMod test1 0 Voice.H\ovC \score { \new StaffGroup << \formA \formB \controlC >> } \markup "No overrides (default behavior for comparison)" \score { \new StaffGroup << \formA \formB >> }
When \voiceOne is in full effect, both \once \tieDown and\once \override
Tie.direction seem to have a permanent effect that kicks in after the
moment they are used, which is exactly the opposite to what they should
do (take effect only in the moment they are called and revert to the
previous behavior after). This is very clear when you compare the All V1
Staff with the No EE Staff: the All V1 behaves in the exact opposite way.
I have absolutely no idea about why this may be happening, but I'm
certain that one should expect the EE to achieve the same results that
manually writing the code in the desired place and moment would.
Hopefully Jan-Peter or someone more knowledgeable than I can look into it!
I hope this "research" can be useful!
Stéfano
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user
_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user