2.7 Écriture de code supportant différentes versions
Dans certains cas, et tout particulièrement lorsque l’on se contitue une
bibliothèque de code, il est souhaitable de pouvoir supporter
différentes versions de LilyPond indépendamment des changements de
syntaxe. Il est possible d’y parvenir à l’aide de portions de code
englobées dans une expression conditionnelle et dont l’exécution se fera
relativement à la version utilisée de LilyPond. La fonction
ly:version?
requiert un opérateur de comparaison op et une
version de référence ver sous forme de liste d’entiers jusqu’à
trois éléments. Les éléments absents sont ignorés, de telle sorte que
'(2 20)
est équivalent à toute version de la série 2.20.
On peut donc en arriver à des constructions telles que :
#(cond ((ly:version? > '(2 20)) (ly:message "Ce code sera exécuté avec un LilyPond postérieur à 2.20")) ((ly:version? = '(2 19 57)) (ly:message "Ce code ne sera exécuté qu'avec LilyPond 2.19.57")) (else (ly:message "Ceci sera exécuté pour toutes les autres versions")))
Ceci viendra naturellement s’intégrer aux fonctions de bibliothèques pour permettre l’utilisation de syntaxes différentes. Une comparaison peut aussi apparaître au sein même de la musique comme ici :
{ c' d' e' f' #(if (ly:version? = '(2 21)) #{ \override NoteHead.color = #red #} #{ \override NoteHead.color = #blue #}) g' a' b' c'' }
Note : Cette fonction ayant été introduite avec LilyPond 2.21.80, il n’est pas possible d’établir des comparaisons avec des versions qui lui sont antérieures.