A.19 Glossario tecnico

Un glossario dei termini tecnici e dei concetti usati internamente in LilyPond. Questi termini appaiono nei manuali, nelle mailing list e nel codice sorgente.


alist

Una lista di associazioni – alist per association list –, è una coppia Scheme che associa un valore a una parola chiave: (chiave . valore). Per esempio, in ‘scm/lily.scm’, la lista di associazioni “type-p-name-alist” associa alcuni tipi di predicato (come  ly:music?) ai nomi (come  “music”) in modo che gli errori relativi al controllo del tipo possano essere segnalati con un messaggio che includa il nome del tipo di predicato atteso.


callback

callback indica una routine, funzione o metodo il cui riferimento sia passato come argomento quando si richiama un’altra routine, permettendo così alla routine richiamata di invocarla. La tecnica fa sì che a un livello più basso del software si possa richiamare una funzione definita a un livello più alto. I “callback” sono molto utilizzati in LilyPond per far sì che il codice Scheme a livello utente possa definire quante azioni di basso livello sono eseguite.


closure

In Scheme, si parla di closure (chiusura) quando una funzione, di solito un’espressione lambda, viene passata come variabile. La chiusura contiene il codice della funzione più i riferimenti ai collegamenti lessicali delle variabili libere della funzione (ovvero quelle variabili usate nell’espressione ma definite al di fuori di essa). Quando questa funzione viene applicata a diversi argomenti successivamente, i collegamenti delle variabili libere che sono stati catturati nella chiusura vengono usati per ottenere i valori delle variabili libere da usare nel calcolo. Una caratteristica utile delle chiusure è la conservazione dei valori delle variabili interne tra un’invocazione e l’altra, facendo sì che uno stato possa essere mantenuto.


glyph

Un glifo è una particolare rappresentazione grafica di un carattere tipografico o una combinazione di due caratteri che formano una legatura. Un insieme di glifi con un solo stile e forma costituiscono un tipo di carattere (font), e un insieme di tipi di carattere con vari stili e dimensioni costituiscono una famiglia di caratteri tipografici.

Vedi anche

Guida alla notazione: Tipi di carattere, Caratteri speciali.


grob

Gli oggetti di LilyPond che rappresentano elementi della notazione nell’output – come teste di nota, gambi, legature di portamento e di valore, diteggiature, chiavi, etc. – sono chiamati, in inglese, ‘Layout objects’ (‘Oggetti della formattazione’) o anche ‘GRaphical OBjects’ o grobs in forma breve. Sono rappresentati da istanze della classe Grob.

Vedi anche

Manuale di apprendimento: Oggetti e interfacce, Proprietà degli oggetti di formattazione.

Guida alla notazione: Convenzioni per i nomi.

Guida al funzionamento interno: grob-interface, All layout objects.


immutable

Un oggetto si dice immutabile – in inglese immutable – se il suo stato non può essere modificato dopo la sua creazione, in contrasto con un oggetto variabile, che può essere modificato dopo la sua creazione.

In LilyPond, le proprietà immutabili o condivise definiscono lo stile e il comportamento predefinito dei grob. Sono condivise tra molti oggetti. In apparente contraddizione col loro nome, possono essere modificate con \override e \revert.

Vedi anche

Guida alla notazione: mutable.


interface

Le azioni e le proprietà comuni a un insieme di grob sono raggruppate in un oggetto chiamato grob-interface o semplicemente ‘interface’.

Vedi anche

Manuale di apprendimento: Oggetti e interfacce, Proprietà presenti nelle interfacce.

Guida alla notazione: Convenzioni per i nomi, Interfacce di formattazione.

Guida al funzionamento interno: Graphical Object Interfaces.


lexer

Un lexer è un programma che converte una sequenza di caratteri in una sequenza di “token”, un processo chiamato analisi lessicale. Il lexer di LilyPond converte il flusso ottenuto da un file di input ‘.ly’ in un flusso “tokenizzato” più adatto al passo successivo di elaborazione – il parsing (see parser). Il lexer LilyPond viene costruito con Flex dal file lexer ‘lily/lexer.ll’, che contiene le regole lessicali. Questo file fa parte del codice sorgente e non è incluso nell’installazione dei binari diLilyPond.


mutable

Si dice che un oggetto è variabilemutable in inglese – se il suo stato può essere modificato dopo la sua creazione, in contrasto con un oggetto immutevole, il cui stato viene fissato al momento della sua creazione.

In LilyPond, le proprietà variabili contengono valori specifici di un grob. Di solito, le liste di altri oggetti o i risultati di calcoli sono salvati in proprietà variabili.

Vedi anche

Guida alla notazione: immutable.


output-def

Un’istanza della classe Output-def contiene i metodi e le strutture dei dati associate con un blocco di output. Tali istanze vengono create per i blocchi midi, layout e paper.


parser

Un analizzatore sintattico – in inglese parser – analizza la sequenza di token prodotti da un lexer per determinare la sua struttura grammaticale, raggruppando i token progressivamente in gruppi più ampi in base a certe regole grammaticali. Se la sequenza di token è valida, il risultato finale è l’insieme dei token ordinati a albero, la cui radice è il simbolo iniziale della grammatica. Se ciò non può essere ottenuto, il file non è valido e viene generato un appropriato messaggio di errore. I gruppi sintattici e le regole che li definiscono nella sintassi di LilyPond sono definiti in ‘lily/parser.yy’ e mostrati in Backus Normal Form (BNF) in LilyPond grammar. Questo file viene usato dal generatore di parser Bison per generare il parser durante la compilazione del programma. Fa parte del codice sorgente e non è incluso nell’installazione binaria di LilyPond.


parser variable

Si tratta di variabili definite direttamente in Scheme. Il loro uso da parte degli utente è fortemente scoraggiato, perché la semantica del loro raggio d’azione può creare confusione.

Se il valore di una simile variabile viene cambiato in un file ‘.ly’, la modifica è globale e, se non viene ripristinato esplicitamente, il nuovo valore viene mantenuto fino alla fine del file, agendo su blocchi \score successivi così come su file esterni aggiunti col comando \include. Ciò può portare a conseguenze non volute e in progetti complessi gli errori conseguenti possono essere difficili da individuare.

LilyPond usa le seguenti variabili dell’analizzatore sintattico:


prob

Le proprietà dell’oggetto – prob per PRoperty OBjects – sono istanze della classe Prob, una semplice classe per oggetti che hanno liste associative di proprietà variabili e invariabili e metodi per manipolarle. Le classi Music e Stream_event derivano da Prob. Vengono create istanze della classe Prob anche per conservare il contenuto formattato dei grob di un sistema e i blocchi dei titoli durante la formattazione della pagina.


smob

Gli oggetti Scheme – Smobs per ScheMe OBjects – fanno parte del meccanismo con cui Guile esporta gli oggetti C e C++ in codice Scheme. In LilyPond, gli smob vengono creati dagli oggetti C++ attraverso delle macro. Esistono due tipi di oggetti smob: smob semplici, intesi per oggetti invariabili semplici come i numeri; e smob complessi, usati per oggetti aventi delle identità. Maggiori informazioni si trovano nei sorgenti di LilyPond e precisamente nel file ‘lily/includes/smob.hh’.


spanner

Gli spanner sono una classe di grob che non sono fissi orizzontalmente in un punto della partitura ma si estendono da un punto a un altro. Per esempio, le travature, le legature di valore e di portamento, così come le forcelle e le linee del rigo. Mentre i non-spanner possono solo dividersi al massimo in due pezzi visibili (per esempio, una chiave duplicata alla fine di un rigo e all’inizio di quello successivo), gli spanner si dividono in tanti pezzi quanti sono richiesti dalle loro estremità iniziale e finale (come i lunghi crescendo che si estendono su tre sistemi o le linee del rigo che si estendono sempre per l’intera partitura).

Tecnicamente, gli spanner sono definiti come dei grob aventi l’interfaccia spanner-interface; nella parte C++ di LilyPond, sono istanze della sottoclasse Spanner di Grob. I confini sinistro e destro di uno spanner possono essere recuperati e impostati usando ly:spanner-bound e ly:spanner-set-bound!, rispettivamente. I confini sono sempre degli elementi. Il genitore X di uno spanner ha poco senso musicale, ma viene solitamente impostato sul confine sinistro.

Vedi anche

Guida alla notazione: Estensori.

Guida al funzionamento interno: all-layout-objects, spanner-interface.


stencil

Un’istanza della classe stencil contiene l’informazione necessaria per stampare un oggetto tipografico. È un semplice smob che contiene un riquadro che definisce l’estensione verticale e orizzontale dell’oggetto, e un’espressione Scheme che stamperà l’oggetto quando esaminata. Gli stencil possono essere combinati per formare stencil più complessi, definiti da una gerarchia di espressioni Scheme degli stencil che li compongono.

La proprietà stencil, che connette un grob al suo stencil, è definita nell’interfaccia grob-interface.

Vedi anche

Guida al funzionamento interno: grob-interface.


LilyPond — Guida alla Notazione v2.24.4 (ramo stabile).