[ << Interfaces pour programmeurs ] | [Top][Contents][Index] | [ Interfaces LilyPond Scheme >> ] |
[ < Conversion de markups en chaînes ] | [ Up : Fonctions pour markups ] | [ Contextes pour programmeurs > ] |
2.5.4 Définition d’une nouvelle commande de liste de markups
Une commande traitant une liste de markups se définit à l’aide de
la macro Scheme define-markup-list-command
, de manière analogue à
la macro define-markup-command
abordée à la rubrique
Définition d’une nouvelle commande de markup, à ceci près que cette dernière
renvoie un seul stencil, non une liste de stencils.
La fonction interpret-markup-list
, à l’instar de la fonction
interpret-markup
, permet de convertir une liste de markups
en liste de stencils.
Dans l’exemple suivant, nous définissons \paragraph
, une commande
de liste de markups, qui renverra une liste de lignes justifiées
dont la première sera indentée. La largeur de l’alinéa sera récupérée
par l’argument props
.
#(define-markup-list-command (paragraph layout props args) (markup-list?) #:properties ((par-indent 2)) (interpret-markup-list layout props #{\markuplist \justified-lines { \hspace #par-indent #args } #}))
La version purement Scheme est un peu plus complexe :
#(define-markup-list-command (paragraph layout props args) (markup-list?) #:properties ((par-indent 2)) (interpret-markup-list layout props (make-justified-lines-markup-list (cons (make-hspace-markup par-indent) args))))
En dehors des habituels arguments layout
et props
, la
commande de liste de markups paragraph
prend en argument
une liste de markups appelée args
. Le prédicat des listes
de markups est markup-list?
.
Pour commencer, la fonction récupère la taille de l’alinéa, propriété
ici dénommée par-indent
, à partir de la liste de propriétés
props
. En cas d’absence, la valeur par défaut sera de 2
.
Ensuite est créée une liste de lignes justifiées grâce à la commande
prédéfinie \justified-lines
, liée à la fonction
make-justified-lines-markup-list
. Un espace horizontal est ajouté
en tête, grâce à \hspace
ou à la fonction
make-hspace-markup
. Enfin, la liste de markups est
interprétée par la fonction interpret-markup-list
.
Voici comment utiliser cette nouvelle commande de liste de markups :
\markuplist { \paragraph { The art of music typography is called \italic {(plate) engraving.} The term derives from the traditional process of music printing. Just a few decades ago, sheet music was made by cutting and stamping the music into a zinc or pewter plate in mirror image. } \override-lines #'(par-indent . 4) \paragraph { The plate would be inked, the depressions caused by the cutting and stamping would hold ink. An image was formed by pressing paper to the plate. The stamping and cutting was completely done by hand. } }
[ << Interfaces pour programmeurs ] | [Top][Contents][Index] | [ Interfaces LilyPond Scheme >> ] |
[ < Conversion de markups en chaînes ] | [ Up : Fonctions pour markups ] | [ Contextes pour programmeurs > ] |