Subject: fonction qui marche plus / quand on passe d'une version à une autre…

From: Loïc Chahine <[email-masked]>
Date: Fri, 26 Apr 2013 11:29:10 +0200

Bonjour à tous,

Je dois dire que je suis un peu agacé. J’avais écrit une magnifique 
fonction en version 2.15.38, pour les blocs score qui sont identiques. 
Je comptais généraliser ce genre de procédé (au bout d’un moment, 
réécrire pour la 59e fois le même \score { gnia gnia gnia… }…), sauf que 
évidemment en version 2.16 ça compile, mais en fait ça marche pas. J’ai 
pas de partition, au bout, juste les titre.
(Et je découvre aussi que dans Frescobaldi, pour copier-coller la sortie 
avec les erreurs, bah c’est simple, ça marche pas… C’est mon jour, 
décidément.)

Voici la fonction en question :

#(define (add-toc-item parser markup-symbol text)

(collect-music-for-book parser

(add-toc-item! markup-symbol text)))

#(define-public fable-number 0)

fableScore =

#(define-music-function

(parser location leTitre laMorale lAir laClef leLivre laFable)

(string? string? string? string? number? number?)

(define laStructure

(string-append (format #f "~a" leLivre)

(string-append "/"

(string-append (format #f "~a" laFable) "/structure.ly"))))

(define leDessus

(string-append (format #f "~a" leLivre)

(string-append "/"

(string-append (format #f "~a" laFable) "/voix.ly"))))

(define laBasse

(string-append (format #f "~a" leLivre)

(string-append "/"

(string-append (format #f "~a" laFable) "/basse.ly"))))

(define lesChiffres

(string-append (format #f "~a" leLivre)

(string-append "/"

(string-append (format #f "~a" laFable) "/chiffres.ly"))))

(define lesParoles

(string-append (format #f "~a" leLivre)

(string-append "/"

(string-append (format #f "~a" laFable) "/paroles.ly"))))

(define lesCouplets

(string-append (format #f "~a" leLivre)

(string-append "/"

(string-append (format #f "~a" laFable) "/couplets.ly"))))

(define laRef

(string-append (format #f "~@r" leLivre)

(string-append ":" (format #f "~a" laFable))))

(set! fable-number (1+ fable-number))

(add-text parser #{

\markup {

\column {

\vspace #1

\line {

\fill-line {

\override #'(font-name . "Adobe Caslon Pro")

\fontsize #1 #(format #f "Fable ~@r" fable-number) }

}

\line {

\fill-line {

\override #'(font-name . "Adobe Caslon Pro Italic")

\fontsize #4 $leTitre }

}

\line {

\fill-line {

\override #'(font-name . "Adobe Caslon Pro")

\fontsize #1.5 $laMorale }

}

\line {

\fill-line {

\null

\override #'(font-name . "Adobe Caslon Pro Italic")

\fontsize #1 $lAir

\override #'(font-name . "Adobe Caslon Pro")

$laRef

}

}

}

}

#})

(add-toc-item parser 'tocFableMarkup leTitre)

(add-toc-item parser 'tocAirMarkup lAir)

;; ajout du \noPageBreak au top-level

(add-music parser

(make-music 'Music

'page-marker #t

'page-break-permission 'forbid))

#{\new ChoirStaff

<<

\new Staff {

\autoBeamOff

% \tempo $leChemin

\clef $laClef %\staffStart

<< \include $laStructure \include $leDessus >>

}

\addlyrics {

\set stanza = "1."

\include $lesParoles

}

\new Staff {

\autoBeamOff

\clef basse \staffStart

<< \include $laStructure \include $laBasse >>

}

\figures {

\include $lesChiffres

}

#}

)

Un exemple d’utilisation :

\fableScore #"La Fourmi et la Sauterelle" #"L’Oisiveté" #"Sur l’air « 
Qui l’entend mieux »"

#"soprano" #1 #2

(ça allait chercher parfaitement bien dans le dossier 1/2/ ce qu’il 
fallait, etc.)

Comment mettre ça à jour pour que ça compile à nouveau ?

---

Derrière ce problème, il y a, à mon sens, un problème récurrent : celui 
de tous ceux qui comme moi galèrent à écrire des fonctions de ce genre, 
en réfléchissant beaucoup et en agglomérant du code trouvé çà et là, 
sans forcément faire ça régulièrement, et sans avoir une compréhension 
immédiate et très avisée des détails, et qui du coup pour mettre à jour 
les fonctions de ce genre d’un passage de version à l’autre, galèrent ou 
abandonnent.

Par exemple, les fameuses fonctions que j’avais co-écrites avec B. 
Bordage pour les ornements et doigtés spécifiques à la viole de gambe, 
ça fonctionne plus. Ça compile, mais ça ne donne pas le résultat, et 
pour savoir pourquoi, il faut avoir bien l’habitude, être versé 
là-dedans, etc.
Je pense ne pas être le seul qui n’aie pas le temps (ni vraiment l’envie 
d’ailleurs puisque de toute façon c’est hors de portée et je ne 
comprendrais rien les 3/4 du temps) de lire tout le détail des 
modifications d’une version à l’autre.

C’est peut-être pas très constructif dit comme ça, mais ça peut, 
peut-être, le devenir au fil d’éventuels échanges à ce propos…
Bien à vous tous,
L.C.

---

From: Nicolas Sceaux <[email-masked]>
Date: Fri, 26 Apr 2013 19:38:10 +0200

Le 26 avr. 2013 à 11:29, Loïc Chahine <[email-masked]> a écrit :

> Bonjour à tous,
> 
> Je dois dire que je suis un peu agacé. J’avais écrit une magnifique fonction en version 2.15.38, pour les blocs score qui sont identiques. Je comptais généraliser ce genre de procédé (au bout d’un moment, réécrire pour la 59e fois le même \score { gnia gnia gnia… }…), sauf que évidemment en version 2.16 ça compile, mais en fait ça marche pas. J’ai pas de partition, au bout, juste les titre.
> (Et je découvre aussi que dans Frescobaldi, pour copier-coller la sortie avec les erreurs, bah c’est simple, ça marche pas… C’est mon jour, décidément.)
> [snip]

Bonjour Loïc,

Pour commencer, je propose de simplifier le code comme dans le fichier attaché.
Ca te permettra, peut-être, de mieux maîtriser les différentes étapes.
Ensuite, chez moi ça compile, avec lilypond 2.17.16.
Peux-tu donner les erreurs que tu obtiens ?

Nicolas