Specifica formale¶
1. Scopo del documento¶
Questo documento definisce la specifica formale del linguaggio neumaRk.
Stabilisce in modo normativo:
- quali costrutti sono validi
- come devono essere interpretati
- quali regole devono essere rispettate da parser, validatori e strumenti di rendering
Tutto ciò che è descritto in questo documento è da considerarsi vincolante.
2. Livelli della specifica¶
La specifica neumaRk è organizzata in più livelli, ciascuno con responsabilità precise:
-
Livello sintattico
-
definisce la grammatica testuale
-
stabilisce quali sequenze di caratteri sono valide
-
Livello strutturale
-
definisce la struttura logica del documento
-
stabilisce le relazioni tra le varie sezioni
-
Livello semantico
-
definisce il significato musicale dei costrutti
-
chiarisce ambiguità e casi limite
-
Livello di validazione
- definisce le condizioni di validità
- stabilisce gli errori e gli stati non validi
2.1 Contesto musicale persistente¶
Il parsing di un documento neumaRk avviene all’interno di un contesto musicale persistente.
Il contesto musicale conserva le ultime informazioni esplicite rilevanti (altezze, durate, stato metrico) e persiste lungo l’intero documento, attraversando:
- righe;
- misure;
- datapack consecutivi.
Il contesto musicale non viene automaticamente resettato all’inizio di un nuovo datapack.
Un datapack rappresenta un’unità strutturale e di sincronizzazione verticale, ma non costituisce un confine semantico per la deduzione musicale.
In assenza di valori espliciti, le regole di deduzione fanno sempre riferimento allo stato corrente del contesto musicale.
3. Terminologia normativa¶
In questo documento si utilizzano i seguenti termini con significato normativo:
- deve / non deve: requisito obbligatorio
- può / può non: comportamento opzionale
- non è valido: il documento deve essere rifiutato
- viene interpretato come: comportamento deterministico
4. Uso contestuale dei simboli¶
Alcuni simboli testuali di neumaRk hanno una semantica contestuale,
determinata dal tipo di riga musicale in cui compaiono. L'algoritmo
normativo con cui il tipo di riga stesso viene dedotto (in assenza di
marcatore esplicito) è in neumaRk_datapack.md §3.bis.
In particolare:
- il simbolo
.(punto) - il simbolo
!(punto esclamativo)
assumono significati differenti a seconda che compaiano in:
- righe di note (
N)); - righe di accordi (
C)).
Essi assumono significati differenti, anche all'interno delle stesse righe, a seconda della loro posizione.
Il contesto di riga e la posizione in relazione agli altri elementi della riga sono sempre sufficienti a risolvere la semantica del simbolo in modo deterministico.
Non esiste alcun caso valido in cui un simbolo possa essere ambiguo all’interno dello stesso contesto di riga.
5. Identificazione del documento e estensione¶
Un documento neumaRk è un file di testo codificato in UTF-8.
L’estensione di file raccomandata per i documenti neumaRk è:
.nrk
L’uso dell’estensione .nrk consente a strumenti, editor e sistemi operativi
di riconoscere in modo affidabile i documenti neumaRk.
L’estensione è raccomandata ma non obbligatoria.
Un documento è considerato valido in quanto documento neumaRk in base al suo
contenuto, e non in base al nome del file o alla sua estensione.
Gli strumenti possono assumere l’estensione .nrk come predefinita
in fase di lettura o scrittura di file neumaRk.
6. Struttura generale di un documento neumaRk¶
Un documento neumaRk può contenere, in ordine:
- Header (metadati)
- Contenuto musicale e contenuto di formattazione
L’ordine delle sezioni è significativo e deve essere rispettato.
Delimitazione strutturale¶
In neumaRk, un rigo vuoto ha valore strutturale.
I righi vuoti delimitano blocchi logici del documento, in particolare:
- la fine dell’header;
- la separazione tra datapack musicali consecutivi.
Un blocco strutturale (header o datapack) è sempre costituito da una o più righe non vuote consecutive.
7. Riferimenti ai documenti correlati¶
La presente specifica fa riferimento ai seguenti documenti:
neumaRk_overview.mdneumaRk_formats.mdneumaRk_header.mdneumaRk_datapack.mdneumaRk_markers.mdneumaRk_chords.mdneumaRk_notes_and_durations.mdneumaRk_grace_notes.mdneumaRk_voices.mdneumaRk_articulations.mdneumaRk_lyrics.mdneumaRk_flow_and_repeats.mdneumaRk_dynamics.mdneumaRk_text_markup.mdneumaRk_play_and_form.mdneumaRk_play_directive.mdneumaRk_versions.mdneumaRk_collections.md
Ciascun documento approfondisce in modo normativo un aspetto specifico del linguaggio.
8. Compatibilità e versioning¶
Ogni documento neumaRk deve dichiarare esplicitamente la versione del linguaggio utilizzata.
La prima riga del documento deve riportare la sequenza nrk:seguita dalla versione di riferimento nella forma major.minor
esempio
nrk:0.6
Le regole di compatibilità tra versioni e l'evoluzione del linguaggio sono documentate nel neumaRk_changelog.md.
9. Estensioni¶
Il linguaggio neumaRk può essere esteso solo nei limiti esplicitamente consentiti dalla specifica.
Costrutti non definiti o non riconosciuti rendono il documento non valido, salvo diversa indicazione esplicita.