Subject: markup conditionnel

From: Vincent Gay <[email-masked]>
Date: Thu, 2 Jan 2020 10:39:04 +0100

Bonjour, meilleur vœux et tout ça... :-)

je souhaite imprimer un \markup intégrant une variable préalablement
définie à la condition que celle-ci soit non vide. J'ai lu dans la doc
que l'on pouvait utiliser la commande \on-the-fly pour tester une
procédure mais j'ai beaucoup de mal à comprendre la documentation sheme.
Auriez-vous la gentillesse de me montrer une telle procédure (ou de
m'indiquer une façon de faire plus simple) ? Voila un exemple ce que je
voudrais faire :

asplayed = #"Oscar Peterson"
url = #"https://www.youtube.com/watch?v=aT22bCkKmTk"

\header {
  arranger = \markup \on-the-fly #[procedure]
    \with-url #url
    \with-color #blue \underline
    \concat { "(as played by " #asplayed ")" }
}

[procedure] doit tester que asplayed est non vide.

Merci d'avance et excellente année 2020

-- 
Vincent Gay
Envoyé depuis mon saxo-phone :)
http://blog.vintherine.org/ - http://photos.vintherine.org/

---

From: Valentin Villenave <[email-masked]>
Date: Fri, 3 Jan 2020 21:28:42 +0000

On 1/2/20, Vincent Gay <[email-masked]> wrote:
> m'indiquer une façon de faire plus simple) ?

Au minimum, cela pourrait être quelque chose comme cela :

#(define (played? layout props arg)
  (if (string? (chain-assoc-get 'header:asplayed props))
      (interpret-markup layout props arg)
      empty-stencil))

\header {
  asplayed = "Oscar Peterson"
  url = "https://www.youtube.com/watch?v=aT22bCkKmTk"

  arranger = \markup \on-the-fly #played?
    \with-url #url
    \with-color #blue \underline
    \concat { "(as played by " \fromproperty #'header:asplayed ")" }
}

Après, il y a des façons plus élégantes et sophistiquées de procéder
mais cela dépend vraiment de ce dont vous avez besoin.

Cordialement,
V. V.

---

From: Vincent Gay <[email-masked]>
Date: Sat, 4 Jan 2020 07:43:21 +0100

>     \concat { "(as played by " \fromproperty #'header:asplayed ")" }

Merci infiniment Valentin, cela répond parfaitement à mon besoin.

> mais cela dépend vraiment de ce dont vous avez besoin.
Pour ma modeste culture vous testez ici que la variable existe et non
pas qu'elle est non vide n'est-ce pas ? L'incidence est parfaitement
minime, il me suffit de commenter la ligne contenant la variable (je
travaille à partir de modèles, comme tout le monde j'imagine).
L'important pour moi étant que je puisse récupérer cette variable dans
un petit programme bash alimentant un tableau d'une page web.

Merci encore et tous mes vœux pour 2020

---

From: Valentin Villenave <[email-masked]>
Date: Sat, 4 Jan 2020 08:24:53 +0000

On 1/4/20, Vincent Gay <[email-masked]> wrote:
> pas qu'elle est non vide n'est-ce pas ?

En fait j’utilise ici une propriété plutôt qu’une variable, stricto
sensu (c’est-à-dire une variable définie dans le bloc \header). Je
teste non seulement qu’elle est définie mais qu’elle est bien définie
en tant que chaîne de caractères (string?), ce qui veut dire qu’en
l’état elle ne marchera pas si vous la définissez comme un vrai
\markup -- quoiqu’il serait facile de remplacer (string?) par (or
(string? martkup?)).

> un petit programme bash alimentant un tableau d'une page web.

Dans ce cas il pourrait même être intéressant d’utiliser carrément une
grande alist, contenant tous les interprètes et les URLs, dans un même
fichier :
https://www.gnu.org/software/guile/manual/html_node/Association-Lists.html

Cordialement,
V.

---

From: Vincent Gay <[email-masked]>
Date: Sat, 4 Jan 2020 09:43:52 +0100

> grande alist, contenant tous les interprètes et les URLs, dans un même
Voilà quelque chose qui me paraît bien intéressant, si toutefois elle ne
dépasse pas mes maigres compétences en matière de programmation. À ce
jour l'alimentation de ce fichier unique se fait avec de simples grep |
sed de tous les fichiers .ly d'une arborescence.