Righe di testo (TEXT) — prosa formattata posizionata nel flusso)¶
STATO: SPEC.
TEXT)è una sezione globale gemella diPLAY)/FORM)(neumaRk_play_and_form.md),LYRICS)(neumaRk_lyrics.md §8) eFOOT)(neumaRk_footnotes.md). Il contenuto è prosa markup-aware (neumaRk_text_markup.md).Questo file IT è la source of truth; la versione EN (
../en/neumaRk_text_line.md) la rispecchia.
1. Definizione¶
Una riga di testo TEXT) è un blocco di prosa libera multi-riga reso
nella partitura alla posizione in cui compare nel documento (nel flusso dei
datapack, come PLAY)). Serve per righe di presentazione, didascalie di esempi
musicali, esplicazioni discorsive di sezione.
A differenza di PLAY)/FORM), TEXT) porta solo prosa: niente box
[NAME|BARS], niente token esecutivi ($/@/fermata). La sua semantica è
puramente descrittiva (non partecipa al contenuto musicale). A differenza di FORM) (sempre in
coda), TEXT) è posizionale.
TEXT) è WYSIWYG sugli a-capo (§3) e aggiunge due controlli:
- allineamento orizzontale, cambiabile riga per riga (§2.2, §2.3);
- aggancio verticale relativo al sistema adiacente (§2.4) — asse nuovo, a livello di blocco.
2. Sintassi¶
TEXT) [<align-default>] [<vanchor>]
[<align>] <prosa riga 1>
[<align>] <prosa riga 2>
← riga vuota = spazio verticale
[<align>] <prosa riga 3>
L'header TEXT) è a inizio riga; le righe successive sono continuazione. Il
blocco termina al primo marcatore di riga esplicito non escapato o a fine
documento: regola unica dei blocchi a testo libero, neumaRk_datapack.md §13.
Una marker-row implicita come [Intro] non chiude il blocco: per aprire un
datapack con i marker subito dopo la prosa si scrive M) [Intro].
Le righe vuote NON terminano il blocco (a differenza di
PLAY)/FORM); come inLYRICS)): sono separatori interni resi come spazio verticale (§3.2). Le righe vuote in testa e in coda al blocco sono scartate.
2.1 Zona-prefisso dell'header¶
Subito dopo TEXT), sulla stessa riga dell'header, si consumano — solo se
consecutivi e separati da spazio, in qualsiasi ordine — al più un token
<align-default> e al più un token <vanchor>. Definiscono l'allineamento di
default del blocco e l'aggancio verticale (che è unico per l'intero
blocco). Al primo token non-flag inizia la prosa della prima riga.
2.2 Allineamento <align> (vocabolario)¶
Stesso vocabolario della riga di formato F):
| Token | Allineamento |
|---|---|
\|* |
a sinistra (left) |
*\| |
a destra (right) |
\|*\| |
centrato (center) |
\|**\| |
giustificato (justify) — default |
Se nessun allineamento è mai specificato, il default è giustificato.
2.3 Allineamento inline (per riga, persistente)¶
Ogni riga di prosa può iniziare con un token <align>: cambia
l'allineamento corrente, che vale da quella riga in poi fino al token
successivo (comportamento persistente). Così un unico blocco può alternare
titoli centrati, corpo giustificato e note a sinistra.
- Il flag dev'essere un token intero a inizio riga, seguito da spazio o fine
riga.
**grassetto**e|pipeNON sono flag (il markup è preservato). - Se la riga porta anche un titolo (
#/##/###), il flag va prima del cancelletto:|*| # Titolo(in# |*| …il|*|sarebbe testo del titolo). - Una riga che contiene solo un flag (nessuna prosa) cambia l'allineamento e vale come riga vuota (spazio verticale).
2.4 Aggancio verticale <vanchor> (per blocco)¶
| Token | Aggancio |
|---|---|
| (nessuno) | flusso normale — il blocco occupa spazio proprio, come PLAY) |
^ |
apice del seguente — agganciato al bordo superiore del sistema che segue |
_ |
pedice del precedente — agganciato al bordo inferiore del sistema che precede |
Il <vanchor> sta solo nella zona-prefisso dell'header (§2.1) e vale per
tutto il blocco. Se _ è sul primo sistema (nessun predecessore) degrada
silenziosamente a flusso normale (§5).
2.5 Esempio¶
TEXT) ^
|*| # ESEMPIO 1
|**| ### Questo testo lungo è giustificato
e anche lungo su più righe
|*| Questo invece è al centro
|* Ma torniamo alla musica:
M) [A]
C) | C7 | F7 |
N) | c1 | a1 |
^ aggancia l'intero blocco all'apice del sistema seguente; # ESEMPIO 1 è un
titolo H1 centrato; il paragrafo ### … è H3 giustificato e va a capo dove
scritto (e in automatico se eccede la larghezza); seguono una riga centrata e
una a sinistra, separate da righe vuote.
3. Contenuto (prosa)¶
Il testo riusa tutto neumaRk_text_markup.md: dimensioni #/##/###,
*corsivo*, **grassetto**, ***corsivo-grassetto***, __sottolineato__,
escape \. Nel corpo i caratteri */^/_ sono markup/testo; i flag di
allineamento vivono solo a inizio riga (§2.3) e il <vanchor> solo nell'header
(§2.4). La prosa ammette i richiami footnote [^…] (neumaRk_footnotes.md) e i
link [testo=>url] (neumaRk_text_markup.md §3quater): non essendoci box
[NAME] in TEXT), sono sempre interpretati come tali. Un link di più parole va
a capo come un blocco unico.
3.1 A-capo rispettati (WYSIWYG)¶
Gli a-capo del sorgente sono rispettati: ogni newline è un a-capo reso. Una
riga più lunga della larghezza dello stave va a capo automaticamente
(word-wrap) per restare visibile. Il prefisso di dimensione (#/##/###) di
una riga vale su tutte le sue righe wrappate.
3.2 Righe vuote¶
Una riga vuota è resa come spazio verticale (separatore di paragrafo). Righe vuote multiple aumentano lo spazio.
3.3 Giustificazione¶
Il giustificato (|**|) espande gli spazi inter-parola per riempire la
larghezza. Vengono allargate solo le righe spezzate automaticamente dal
word-wrap; una riga chiusa da un a-capo del sorgente non viene allargata
(come text-align: justify con un <br>). La giustificazione funziona anche
col markup (grassetto/corsivo/richiami footnote sono preservati).
4. Prosa che comincia con un marcatore (escape)¶
Una riga di prosa che inizia con un marcatore di riga (N), C+, HK),
%%, …) chiuderebbe il blocco (§2). Per scriverla come prosa si fa precedere da
\: la riga resta nel blocco e alla resa il \ si toglie
(neumaRk_datapack.md §13.2).
TEXT) La ripresa si suona
\N) come prima, ma piano.
si legge «La ripresa si suona / N) come prima, ma piano.». Al round-trip la riga
è riemessa con il \.
5. Diagnostici¶
TEXT) non emette diagnostici. Casi silenziosi (nessun warning):
- blocco
TEXT)vuoto (solo flag, nessuna prosa) → ignorato; _(pedice) sul primo sistema → degrada a flusso normale;- secondo token di allineamento/aggancio nella zona-prefisso dell'header → il
secondo diventa prosa, letta com'è (non è un flag della prima riga): il
documento riscritto lo scrive escapato (
TEXT) |* |*| testo→\|*| testosotto l'header, §4).
6. Round-trip¶
Il blocco round-trippa lossless alla sua posizione ed è idempotente.
Sull'header si riemettono solo i token di prefisso (allineamento di default se
≠ giustificato, poi <vanchor>); la prosa — inclusi i flag inline e le righe
vuote interne — va sotto, verbatim. I default (giustificato, flusso) sono
omessi. A parità di posizione, i blocchi posizionali
(PLAY)/TEXT)/LYRICS)/FOOT)) sono riemessi in ordine di file; FORM)
resta l'ultimo assoluto.
7. Esempio completo¶
nrk:0.6
HT) Yesterdays
HK) Dm
HM) 4/4
TEXT) ^
|*| # Yesterdays
|**| Ballad in Dm; il tema è esposto sul primo chorus,
poi due chorus di improvvisazione sulla stessa griglia.
C) Dm7 | G7
N) d4 e f g | a b c d
TEXT) _ Coda: rallentando fino all'ultimo accordo.