Architettura flessibile

Quando abbiamo cominciato, abbiamo scritto LilyPond interamente nel linguaggio di programmazione C++, scolpendo nella pietra le sue funzionalità. Per una serie di ragioni, però, la cosa si è rivelata insoddisfacente.

Abbiamo affrontato questi problemi integrando in LilyPond un interprete del linguaggio di programmazione Scheme e riscrivendoci parti del programma. Ora l’architettura di formattazione è costruita intorno alla nozione di oggetti grafici, descritti dalle variabili e dalle funzioni di Scheme, e comprende regole di formattazione, stile tipografico e decisioni di formattazione individuali. L’utente può accedere direttamente alla maggior parte di questi controlli.

Le variabili di Scheme controllano le decisioni in merito all’aspetto della pagina. Per esempio, molti oggetti grafici possidono una variabile di direzione che codifica la scelta tra su e giù (o tra destra e sinistra). Qui sotto vedete due accordi con accenti e arpeggi. Nel primo, tutti gli oggetti grafici hanno direzione giù (o sinistra), nel secondo, hanno direzione su (destra).

[image of music]

Il processo di formattazione di uno spartito consiste nel leggere e scrivere le variabili degli oggetti grafici, alcune delle quali hanno un valore predefinito. Per esempio, lo spessore di molte linee – una caratteristica dello stile tipografico – è una di queste. Siete liberi di modificare questo valore, donando al vostro spartito un’impressione tipografica diversa.

[image of music]

Anche le regole di formattazione sono variabili preimpostate: ogni oggetto possiede variabili contenenti procedure. Sono queste ultime a eseguire la formattazione vera e propria, e sostituendone di diverse, possiamo modificare l’aspetto degli oggetti. Nell’esempio seguente, la regola che governa quali oggetti sono adoperati per produrre il simbolo della testa di nota è cambiata nel corso del frammento.

[image of music]


Saggio sull’incisione musicale automatizzata v2.25.21 (ramo di sviluppo).