Document Indonesian notasi angka gap analysis and implementation plan - #31
Merged
Merged
Conversation
Researched Indonesian numbered notation (notasi angka) conventions -- pitch/octave/duration marks, accidentals, articulation, dynamics, breath marks, repeat/navigation symbols, multi-verse lyrics, SATB choral scores -- and checked each against what JianpuEditor actually implements (not just against memory: grepped every OrnamentType reference, read JianpuPitchCodec's accidental rendering, checked the model for dynamics/bar-line-type/multi-voice fields). Key finding baked into the plan's design: almost none of the gaps are actually Indonesian-vs-Chinese style differences -- they're plain missing notation elements both traditions use identically, safe to add as new empty-by-default fields. Exactly one gap (the accidental symbol: Indonesian suffixes a slash, this renderer prefixes #/b) is a genuine regional style difference, so only that one needs gating behind a notation-style setting, generalizing the existing UnderlinesAbove toggle. Every implementation phase carries an explicit acceptance check: an existing Chinese/Western-style score must render unchanged. Also surfaced that four OrnamentType values (Staccato, Accent, Tenuto, Glissando) and four more (RepeatStart/RepeatEnd/Segno/Coda) are already declared in the enum with zero implementation anywhere -- dead code placeholders this plan's phase 3 and 6 wire up rather than reinvent. No code changes -- planning document only, added to ROADMAP.md alongside the existing feature-tracking entries (CLAP support, plugin system, etc.) rather than as a separate file. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Pguj4XSScE141p1ScWoqEr
A second research pass (another agent) on Indonesian notasi angka was cross-checked against the code rather than taken at face value. Its Kepatihan section (gamelan cipher notation, a different notation system entirely) is intentionally excluded per instruction. Two genuinely new, verified findings from the rest of it: - The tie tool has a real bug, not just a missing feature: TieEditorViewModel.TryCompleteTie only validates that the end note comes after the start note, never that the pitches match, and ScoreMidiSchedule.BuildTieEndSet unconditionally suppresses the tied end note's own NoteOn. A "tie" drawn between two different pitches today silently drops the second note's actual pitch during playback and MIDI export. This affects existing Chinese/Western scores too, independent of any Indonesian-specific work, so it's called out as its own high-priority phase (3) with a same-pitch validation fix, followed by real slur support once that guard exists (a slur has no pitch constraint and only affects rendering, not playback). - Volta brackets (1st/2nd endings) folded into the repeat/navigation phase alongside bar-line types and D.C./D.S./Coda/Segno. Also refined the Natural/pugar accidental note: modern typesetting uses the plain natural sign (♮) rather than a slash variant, so unlike sharp/flat it doesn't need a NotationStyle branch at all. Phases renumbered accordingly (10 total, was 9). No code changes. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Pguj4XSScE141p1ScWoqEr
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Researched Indonesian numbered notation (notasi angka) conventions — pitch/octave/duration
marks, accidentals, articulation, dynamics, breath marks, repeat/navigation symbols, multi-verse
lyrics, SATB choral scores — and checked each against what
JianpuEditoractually implements(not from memory: grepped every
OrnamentTypereference, readJianpuPitchCodec's accidentalrendering, checked the model for dynamics/bar-line-type/multi-voice fields).
Key finding baked into the plan's design: almost none of the gaps are actually
Indonesian-vs-Chinese style differences — they're plain missing notation elements both traditions
use identically, safe to add as new empty-by-default fields. Exactly one gap (the accidental
symbol: Indonesian suffixes a slash, this renderer prefixes
#/b) is a genuine regional styledifference, so only that one needs gating behind a notation-style setting, generalizing the
existing
UnderlinesAbovetoggle. Every phase in the plan carries an explicit acceptance check:an existing Chinese/Western-style score must render unchanged.
Also surfaced that four
OrnamentTypevalues (Staccato,Accent,Tenuto,Glissando) andfour more (
RepeatStart/RepeatEnd/Segno/Coda) are already declared in the enum with zeroimplementation anywhere — dead code placeholders this plan's phases wire up rather than reinvent.
What changed
No code changes — planning document only, added to
ROADMAP.mdas a new section alongside theexisting feature-tracking entries (CLAP support, plugin system, etc.) rather than as a separate
file, matching this repo's existing convention for tracking planned work.
Test plan
Docs-only change; no build/behavior impact. CI should pass trivially.
🤖 Generated with Claude Code
https://claude.ai/code/session_01Pguj4XSScE141p1ScWoqEr
Generated by Claude Code