GNU LilyPond – Extension des fonctionnalités: 2.5.4 Définition d'une nouvelle commande de liste de markups

### 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.
>       }
>     }

#### LilyPond — Extension des fonctionnalités v2.22.2 (branche stable).