Sintaxi de la definició d’ordre de marcatge

Es poden definir ordres noves de marcatge usant el macro de l’Scheme define-markup-command, al nivell sintàctic superior.

(define-markup-command (nom-ordre disposició props arg1 arg2 …)
    (tipus-arg1? tipus-arg2? …)
    [ #:properties ((propietat1 valor-predeterminat1)
                    …) ]
  …command body…)

Els arguments són

nom-ordre

nom de l’ordre de marcatge

layout

la definició de ‘disposició’.

props

una llista de llistes associatives, que contenen totes les propietats actives.

argi

argument i-éssim d’ordre

tipus-argi?

predicat de tipus per a l’argument i-éssim

Si l’ordre utilitza propietats dels arguments props, es pot usar la paraula clau #:properties per especificar quines propietats es fan servir, així com els seus valors per defecte.

Els arguments es distingeixen segons el seu tipus:

No existeix cap limitació en l’ordre dels arguments (després dels arguments estàndard layout i props). No obstant això, les funcions de marcatge que agafen un element de marcatge com el seu últim argument són una mica especials perquè podem aplicar-les a una llista de marcatge i el resultat és una llista de marcatges on la funció de marcatge (amb els arguments antecedents especificats) s’ha aplicat a tots els elements de la llista de marcatges original.

Atès que la replicació dels arguments precedents per aplicar una funció de marcatge a una llista de marcatges és poc costosa principalment pels arguments de l’Scheme, s’eviten les caigudes de rendiment simplement mitjançant la utilització d’arguments de l’Scheme per als arguments antecedents de les funcions de marcatge que agafen un marcatge com el seu últim argument.

Les ordres de marcatge tenen un cicle de vida relativament complex. El cos de la definició d’una ordre de marcatge és responsable de la conversió dels arguments de l’ordre de marcatge en una expressió de segell que es retorna. Molt sovint això es fa cridant a la funció interpret-markup sobre una expressió de marcatge, i passant-li els arguments layout i props. En general aquests arguments es coneixen en una fase molt tardana de la composició tipogràfica. Les expressions de marcatge ja tenen els seus components muntats dins d’expressions de marcatge quan s’expandeixen les ordres \markup (dins de l’Scheme). L’avaluació i la comprovació de tipus dels arguments de l’ordre de marcatge es realitza en el moment en el qual s’interpreten \markup o markup.

Però la conversió real d’expressions de marcatge en expressions de segell mitjançant l’execució dels cossos en funció de marcatge sols es realitza quan es crida interpret-markup sobre una expressió de marcatge.


Extender LilyPond v2.25.28 (development-branch).