1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
2 @c This file is part of lilypond.tely
4 Translation of GIT committish: 76de7e168dbc9ffc7671d99663c5ce50dae42abb
6 When revising a translation, copy the HEAD committish of the
7 version that you are working on. See TRANSLATION for details.
12 @c Translators: Valentin Villenave
13 @c Translation checkers: Gilles Thibault
16 @node Interfaces for programmers
17 @chapter Interfaces for programmers
24 * Programmer interfaces::
25 * Building complicated functions::
26 * Markup programmer interface::
27 * Contexts for programmers::
28 * Scheme procedures as properties::
32 @section Music functions
38 * Overview of music functions::
39 * Simple substitution functions::
40 * Paired substitution functions::
41 * Mathematics in functions::
43 * Functions without arguments::
44 * Overview of available music functions::
47 @node Overview of music functions
48 @subsection Overview of music functions
53 @node Simple substitution functions
54 @subsection Simple substitution functions
59 @node Paired substitution functions
60 @subsection Paired substitution functions
65 @node Mathematics in functions
66 @subsection Mathematics in functions
72 @subsection Void functions
77 @node Functions without arguments
78 @subsection Functions without arguments
83 @node Overview of available music functions
84 @subsection Overview of available music functions
89 @include identifiers.tely
90 @node Programmer interfaces
91 @section Programmer interfaces
97 * Input variables and Scheme::
98 * Internal music representation::
101 @node Input variables and Scheme
102 @subsection Input variables and Scheme
107 @node Internal music representation
108 @subsection Internal music representation
113 @node Building complicated functions
114 @section Building complicated functions
120 * Displaying music expressions::
122 * Doubling a note with slurs (example)::
123 * Adding articulation to notes (example)::
126 @node Displaying music expressions
127 @subsection Displaying music expressions
132 @node Music properties
133 @subsection Music properties
138 @node Doubling a note with slurs (example)
139 @subsection Doubling a note with slurs (example)
144 @node Adding articulation to notes (example)
145 @subsection Adding articulation to notes (example)
150 @node Markup programmer interface
151 @section Markup programmer interface
157 * Markup construction in Scheme::
158 * How markups work internally::
159 * New markup command definition::
160 * New markup list command definition::
163 @node Markup construction in Scheme
164 @subsection Markup construction in Scheme
169 @node How markups work internally
170 @subsection How markups work internally
175 @node New markup command definition
176 @subsection New markup command definition
181 @node New markup list command definition
182 @subsection New markup list command definition
187 @node Contexts for programmers
188 @section Contexts for programmers
194 * Context evaluation::
195 * Running a function on all layout objects::
198 @node Context evaluation
199 @subsection Context evaluation
204 @node Running a function on all layout objects
205 @subsection Running a function on all layout objects
210 @node Scheme procedures as properties
211 @section Scheme procedures as properties
217 * Using Scheme code instead of tweak::
221 @node Using Scheme code instead of tweak
222 @section Using Scheme code instead of @code{\tweak}
224 L'inconvénient principal de la commande @code{\tweak} est la rigidité de sa
225 syntaxe. Par exemple, le code suivant produit une erreur.
228 F = \tweak #'font-size #-3 -\flageolet
236 En d'autres termes, @code{\tweak} ne se comporte pas comme une articulation :
237 il ne peut notamment pas être accolé avec les symboles @samp{^} ou @samp{_}.
239 C'est en se servant du langage Scheme que l'on peut résoudre ce problème.
240 Dans cet exemple, on a recours aux méthodes décrites dans @ref{Adding
241 articulation to notes (example)}, en particulier quant à l'emploi de
242 @code{\displayMusic}.
245 F = #(let ((m (make-music 'ArticulationEvent
246 'articulation-type "flageolet")))
247 (set! (ly:music-property m 'tweaks)
249 (ly:music-property m 'tweaks)))
258 Ici les propriétés @code{tweak} de l'objet flageolet nommé
259 @samp{m} (créé au moyen de @code{make-music}) sont extraites par
260 @code{ly:music-property}, une nouvelle valeur de la taille de fonte
261 est ajoutée à la liste de ses propriétés (grâce à la fonction Scheme
262 @code{acons}), et le résultat de cette opération est renvoyé par @code{set!}.
263 Le dernier élément, dans ce bloc @code{let}, est la valeur finale de
267 @node Difficult tweaks
268 @section Difficult tweaks
270 Certains réglages sont plus délicats que d'autres.
276 L'un d'entre eux est l'apparence des objets dits @q{spanner}, qui s'étendent
277 horizontalement, tels que les liaisons. Si, en principe, un seul de ces objets
278 est créé à la fois et peut donc être modifié de façon habituelle, lorsque ces
279 objets doivent enjamber un changement de ligne, ils sont dupliqués au début
280 du ou des systèmes suivants. Comme ces objets sont des clones de l'objet d'origine,
281 ils en héritent toutes les propriétés, y compris les éventuelles commandes @code{\override}.
284 En d'autres termes, une commande @code{\override} affecte toujours les deux extrémités
285 d'un objet @q{spanner}. Pour ne modifier que la partie précédant ou suivant le changement
286 de ligne, il faut intervenir directement dans le processus de mise en page.
287 La fonction de rappel @code{after-line-breaking} contient toute l'opération Scheme
288 effectuée lorsque les sauts de lignes ont été déterminés, et que des objets graphiques
289 ont été divisés sur des systèmes différents.
291 Dans l'exemple suivant, on définit une nouvelle opération nommée
292 @code{my-callback}. Cette opération
296 détermine si l'objet a été divisé à l'occasion d'un changement de ligne
298 si oui, recherche les différents morceaux de l'objet
300 vérifie si l'objet considéré est bien la deuxième moitié d'un objet divisé
302 si oui, applique un espacement supplémentaire (@code{extra-offset}).
305 On ajoute cette procédure à l'objet @rinternals{Tie} (liaison de tenue),
306 de façon à ce que le deuxième morceau d'une liaison divisée soit rehaussé.
309 @lilypond[quote,verbatim,ragged-right]
310 #(define (my-callback grob)
312 ; l'objet a-t-il été divisé ?
313 (orig (ly:grob-original grob))
315 ; si oui, rechercher les morceaux frères (siblings)
316 (siblings (if (ly:grob? orig)
317 (ly:spanner-broken-into orig) '() )))
319 (if (and (>= (length siblings) 2)
320 (eq? (car (last-pair siblings)) grob))
321 (ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
324 \override Tie #'after-line-breaking =
331 Lorsque cette astuce va être appliquée, notre nouvelle fonction de rappel
332 @code{after-line-breaking} devra également appeler celle d'origine
333 (@code{after-line-breaking}), si elle existe.
334 Ainsi, pour l'utiliser dans le cas d'un crescendo (objet @code{Hairpin}),
335 il faudra appeler également @code{ly:hairpin::after-line-breaking}.
338 @item Pour des raisons d'ordre technique, certains objets ne peuvent être modifiés par
339 @code{\override}. Parmi ceux-là, les objets @code{NonMusicalPaperColumn}
340 et @code{PaperColumn}. La commande @code{\overrideProperty} sert à les modifier, de
341 façon similaire à @code{\once \override}, mais avec une syntaxe différente :
345 #"Score.NonMusicalPaperColumn" % Nom de l'objet
346 #'line-break-system-details % Nom de la propriété
347 #'((next-padding . 20)) % valeur
350 Notez cependant que la commande @code{\override} peut tout de même être appliquée
351 à @code{NoteMusicalPaperColumn} et @code{PaperColumn} dans un bloc @code{\context}.