The first release installable from the VS Code Marketplace (yotsuda.lilysharp);
0.3.0 shipped as tagged GitHub binaries only. It is also the first release that
changes the language, and every change below is diagnosed rather than silent.
Breaking changes
- Chord entry is the printed symbol —
Am,G7,F#m,Bb7,Gm7-5,
Cmaj7/E: an uppercase root, optional#/b, a bare quality. The LilyPond-shaped
lowercase:entry (a:m,g2:7) and its per-chord durations are replaced by
measure-relative placement — a bar's entries divide it on the beat grid the beams
already own, and.holds the previous chord one more beat. The case is the
grammar: uppercase letters are roots, soRthe rest never collides andbafter
a root is a flat, which is why altered tensions spell+/-(Bb5remains
B-flat's power chord).LYS1028names the old spelling. - The
$sigil is removed. A bare name is a phrase reference. The ambiguity it
hid is closed at the declaration instead: drum vocabulary andqare refused as
phrase names (LYS1030), dynamics were already reserved, and the clef words stay
reachable becauseclef bassowns its keyword. - A staff's display name is a quoted string —
staff flute "Flute". A trailing
bare word now always reads as a part reference, sostaff flute clickno longer
eatsclickas a label and silently stops the click track. The corpus wrote
neither form, so the measured migration cost was zero of 572 books. NoteColumn.force-hshiftis refused (LYS1029) rather than accepted and
ignored — the exact no-op four documents claimed the language did not have. Its
row and the implementation flag flip back together. In the same pass
NoteHead.colorandStem.colorbecame supported: their reader had been live all
along, so a correctly coloured score shipped with an error and exit 1.
New
paperblocks. A page's dimensions come from the source, andsize <name>
sets width, height and the four margins from the paper table, each margin scaled
from a4 exactly the wayscm/paper.scm'sset-paper-sizescales it — horizontal
by the width ratio, vertical by the height ratio, rounded to whole millimetres.
size a4is pinned as the identity.- Named
fontsandpaperblocks.fonts NAME { }/paper NAME { }at the
top level declare reusable blocks that bind nothing by themselves; a score
references one or overrides part of it in place, the override reading as if its
entries were appended to the named block. - MusicXML: import carries the stated page across as a
paperblock, in
millimetres through the scaling bridge, writing only the keys the source wrote;
export emits a form's custom text.
Engraving fidelity
- Lyrics saw the largest body of work: syllables align on their own voice's
notehead, a melisma span became the range rod it always was, every reservation
lands on the column its syllable is drawn on, a word crossing a barline is one
rod, and an independent lyrics row below a multi-staff system now reads that
staff's own profile — it had no floor at all, and was engraved through the notes
on every system but the last. - Lead sheets: every line opens with a bar, no bar runs through a word, stanza
numbers anchor at the line start clear of the opening bar, and the grid row prints
the meter. - Pedal brackets and text-style pedal words hang from their own staff on their own
spanner; bar numbers hang on their staff rather than the system's top band. - Spacing: a glyph is priced at the value it is drawn at rather than its scaled
duration, and several wishes average the way LilyPond averages them.
Performance
- Keystroke latency in scores with lyrics: the loose-line chain caches its prefix and
closes live, verse skylines ride the measure layouts' identity so both passes share
one store, and the lyric band joins the per-system memo.
Verification
- The LilyPond-fidelity ledger is now 573 recorded geometric quantities against
LilyPond 2.26.0 (was 529), with 222 SVG snapshots and 5816 tests, green on
Windows and Linux.
Packaging
- The VS Code extension ships as one self-contained VSIX per platform, each bundling
that platform's .NET runtime and native rendering, so users install nothing but the
extension.