B.7 Funciones de callback
Las propiedades (como thickness
(grosor), direction
(dirección), etc.) se pueden establecer a valores fijos con
\override, p. ej.:
\override Stem.thickness = #2.0
Las propiedades pueden fijarse también a un procedimiento de 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 este caso, el procedimiento se ejecuta tan pronto como el valor de la propiedad se reclama durante el proceso de formateo.
Casi todo el motor de tipografiado está manejado por estos callbacks. Entre las propiedades que usan normalmente callbacks están
-
stencil
La rutina de impresión, que construye un dibujo para el símbolo
-
X-offset
La rutina que establece la posición horizontal
-
X-extent
La rutina que calcula la anchura de un objeto
El procedimiento siempre toma un argumento único, que es el grob (el objeto gráfico).
Dicho procedimiento puede acceder al valor usual de la propiedad, llamando en primer lugar a la función que es el ‘callback’ usual para esa propiedad, y que puede verse en el manual de referencia interna o en el archivo ’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 }
También es posible obtener el valor del valor predeterminado
existente, empleando la función grob-transformer
:
\relative { \override Flag.X-offset = #(grob-transformer 'X-offset (lambda (flag default) (* default 4.0))) c''4. d8 a4. g8 }
Desde dentro de un callback, el método más fácil para evaluar un elemento de marcado es usar grob-interpret-markup. Por ejemplo:
mi-callback = #(lambda (grob) (grob-interpret-markup grob (markup "fulanito")))