Sintaxis de la definición de instrucciones de marcado

Se pueden definir instrucciones de marcado nuevas usando el macro de Scheme define-markup-command, en el nivel sintáctico superior.

(define-markup-command (nombre-de-la-instruccion layout props arg1 arg2 …)
    (tipo-de-arg1? tipo-de-arg2? …)
    [ #:properties ((propiedad1 valor-predeterminado1)
                    …) ]
  …command body…)

Los argumentos son

nombre-de-la-instruccion

nombre de la instrucción de marcado

layout

la definición de ‘layout’ (disposición).

props

una lista de listas asociativas, que contienen todas las propiedades activas.

argi

argumento i-ésimo de la instrucción

tipo-de-argi?

predicado de tipo para el argumento i-ésimo

Si la instrucción utiliza propiedades de los argumentos props, se puede usar la palabra clave #:properties para especificar qué propiedades se usan, así como sus valores predeterminados.

Los argumentos se distinguen según su tipo:

No existe ninguna limitación en el orden de los argumentos (después de los argumentos estándar layout y props). Sin embargo, las funciones de marcado que toman un elemento de marcado como su último argumento son un poco especiales porque podemos aplicarlas a una lista de marcados y el resultado es una lista de marcados donde la función de marcado (con los argumentos antecedentes especificados) se ha aplicado a todos los elementos de la lista de marcados original.

Dado que la replicación de los argumentos precedentes para aplicar una función de marcado a una lista de marcados es poco costosa principalmente por los argumentos de Scheme, se evitan las caídas de rendimiento simplemente mediante la utilización de argumentos de Scheme para los argumentos antecedentes de las funciones de marcado que toman un marcado como su último argumento.

Las instrucciones de marcado tienen un ciclo de vida más bien complejo. El cuerpo de la definición de una instrucción de marcado es responsable de la conversión de los argumentos de la instrucción de marcado en una expresión de sello que se devuelve. Muy a menudo esto se lleva a cabo llamando a la función interpret-markup sobre una expresión de marcado, pasándole los argumentos layout y props. Por lo general, estos argumentos se conocen solamente en una fase muy tardía de la composición tipográfica. Las expresiones de marcado ya tienen sus componentes ensamblados dentro de expresiones de marcado cuando se expanden las instrucciones \markup (dentro de una expresión de LilyPond) o la macro markup (dentro de Scheme). La evaluación y la comprobación de tipos de los argumentos de la instrucción de marcado tiene lugar en el momento en que se interpretan \markup o markup.

Pero la conversión real de expresiones de marcado en expresiones de sello mediante la ejecución de los cuerpos de función de marcado solo tienen lugar cuando se llama a interpret-markup sobre una expresión de marcado.


Extender LilyPond v2.25.15 (rama de desarrollo).