Vai al contenuto

Righe di testo (TEXT) — prosa formattata posizionata nel flusso)

STATO: SPEC. TEXT) è una sezione globale gemella di PLAY)/FORM) (neumaRk_play_and_form.md), LYRICS) (neumaRk_lyrics.md §8) e FOOT) (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 in LYRICS)): 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 |pipe NON 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 → \|*| testo sotto 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.