Articulations (A) line)¶
STATUS: SPEC. Binding and order are not redefined here: see
neumaRk_datapack.md §2.1and §3. History inneumaRk_changelog.md, What's new in 0.6.
1. Definition¶
The A) (Articulations) line carries the articulations and ornaments to
apply, position by position, to the events of the music line it is bound to. It
is a parallel layer: it does not alter rhythm, durations or flow, only the
notational attributes of the events.
2. Structural position and binding¶
Marker, optionality and logical order are defined in neumaRk_datapack.md
§2.1 (marker table) and §3 (implicit order: A) is optional and precedes
the N) line of its own note group). In operational summary:
A)refers to the line immediately below ("model §4.A.5"): its tokens are held pending and drained onto that line, for the whole staff.- Which line:
- if the line right below is a
C)(chords), the wholeA)annotates thatC)— only for stave 0 (harmony lives inMeasureShared). See §2.1: marks go on the chord-rhythm heads (if theC)has rhythm), text annotations ("…",["…"],("…")) above the printed chord symbols; - if the line right below is an
N), it annotates thatN), same stave. - In multi-stave each staff has its own pending bucket; voice 2 (
N2) has an independentA)bucket (seeneumaRk_voices.md §3.1). - An
A)that does not have its row below it — written under the lastN)of the datapack, or followed by anotherA)— articulates nothing: it is ignored with W174 (neumaRk_datapack.md§4.1). The exception is a datapack with no note rows, where theA)applies to the default rests.
2.1 A) above chords (text annotations + marks)¶
When the target line is a C), the A) has two distinct channels, both
count-aligned (§4):
- Marks (staccato
., accent>, etc.) → anchored to the chord-rhythm heads (the rhythmic slots), if theC)carries an explicit rhythm. Rendered as signs above the head. This is the historical chord-rhythm behavior. - Text annotations (labels, markup allowed, with the frame of §13.1:
"…",["…"]/[…],("…")) → anchored to the printed chord tokens, one token per column (compact-rhythm-list members such as the 2nd4ofA(4,4), and ghosts, do not count: they are exactly the columns the round-trip re-emits). The label renders above the chord symbol; if a printed token has no chord glyph but has a rhythm head (the repeat/struck!(4)) the label anchors to the head, low, above the note.
Per-slot idiom. To place an annotation (or a mark) on the 2nd note of a rhythm, use the explicit form with printed tokens, not the compact list:
A) | "one" "two" "three" |
C) | A(4) !(4) D | // "two" above the repeat head (low)
With the compact list A(4,4) there is instead a single column for the whole
group, so only one text annotation can anchor to it:
A) | "one" "two" "three" |
C) | A(4,4) D | // "one"→A, "two"→D, "three" DROPS out of flow (W131)
"What you see round-trips" principle. Text annotations align only to the printed columns precisely because serialization (
.nrk) re-emits them at those same positions: no surprise changes after a round-trip. A text token past the last printed column drops out of flow and emits W131 (§4).
Dashed extension line. An annotation with a glued - ("vamp"-) opens a
dashed continuation line that runs at the annotation's height, above the
chord band, to the right. As for notes (§13.3) and for the inline label on the
chord symbol (CASO 2, neumaRk_chords.md §8.5), every column the line covers wants
its own -: a standalone - on a following chord column marks it as "under
the line" — the column is consumed (no label, no W131: it is consumption, not
excess; like the slash / = 1 slot). The line skips over the continuation
columns and stops at the first terminator column:
- the next printed chord symbol that is not a continuation,
- an
NC(No Chord) orR(harmonic rest) bar — a fractionalNC(neumaRk_chords.md§1.2.1) falls under the previous rule instead, being a printed symbol, - or the end of the line/piece.
There is always a downward hook at the far end (toward the staff); the line is vertically centered on the text. It is the above-the-band twin of the CASO 2 inline extension — which instead flips the label to the right of the symbol: here the label stays above, centered.
A) | "vamp"- - - |
C) | C-7 F7 G7 C | // line from "vamp" (over C-7) across F7/G7, hook on C
A) | "vamp"- | | |
C) | C-7 | NC | Bb6 | // the line stops at the left edge of the N.C. glyph (bar 2)
Barline anchoring. As for notes (§13.4–13.5), the chord-anchored extension can anchor to the measure borders:
- begin-bar
-"vamp"as the firstA)token → the label anchors to the measure's left border (not to a symbol) and opens the line to the right. - terminator
-|as the last token (a-glued to the border) → closes the open line on the measure's end-bar, with a hook, no text (twin of §13.5;-|glued vs- |spaced = continuation).
A) | | -"fill"- | | // begin-bar: label at the left border, line → F7
C) | C-7 | | F7 |
A) | | -"fill"- | - -| | // terminator: closes on the end-bar of bar 3
C) | C-7 | | G7 | |
Note. A
"vamp"-as the last token stays inline on that column's symbol (opening the extension from the symbol, as above), not an end-bar anchor: for chords the textual end-bar that closes an open line does not exist (use the-|terminator to close on the border).
Analysis staff { } (over chords). As for notes (§10.3), { } brackets on
the A) row draw a square analysis staff over the chord span: a horizontal
bar with downward legs toward the band and an optional label "…" above
left. { (with optional label) opens the staff on that column's symbol, } closes
it; intermediate columns use . to hold their position (per-token alignment, §4).
A) {"II-V-I" . } .
C) C-7 F7 G7 C // staff "II-V-I" over C-7 F7 G7; C stays outside
On several lines. A ; in an annotation or in the staff label is a line
break (neumaRk_text_markup.md §3bis): the stack grows upward and the last
line stays where the single line would be. An annotation above a
comment-label, or above another annotation on the same chord, clears the whole
stack; the dashed line of "…"- starts from the last line, at its height.
A) "solo;chorus" "vamp;on C"- -
C) C-7"drop;2" F7 G7 C
3. Vocabulary¶
Each token is a symbol (or combination) that maps to an articulation or
ornament. Tokens are separated by spaces; multiple articulations on the same
note are written as a single token without spaces (e.g. >!).
| Token | Meaning | Type |
|---|---|---|
_ |
tenuto | articulation |
> |
accent | articulation |
! |
staccato | articulation |
^ |
marcato | articulation |
+ |
pizzicato (left hand) | articulation |
o |
fermata (above) | articulation |
os |
short fermata | articulation |
ol |
long fermata | articulation |
_! |
portato (tenuto+staccato) | combination |
>! |
staccato accent | combination |
tr |
trill | ornament |
m |
mordent | ornament |
M |
inverted mordent | ornament |
t |
turn | ornament |
T |
inverted turn | ornament |
, |
breath mark | articulation |
V |
caesura (Luftpause) | flow (extension §8+) |
h |
harmonic | articulation (extension §8+) |
v |
up bow | articulation (extension §8+) |
n |
down bow | articulation (extension §8+) |
. |
placeholder: no articulation on that position | — |
hfor the harmonic (the symbol°is not ASCII andois already fermata);v/nfor the bows (nrecalls the ⊓). Added to these are a per-pair token (glissandogl, §9) and two spans (slur( ), wave~, §10), introduced by the decomposable token model in §8.Breath
,vs caesuraV. The breath mark,is a quick catch-breath in the phrasing: it does not stop the metre. The caesura (Luftpause)Vis stronger — the musical flow stops, a silence is added to the ordinary duration, then it resumes. Rendered as a large V just after the note, overlapping the top of the staff. Uppercase so it doesn't collide withv(up bow).
The vocabulary is the closed set of the table above (plus the placeholder
., the per-pair/spans of the §8+ extensions). Only these tokens are valid
articulations; the classification of articulation lines derives from this
set (see §6 and §11). A token outside the vocabulary is not a valid
articulation.
The markers > and ^ make a line uniquely articulations during
classification: no other music line uses them in isolation.
Exception —
FINE(flow directive, not an articulation). The tokenFINE(all caps) is allowed on theA)row but is not an articulation: it is the end-of-piece flow sign anchored to the note (count-aligned like anyA)token). It uses theA)row only as an anchoring surface. Semantics, its rendering (same glyph as the barlineFINE, centered on the note), and the precedence rule against the barlineFINE(W167) are described inneumaRk_flow_and_repeats.md§4.2.1.
3.1 Chromatic ornaments (altering the auxiliary)¶
An ornament may play an altered auxiliary instead of the diatonic one — e.g. in C major an upper mordent on C playing C–D♭–C instead of C–D–C. The accidental is written attached to the ornament token.
Accidental alphabet (attached, right after the sign):
| Symbol | Meaning |
|---|---|
# ## |
sharp / double sharp |
b bb |
flat / double flat |
N |
natural — uppercase (lowercase n is down-bow) |
- |
(turn only) slot with no accidental |
Single-auxiliary ornaments — m (upper mordent), M (lower mordent),
tr (trill): one optional accidental; the side (above/below) is implied by the
sign.
| Write | Plays (in C major) |
|---|---|
mb |
C–D♭–C |
m# |
C–D♯–C |
mN |
C–D♮–C (forces natural against the key signature) |
M# |
lower mordent with ♯ auxiliary |
tr# |
trill with ♯ auxiliary |
Turn — t (turn), T (inverted): two auxiliaries, so up to two slots in
execution order, with - = a slot without accidental. A single accidental
applies to the first-executed auxiliary.
tplays upper → lower ⇒ slot1 = above, slot2 = below.Tplays lower → upper ⇒ slot1 = below, slot2 = above.
| Write | Effect |
|---|---|
t# |
upper auxiliary ♯ only |
t-# |
lower auxiliary ♯ only |
t#b |
upper ♯, lower ♭ |
T#b |
inverted: lower ♯, upper ♭ |
tNb |
upper ♮, lower ♭ |
The accidental does not prevent co-location with other articulations
(mb> = flat-upper-mordent + accent). An excess or misplaced accidental
(m#b, t#b#) falls outside the vocabulary → W139 (non-blocking). Rendered
with the standard accidental glyphs above/below the sign; no dedicated font.
4. Count-based alignment¶
The correspondence with the events of the target line is strictly positional
by count (as in neumaRk_dynamics.md §4.1), left-to-right:
A) | > . ! ^ |
N) | a8 b c d |
// ↑ ↑ ↑
// accent staccato marcato (b: none)
Row order. An
A)always binds to the notes/chords row immediately below it (unlikeD)/L), which bind to the row above). So write it above theN)/C)it refers to.
- The token
.or an empty token = no articulation on that note. - If there are fewer tokens than notes, the remaining notes stay without articulation (no-op).
- If there are more tokens than events, the extras are ignored (auto-fix
philosophy) and
A)emits W131 (token excess), likeD)(§7). - The alignment counts rests too (unlike
L), which skips them): a position above a rest is an event in every respect. This is what allows a span (§10) to cover a rest (you write~over it and the span continues).
5. Examples¶
A) | > ! |
N) | c4 d e f | // accent on c, staccato on e
A) | >! |
C) | C7 F7 | // staccato accent on the first chord-rhythm event (stave 0)
6. The vocabulary: closed set and single source¶
This document is the single source for articulations. It defines each
NRK-token → musical meaning (e.g. ! → staccato); the meaning is
normative, while how a renderer draws it is not (another renderer may pick
different glyphs).
The vocabulary is a closed set: symbols outside the §3 table (for example
_ or isolated letters) are not valid articulations. It also takes part
in line-type deduction: a prefix-less line is classified as A) by
recognizing its tokens against this vocabulary.
7. Decisions¶
- Single source — the spec is normative; a classification charset and a renderer's glyph map both derive from the §6 table.
- Closed vocabulary — symbols outside the table (e.g.
_, isolated letters) are not valid articulations. - Token excess —
A)emits W131, likeD). - Meaning is normative, rendering is not — the musical meaning of each token is binding; the glyph a renderer uses is an implementation choice.
Diagnostics: a token that carries material beyond the vocabulary emits W131 (token excess); a token containing an out-of-vocabulary sequence emits W139 (lexical validation), including a stray letter-fragment such as the
sofosor theroftr.
A) Extensions¶
Sections §8-§12 are normative. They extend the per-position vocabulary of §3 with: a decomposable token model (§8), a per-pair token (glissando
gl, §9) and two spans (§10).
8. Token model: decomposition and co-locations¶
The base vocabulary (§3) can be matched as whole tokens. The extensions require
a true per-position decomposer, like the one D) uses for its dynamics
(see neumaRk_dynamics.md).
Each position (space-separated token) is an order-free concatenation
of elements, decomposed with greedy longest-match over the multi-char
atoms (first os/ol before o, first tr before t):
element :=
| wave ~[1-4]? "…"? // §10.2 (digit/label only at opening)
| text "…" | ["…"] | […] | ("…") // §13.1 (frame model)
| slur-open ( // §10.1 (but the exact `("…")` is text)
| slur-close ) // §10.1
| bracket-open { "…"? // §10.3 (label only at opening)
| bracket-close } // §10.3
| octave-open 8u | 8d // §10.4 (up / down)
| octave-close 8. // §10.4 (8 + dot)
| glissando gl // §9 (towards the next note)
| fermata o | os | ol // greedy: os/ol before o
| trill tr // greedy: tr before t
| turn t | T
| mordent m | M
| per-note 1ch _ > ! ^ + , h v n V // V = caesura/Luftpause (§3)
| line - // §13.3 (continuation of the dashed line)
| placeholder . // no element on that position
Whole tokens outside the decomposer.
FINE(a flow directive onA),neumaRk_flow_and_repeats.md§4.2.1) is not a per-position element: it is a whole token handled before the decomposer.V(caesura) is instead a single-char per-position element, like>/^.
Consequence: _! and >! are co-locations, not atomic tokens
(_+! = portato; >+! = staccato accent). All combinations emerge from
concatenation: (! = slur-open + staccato; >gl = accent + glissando. The
"combination" entry of the §3 table remains valid as a meaning, not as an
atomic token.
Exception: span delimiters are ordered. Among the elements that open and
close a delimited span (( ) §10.1, { } §10.3, 8u/8d 8. §10.4),
the order in which they appear in the position matters:
- close then open = concatenation: the note ends one span and starts
another of the same kind (
)(,}{,8.8u); - open then close = degenerate (
(),{},8u8.): → warning, see the individual sections.
A) ( . )( . )
N) c d e f g // two slurs: c→e and e→g
Per-note marks stay order-free, delimiters included: !)(, )(! and )!(
are equivalent.
Decomposing a position into its per-note marks is a separate step from resolving the spans it opens or closes (§10) — the same separation
D)applies to its dynamics and hairpins.
9. Note-to-note glissando (gl)¶
gl on the position of a note = that note glides towards the next. The
direction (up/down) is implicit from the two pitches. It is per-pair, not
a span.
A) . gl . .
N) r4 a b r // a glides towards b
Distinct from the single-note glissando (scoop/fall, entry/exit from one
note), which lives in N) as a modifier between parentheses — see
neumaRk_notes_and_durations.md (N extensions).
10. Spans¶
Spans borrowed from the D) model (open/close resolved in a post-pass).
A span lives on the logical staff: the same staff across all datapacks,
according to the identity of neumaRk_datapack.md §4.5. A change of datapack
or system does not interrupt it; its close does. A delimited span ({ },
8u…8.) never closed → warning, and it stops on the last note of
the system where it opens (its datapack). The slur ( ) is the exception: a
( with no close is legal and reaches the next note (§10.1). Spans are
resolved per voice: an A) in the N2 group (neumaRk_voices.md §3.1)
opens and closes spans on the notes of voice 2, independent of those of voice 1
(a voice-1 ( does not close on a voice-2 )).
10.1 Slur ( ) (delimited span)¶
LilyPond style: ( opens on the note of its position, ) closes on the note
of its position; the curve covers from opening to closing.
A) . ( . . )
N) c d e f g // slur from d to g
- Cross-barline / cross-system: yes. At a system break the curve splits into two arcs: one leaves the end of the first system, the other enters at the start of the next.
A) | . . ( . |
N) | c d e f |
A) | . ) . . |
N) | g a b c | // slur from e to a, across the system break
- Chained phrases:
)(on the same note closes one slur and opens another (§8, ordered delimiters). (without): slur to the next element (legal, no warning). A(not followed by a)before the next(of the same voice (or before the end of the piece) reaches the next element written in the source: the note after the opening one. It is the two-note slur, the most common one, written with a single sign:
A) ! ( ! ( ! ( ! ( | !
N) a8 b c d e d c b | a // four two-note slurs: b-c, d-e, d-c, b-a
The next element is counted on the source: a note the renderer splits
for readability (dotted on the beat, across the barline) is one element,
grace notes do not count (they belong to the main note), the arrival
note of a ^ tie does (it is written). Neither the N) prolongation .
(it lengthens the note before: in c4 . d the slur goes from c to d) nor
the rests the parser adds to complete a short measure count; the slash /
counts, like a note. It also works across the barline and
the system break (§10: the span lives on the logical staff). If the next
element is a rest → warning (W144.slur_unclosed_rest) and no slur:
a slur landing on a rest is not notation, it is almost always a forgotten
close. A ( on the last note of the logical staff, with nothing after
it → warning (W144.slur_unclosed_eol) and no slur.
- One slur at a time, by choice: nesting and overlap are not part of the
notation. They are 1% of real cases, and telling two open slurs apart would
need an identifier for each. So a ( while a slur is already open does not
overlap it: the open slur becomes a two-note slur (rule above) and the
new ( opens its own. ( ( . ) is therefore two slurs, from the 1st to the
2nd note and from the 2nd to the 4th; in ( ( . ) ) the second ) is
orphan. Two ( on the same note → warning (W144.slur_open_overlap),
the second is ignored.
- Orphan ) → warning (W144.slur_close_unmatched), ignored.
- Open+close on the same note (()): degenerate → warning
(W144.slur_degenerate), ignored.
- Co-locatable with the per-note ones: (! = slur-open + staccato.
10.2 Wave ~[1-4] (span by repetition)¶
A wavy line always above the staff. It unifies vibrato / shake / long-vibrato / laid-back: the amplitude is the visual width, the label gives its name.
Amplitude — optional digit 1–4 (default ~ = level 1):
~N(with digit) opens a new span of amplitude N, closing the current one;~(bare) extends the current span; if none is open, opens one of level 1.
A) ~3 ~ ~ ~1 ~ ~ // large wave over 3 notes, then small wave over 3
Extension and rests: consecutive ~ (even cross-barline) = a single
wave; a position without ~ (including an empty measure) closes the span.
Rests do not interrupt (the alignment counts rests, §4).
A) ~2 ~ ~ ~ | | ~3 ~ ~ ~
N) a4 b r c | d | a4 b r c
// └─ amplitude-2 over a b r(rest) c ─┘ (meas.2 empty → no wave) └─ amplitude-3 ─┘
Label (optional, only on the opening token): "…" immediately after
the wave, rendered above its start. The label is a text markup container
(neumaRk_text_markup.md §2.2): it accepts the #/##/###, */**,
__ markers; the default is upright (italic/bold/underline/size only via
the markers). Amplitude and label are independent.
A) ~3"shake" ~ ~ ~
A) ~"vibrato" ~ ~
A) ~4"laid back" ~ ~ ~ ~
The label gives the semantics (vibrato vs shake vs laid-back); the glyph
~ alone is only "wave of amplitude N". For a transcription tool the page is
the truth; an eventual performer will infer from label/amplitude.
10.3 Analysis staff { } (delimited span)¶
A grouping bracket above the staff, like the analytical brackets of formal
analysis. { opens on the note of its position, } closes on the note of its
position (LilyPond style, exactly like the slur §10.1).
A) . . {"DO triad" . | } |
N) a a c e | g e c a
- Label (optional): a string
"…"immediately after{(reuses the same opaque token as the wave). Rendered left-aligned above the opening and is a text markup container (neumaRk_text_markup.md§2.2:#/*/__), upright by default. A bracket without label ({ … }) is allowed. - Rendering: square bracket always above the staff, with the two ends turned downward (toward the notes).
- Cross-barline / cross-system: yes.
- One bracket at a time, by choice (like the slur, §10.1, but without its
two-note slur: a bracket has no "two-note" idiom): a second
{while one is open → warning (W144.brace_open_overlap), ignored together with the}that closes it, and the outer bracket remains; an orphan}→ warning (W144.brace_close_unmatched); a degenerate{}(open+close on the same note) → warning (W144.brace_degenerate); a bracket never closed → warning (W144.brace_unclosed_eol) and implicit close on the last note of the system where it opens. - Purely graphic: no effect on musical content (it is an analytical annotation).
- Syntax note: in
A)rows{ … | … }is a bracket spanning a barline, so the inner|is a real barline. The map suppresses polychord detection on Articulations rows.
10.4 Octave 8u / 8d … 8 (delimited span)¶
An ottava line. 8u opens an octave up, 8d an octave down; 8. closes the span (inclusive on the last
covered note). Delimited like the slur (§10.1) — deliberately NOT the
extension model of the wave (§10.2): the ottava line is sparse, so repeating a
token on every note would be cumbersome. A bare 8 (without u/d/.) is
out of vocabulary (likely a typo for 8.) → W139.
A) . . . . . . . 8u | . . . 8. |
N) c8 d e f g a b c | d e f e d c b a
// └─ 8va from the 8th note, across the barline, to the close ─┘
- Rendering: the standard SMuFL ottava sign —
8va(alta) / octave down (the visible spelling, "8ba" or "8vb", depends on the font) — followed by a dashed horizontal line and an end hook toward the staff; above for8u, below for8d. (Reference rendering, informative: glyphsU+E511andU+E513ottavaBassaBa, in the BravuraLS/PetalumaLS subset.) - Effective pitch: the covered notes are worth ±12 semitones (
8u= +12,8d= −12) relative to the written pitch, which is unchanged — the noteheads stay where they are. It is the very sense of the ottava: written in one position, read an octave above/below. - Cross-barline / cross-system: yes.
- One octave at a time, by choice (like the slur, §10.1, but without its
two-note slur: an
8uwith no8.is a forgotten close, and it changes the effective pitch): a second open while one is open → warning (W144.octave_open_overlap), ignored together with the8.that closes it, and the outer octave remains; an orphan8.close → warning (W144.octave_close_unmatched); a degenerate8u8.→ warning (W144.octave_degenerate); an octave never closed → warning (W144.octave_unclosed_eol) and implicit close on the last note of the system where it opens.
Span convention (decided for
A), to be reused by theD)hairpins/cresc.): every long span is delimited — a (possibly parametrized) opening token + a closing token; intermediate positions are placeholders.. Slur( ), bracket{ }and octave8u…8follow it. The wave~keeps the extension model as the single documented exception, because its glyph is a continuous wavy line drawn over every covered note.
11. Impact on deduction (extended charset)¶
The extensions broaden the line classification surface
(neumaRk_datapack.md §3.bis):
- Charset
A): includes the new symbols( ) ~ h v n g l Vand the digits1-4, plus{ } 8 u d(§10.3 bracket, §10.4 octave), in addition to the base vocabulary §6 (from which the charset is derived — single source). Note:lappears ingl/ol;Vis the caesura (§3).[ ]is the box["text"](§13.1) and("text")the round frame (§13.1); the analysis staff uses{ }. ~is a specific marker: a line that contains~is classified uniquely asA), despite the digits that would otherwise bring it closer to chords/notes.{}8dare NOT specific markers:8/d= duration/note. They only widen theA)charset; the notes-line priority (TB4) protectsN)rows, and an implicit bracket/octave row needs the explicitA)prefix to be classified as articulations.g/glvs note G — TB4:g(head of theglglissando token, §9) is also the note G, and with the durations1–4it makes lines likeg,g4,g g gambiguous. The TB4 rule (neumaRk_datapack.md §3.bis.5) gives priority to notes: a line that is a valid notes-line (every token matches the canonical notes grammar + at least one real pitch) isN), notA). The tokenglis not a valid note, so an articulations line withglstaysA).- Quote-aware: the content of a label
"…"(e.g.shake) is excluded from the classification match — out-of-charset letters or a~inside the text neither break nor falsely mark the line.
12. Decisions (extensions)¶
- Note-to-note glissando (
gl, §9) ≠ single-note glissando (scoop/fall, inN)). ✓ - Extended vocabulary = closed set; normative meaning, rendering is an implementation choice (inherits §6/§7). ✓
- Unified token model (decomposer + co-locations, §8); order-free except span delimiters, where close-then-open = concatenation. ✓
- Slur
( )delimited, cross-system, chainable with)(; one at a time by declared choice, not deferral: the excess(is ignored together with its)(§10.1). ✓ - Up bow
v, down bown; harmonich(§3). ✓ - Wave
~: levels 1–4; digit = new span, bare = extends; always above; covers rests; label"…"at opening, upright (§10.2). ✓ - Shake / long-vibrato / laid-back unified in the wave
~N+ label. ✓ - Analysis bracket
{ }delimited, label"…"optional, always above, purely graphic; one at a time by choice, like the slur (§10.3). ✓ - Octave
8u/8d…8.delimited (8.closes), dashed line above/ below, effective pitch ±12; one at a time by choice, like the slur (§10.4). ✓ - Span convention: long spans are delimited (open + close); the wave is the single exception (extension), its glyph being a continuous line. ✓
A) text-line (unified with D))¶
Normative section. Brings to
A)(above the staff) the free text with a dashed continuation line thatD)already has below the staff (neumaRk_dynamics.md §5–§6), with an identical vocabulary.A)above,D)below: same tokens. ("Identical" refers to the text + anchoring sub-vocabulary of §13.1: the graphic hairpins</>ofD)do not apply inA), where>is the accent, §3.) It is the idiomatic Sher role of "dr. fill ----|", "rhythm tacet ----|". InA)the tenuto is_(§3), so-is free for this role.
13. Text labels and the dashed line¶
Beyond the per-position articulations (§3) and the geometric spans (§10), A)
hosts free texts anchorable to a note or to a barline, rendered with a
dashed continuation line. The model is the above-staff twin of the D)
text annotations: the rules for opening, continuation, closing and barline
anchoring are the same as neumaRk_dynamics.md §5–§6; here we list the
vocabulary, the A) specifics and the -| terminator (new, common to A)
and D)).
13.1 Vocabulary (identical to D))¶
| Form | Role | D) ref. |
|---|---|---|
"text" / ["text"] / ("text") |
note-anchored text annotation (frame: §13.1 below) | §3.4 |
"text"- (not the last token) |
opens the dashed line | §5.2 |
- standalone (spaced) |
continues the line, crosses barlines | §5.3 |
-"text" (first token) |
anchors to begin-bar | §6.2 |
"text"- (last token) |
anchors to end-bar | §6.3 |
-"text"- (first token) |
begin-bar + opens a cross-bar line | §6.4 |
-\| (last, glued to the border) |
terminator: closes on the end-bar, hook, no text | §13.5 |
The label is a text markup container (neumaRk_text_markup.md §2.2,
#/*/__), upright type by default — like the wave/bracket labels
(§10.2, §10.3). It follows the frame model (neumaRk_text_markup.md §2.1)
in every position of the table (note, begin-bar, end-bar, with or without a
line):
"text"— no frame;["text"]— box (reference form);[text]is its shorthand, with the same result. InA)the analysis staff uses{ }(§10.3), so[ ]is available for the box;("text")— round frame. Only the exact form:("dolce"…)stays a slur (§10.1) that starts with a text.
The co-locations are those of §8: ("x")- opens the line, -("x")- opens
from the begin-bar, ("x")! and >("x") sit next to a per-note mark. The
same forms apply to A) text above a C) line (§2.1).
13.2 Note-anchored annotation¶
"text" (or ["text"], ("text") with a frame) on a position = a label anchored to that
note, left-aligned above it. It is punctual until followed by an adjacent
- (§13.3).
A) "dr. fill" . . .
N) a8 b c d // label "dr. fill" above the 1st note
13.3 Dashed line (note → note)¶
The same three rules as neumaRk_dynamics.md §5: an adjacent - (glued)
opens the line; a standalone - (spaced) continues it, even across
barlines (§5.3, §5.5); a new element without - — or the end of the system —
closes it. The line covers the notes reached by the continuations and stops
just before the onset of the closing event.
A) "dr. fill"- - - .
N) a8 b c d // dashed line from note 1 to note 4, hook on the last one
13.4 Barline anchoring¶
Identical to neumaRk_dynamics.md §6: -"text" as the first token of the
measure anchors to begin-bar; "text"- as the last token anchors to end-bar;
-"text"- opens a cross-bar line. The content of A) for each measure is
the text between two barlines, excluding every border decorator (§6.1): the
composite border is a property of the line, common to all music lines, and must
not be replicated.
A) -"vamp"- - | |
N) a1 | b1 | // begin-bar "vamp", cross-bar, closes on the 1st note of measure 2
The "text"- that opens reclassification also applies (twin of
neumaRk_dynamics.md §6.4): a "text"- last-token, when no line is open and the
next measure continues, opens a cross-bar line reclassified as a note-anchored
opening on the measure's last event (rendered on the note — e.g. the first slash —
not at the barline). E.g. A) | . "riff"- | - puts "riff" on the first slash.
13.5 Terminator -|¶
The -| terminator closes the line on the end-bar, no text
(neumaRk_dynamics.md §2), unlike closing on a note (§13.3). The terminator is
a - glued to a composite border as the last token of the measure:
A) -"vamp"- - | - -|
N) a1 | b1 | // the line closes on the end-bar of measure 2, hook on the border
- Prefix of the whole border, uniform (no special case per decorator):
-|,-:|,-:open|,-:x3|,-||,-|.,-DCal@|→ the parser strips the leading-(= "close span + hook"), the rest is the normal border. - Glued/spaced discriminator:
-|(glued) hooks the border;- |(spaced) is a continuation-that crosses the barline. - Applies to
D)too (same form, same effect:neumaRk_dynamics.md §6.6).
13.6 Rendering¶
Label left-aligned; dashed line starting after the text; hook ALWAYS
at the end, turned toward the staff — down for A) (which is above),
up for D) (which is below). It is the same graphic primitive as the octave
(§10.4, dashed line + hook). The terminator extends the line to the right edge of
the staff, with a hook on the end-bar. The line is vertically centered on the
text height. A) and D) are mirror images.
On multiple lines. A ; in the label breaks the line
(neumaRk_text_markup.md §3bis), also in wave (§10.2) and bracket (§10.3)
labels: the stack grows upward and the last line stays where the single line
would be. Lines are left-aligned, right-aligned only at the closing barline
("…"- as last token); a single frame (box or round frame) wraps the whole stack; the dashed line
starts from the last line, at its height. A chord symbol above the annotated
note rises above the whole stack.
A) "rit.;poco a poco"- - - - | - - - . |
N) c4 d e f | g a b c |
13.7 ⚠ Authoring: every note wants its own continuation¶
The begin-bar -"text"- only opens the line: it does not automatically
cover the notes of the measure. As in D), every note under the line wants its
own continuation - in its own column. The consequences, verified with the
parser:
- A note without an
A)token is a closing event: the line ends just before its onset. - Continuations cross barlines with no special syntax (§5.5); to prolong the
line beyond the measure, keep placing
-column by column. - A
-standalone in a new measure with no span open is orphaned: it reopens nothing.
Correct recipes (verified; whole/half notes, 1–2 notes per measure):
// (a) closes on a note — cross-bar
A) -"vamp"- - | |
N) a1 | b1 | // → line from the begin-bar of m.1 to the 1st note of m.2
// (b) closes on a barline — terminator
A) -"vamp"- - | - -|
N) a1 | b1 | // → line from the begin-bar of m.1 to the end-bar of m.2
Typical confusion (to avoid): opening with -"text"- without continuations
covering the measure, and placing a lone - in the next measure:
A) -"vamp"- | - |
N) a1 | b1 | // ✗ the line closes immediately on the 1st note of m.1;
// the `-` of m.2 is orphaned (reopens nothing)
13.8 - is the line continuation (not tenuto)¶
In A) the - is the line continuation (§13.3); tenuto is _ and portato
is _! (§3). Staccato ! and staccato-accent >! are unchanged.
13.9 Decisions (text-line)¶
- Unified model
A)=D): same vocabulary,A)above andD)below, mirror renderings (§13.1, §13.6). ✓ - Terminator
-|= prefix of the whole composite border, uniform, common toA)andD); fills the end-bar gap (§13.5). ✓ - Every note wants its own continuation
-; a note without a token = closing; an orphan-reopens nothing (§13.7). ✓ - Box
["text"]inA)uses the square brackets (the analysis staff uses{ }, §10.3). ✓
14. Diagnostics¶
| Code | Condition |
|---|---|
| W131 | Tokens in excess of the events of the row below (W131.excess_articulation); above C), text beyond the printed chord columns (§2.1, §4) |
| W133 | Text container not closed within the measure: the rest of the measure is read as text (neumaRk_text_markup.md §6.2) |
| W139 | Token outside the vocabulary, including a bare 8 (§3, §10.4) |
| W144 | Malformed span: slur (slur_*), analysis bracket (brace_*), ottava (octave_*) (§10.1, §10.3, §10.4) |
| W167 | Note-anchored FINE in conflict with FINE on the barline (neumaRk_flow_and_repeats.md §4.2.1) |
| W174 | A) row without its row below: ignored (§2) |