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)) 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).
Si se deben llamar rutinas con varios argumentos, el grob actual se
puede insertar con una cerradura de grob. He aquí un ajuste
procedente de 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)))))
En este ejemplo, tanto
ly:self-alignment-interface::x-aligned-on-self
como
ly:self-alignment-interface::centered-on-x-parent
se llaman con
el grob como argumento. El resultado se añade con la función
+
. Para asegurar que esta adición se ejecuta adecuadamente,
todo ello se encierra dentro de ly:make-simple-closure
.
De hecho, usar un solo procedimiento como valor de una propiedad equivale a
(ly:make-simple-closure (ly:make-simple-closure (list proc)))
El ly:make-simple-closure
interior aporta el grob como
argumento de proc, el exterior asegura que el resultado de la
función es lo que se devuelve, en lugar del objeto
simple-closure
.
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")))
Otros idiomas: English, deutsch, français.
Acerca de la selección automática del idioma.