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)) 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).
Dans le cas où la routine doit faire appel à plusieurs arguments, le
grob en cours peut s’insérer à l’aide d’un grob enchâssé.
Voici, à titre d’illustration, un réglage pour
AccidentalSuggestion
:
`(X-offset . ,(ly:make-simple-closure `(,+ ,(ly:make-simple-closure (list ly:self-alignment-interface::centered-on-x-parent)) ,(ly:make-simple-closure (list ly:self-alignment-interface::x-aligned-on-self)))))
Ici, aussi bien ly:self-alignment-interface::x-aligned-on-self
que ly:self-alignment-interface::centered-on-x-parent
font appel
à l’argument grob. La fonction +
a pour effet
d’additionner les résultats. L’ensemble est inclus dans un
ly:make-simple-closure
de telle sorte que l’addition s’exécute de
façon correcte
Dans les faits, l’utilisation d’une unique procédure en tant que valeur d’une propriété revient à écrire
(ly:make-simple-closure (ly:make-simple-closure (list proc)))
Le ly:make-simple-closure
intérieur fournit le grob en
argument à la procédure proc, l’extérieur s’assure que le résultat
de la fonction sera bien renvoyé, non pas l’objet simple-closure
.
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")))
Autres langues : English, deutsch, español.
About automatic language selection.