2.7 Fonctions de rappel
Certaines propriétés, entre autres thickness
ou direction
,
peuvent voir leur valeur figée à l’aide d’un \override
comme
ici :
\override Stem.thickness = #2.0
Une procédure Scheme peut aussi se charger de modifier des propriétés :
\override Stem.thickness = #(lambda (grob) (if (= UP (ly:grob-property grob 'direction)) 2.0 7.0)) \relative { c'' b a g b a g b }
Dans ce cas, la procédure est exécutée dès que la valeur de la propriété est nécessaire au processus de mise en forme.
La majeure partie du procédé typographique consiste en la réalisation de tels rappels (callbacks en anglais). Entre autres propriétés utilisant particulièrement des rappels, nous mentionnerons
-
stencil
Routine d’impression, construisant le dessin du symbole
-
X-offset
Routine effectuant le positionnement horizontal
-
X-extent
Routine calculant la largeur d’un objet
La procédure prend un unique argument, en l’occurrence l’objet graphique (le grob).
Cette procédure, grâce à un appel à la fonction de rappel dévolue à cette propriété – mentionnée dans la référence des propriétés internes et dans le fichier ‘define-grobs.scm’ –, pourra accéder à la valeur usuelle de la propriété :
\relative { \override Flag.X-offset = #(lambda (flag) (let ((default (ly:flag::calc-x-offset flag))) (* default 4.0))) c''4. d8 a4. g8 }
La valeur par défaut est aussi accessible à l’aide de la fonction
grob-transformer
:
\relative { \override Flag.X-offset = #(grob-transformer 'X-offset (lambda (flag default) (* default 4.0))) c''4. d8 a4. g8 }
Au sein d’un callback, le meilleur moyen d’évaluer un
markup consiste à utiliser la fonction
grob-interpret-markup
, comme ici :
my-callback = #(lambda (grob) (grob-interpret-markup grob (markup "foo")))