Hello, Just wanted to update on my progress for the GSoC cross-voice spanners project. The approach I am currently trying uses the existing spanner-id property (which can be set like { c\=hello\< d\=hello\! }); spanners with an id are handled as potentially being cross-voice. Each engraver maintains a static list member (so it is shared between all instances of an engraver) of named spanners and the voice each spanner currently belongs to. When listening to events or acknowledging grobs, an engraver can then examine the list to see which spanners currently belong to its voice and modify them, or associate a particular spanner with its voice, for instance.
I have tried this approach with the Dynamic_engraver. My code is not complete, but what I currently have is at https://github.com/starrynte/lilypond/compare/master...experimental . The code should compile and "works", for example, on: \relative c'' << { c2\=hello\< g } \\ { c,4 d e\=hello\! f } >> A few notes: - I temporarily prevented Hairpins from being announced to the Voice context, since cross-voice ones caused issues with the Dynamic_align_engraver, which I have not changed or looked at much yet. Of course, this causes the hairpins to currently be positioned weirdly. - I intend to check for still-active spanners when the Score context is destroyed, and warn about unterminated cross-voice spanners then. Does this general idea seem reasonable? Any feedback is much appreciated. Best, Nathan _______________________________________________ lilypond-devel mailing list lilypond-devel@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-devel