2.6 Escritura de código que contemple varias versiones

En ciertos casos, especialmente al escribir código de bibliotecas, es deseable dar apoyo a más de una versión de LilyPond, por encima de los cambios de sintaxis que rompen con la práctica anterior. Para hacerlo, se pueden envolver porciones de código alternativas dentro de expresiones condicionales que dependen de la versión de LilyPond que se está ejecutando actualmente. La función de Scheme ly:version? admite un operador de comparación op y una versión de referencia ver que se pasa como una lista de enteros con un máximo de tres elementos. Se ignoran los elementos que faltan, de forma que '(2 20) equivale a cualquier versión de la línea de 2.20. Son posibles construcciones como las siguientes:

#(cond
  ((ly:version? > '(2 20))
   (ly:message "Esto es código para LilyPond posterior a 2.20"))
  ((ly:version? = '(2 19 57))
   (ly:message "Esto solamente se ejecuta con LilyPond 2.19.57"))
  (else (ly:message "Esto se ejecuta en cualquier otra versión")))

Por lo general, esto se encontrará integrado dentro de funciones de biblioteca que permitan usar más de un tipo de sintaxis alternativas, pero también es posible usar la comparación directamente dentro de la música como en el ejemplo siguiente:

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

Nota: Esta función fue introducida en LilyPond 2.19.57, por lo que no es posible hacer la comparación con versiones anteriores a esa.


LilyPond — Utilización v2.22.1 (rama estable).