Skip to content

feat: support SMuFL other marks in mx::api - #382

Open
rpatters1 wants to merge 2 commits into
webern:mainfrom
rpatters1:smufl-for-other
Open

feat: support SMuFL other marks in mx::api#382
rpatters1 wants to merge 2 commits into
webern:mainfrom
rpatters1:smufl-for-other

Conversation

@rpatters1

Copy link
Copy Markdown
Contributor

Human Summary

Preserve SMuFL glyph names for MusicXML other-* marks and expose general other-notation through mx::api. Compound dynamics such as ffz now retain all ordered components instead of losing everything after the first child.

Summary

Add mark-specific API payloads for other-articulation, other-dynamics, other-ornament, and other-technical, keeping fallback text and the optional smufl glyph name independent.

Represent one MusicXML <dynamics> element as an ordered compound mark when it contains multiple children. Single standard dynamics retain the existing MarkData representation for source compatibility.

Add symmetric other-notation support for text, type, number, smufl, id, position, and print data. The change also fixes explicit print-object="no" emission and retires anonymous namespaces in touched files for unity-build compatibility.

Nine existing synthetic other-* fixtures now pass and are pinned in the API round-trip baseline.

Testing

  • make api-test MX_RUNNING_IN_DOCKER=1 (500 test cases, 5510 assertions)
  • make api-roundtrip MX_RUNNING_IN_DOCKER=1 (305 pinned files, 0 failed)
  • make fmt-check MX_RUNNING_IN_DOCKER=1
  • Strict unity build of target mx
  • git diff --check

References

## Human Summary

Preserve MusicXML other-notation and other mark SMuFL data through mx::api. Compound dynamics such as ffz retain their ordered dynamic components instead of losing everything after the first child.

## Summary

Add typed API payloads for standard and other dynamic components, including ordered compound dynamics, and carry the smufl attribute for other-articulation, other-dynamics, other-ornament, and other-technical marks. Add a symmetric other-notation payload for its text, type, number, smufl, id, position, and print data.

Keep single standard dynamics on the existing MarkData representation for source compatibility. Multiple children of one MusicXML dynamics element are owned by one compound mark, avoiding neighbor inference and preserving their order on write. Text and smufl remain independent for other dynamics because MusicXML permits a fallback text value alongside the glyph name.

Also correct generic print-object writing so an explicit no value is emitted. Retire anonymous namespaces in the touched implementation files for strict unity-build compatibility.

Nine synthetic other-mark fixtures now pass the API round-trip gate and are pinned in roundtrip-baseline.txt.

## Testing

- make api-test MX_RUNNING_IN_DOCKER=1 (500 test cases, 5510 assertions)
- make api-roundtrip MX_RUNNING_IN_DOCKER=1 (305 pinned files, 0 failed)
- make fmt-check MX_RUNNING_IN_DOCKER=1
- strict unity build of target mx
- git diff --check
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add SMuFL payloads for MusicXML other-* marks and expose other-notation

1 participant