Skip to content

1.9

Choose a tag to compare

@sbeitzel sbeitzel released this 24 Sep 15:00
· 59 commits to main since this release
01351da

Quoted text is no longer lost.

Two fixes to quoted text that 1.8.0 parsed but lost before the renderer saw it. Both show
up in the same line of svpb-music's Bengullion.abc, [2 "repeat of part 2"{g}A…. One
adds a public enum case, which is why this is 1.9.0 and not 1.8.1.

Text before a grace group (#176)

"^text"{g}A and "G"{g}A attached the annotation or chord symbol to the first grace note,
and nothing draws text on grace notes, so it disappeared. §4.20 puts grace notes first, but
pipe music often writes the text ahead of the braces, and abcm2ps attaches it to the main
note. CeolKit now does the same: quoted text written before or inside a grace group goes to
the note after the }. A decoration inside the braces, as in {!accent!g}, still belongs to
its grace note.

Unprefixed text that is not a chord (#177)

Quoted text with no placement prefix is read as a chord symbol (§4.18). Text that did not
start with a note letter, like "repeat of part 2", was dropped with no diagnostic. Text that
did, like "Fine", became an F chord of quality "ine", which a transposer would turn into
"Gine".

  • A chord symbol must now spell a chord from start to finish: a root and accidental
    (♯/♭ count), a type made of chord-quality words, signs and numbers (m, maj7,
    dim, +, sus4, add9, 7b5, ø, …), an optional /bass, and an optional alternate
    chord like "G(Em)".
  • Anything else becomes an Annotation at the new AnnotationPosition.chordLine. Nothing
    that plays or transposes chords sees it, and ChordSymbol.root stays non-optional.
  • It is drawn as abcm2ps draws it, on the chord-symbol line. A note with both a chord symbol
    and such text stacks them in the order written.
  • A new unrecognisedChordSymbol warning points at the string and suggests "^…".

CONFORMANCE.md has the rules.

What's Changed

Full Changelog: v1.8.0...v1.9.0

Upgrading

Source-compatible with 1.8.0, with one exception: AnnotationPosition gains a chordLine
case, so an exhaustive switch over it with no default needs one more arm.
DiagnosticCode also gains unrecognisedChordSymbol.

Behaviour changes:

  • Quoted text that is not a chord ("Fine", "D.C. al Fine", "N.C.") is no longer a
    ChordSymbol. If you read these strings from Note.chordSymbol?.raw, read the
    .chordLine entries of annotations instead. Parses that contain such text now produce a
    warning.
  • ChordSymbol.quality no longer includes an alternate chord: "G(Em)" has quality "".
    raw still holds the full string.

Engraved output changes for tunes that write quoted text before a grace group, or
unprefixed text that does not start with a note letter, because that text is now drawn. It
also changes for a note that carries both a chord symbol and such text, because the two
now stack. Other tunes are byte-identical to 1.8.0.