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::
29 * Using Scheme code instead of tweak::
34 @section Music functions
40 * Overview of music functions::
41 * Simple substitution functions::
42 * Paired substitution functions::
43 * Mathematics in functions::
45 * Functions without arguments::
46 * Overview of available music functions::
49 @node Overview of music functions
50 @subsection Overview of music functions
55 @node Simple substitution functions
56 @subsection Simple substitution functions
61 @node Paired substitution functions
62 @subsection Paired substitution functions
67 @node Mathematics in functions
68 @subsection Mathematics in functions
74 @subsection Void functions
79 @node Functions without arguments
80 @subsection Functions without arguments
85 @node Overview of available music functions
86 @subsection Overview of available music functions
91 @include identifiers.tely
92 @node Programmer interfaces
93 @section Programmer interfaces
99 * Input variables and Scheme::
100 * Internal music representation::
103 @node Input variables and Scheme
104 @subsection Input variables and Scheme
109 @node Internal music representation
110 @subsection Internal music representation
115 @node Building complicated functions
116 @section Building complicated functions
122 * Displaying music expressions::
124 * Doubling a note with slurs (example)::
125 * Adding articulation to notes (example)::
128 @node Displaying music expressions
129 @subsection Displaying music expressions
134 @node Music properties
135 @subsection Music properties
140 @node Doubling a note with slurs (example)
141 @subsection Doubling a note with slurs (example)
146 @node Adding articulation to notes (example)
147 @subsection Adding articulation to notes (example)
152 @node Markup programmer interface
153 @section Markup programmer interface
159 * Markup construction in Scheme::
160 * How markups work internally::
161 * New markup command definition::
162 * New markup list command definition::
165 @node Markup construction in Scheme
166 @subsection Markup construction in Scheme
171 @node How markups work internally
172 @subsection How markups work internally
177 @node New markup command definition
178 @subsection New markup command definition
183 @node New markup list command definition
184 @subsection New markup list command definition
189 @node Contexts for programmers
190 @section Contexts for programmers
196 * Context evaluation::
197 * Running a function on all layout objects::
200 @node Context evaluation
201 @subsection Context evaluation
206 @node Running a function on all layout objects
207 @subsection Running a function on all layout objects
212 @node Scheme procedures as properties
213 @section Scheme procedures as properties
219 * Using Scheme code instead of tweak::
223 @node Using Scheme code instead of tweak
224 @section Using Scheme code instead of @code{\tweak}
226 L'inconvénient principal de la commande @code{\tweak} est la rigidité de sa
227 syntaxe. Par exemple, le code suivant produit une erreur.
230 F = \tweak #'font-size #-3 -\flageolet
238 En d'autres termes, @code{\tweak} ne se comporte pas comme une articulation :
239 il ne peut notamment pas être accolé avec les symboles @samp{^} ou @samp{_}.
241 C'est en se servant du langage Scheme que l'on peut résoudre ce problème.
242 Dans cet exemple, on a recours aux méthodes décrites dans @ref{Adding
243 articulation to notes (example)}, en particulier quant à l'emploi de
244 @code{\displayMusic}.
247 F = #(let ((m (make-music 'ArticulationEvent
248 'articulation-type "flageolet")))
249 (set! (ly:music-property m 'tweaks)
251 (ly:music-property m 'tweaks)))
260 Ici les propriétés @code{tweak} de l'objet flageolet nommé
261 @samp{m} (créé au moyen de @code{make-music}) sont extraites par
262 @code{ly:music-property}, une nouvelle valeur de la taille de fonte
263 est ajoutée à la liste de ses propriétés (grâce à la fonction Scheme
264 @code{acons}), et le résultat de cette opération est renvoyé par @code{set!}.
265 Le dernier élément, dans ce bloc @code{let}, est la valeur finale de
269 @node Difficult tweaks
270 @section Difficult tweaks
272 Certains réglages sont plus délicats que d'autres.
278 L'un d'entre eux est l'apparence des objets dits @q{spanner}, qui s'étendent
279 horizontalement, tels que les liaisons. Si, en principe, un seul de ces objets
280 est créé à la fois et peut donc être modifié de façon habituelle, lorsque ces
281 objets doivent enjamber un changement de ligne, ils sont dupliqués au début
282 du ou des systèmes suivants. Comme ces objets sont des clones de l'objet d'origine,
283 ils en héritent toutes les propriétés, y compris les éventuelles commandes @code{\override}.
286 En d'autres termes, une commande @code{\override} affecte toujours les deux extrémités
287 d'un objet @q{spanner}. Pour ne modifier que la partie précédant ou suivant le changement
288 de ligne, il faut intervenir directement dans le processus de mise en page.
289 La fonction de rappel @code{after-line-breaking} contient toute l'opération Scheme
290 effectuée lorsque les sauts de lignes ont été déterminés, et que des objets graphiques
291 ont été divisés sur des systèmes différents.
293 Dans l'exemple suivant, on définit une nouvelle opération nommée
294 @code{my-callback}. Cette opération
298 détermine si l'objet a été divisé à l'occasion d'un changement de ligne
300 si oui, recherche les différents morceaux de l'objet
302 vérifie si l'objet considéré est bien la deuxième moitié d'un objet divisé
304 si oui, applique un espacement supplémentaire (@code{extra-offset}).
307 On ajoute cette procédure à l'objet @rinternals{Tie} (liaison de tenue),
308 de façon à ce que le deuxième morceau d'une liaison divisée soit rehaussé.
311 @lilypond[quote,verbatim,ragged-right]
312 #(define (my-callback grob)
314 ; l'objet a-t-il été divisé ?
315 (orig (ly:grob-original grob))
317 ; si oui, rechercher les morceaux frères (siblings)
318 (siblings (if (ly:grob? orig)
319 (ly:spanner-broken-into orig) '() )))
321 (if (and (>= (length siblings) 2)
322 (eq? (car (last-pair siblings)) grob))
323 (ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
326 \override Tie #'after-line-breaking =
333 Lorsque cette astuce va être appliquée, notre nouvelle fonction de rappel
334 @code{after-line-breaking} devra également appeler celle d'origine
335 (@code{after-line-breaking}), si elle existe.
336 Ainsi, pour l'utiliser dans le cas d'un crescendo (objet @code{Hairpin}),
337 il faudra appeler également @code{ly:hairpin::after-line-breaking}.
340 @item Pour des raisons d'ordre technique, certains objets ne peuvent être modifiés par
341 @code{\override}. Parmi ceux-là, les objets @code{NonMusicalPaperColumn}
342 et @code{PaperColumn}. La commande @code{\overrideProperty} sert à les modifier, de
343 façon similaire à @code{\once \override}, mais avec une syntaxe différente :
347 #"Score.NonMusicalPaperColumn" % Nom de l'objet
348 #'line-break-system-details % Nom de la propriété
349 #'((next-padding . 20)) % valeur
352 Notez cependant que la commande @code{\override} peut tout de même être appliquée
353 à @code{NoteMusicalPaperColumn} et @code{PaperColumn} dans un bloc @code{\context}.