Engrave window: bar numbers, and two silent LilyPond faults

A system can now be given the measure it starts at, in a First bar field
beside key and time. Per slice, since it is the one thing about a
replacement that cannot be inherited from the song. Bar numbering is a
Score property, so it is set once on the first staff, and made visible
only at a line beginning — that vector is fussy: #(#f #t #t) also prints
a number mid-system and #(#f #t #f) prints the second bar's rather than
the first's. It travels in the bundle's engraving object as `bar`.

Two things LilyPond 2.24 was quietly refusing to draw:

`\bar ":|"` and the other old repeat names produce nothing at all — no
error, no warning, exit status 0, just a missing repeat that you find on
the tablet. Every book and forum answer still uses them, so translate
them to the modern spellings.

`\clef treble_8` unquoted is not an octavated clef either. It parses as a
plain treble plus a stray "8" markup that lands under the first note, and
the staff then reads an octave off — a tenor line engraved at soprano
pitch. Quote it.

The source pane, which is where either of those would have been visible,
is now a collapsed section at the bottom rather than a permanent slab. It
uses the panel's own disclosure helper, lifted out of Editor so both can
call it.
This commit is contained in:
Esa Kataja
2026-07-29 13:44:42 +03:00
parent 24b12214bb
commit 8f670cf7db
8 changed files with 156 additions and 53 deletions
+6
View File
@@ -147,6 +147,10 @@ class Replacement:
voices: list[Voice] = field(default_factory=list)
key: str | None = None
time: str | None = None
# The measure this system starts at, printed above its first bar the way a
# score numbers its systems. Per slice and nothing else: it is the one thing
# about a replacement that cannot be inherited or guessed.
bar: int | None = None
# The printed score repeats the key signature at every system but not the
# time signature, so a re-engraved middle slice must not show one.
print_time: bool = False
@@ -356,6 +360,7 @@ class Project:
**({"key": r.key} if r.key else {}),
**({"time": r.time} if r.time else {}),
**({"print_time": True} if r.print_time else {}),
**({"bar": r.bar} if r.bar else {}),
}
for r in page.replacements
],
@@ -412,6 +417,7 @@ class Project:
key=r.get("key"),
time=r.get("time"),
print_time=r.get("print_time", False),
bar=r.get("bar"),
)
for r in page.get("replacements", [None] * len(page["discards"]))
],