2.6 Scrivere codice che funzioni su molteplici versioni

In alcuni casi, in particolare quando si scrive codice destinato a funzionare come libreria, è opportuno far sì che supporti molteplici versioni di LilyPond nonostante le modifiche della sintassi. Per farlo si possono avvolgere porzioni alternative di codice in espressioni condizionali che dipendono dalla versione di LilyPond attualmente eseguita. La funzione Scheme ly:version? prevede un operatore di confronto op e una versione di riferimento ver passata come elenco di interi di massimo tre elementi. Gli elementi mancanti vengono ignorati, quindi '(2 20) equivale a qualsiasi versione della serie di versioni 2.20. Sono possibili costrutti come il seguente:

#(cond
  ((ly:version? > '(2 20))
   (ly:message "Questo è il codice da eseguire per LilyPond 2.20 o successivi"))
  ((ly:version? = '(2 19 57))
   (ly:message "Questo verrà eseguito soltanto con LilyPond 2.19.57"))
  (else (ly:message "Questo verrà eseguito con qualsiasi altra versione")))

Solitamente questa funzione viene integrata nelle funzioni di una libreria, per consentire l’uso di sintassi alternativa, ma è anche possibile usare il confronto direttamente nell’input musicale, come nell’esempio seguente:

{
  c' d' e' f'
  #(if (ly:version? = '(2 21))
       #{ \override NoteHead.color = #red #}
       #{ \override NoteHead.color = #blue #})
  g' a' b' c''
}

Nota: Questa funzione è stata introdotta in LilyPond 2.21.80, dunque non è possibile fare confronti usando versioni precedenti.


LilyPond — Utilizzo v2.22.1 (ramo stabile).