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 diFOOT); ora vale in tutti i container, in entrambe le forme"…"e[…]: annotazioniM)eD), comment-label di accordo, label diA)e dei boxPLAY)/FORM), end-decorator. Restano esclusi, col;letterale, il nome di sezioneM) [NOME], l'etichetta di versione e quella diINFO). 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 inD)e sotto un boxPLAY)/FORM)); le label dei box vanno anche a capo per larghezza, riga per riga. Nella prosa diTEXT)e del corpo diINFO)il;è letterale: il corpo diINFO)va a capo solo con l'a-capo del sorgente, non più sul;. InPLAY)/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 notac4"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 conE001, la riga accordi davaE102. Ora valgono\"e\\. L'header resta testo semplice, con"e\letterali (neumaRk_header.md§5). Nella rigaM)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%%NAMEnon è più una descrizione: quel testo si scrive ora con unINFO)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 variantiC+/N+/N2(seguite da spazio o fine riga) e le righe d'intestazioneH…), che prima venivano assorbite come testo. Una marker-row implicita ([Intro]) non chiude un blocco: davanti alla prosa si scriveM) [Intro]. Nuovo escape a inizio riga:\N) …è testo del blocco e il\si toglie alla resa; sostituisce la «Limitazione» dineumaRk_text_line.md§4. Invariato il criterio della riga vuota (chiudePLAY)/FORM)/FOOT), non chiudeTEXT)/LYRICS)). - Due forme riservate dal link
[testo=>url](neumaRk_text_markup.md§3quater). InPLAY)/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 cantateL)e nei blocchiLYRICS), 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 blocchiPLAY)/FORM)mantengono l'impaginazione su più righe. - Codici del blocco
LYRICS)rinumerati inW157/W158. In una prima bozza il bloccoLYRICS)condividevaW152/W153con le Collezioni; ora ogni codice ha un solo significato (Collezioni:W152–W156; bloccoLYRICS):W157= sezione inesistente,W158= pickup in overflow). E001eW153divisi per causa.E001copriva 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.W153resta alla chiave di override sconosciuta initem:; il token senza=valoreè oraW179.- Segni di flusso autorabili sulla riga dei markers
M). Segno$, coda@e salti (DC/D$/DCal@/FINE/al@) possono essere scritti anche suM)(collocazione consigliata), inclusa una barline di solo flusso a inizio sezione (M) |@); l'effetto è identico all'autoraggio suN)/C). In caso di decoratori divergenti fraM)e la riga note/accordi sulla stessa misura, vince la riga scritta prima (di normaM), che sta in testa al datapack) e viene emesso il nuovo warningW159(neumaRk_markers.md§2.1,neumaRk_flow_and_repeats.md§2; fino al 2026-10 vinceva sempreM)). - 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 assume8(croma); gli eventi successivi continuano a ereditare il valore del blocco.E009resta solo per durata esplicita non conforme (ammesse4/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/%/NCri-realizza l'accordo precedente sul battere (neumaRk_chords.md§1.1). Per dichiarare esplicitamente l'assenza di armonia si usa il nuovo tokenNC(§1.2, glifoN.C.). Cambia di conseguenza il trigger della slash notation implicita: ora include l'armonia persistente ed escludeNC(neumaRk_notes_and_durations.md§10).NCvale 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 esplicitaNC(4), stampaN.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 persistereC-7. - Nuovo token
R(rest armonico muto) (§1.3): gemello diNC— 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 accordaler(§1.3.1, §4.3) —Rnudo 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 cellaNCoR, o a fine riga/brano, con gancino finale. Idioma perbreak/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)sopraC): annotazioni testo sugli accordi (neumaRk_articulations.md§2.1): unaA)scritta sopra unaC)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 esplicitaA(4) !(4). Un token testo oltre le colonne stampate esce dal flusso ed emette W131. - Riga
A)sopraC): 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)sopraC): 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)sopraC): 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 inA)per il futuro ruolo di linea-di-testo tratteggiata, uniforme conD); 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-inA)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 righeA)per il futuro ruolo-box["testo"]. Il glifo (parentesi quadra sopra il rigo) e la semantica restano invariati; i diagnostici sono rinominatiW144.bracket_*→W144.brace_*(brace_open_overlap,brace_close_unmatched,brace_degenerate,brace_unclosed_eol). - Linea-di-testo
A)unificata conD)(neumaRk_articulations.md§13). La rigaA)acquisisce la scritta libera con linea tratteggiata cheD)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 eD)sotto, rese speculari (gancetto sempre verso il rigo). Il box["text"]è riattivato inA)(quadre libere dopo lo swap staffa d'analisi →{ }). - Terminatore
-|inA)eD)(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(", primaE001). 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 diA)(sulla nota, alla stanghetta, sopraC)), i testi diD)(sulla nota, alla stanghetta) e gli end-decorator testuali. Restano fuori sezione e annotazione diM), label di onda e staffa, label dei boxPLAY)/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 inA)(W144), una parentesi scartata inC)eD); inD)una parentesi fuori da("…")(es.(mf),(testo)) spariva in silenzio e ora emette W177.["xN"]:|equivale a[xN]:|: in entrambeNè 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 emettevaW144.slur_unclosed_eole si allungava fino a fine sistema; una seconda(con una aperta emettevaW144.slur_open_overlaped 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_overlapresta 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"→$) 12sopraN) 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 |davae2 f2(ereditava la pausa di completamento), ora dàe4 f4;a2 r8 | d edavad4. e8^e4, ora dà due crome. - Levare iniziale senza durate (§7):
> g a b | c1a 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, sottocodicibpm_invalid/bpm_range/year_invalid/year_range), W305 (campo ripetuto), W306 (token della riga di metadati non riconosciuto), W307 (riganrk:malformata); E301 ora scatta davvero. Valori comeHB) 1000oHB) 120.5non 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.nrke in ogni blocco-brano di una collezione; un brano che arriva al parser senzanrk:è valido. In una collezione un brano senzanrk: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)eHM)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 sempreM); 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 stessaRN(W008.other_stave; il degrado è una pausa di battuta, non N), E126 sulla seconda label di un gruppo (E126.label_dup_group), W155 pername:/desc:dopo il primo brano o fraitem:e il suo blocco, W182 per una rigaF)non finale, duplicata o con contenuto estraneo (dal 2026-10-08 ancheno_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 (
|*|senzaF)); l'E123 per righe interposte fraN)eN2(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 diD)sotto un levare è il segnaposto, non un decrescendo, e una rigaA)/D)/$)senza segnaposto comincia dalla prima nota del levare;\]è una]letterale nel riquadro abbreviato[…], nel nome di sezione[…]diM)e nel NAME dei boxPLAY)/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 suC+), 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 diL)/LYRICS)è un'elisione (neumaRk_lyrics.md§5); in un blocco di collezione, righe vuote doponrk: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; suC)e sulle righeM)/A)/D)/L)/$)un metro in quella posizione dava E102 o si perdeva. La forma con label e stanghetta dineumaRk_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 suC)e sulle righeM)/A)/D)/L)/$), prima di una label come ingresso, dopo come uscita (prima dava E102 o si perdeva in silenzio). Sulle righeM)/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): suM)/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 suC)eC+. Cambiamento di comportamento: prima cambiavano in silenzio chiave, altezza e durata della rigaN)(suC), con la riga accordi sotto laN), 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, e92,50bpmimpostava 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 initem:,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 rigaM), per esempio una tonalità staccataM) | (Bb) |o un testo liberoM) | 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'annotazioneM)è testo: primaM) | "a [b] c" |apriva anche la sezioneb. - 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 marcatoreH…)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 oltre15/8(16/8),R1letta 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 diventava8/8), terminatore-|., secondo flag sull'header diTEXT)(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 r1in 4/2: non più fuse), trattino finale delle sillabe, label di riga di unaC)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:
W144era 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 daW147(che collideva con Versioni) aW151(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], vedineumaRk_chords.md§6) - multi-stave per datapack (fino a 4 righi, vedi
neumaRk_datapack.md§4) - ripetizione di misura (sintassi
%/%!/%2/%!2/%4/%!4, vedineumaRk_flow_and_repeats.md§7) - possibili estensioni sintattiche
- raffinamento delle regole di deduzione
- validazione formale completa
Compatibilità¶
Non esistono versioni pubbliche precedenti.