B.7 Funcions de callback
Les propietats (com thickness
(gruix), direction
(direcció), etc.) es poden establir a valors fixos amb
\override, per exemple::
\override Stem.thickness = #2.0
Les propietats poden fixar-se també a un procediment de l’Scheme:
\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 }![]()
En aquest cas, el procediment s’executa tan aviat com el valor de la propietat es reclama durant el procés de formatat.
Gairebé tot el motor de tipografia està gestionat per aquests callbacks. Entre les propietats que usen normalment callbacks estan
stencil
La rutina d’impressió, que construeix un dibuix per a un símbol
X-offset
La rutina que estableix la posició horitzontal
X-extent
La rutina que calcula l’amplada d’un objecte
El procediment sempre agafa un argument únic, que és el grob (l’objecte gràfic).
Aquest procediment pot accedir al valor usual de la propietat, cridant en primer lloc a la funció que és el ‘callback’ usual per a aquesta propietat, i que pot veure’s al manual de referència interna o al fitxer ’define-grobs.scm’:
\relative { \override Flag.X-offset = #(lambda (flag) (let ((default (ly:flag::calc-x-offset flag))) (* default 4.0))) c''4. d8 a4. g8 }
També és possible obtenir el valor predeterminat existent, usant
la funció grob-transformer
:
\relative { \override Flag.X-offset = #(grob-transformer 'X-offset (lambda (flag default) (* default 4.0))) c''4. d8 a4. g8 }![]()
Des de dins d’una callback, el mètode més fàcil per avaluar un element de marcatge és usar grob-interpret-markup. Per exemple:
mi-callback = #(lambda (grob) (grob-interpret-markup grob (markup "fulanito")))