lilypond-user-fr
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Inclusions automatiques en Scheme (was: Re: Bonjour)


From: Valentin Villenave
Subject: Inclusions automatiques en Scheme (was: Re: Bonjour)
Date: Sun, 2 Dec 2007 11:46:54 +0100

Le 01/12/07, Nicolas Sceaux<address@hidden> a écrit :

> Cet article décrit l'idée :
>
>    <http://nicolas.sceaux.free.fr/index.php/2006/07/01/9>

J'ai eu beau parcourir ton site un certain nombre de fois, jamais je
n'avais trouvé cet article ! Tu ne pourrais pas mettre un lien
"Archives" ou quelque chose dans ton menu de droite ? En l'état, ce
post est quasiment introuvable à moins de connaître son existence...
(et au fait, c'est pour quand la "part 2" ? :)

Mon propos était aussi de te demander ton avis sur la question des
includes enchâssés, et notamment de la commande \includeRelative que
proposait Graham, et que j'avais proposé de sponsoriser.

J'ai eu beau parcourir le code source, je n'arrive pas à trouver où se
situent les définitions de la commande \include (et comme tu t'en
doutes, lancer une recherche pour le terme "include" n'est pas
vraiment d'un grand secours dans du c++... :)

> Je t'invite à jeter un coup d'œil si le cœœur t'en dit (c'est pas
> forcément
> super digeste) aux parties instrumentales séparées que j'ai faite pour
> Armide de Lully.

Oui, j'ai consulté tout ça pendant un certain temps, avec un sentiment
mêlé d'admiration, de perplexité, et de terreur :-)

Grâce à ton article, je vais pouvoir comprendre tout cela un peu
mieux. Mon idée est justement de pouvoir me passer de paramètres en
ligne de commande : que LilyPond cherche un fichier dans un
répertoire, s'il ne le trouve pas aille le chercher dans un autre
répertoire, et enfin s'il ne le trouve pas du tout, crée à la place
une variable vide (de façon à ce que le code puisse être compilé quand
même).

Je suis très bien tes explications, jusqu'au gros bloc de Scheme
suivant, que tu pourrais peut-être expliquer un peu davantage :

;;; Pourquoi est-il nécessaire d'inclure cette srfi précisément ?
;;; Qu'apporte le ice-9 ?
#(use-modules (srfi srfi-39) (ice-9 format))


;;; Et ça, c'est pour vider la variable current-piece ? Ou quoi ?
#(define *current-piece* (make-parameter ""))


;;; Là je comprends à peu près. Pourquoi le
;;; if string-null? est-il nécessaire ? Dans quel cas
;;; *current-piece* est-il nul ?
#(define (include-pathname name)
   "Build a pathname string for file `name', based
    on the value of *current-piece*."
   (string-append (if (string-null? (*current-piece*))
                      ""
                      (string-append (*current-piece*) "/"))
                  name ".ily"))


;;; format #f : c'est quoi, au juste ?
;;; le 'void #t sert à quoi ? tu indiques :
;;; "the music expression can be disregarded",
;;; c'est-à-dire... ?
includeScore =
#(define-music-function (parser location name) (string?)
   (parameterize ( (*current-piece* name))
     (ly:parser-parse-string
       (ly:clone-parser parser)
       (format #f "\\include \"~a\""
               (include-pathname "score"))))
   (make-music 'SequentialMusic 'void #t))

;;; Deux questions :
;;; -pourquoi Voice = "" ? Sans les guillemets, tu risquerais quoi ?
;;; -pourquoi appeler explicitement le \notemode ? Je croyais
;;; que la construction #{...#} l'appelait implicitement.
includeNotes =
#(define-music-function (parser location pathname) (string?)
  (let ( (include-file (include-pathname pathname)))
   #{ \context Voice = "" \notemode {
        \include $include-file } #}))


Voilà. Merci beaucoup pour toutes les réponses (tu n'es pas au bout de
tes peines)...

Cordialement,
Valentin




reply via email to

[Prev in Thread] Current Thread [Next in Thread]