markup conditionnel

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

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 :slight_smile:
http://blog.vintherine.org/ - http://photos.vintherine.org/

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.

···

On 1/2/20, Vincent Gay <****@****> wrote:

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) ?

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&quot;

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

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

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.

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

···

Le 03/01/2020 à 22:28, Valentin Villenave a écrit :

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

Pour ma modeste culture vous testez ici que la variable existe et non
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?)).

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.

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.

···

On 1/4/20, Vincent Gay <****@****> wrote:

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.

···

Le 04/01/2020 à 09:24, Valentin Villenave a écrit :

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 :

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