Vai al contenuto

Changelog ufficiale


neumaRk 0.6.0 — Versione corrente

Versione di riferimento dichiarata dagli esempi della specifica (nrk:0.6). Estende la 0.5.0 con un'ampia ondata di feature, elencate qui sotto.

Novità della 0.6

La 0.6 estende la 0.5.0 con le feature seguenti; ognuna è specificata nel documento indicato.

Feature Documento
Grace notes neumaRk_grace_notes.md
Seconda voce N2 neumaRk_voices.md
Incrocio di voci X (due voci si scambiano di posizione; "X" obliqua) neumaRk_voices.md §7
Continuità stave N+ / multi-stave neumaRk_datapack.md §4
Ripetizione di misura % neumaRk_flow_and_repeats.md §7
Polyaccordi [top\|bottom] neumaRk_chords.md §6
Comment-label / accordi alternativi C+ neumaRk_chords.md §7
Persistenza armonia (cella vuota + . di continuazione iniziale) + assenza accordo NC + rest armonico muto R neumaRk_chords.md §1.1-1.3
Markup testuale unificato neumaRk_text_markup.md
Sezioni collassabili [? …] / [!] neumaRk_markers.md §4
Dinamiche D) estese neumaRk_dynamics.md
Play directive (=Style,Tempo) neumaRk_play_directive.md
PLAY) / FORM) neumaRk_play_and_form.md
Versioni %%NAME … %%end neumaRk_versions.md
Articolazioni A) (base + estensioni §8-12) neumaRk_articulations.md
Lyrics L) + blocco LYRICS) neumaRk_lyrics.md
Note estese N) (noteheads, glissato, ritmo {}) neumaRk_notes_and_durations.md §11-12
Parentesi editoriali di gruppo ( … ) in N) neumaRk_notes_and_durations.md §11.4
Note non intonate = (posizione sul rigo, esenti da trasposizione) neumaRk_notes_and_durations.md §11.5
Pausa multi-misura RN neumaRk_notes_and_durations.md §13
Spacer s (pausa invisibile) neumaRk_notes_and_durations.md §14
Anacrusi di sezione (>>> misura aperta + > levare mid-brano) neumaRk_notes_and_durations.md §7.1
Default cromatico autoriale chr (tonale letto senza armatura) neumaRk_header.md §10.3
Collezioni (book / playlist) neumaRk_collections.md
Anacrusi di ritornello (>( … ) levare fuori-tempo fra tonde) neumaRk_notes_and_durations.md §7.2
Note a piè di pagina (richiamo [^etichetta] + blocco FOOT)) neumaRk_footnotes.md
Righe di testo TEXT) (prosa multi-riga posizionata nel flusso: a-capo rispettati, righe vuote, allineamento inline per riga, giustificato con markup, aggancio verticale ^/_) neumaRk_text_line.md
Cesura (Luftpause) V — articolazione note-anchored su A) (V maiuscolo ≠ v arco-su) neumaRk_articulations.md §3
Ornamenti cromatici (mordenti / gruppetto / trillo con alterazione dell'ausiliaria) neumaRk_articulations.md §3.1
Decorator testuale di misura senza box \| "testo"\| (gemello no-box di [testo]) neumaRk_flow_and_repeats.md §4.3
Modello a cornice per tutti i container di testo: "…", ["…"] (abbreviabile […]), ("…") su label d'accordo, A), D), end-decorator. Nuovo codice W177 neumaRk_text_markup.md §2.1
FINE ancorato alla nota (fine del brano su una nota, riga A)) neumaRk_flow_and_repeats.md §4.2.1
Decoratore di begin-barline unificato: chiave combinabile con metro/tonalità in (…) (\|(3/4,Ab,@F)) + composizione con l'anacrusi (>(@F), canonica (@F) >g8); E125 esteso a qualunque chiave in N2 neumaRk_datapack.md §7.1
Oggetto di contesto di misura (…) ai due confini: il decoratore di barra estende il vocabolario ad armonia in vigore (@F13, @NC su C)) e riferimento d'altezza+durata (f@4_8), apre la posizione d'uscita (… (@G):open\|) e l'ordine libero rispetto ai decoratori di flusso (canonico \|[1](3/4)). Una riga di solo contesto non si stampa, e un datapack di sole righe così non occupa spazio. Nuovi codici E135, E136, W169 neumaRk_datapack.md §7.3
Commento di secondo livello INFO): testo per il lettore, non inciso e mai esportato, con etichetta incisa opzionale "…"; ancorato dalla posizione (intestazione, testa/coda di datapack, autonomo, blocco di versione). Nuovi codici E137, W170, W171, W172 neumaRk_datapack.md §11.1
Link esterni nel markup: [testo=>url] e forma breve [=>url] (si vede il dominio); solo http/https, indirizzo letterale fino alla ]; attivabili a schermo, testo normale in stampa. Nuovi codici W175, W176 neumaRk_text_markup.md §3quater
L'armonia che permane entra nel contesto ermetico dei blocchi versione: ogni alternativa parte dall'armonia d'ingresso della regione, e dopo %%end la cella vuota eredita quella del blocco canonico, qualunque versione sia selezionata. Nuovo codice W178 neumaRk_versions.md §4.1.1
Riga di diteggiatura $) (2026-10-01): dito che preme (0–5, sostituzione n-m), corda (A–G con b/#, o 1–9), dito che pizzica (p i m a c), un token per evento come A); <…> per altezza d'accordo; prefissi di posizione ' - +; posizione ferma [ … ] con etichetta facoltativa. Nuovi codici W180, W181; nuovi sottocodici W131.excess_fingering, W144.position_*, W174.fingering_orphan neumaRk_fingering.md
Contenuto accanto a un sistema corto nella riga di formato F) (2026-10-08): si scrive dalla parte del segno d'allineamento in cui deve apparire (F) \|* On cue, D.S. al @, F) Dal $ al @ *\|, F) Solo: \|*\| [B]x2); ogni lato è un corpo FORM) senza virgolette (prosa, box di sezione, $ @ &fermata, ;, note, link), solo descrittivo. Il segno d'allineamento conta ora solo come token intero. Nuovo sottocodice W182.no_room neumaRk_datapack.md §9.1

Cambiamenti normativi rilevanti nella 0.6

Oltre alle nuove feature, la 0.6 introduce alcuni cambiamenti che modificano sintassi o codici rispetto alle bozze precedenti:

  • Il ; va a capo in ogni container testuale (neumaRk_text_markup.md §3bis). Prima valeva solo nelle annotazioni di nota e nelle voci di FOOT); ora vale in tutti i container, in entrambe le forme "…" e […]: annotazioni M) e D), comment-label di accordo, label di A) e dei box PLAY)/FORM), end-decorator. Restano esclusi, col ; letterale, il nome di sezione M) [NOME], l'etichetta di versione e quella di INFO). Tutti questi container disegnano il ; su più righe: la riga più vicina al rigo resta dove sarebbe la riga singola e la pila si allontana dal rigo (verso l'alto sopra il rigo, verso il basso in D) e sotto un box PLAY)/FORM)); le label dei box vanno anche a capo per larghezza, riga per riga. Nella prosa di TEXT) e del corpo di INFO) il ; è letterale: il corpo di INFO) va a capo solo con l'a-capo del sorgente, non più sul ;. In PLAY)/FORM), dove l'a-capo del sorgente vale uno spazio, il ; va a capo anche nella prosa (neumaRk_play_and_form.md §6.3). \; scrive un ; letterale in qualunque testo (§4). Nessuna migrazione: nessun documento noto usava il ; in questi container.
  • \" non chiude più un container "…" (neumaRk_text_markup.md §4). L'escape era già in spec, ma l'annotazione di nota c4"il \"Re\"" (anche ("…"), e ["…"] con un numero dispari di virgolette), la comment-label di accordo e l'end-decorator finivano alla prima ": la nota spariva con E001, la riga accordi dava E102. Ora valgono \" e \\. L'header resta testo semplice, con " e \ letterali (neumaRk_header.md §5). Nella riga M) una sezione ["NOME"] vale [NOME] (neumaRk_markers.md §3.1): prima diventava una sezione col nome fra virgolette e un'annotazione con lo stesso testo.
  • La descrizione di versione esce dal linguaggio, assorbita da INFO). Il container "…" scritto sotto %%NAME non è più una descrizione: quel testo si scrive ora con un INFO) in testa al blocco, che alimenta il selettore e, con la sua etichetta, la partitura (neumaRk_versions.md §2.4.3). Nessuna migrazione: la forma precedente non è mai stata pubblicata.
  • Una sola regola di fine per i blocchi a testo libero (PLAY), FORM), LYRICS), FOOT), TEXT), INFO)): il blocco finisce al primo marcatore di riga esplicito non escapato (neumaRk_datapack.md §13). Ora chiudono il blocco anche le varianti C+ / N+ / N2 (seguite da spazio o fine riga) e le righe d'intestazione H…), che prima venivano assorbite come testo. Una marker-row implicita ([Intro]) non chiude un blocco: davanti alla prosa si scrive M) [Intro]. Nuovo escape a inizio riga: \N) … è testo del blocco e il \ si toglie alla resa; sostituisce la «Limitazione» di neumaRk_text_line.md §4. Invariato il criterio della riga vuota (chiude PLAY)/FORM)/FOOT), non chiude TEXT)/LYRICS)).
  • Due forme riservate dal link [testo=>url] (neumaRk_text_markup.md §3quater). In PLAY)/FORM) un […] che contiene => è un link, non un box di sezione; un // dentro un link (anche escapato, \[…=>…]) è parte dell'indirizzo e non apre un commento (neumaRk_datapack.md §11).
  • Commenti //: virgolette, intestazioni, posizione (neumaRk_datapack.md §11). Un // fra virgolette "…" è testo e non apre un commento — come già un | fra virgolette non è una barra (§6.2, regola ora scritta) — tranne nelle righe cantate L) e nei blocchi LYRICS), dove " è un carattere della parola. Le righe di intestazione dei blocchi a testo libero (TEXT) …, INFO), PLAY), FORM), LYRICS), FOOT)) accettano un commento di coda come ogni altra riga: prima finiva nel contenuto del blocco. Il commento è conservato dove è scritto quando il documento viene riscritto: una riga di commento dentro un blocco resta nel blocco (§13.1) e i blocchi PLAY)/FORM) mantengono l'impaginazione su più righe.
  • Codici del blocco LYRICS) rinumerati in W157/W158. In una prima bozza il blocco LYRICS) condivideva W152/W153 con le Collezioni; ora ogni codice ha un solo significato (Collezioni: W152–W156; blocco LYRICS): W157 = sezione inesistente, W158 = pickup in overflow).
  • E001 e W153 divisi per causa. E001 copriva nove errori diversi (note, grace, chord-stack, notazione ritmica): resta al caso generico, il token nota non interpretabile, e gli altri otto hanno un codice proprio, E014–E021. W153 resta alla chiave di override sconosciuta in item:; il token senza =valore è ora W179.
  • Segni di flusso autorabili sulla riga dei markers M). Segno $, coda @ e salti (DC/D$/DCal@/FINE/al@) possono essere scritti anche su M) (collocazione consigliata), inclusa una barline di solo flusso a inizio sezione (M) |@); l'effetto è identico all'autoraggio su N)/C). In caso di decoratori divergenti fra M) e la riga note/accordi sulla stessa misura, vince la riga scritta prima (di norma M), che sta in testa al datapack) e viene emesso il nuovo warning W159 (neumaRk_markers.md §2.1, neumaRk_flow_and_repeats.md §2; fino al 2026-10 vinceva sempre M)).
  • Chiusura di sezione opzionale: [!] sostituisce [?] (neumaRk_markers.md §4.2). [!] è un marker anonimo di apertura di sezione non-opzionale e chiude lo scope opzionale precedente come effetto della regola generale §4.1.
  • Ripetizione di misura % con span N>1: il token compare in ognuna delle N misure consecutive del run (es. | a | b | %2 | %2 |), preservando l'invariante "una cell = una misura" (neumaRk_flow_and_repeats.md §7).
  • Durata grace opzionale con default 8. Il primo evento di un blocco grace non richiede più una durata esplicita: se omessa assume 8 (croma); gli eventi successivi continuano a ereditare il valore del blocco. E009 resta solo per durata esplicita non conforme (ammesse 4/8/16) (neumaRk_grace_notes.md §3.1).
  • La cella d'accordo vuota ora fa persistere l'armonia (prima: nessuna armonia). Una misura C) priva di sigle/%/NC ri-realizza l'accordo precedente sul battere (neumaRk_chords.md §1.1). Per dichiarare esplicitamente l'assenza di armonia si usa il nuovo token NC (§1.2, glifo N.C.). Cambia di conseguenza il trigger della slash notation implicita: ora include l'armonia persistente ed esclude NC (neumaRk_notes_and_durations.md §10). NC vale per l'intera misura come unico contenuto della cella, ma può anche stare accanto ad altre sigle: lì si comporta come un accordo (§1.2.1) — occupa il suo slot o la durata esplicita NC(4), stampa N.C. in quella posizione e permane finché non compare una nuova armonia. Vince l'ultimo evento armonico della misura: C-7 NC | | lascia mute le celle vuote, NC C-7 | | fa persistere C-7.
  • Nuovo token R (rest armonico muto) (§1.3): gemello di NC — ferma l'armonia (nessun accordo, niente slash, ferma la persistenza) ma non disegna alcun glifo. Per quando serve nessuna sigla stampata pur essendo a-capo su un'armonia persistente. Come unico contenuto della cella vale per l'intera misura; accanto ad altri token vale su una frazione ed è un sinonimo della pausa accordale r (§1.3.1, §4.3) — R nudo non disegna nulla, R(…) disegna una pausa visibile. Round-trip lossless (neumaRk_chords.md §1.3).
  • Comment-label chord-level con estensione a linea (label-) (§8.5): un - incollato al delimitatore di chiusura ("break"- / [break]-) sposta l'etichetta a lato della sigla e disegna una linea tratteggiata fino al prossimo accordo stampato, a una cella NC o R, o a fine riga/brano, con gancino finale. Idioma per break/drum fill/solo. Distinto per adiacenza dal - di prolungamento (§4.1.2, token isolato): il glued è puramente annotativo (non è slot). Round-trip lossless (neumaRk_chords.md §8.5).
  • Riga A) sopra C): annotazioni testo sugli accordi (neumaRk_articulations.md §2.1): una A) scritta sopra una C) ancora le annotazioni testo "…"/[…] ai token accordo stampati, una per colonna (marchi ./> restano sulle teste del ritmo). Reso sopra la sigla, o sopra la testa del ribattuto !(4) se il token non ha glifo. Allineamento per-token ⇒ round-trip lossless; per la 2ª nota di un ritmo si usa la forma esplicita A(4) !(4). Un token testo oltre le colonne stampate esce dal flusso ed emette W131.
  • Riga A) sopra C): linea tratteggiata di prolungamento (neumaRk_articulations.md §2.1): un'annotazione con - incollato ("vamp"-) apre una linea tratteggiata sopra la banda accordi; ogni colonna coperta vuole il suo - standalone (consumo, niente W131), la linea scavalca le colonne di continuazione e si ferma alla prossima sigla stampata / NC / R / fine rigo, con gancetto sempre in giù. Gemello sopra-la-banda dell'estensione inline di CASO 2 (neumaRk_chords.md §7).
  • Riga A) sopra C): estensione ancorata a barline (neumaRk_articulations.md §2.1): la linea tratteggiata sugli accordi si ancora ora ai bordi — begin-bar -"vamp" (label al bordo sinistro, apre la linea) e terminatore -| (chiude sull'end-bar, gancino, senza testo). Gemello note §13.4–13.5. Un "vamp"- ultimo-token resta inline sulla sigla (l'end-bar testuale che chiude è deferito).
  • Riga A) sopra C): staffa d'analisi { } sugli accordi (neumaRk_articulations.md §2.1): i bracket { } disegnano una staffa quadra (barra + gambe in giù + label opzionale) sopra la campata di accordi, gemella della staffa sulle note (§10.3). Colonne intermedie con . per tenere la posizione.
  • Tenuto/portato in A): da -/-! a _/_! (neumaRk_articulations.md §3). Il carattere - viene liberato in A) per il futuro ruolo di linea-di-testo tratteggiata, uniforme con D); lo staccato ! e l'accento- staccato >! restano invariati. Impatto sotto-soglia (censimento corpus: 0 brani in produzione, 3 brani di test in dev): i file legacy con tenuto - in A) vanno migrati a _.
  • Staffa d'analisi A): delimitatori sorgente [ ] → { } (2026-08-20, neumaRk_articulations.md §10.3). La staffa d'analisi apre/chiude ora con {/}, liberando […] sulle righe A) per il futuro ruolo-box ["testo"]. Il glifo (parentesi quadra sopra il rigo) e la semantica restano invariati; i diagnostici sono rinominati W144.bracket_* → W144.brace_* (brace_open_overlap, brace_close_unmatched, brace_degenerate, brace_unclosed_eol).
  • Linea-di-testo A) unificata con D) (neumaRk_articulations.md §13). La riga A) acquisisce la scritta libera con linea tratteggiata che D) aveva già sotto il rigo, con vocabolario identico ("text"/["text"] note-anchored, "text"- apre la linea, - continua/attraversa le barre, -"text"/"text"- ancoraggio begin/end-bar). A) sopra e D) sotto, rese speculari (gancetto sempre verso il rigo). Il box ["text"] è riattivato in A) (quadre libere dopo lo swap staffa d'analisi → { }).
  • Terminatore -| in A) e D) (neumaRk_articulations.md §13.5, neumaRk_dynamics.md §6.6). Nuovo token: un - incollato al bordo composto come ultimo token della misura chiude la linea sulla end-bar, con gancetto e senza testo — colma il caso "chiudi sulla barline" prima assente (idiomatico del rhythm tacet ----|). È il prefisso dell'intero bordo (-|, -:|, -||, -|., -DCal@|…), uniforme; il discriminatore incollato/spaziato lo distingue dalla continuazione - | che attraversa la barra.
  • Annotazione di nota: cornice tonda ("…") (neumaRk_notes_and_durations.md §8). Il modello dell'annotazione diventa simmetrico: il testo è sempre "…" e la cornice è un involucro opzionale — "…" (nessuna), ["…"] (riquadro), ("…") (tonda, nuova; sentinel (", prima E001). La forma legacy [testo] (riquadro senza virgolette) è tollerata in lettura e normalizzata a ["testo"]. Le direttive inline $F/$S, allora riconosciute solo nel container nudo "…", sono state rimosse il 2026-10-01 (voce «Diteggiatura e corde sulla riga $)» qui sotto).
  • A-capo ; nei container di testo (neumaRk_text_markup.md §3bis). Dentro un container ("…"/["…"]/("…")) un ; non escapato è un a-capo (contenuto multi-riga su una sola riga sorgente); \; = ; letterale (aggiunto al set di escape). Cambiamento di comportamento sotto-soglia: un ; letterale preesistente in un'annotazione viene ora reinterpretato come a-capo — raro, recuperabile con \;.
  • Un solo modello di cornice per i container di testo (neumaRk_text_markup.md §2.1). Il testo sta fra virgolette, la cornice è facoltativa: "testo" nessuna, ["testo"] riquadro (forma di riferimento), [testo] sua abbreviazione (stesso risultato), ("testo") cornice tonda. Prima valeva solo per le annotazioni di nota; ora vale anche per le comment-label d'accordo (di accordo, di gruppo, di riga), i testi di A) (sulla nota, alla stanghetta, sopra C)), i testi di D) (sulla nota, alla stanghetta) e gli end-decorator testuali. Restano fuori sezione e annotazione di M), label di onda e staffa, label dei box PLAY)/FORM). Cambiamenti di comportamento sotto-soglia, senza impatto sui sorgenti esistenti (nessuno usava queste forme fuori dalle note): ["testo"] non mostra più le virgolette nel riquadro; ("testo") era una legatura degenere in A) (W144), una parentesi scartata in C) e D); in D) una parentesi fuori da ("…") (es. (mf), (testo)) spariva in silenzio e ora emette W177. ["xN"]:| equivale a [xN]:|: in entrambe N è il numero di ripetizioni (neumaRk_flow_and_repeats.md §6.1.1, che prima trattava [xN]:| come testo puramente informativo).
  • Legatura ( senza ) = legatura di due note (2026-09-30, neumaRk_articulations.md §10.1). Una ( a cui non segue una ) prima della ( successiva della stessa voce, o prima della fine, è lecita e arriva sull'elemento successivo scritto nel sorgente. Prima emetteva W144.slur_unclosed_eol e si allungava fino a fine sistema; una seconda ( con una aperta emetteva W144.slur_open_overlap ed era ignorata insieme alla sua ). Cambiamento di comportamento: ( ( . ) ) era una legatura esterna, ora sono due legature più una ) orfana. Elemento successivo pausa → W144.slur_unclosed_rest (nuovo); W144.slur_open_overlap resta solo per (( sulla stessa nota. Staffa d'analisi e ottava non cambiano.
  • Diteggiatura e corde sulla riga $) (2026-10-01, neumaRk_fingering.md, neumaRk_notes_and_durations.md §8). Le direttive inline $F (diteggiatura) e $S (numero di corda) dell'annotazione di nota (c4"$F1", d"$F3$S2") sono rimosse: diteggiatura, corde, dita che pizzicano e posizioni ferme si scrivono sulla nuova riga $). L'annotazione di nota ha un solo slot ed è sempre testo: "$F1" è ora testo dell'annotazione, senza diagnostici. Cambiamento di comportamento; migrazione: c4"$F1$S2" → $) 12 sopra N) c4.

Regole precisate e correzioni dell'ottobre 2026

Una revisione completa della specifica contro il parser (2026-10) ha deciso, caso per caso, quale dei due correggere. Le regole che ne escono:

  • Le stenografie ripetono anche la testa (neumaRk_notes_and_durations.md §5, §11.2). !, una durata da sola, '/, e un ^ da solo prendono dalla nota precedente la testa insieme all'altezza (e al =, §11.5), anche oltre una pausa; una testa scritta sul token vince, un'altezza esplicita riparte dalla testa normale. Cambio di comportamento: c8(x) ! dava una testa normale sulla seconda nota, ora dà una croce (nessun brano delle librerie usava questa forma, verificato il 2026-10-08).
  • Contesto di durata: l'ultimo evento scritto (neumaRk_notes_and_durations.md §3.3). Una nota senza durata eredita quella dell'ultimo evento scritto, nota o pausa; le pause aggiunte dall'autofill per completare una misura non contano. Cambiamento di comportamento: | c4 d | e f | dava e2 f2 (ereditava la pausa di completamento), ora dà e4 f4; a2 r8 | d e dava d4. e8^e4, ora dà due crome.
  • Levare iniziale senza durate (§7): > g a b | c1 a inizio brano perdeva le note del levare; ora valgono una semiminima ciascuna, con il nuovo W005. Un levare a durate ereditate che sfora la misura è un eccesso reale (E005). Il levare può cominciare con una pausa o uno spacer (> r8 g a, > s8 g a). Un > d'anacrusi a metà riga emette il nuovo W184.
  • !, ' e , dopo una pausa a inizio brano (§1.1, §5): ripetono la pausa (o lo spacer) con il nuovo W012, invece di una nota inventata. Con una nota prima, ! continua a ripetere l'ultima nota.
  • Header campo per campo (neumaRk_header.md §3.2). Il criterio «tutto o niente» è ritirato: un campo non valido si scarta con un diagnostico e il resto dell'header vale. Nuovi codici E303 (metro dell'header non valido), W304 (BPM o anno malformato o fuori intervallo, sottocodici bpm_invalid/bpm_range/year_invalid/year_range), W305 (campo ripetuto), W306 (token della riga di metadati non riconosciuto), W307 (riga nrk: malformata); E301 ora scatta davvero. Valori come HB) 1000 o HB) 120.5 non vengono più troncati. La regola «lo style implicito comincia con la minuscola» è tolta: il parser non l'ha mai applicata.
  • nrk: è una regola del file scambiato (neumaRk_header.md §2): obbligatoria nel file .nrk e in ogni blocco-brano di una collezione; un brano che arriva al parser senza nrk: è valido. In una collezione un brano senza nrk: viene fuso nel precedente con il nuovo W183.
  • Tonalità e metro non dichiarati valgono C e 4/4 anche nel parser, e il documento riscritto scrive HK) e HM) solo se erano dichiarati (o se diversi dal default).
  • Metri ammessi (neumaRk_header.md §10.4): denominatore 2, 4, 8 o 16, numeratore da 1 a due cifre, o somma […] di parti da 2 a 5. Un metro non valido nell'oggetto di contesto (…) dà E136 (E136.context_meter_invalid) e resta il metro precedente.
  • Conflitti fra righe della stessa misura (neumaRk_datapack.md §7.3): per metro, tonalità e decoratori di flusso vince la riga scritta prima, e la riga che perde riceve W159 (context_conflict, context_key_conflict, flow_decorator_conflict). Per i decoratori di flusso prima vinceva sempre M); per metro e tonalità vinceva l'ultima riga, in silenzio.
  • Diagnostici promessi e ora emessi: W133 (container di testo non chiuso nella misura, su N)/A)/D)/M)), W004 su un blocco grace incollato a una pausa o a uno spacer (W004.rest_main), W008 quando un altro rigo non porta la stessa RN (W008.other_stave; il degrado è una pausa di battuta, non N), E126 sulla seconda label di un gruppo (E126.label_dup_group), W155 per name:/desc: dopo il primo brano o fra item: e il suo blocco, W182 per una riga F) non finale, duplicata o con contenuto estraneo (dal 2026-10-08 anche no_room, vedi la riga Format qui sotto). W132 resta riservato, come W130.
  • Grace: un blocco incollato a sinistra (c4[d8/^]e4) è una grace sulla nota che segue (prima si perdevano due note con E001); un evento grace non valido si scarta con E004 (grace_pitch_invalid, grace_force_accidental) o E009 (neumaRk_grace_notes.md §2.1).
  • Ritirati dalla specifica: la riga Format implicita (|*| senza F)); l'E123 per righe interposte fra N) e N2 (E123 resta solo senza rigo parent); l'obbligo di misure uguali fra righi e voci (il più corto si completa con pause); il . isolato come barra finale (. non è mai una barra).
  • Costrutti ammessi e precisati: >( … ) con tonde staccate vale come la forma incollata; il > iniziale di D) sotto un levare è il segnaposto, non un decrescendo, e una riga A)/D)/$) senza segnaposto comincia dalla prima nota del levare; \] è una ] letterale nel riquadro abbreviato […], nel nome di sezione […] di M) e nel NAME dei box PLAY)/FORM); ["a|b"] sulla riga accordi è una label; un label in testa a una misura senza accordo dopo resta nella sua misura, sulla cella vuota (anche su C+), e due label in testa alla stessa misura danno E126; il nudge d'ottava si scrive prima di @ (c'@4_4); la legatura d'accordo si scrive dentro le parentesi (C(2^)); una riga di soli % è una riga accordi (il margine con page break è -%); la ^ in testa a una nota dopo una pausa è una legatura d'ingresso; il % vale anche sulla voce 2; _ dentro una sillaba di L)/LYRICS) è un'elisione (neumaRk_lyrics.md §5); in un blocco di collezione, righe vuote dopo nrk: e commenti // nell'header non cambiano il titolo del brano (neumaRk_collections.md §5).
  • La prima stanghetta (neumaRk_datapack.md §6, §7.3). È facoltativa quando prima di essa ci sono solo l'identificatore di riga e oggetti di contesto: il gruppo prima della prima stanghetta vale come incollato alla barra d'ingresso, su ogni riga di misura, e non crea una misura. Una label, una nota, una sigla o un testo creano invece la misura (C) [Intro] | Eb7 F | ha due misure). Cambiamento di comportamento: C) (Bb) | Eb7 F | dava una misura vuota con l'accordo facoltativo Bb, ora è una misura in Sib; su C) e sulle righe M)/A)/D)/L)/$) un metro in quella posizione dava E102 o si perdeva. La forma con label e stanghetta di neumaRk_chords.md §8.1 è una misura in più, non una scrittura equivalente alla forma senza stanghette.
  • Tonalità o accordo facoltativo su C) (neumaRk_chords.md §5): (Bb) incollato alla barra o prima della prima stanghetta è la tonalità; staccato dopo la barra o dentro la misura è un accordo facoltativo.
  • Contesto in posizione libera (neumaRk_datapack.md §7.3): un metro staccato a un confine di misura vale anche su C) e sulle righe M)/A)/D)/L)/$), prima di una label come ingresso, dopo come uscita (prima dava E102 o si perdeva in silenzio). Sulle righe M)/A)/D)/L)/$) una tonalità o un riferimento d'altezza staccati non sono contesto. (X) come tonalità di contesto vale nessuna armatura, come (C).
  • Chiave e riferimento d'altezza appartengono al rigo (neumaRk_datapack.md §7.3): su M)/A)/D)/L)/$) danno E135 (E135.clef_on_secondary_row, E135.pitch_ref_on_secondary_row) e si scartano; il riferimento d'altezza dà lo stesso E135 anche su C) e C+. Cambiamento di comportamento: prima cambiavano in silenzio chiave, altezza e durata della riga N) (su C), con la riga accordi sotto la N), la lettura non terminava).
  • Gruppi irregolari e durate sconosciute (neumaRk_notes_and_durations.md §3.2.1, §3.2.2, §3.3): un gruppo di rapporto diverso chiude quello aperto con W011; un gruppo aperto alla stanghetta la cui unità non entra nello spazio rimasto si completa con pause dello stesso rapporto di valore minore (W002); durate sconosciute che non si spartiscono la misura in figure scrivibili prendono una figura binaria comune con il nuovo sottocodice W005.uneven_split. Prima questi casi davano errori interni (E90x) o durate incoerenti.
  • BPM non intero (neumaRk_play_directive.md §2.3.1): (=120.5bpm), (=120,5bpm) e, dopo uno Style, (=Swing, 92,5bpm) danno W136 (W136.bpm_not_integer); prima erano ignorati in silenzio, e 92,50bpm impostava 50 bpm.
  • Nuovi diagnostici per valori ignorati in silenzio: W308 (marcatore d'header sconosciuto, neumaRk_header.md §6.1: prima la riga finiva nello style), W185 (transpose= non intero in item:, neumaRk_collections.md §6.1), E004 su pausa, spacer o non-altezza dentro un chord-stack (E004.stack_rest, E004.stack_pitch_invalid, neumaRk_notes_and_durations.md §2.6: prima diventavano un doppione della prima altezza), W186 (token fuori dal vocabolario della riga M), per esempio una tonalità staccata M) | (Bb) | o un testo libero M) | foo |, neumaRk_markers.md §7: prima spariva; lo stesso W186 per la seconda sezione o annotazione della stessa misura, M) | [A] [B] |, M) | "a" "b" |, W186.section_extra, W186.annotation_extra, §3.2: vale la prima). Una […] dentro un'annotazione M) è testo: prima M) | "a [b] c" | apriva anche la sezione b.
  • Trattino finale nelle sillabe (neumaRk_lyrics.md §5, §7): pa- dice che la parola continua sulla sillaba seguente, anche oltre la stanghetta e a capo; prima la continuazione si perdeva alla stanghetta. Il documento riscritto conserva il trattino.
  • Header dei blocchi di collezione (neumaRk_collections.md §5): HC) porta i crediti e nessun marcatore H…) diventa lo style del brano.
  • Severità: un errore E### non blocca la lettura (§ Convenzione qui sotto). E007 (slash senza un movimento disponibile) non lascia più una pausa a durata zero.
  • Letture corrette, senza effetto sulla sintassi: gruppi irregolari con rapporto esplicito (c8t5:3, c8t4:3, c4t2:3), metri in ottavi oltre 15/8 (16/8), R1 letta come pausa di battuta, barra finale |., metri con numeratore grande (66/2, 99/4) completati senza errori interni né pause perse, pausa di battuta nei metri da due semibrevi in su (4/2, 8/4, 16/8, 32/16).
  • Correzioni del documento riscritto (round-trip), senza effetto sulla sintassi: blocchi versione con la stessa etichetta, parentesi editoriali ( … ) anche dentro >( … ), metro composto [3+3+2]/8 (prima diventava 8/8), terminatore -|., secondo flag sull'header di TEXT) (riscritto escapato), grace incollata a una pausa, legatura d'ingresso dopo una pausa o nella seconda volta, pause fuse a cavallo del mezzo della misura (anche nel ritmo accordi), chiave in linea dopo un datapack di sole pause, ^ a metà misura nella forma compatta, barra finale .| non ripetuta nel datapack seguente, padding dei campi dell'header, pause scritte distinte che occupano ciascuna un blocco intero del metro (r1 r1 in 4/2: non più fuse), trattino finale delle sillabe, label di riga di una C) senza sigle (C) [Intro] |, C) "solos": prima la riga spariva).
  • Resa di riferimento (informativa): la voce che tace per tutta la misura si disegna con la pausa di semibreve centrata, in ogni metro e per voce (neumaRk_notes_and_durations.md §3.3.1); una nota sola che riempie la misura è centrata; la partitura usa un inchiostro unico, tranne i link (neumaRk_specification.md §2). Nelle esportazioni MusicXML e LilyPond l'elisione _ di una sillaba è un'elisione e la pausa di battuta una pausa di misura.

Convenzione dei codici diagnostici

  • E### — errore: costrutto non valido. Il parser lo ripara o lo scarta, come descritto dal documento che lo riguarda, e prosegue; la misura coinvolta può essere segnata non valida (LOG_ERROR).
  • W### — avviso: costrutto ammesso ma probabilmente non voluto, o valore ignorato; il parsing prosegue (LOG_WARNING).

Nessun diagnostico, errore o avviso, interrompe la lettura del documento. Il prefisso indica la severità, non la categoria. L'intera famiglia diagnostica 0.6+ (W130–W167: dinamiche, articolazioni, play directive, PLAY) / FORM), sezioni collassabili, versioni, HV), collezioni, blocco LYRICS)) è emessa come warning ed è stata rinominata da E13x/E14x/E15x a W13x/W14x/W15x per allineare il prefisso alla severità reale.

Famiglie. Il numero dopo la lettera indica l'area, a blocchi:

Intervallo Area
E001–E022, W002–W013 Note, durate, grace
E101–E137, W103–W186 Accordi, datapack, voci, contesto di misura e tutte le famiglie 0.6+ (dinamiche, articolazioni, flusso, markers, versioni, collezioni, lyrics, note a piè di pagina, link, diteggiatura)
E300–E303, W301–W308 Flusso e ripetizioni (E300, E302), header (E301, E303, W301–W308)
W400 Ritmo degli accordi
E901–E906, W999 Interni (vedi sotto)

I numeri mancanti dentro un intervallo non sono codici: non sono mai stati assegnati, salvo quelli marcati ritirato o riservato nelle tabelle, che non vanno riassegnati.

Le due tabelle che seguono — codici di base (pre-0.6 e fondamentali) e codici 0.6+ — insieme costituiscono la mappa completa e autorevole dei codici normativi (codice → significato), allineata al parser. Ogni codice ha un solo significato. Alcuni codici hanno sottocodici (W131.excess_syllable, E136.context_meter_invalid, …): precisano la causa, il significato del codice resta quello della tabella.

I codici interni (dev-facing, non normativi) sono volutamente esclusi da queste tabelle: E901–E906 — guardie contro stati impossibili (durata non-positiva, valori nota non deducibili, navigazione con line/measure id invalido, tuplet non rilevabile, valore di nota non rappresentabile) — e W999, marker sintetico di troncamento del log emesso quando i diagnostici superano la capacità del buffer. Fuori dal vocabolario del linguaggio stanno anche E910/W910, che non vengono dal parser ma dal renderer di un'applicazione (una misura o un passo di resa non riuscito). Come W130, W132 e W161, non fanno parte del vocabolario del linguaggio. W001 è ritirato (mai emesso).

Allocazione codici di base (pre-0.6 e fondamentali)

Codice Significato Famiglia (doc)
E001 Token nota non interpretabile (nessun codice più specifico si applica; es. chord-stack incollato alla nota seguente <c e g>e4, %3) Note e durate
E002 Una durata non può seguire . o ! Note e durate
E003 Tuplet non valido Note e durate
E004 Impossibile interpretare la pitch · evento grace che non è un'altezza (E004.grace_pitch_invalid) o con la forzatura ! (E004.grace_force_accidental): evento scartato · pausa o spacer (E004.stack_rest) o elemento che non è un'altezza (E004.stack_pitch_invalid) dentro un chord-stack <…>, anche grace: elemento scartato Note e durate · Grace notes
E005 Le durate delle note superano il metro della misura (anche nel levare) Note e durate
E006 Più di uno slash-rhythm / per misura Note e durate
E007 Lo slash / non ha spazio: meno di un movimento disponibile dopo l'allineamento Note e durate
E008 Ottava assoluta @<n>_ richiede durata esplicita Note e durate
E009 Durata grace esplicita non conforme (ammesse solo 4/8/16), o elementi non ammessi dopo l'altezza (?, t, ., "…", (…)); l'omissione sul primo evento è lecita (default 8) (E009.grace_duration_invalid) Grace notes
E010 Modificatore / o ^ ammesso solo sull'ultimo evento grace Grace notes
E011 Blocco grace vuoto [] Grace notes
E012 Blocco grace con più di 4 eventi Grace notes
E013 Pausa/spaziatore non ammessi come evento grace Grace notes
E014 Gruppo di notazione ritmica {…} non chiuso Note e durate
E015 Blocco grace […] non chiuso Grace notes
E016 Chord-stack malformato: < senza > di chiusura, o <> Note e durate
E017 Chord-stack senza pitch (< >) Note e durate
E018 Segno di prolungamento/ripetizione/ottava senza una nota precedente Note e durate
E019 Evento grace privo di pitch/durata Grace notes
E020 Chord-stack grace non chiuso (<…) Grace notes
E021 Chord-stack grace vuoto <> Grace notes
E022 Marca = di nota non intonata fuori posto: da sola (unpitched_bare), su pausa o spacer (unpitched_rest), dentro un chord-stack (unpitched_inside_stack), davanti a un token che non è una nota (unpitched_misplaced) Note e durate (§11.5)
E101 Lista ritmica compatta / polychord / espressione accordo non interpretabile (compact_rhythm_invalid, compact_rhythm_first_rest, polychord_unparsable, chord_unparsable) Accordi
E102 Token non riconosciuto nella riga accordi (anche container non chiuso, ^ fuori dalle parentesi) Accordi
E110 Troppi stave nel datapack (max 4) Datapack / multi-stave
~~E111~~ ~~D)/L) orfana~~ — ritirato prima dell'implementazione: la riga orfana è tollerata (vedi W130). Codice non riassegnato —
E122 N) senza match: più continuazioni che stave nel datapack precedente (usa N+) Datapack (N+)
E123 N2 senza rigo parent: nessuna N) o N+ prima di lei nel datapack Voci
E124 N2 duplicata sullo stesso rigo Voci
E125 Direttiva di chiave non ammessa in riga N2 Voci
E126 Più di un comment-label sullo stesso chord / group / row (label_dup_chord, label_dup_group, label_dup_row) Accordi (alternate)
E127 Max 2 righe alternative C+ per datapack Accordi (alternate)
~~E128~~ ~~NC misto ad altro contenuto nella stessa misura~~ — ritirato: NC accanto ad altre sigle è la forma frazionaria dell'assenza di accordo (neumaRk_chords.md §1.2.1). Codice non riassegnato Accordi
E129 Più di una riga base C) (blocco accordi) nel datapack Accordi / datapack
E130 Marker voce/rigo malformato N2) / N+) (usa N2 / N+) Voci
E131 Due marker d'incrocio X sulla stessa colonna del rigo Voci (incrocio)
E132 Marker d'incrocio X privo di nota pivot Voci (incrocio)
~~E133~~ ~~R (rest armonico) misto ad altro contenuto nella stessa misura~~ — ritirato: R accanto ad altri token è la forma frazionaria del rest armonico (neumaRk_chords.md §1.3.1). Codice non riassegnato Accordi
E134 Nota contata dopo il gruppo anacrusi-di-ritornello >( … ) (dev'essere terminale) (E134.reprise_note_after_group) Note e durate
E135 Chiave su una riga accordi (C) \|(@F8vb), E135.clef_on_chord_row): su C) il @ dichiara l'armonia in vigore, e (@F)/(@G)/(@C) vi sono sigle · chiave (E135.clef_on_secondary_row) o riferimento d'altezza (E135.pitch_ref_on_secondary_row) su M)/A)/D)/L)/$), riferimento d'altezza anche su C)/C+: appartengono al rigo, si scrivono sulla N). Componente scartato Contesto di misura
E136 Componente dell'oggetto di contesto (…) non riconosciuto (context_component_invalid), metro non valido (context_meter_invalid: resta il metro precedente), o gruppo fuori da un confine di misura (context_not_at_boundary) Contesto di misura
E137 INFO) in mezzo alle righe musicali di un datapack: va prima della prima riga o dopo l'ultima (E137.info_inside_datapack) Datapack / INFO)
E300 Measure-repeat (% / RN) senza sorgente valida (E300.mmr_no_source) Flusso / MMR
E301 Impossibile interpretare la tonalità dell'header (HK) H): campo scartato, vale il default Header / chiave
E302 Repeat count x0 (contraddittorio: «esegui 0 volte» → il materiale non viene mai eseguito); su :x0\|/:0x\|, [x0]:\| e box PLAY/FORM […]x0. x1/x100 restano W142 (E302.repeat_count_zero) Flusso / ripetizioni
E303 Metro dell'header non valido (HM) 5/3): campo scartato, resta il metro di partenza Header
W002 Tuplet non chiuso prima della fine misura (auto-riempito con pause dell'unità) Note e durate
W003 Blocco grace non adiacente alla main (ignorato) Grace notes
W004 Blocco grace privo di main adiacente, o seguito da una pausa o da uno spacer (W004.rest_main): ignorato Grace notes
W005 Durata implicita senza una durata da ereditare: nel levare iniziale semiminime; in una misura, durate sconosciute che non si spartiscono lo spazio in figure scrivibili (W005.uneven_split): la figura binaria più lunga che entra per tutte, al più la semiminima Note e durate
W006 Pitch fuori dal range MIDI [1..127] Note e durate
W007 Token di notazione ritmica {…} non valido: senza durata (W007.rhythm_token_no_duration), durata non valida (W007.rhythm_duration_invalid) o tuplet non valido (W007.rhythm_tuplet_invalid) Note e durate
W008 Pausa multi-misura RN su span con contenuto, o non condivisa dagli altri righi (W008.other_stave): degrado a una pausa di battuta Note e durate (MMR)
W009 Modificatore non ammesso su spacer s (ignorato) Note e durate (spacer)
W010.* Span di parentesi editoriali di gruppo ( … ) malformato: paren_open_overlap (annidamento), paren_close_unmatched () orfana), paren_degenerate (( ) vuoto), paren_unclosed_eol (non chiuso a fine rigo → chiusura implicita) Note e durate (§11.4)
W011 Gruppo irregolare chiuso prima di completare il ciclo, da una durata esplicita o da un gruppo di rapporto diverso (completato con pause dell'unità; es. a8t b4., c16t5 c4t7) Note e durate
W012 ! dopo una pausa senza una nota precedente da ripetere: si ripete la pausa o lo spacer · stesso caso per '/, (W012.octave_mark) Note e durate
W013 Nota non intonata =: alterazione ignorata (accidental), legatura con una nota intonata (tie_mixed), = sulla notazione ritmica {…} (rhythm_redundant) Note e durate (§11.5)
W103 Suffisso accordo non riconosciuto Accordi
W301 Impossibile dedurre titolo o credits dalla prima riga di header Header
W304 BPM o anno dell'header malformato o fuori intervallo (bpm_invalid, bpm_range, year_invalid, year_range): campo ignorato Header
W305 Campo dell'header ripetuto: vale il primo Header
W306 Token della riga di metadati implicita non riconosciuto: ignorato Header
W307 Riga nrk: malformata (non nrk:<major>.<minor>): ignorata Header
W308 Marcatore d'header sconosciuto (HZ) foo): riga ignorata, resta header Header
W400 Nota del ritmo accordi con durata non positiva (omessa) Accordi (ritmo)

Allocazione codici 0.6+ (fonte unica)

Le righe $)/A)/D)/L) condividono W131 (eccesso token) per identità semantica, non per collisione.

Codice Significato Famiglia (doc)
W130 (riservato — non emesso: la D)/L) orfana è tollerata, bind silenzioso a rigo 0) Dinamiche
W131 Token in eccesso rispetto agli eventi della riga sotto: sillabe (excess_syllable), articolazioni (excess_articulation), dinamiche (excess_dynamic), diteggiatura (excess_fingering), sillabe di LYRICS) sulle note di una sezione (excess_section_lyric); su una A) sopra C), testi oltre le colonne di sigla stampate $)/A)/D)/L)/LYRICS) (condiviso)
W132 (riservato — non emesso: un - di D) non riconducibile a extension/barline non ha effetto) Dinamiche
W133 Container testuale aperto e non chiuso nella misura: il resto della misura è letto come testo (N), A), D), M); su C) è E102) Markup testuale
W134 Play directive vuota (=) Play directive
W135 Ordine slot invertito (tempo prima di style) Play directive
W136 BPM fuori range (10–999) o non intero, col punto o con la virgola decimale (W136.bpm_not_integer), anche dopo uno Style: la direttiva non imposta il tempo Play directive
W137 Figura NRK non valida in metric modulation Play directive
W138 Play directive in riga diversa da M) Play directive
W139 Token A) fuori dal vocabolario Articolazioni
W140 Più di una sezione FORM) PLAY/FORM
W141 Durata \|BARS non valida (1–999) PLAY/FORM
W142 Repeat count xN fuori range (2–99), sui box PLAY)/FORM) ([…]xN) e sulla stanghetta (:xN\|, W142.repeat_out_of_range) PLAY/FORM · Flusso / ripetizioni
W143 Keyword &xxx non riservata PLAY/FORM
W144 Span A) malformato: legatura (slur_*), staffa d'analisi (brace_*), ottava (octave_*) — apertura e chiusura sulla stessa nota, chiusura senza apertura, seconda apertura con una aperta, non chiuso a fine riga, legatura che arriva su una pausa (slur_unclosed_rest) · posizione ferma [ ] di $) malformata: position_degenerate, position_close_unmatched, position_open_overlap, position_unclosed_eol Articolazioni · Diteggiatura
W145 FORM) non in fondo al documento PLAY/FORM
W146 [!] ridondante: nessuna sezione opzionale da chiudere Markers
W147 Blocco %%NAME non chiuso: tutto fino a fine file è trattato come parte sua Versioni
W148 %%end orfano (nessun blocco aperto) Versioni
W149 (ritirato: un nuovo %%NAME chiude implicitamente il blocco aperto — non riassegnare) —
W150 HV) malformato: NAME mancante (hv_expected_name), lista attesa (hv_expected_list) o non chiusa (hv_list_unclosed), coda dopo la lista (hv_expected_default_or_eol), default= senza etichetta (hv_default_no_label), o forma vecchia HV) versions: […] (hv_legacy_form) Versioni
W151 Sezione collassabile non a inizio rigo (§4.7): apertura (W151.optional_open) o confini (W151.optional_bounds) · default usato come NAME o etichetta di versione Markers · Versioni
W152 Riga item: in collezione nrk-book: Collezioni
W153 Chiave override sconosciuta in item: Collezioni
W154 Riga item: non seguita da un blocco-brano Collezioni
W155 Direttiva header collezione dopo il primo blocco, o fra item: e il suo blocco: ignorata Collezioni
W156 Collezione priva di blocchi-brano Collezioni
W157 [NAME] nel corpo di LYRICS) riferisce una sezione inesistente (reference-broken) (W157.section_not_found) Lyrics (blocco LYRICS))
W158 Gruppo pickup <…> di LYRICS) senza note su cui legarsi: corsa precedente vuota (pickup_no_prenotes) o più corta del gruppo (pickup_overflow) Lyrics (blocco LYRICS))
W159 Metro (context_conflict), tonalità (context_key_conflict) o decoratori di flusso (flow_decorator_conflict) diversi fra righe della stessa misura: vince la riga scritta prima Contesto di misura / flusso
W160 Più di un gruppo anacrusi-di-ritornello >( … ) nella stessa misura (W160.reprise_multiple_groups) Note e durate
W161 (riservato/differito — anacrusi di ritornello, validazione in parse_text) Note e durate
W162 Voce FOOT) che non inizia con un'etichetta [^…] (ignorata) (W162.footnote_entry_no_label) Note a piè di pagina
W163 Etichetta esplicita duplicata in FOOT) (W163.footnote_label_duplicate) Note a piè di pagina
W164 Richiamo [^…] senza definizione corrispondente in FOOT) (W164.footnote_ref_no_def) Note a piè di pagina
W165 Definizione FOOT) mai referenziata (W165.footnote_def_unreferenced) Note a piè di pagina
W166 Mix di etichette esplicite e auto [^] nello stesso documento (W166.footnote_label_mix) Note a piè di pagina
W167 FINE su barra e FINE ancorato a nota in conflitto nella stessa misura (W167.fine_barline_note_conflict) Flusso / MMR
W168 N+ ridichiarato: un rigo del datapack precedente resta senza continuazione N) Datapack / righi
W169 Contesto annunciato due volte nello stesso punto (fine misura e inizio della successiva) (W169.context_double_announce) Contesto di misura
W170 Secondo INFO) sullo stesso ancoraggio: vale il primo (W170.info_duplicate) Datapack / INFO)
W171 INFO) vuoto (senza etichetta né corpo): ignorato (W171.info_empty) Datapack / INFO)
W172 Etichetta "…" di INFO) non chiusa sulla stessa riga: la riga è letta come corpo (W172.info_label_unclosed) Datapack / INFO)
W173 (ritirato prima dell'implementazione — non riassegnare) —
W174 Riga A) senza N) (né C)/C+) subito sotto: ignorata · riga $) senza N) sotto (W174.fingering_orphan): ignorata Datapack / articolazioni · diteggiatura
W175 Link con indirizzo non http/https o malformato: resta il testo, non attivabile (W175.link_bad_url) Markup testuale (link)
W176 Link vuoto [testo=>] / [=>]: resta il testo, se c'è (W176.link_empty) Markup testuale (link)
W177 Parentesi in D) fuori da una cornice ("…"): ignorata Dinamiche / markup testuale
W178 I blocchi di una versione finiscono su armonie diverse e la misura dopo %%end ha la cella vuota: eredita quella del blocco canonico Versioni / armonia
W179 Token senza =valore in item: Collezioni
W180 Token $) malformato: ignorato per intero Diteggiatura
W181 Token $) non applicabile: su una pausa (fingering_rest), su un prolungamento . (fingering_prolongation), gruppo <…> su una nota singola (fingering_not_chord) o con più elementi delle altezze (fingering_chord_excess) Diteggiatura
W182 Riga F) non finale (not_last: spostata in fondo), duplicata (duplicate: vale l'ultima), senza un segno d'allineamento scritto come token intero o con un secondo segno (extra_content: si ignora la riga, o tutto dal secondo segno in poi), o con contenuto a lato dove il sistema non lascia spazio (no_room: contenuto dalla parte del sistema, o con \|**\|; ignorato) Datapack / Format
W183 In una collezione, blocco-brano senza la sua riga nrk:: fuso nel brano precedente Collezioni
W184 Segno di levare > a metà riga: reso come una misura vuota seguita dal levare Note e durate
W185 transpose= di item: che non è un intero con segno (transpose=abc): override ignorato Collezioni
W186 Token fuori dal vocabolario della riga M) (sezione, annotazione, play directive, contesto a un confine di misura): scartato; W186.key_free_position per una tonalità staccata (M) \| (Bb) \|); W186.section_extra / W186.annotation_extra per la seconda sezione o annotazione della stessa misura (vale la prima) Markers

Nota storica: W144 era stato bozzato anche per "PLAY) nidificata", caso impedito strutturalmente dal parser (mai emesso); il codice resta quindi alle articolazioni. La sezione collassabile non-a-inizio-rigo è stata spostata da W147 (che collideva con Versioni) a W151 (2026-05-26).


neumaRk 0.5.0 — Prima versione pubblica

Stato

Public preview. Il linguaggio è utilizzabile e coerente, ma soggetto a evoluzioni a breve termine.

Significato della versione

Questa è la prima versione pubblica di neumaRk. Il numero 0.5 riflette una maturazione concettuale già avanzata, pur senza garantire stabilità definitiva dell’interfaccia semantica.

Funzionalità incluse

  • struttura a datapack
  • header con deduzione conservativa
  • note con durate implicite ed esplicite
  • accordi con semantica ritmica e durate implicite ed esplicite
  • accordi con lista compatta di durate X(a,b,r16,c,...) (vedi §4.4)
  • gestione di ripetizioni e flusso
  • supporto a formati Compact / Human / Verbose

Chiarimenti normativi

  • contesto musicale persistente
  • semantica contestuale dei simboli
  • priorità della nota unica nella battuta
  • riga Format deducibile (ritirata nella 0.6: la riga Format si dichiara sempre con F))

Non ancora stabilizzato

Elenco storico alla 0.5.0; molte di queste voci sono state introdotte nella 0.6 (vedi Novità della 0.6).

  • articolazioni, dinamiche, lyrics
  • polyaccordi (sintassi [top|bottom], vedi neumaRk_chords.md §6)
  • multi-stave per datapack (fino a 4 righi, vedi neumaRk_datapack.md §4)
  • ripetizione di misura (sintassi % / %! / %2 / %!2 / %4 / %!4, vedi neumaRk_flow_and_repeats.md §7)
  • possibili estensioni sintattiche
  • raffinamento delle regole di deduzione
  • validazione formale completa

Compatibilità

Non esistono versioni pubbliche precedenti.