GNU LilyPond – Extension des fonctionnalités: 2.7 Fonctions de rappel

## 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")))

#### LilyPond — Extension des fonctionnalités v2.22.2 (branche stable).