DirectionReader::parseRehearsal reads <rehearsal> elements into RehearsalData (text, position, color, enclosure, font) but DirectionWriter has no corresponding write path — rehearsals are silently dropped on output.
RehearsalData already models the full attribute surface (text, positionData, colorData, fontData, enclosure). The writer just needs a loop over directionData.rehearsals that emits <direction-type><rehearsal .../> elements, mirroring the pattern used by segno/coda in PR #203.
PR #134 included a rehearsal writer but was not merged; it was explicitly scoped out of PR #203 to keep that PR focused on segno/coda.
References
DirectionReader::parseRehearsalreads<rehearsal>elements intoRehearsalData(text, position, color, enclosure, font) butDirectionWriterhas no corresponding write path — rehearsals are silently dropped on output.RehearsalDataalready models the full attribute surface (text,positionData,colorData,fontData,enclosure). The writer just needs a loop overdirectionData.rehearsalsthat emits<direction-type><rehearsal .../>elements, mirroring the pattern used by segno/coda in PR #203.PR #134 included a rehearsal writer but was not merged; it was explicitly scoped out of PR #203 to keep that PR focused on segno/coda.
References