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:
- un marcatge, que correspon al predicat de tipus
markup?
; - una llista de marcatges, que correspon al predicat de tipus
markup-list?
; - qualsevol altre tipus de l’Scheme, que correspon a predicats
de tipus com ara
list?
,number?
,boolean?
, etc.
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.