]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/fr/extending/programming-interface.itely
Doc-fr: enable Extending
[lilypond.git] / Documentation / fr / extending / programming-interface.itely
1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
2
3 @ignore
4     Translation of GIT committish: 3c62ac104645533873bba800f7b0f371089f535a
5
6     When revising a translation, copy the HEAD committish of the
7     version that you are working on.  For details, see the Contributors'
8     Guide, node Updating translation committishes..
9 @end ignore
10
11 @c \version "2.15.18"
12
13 @c Translators: Valentin Villenave, Jean-Charles Malahieude
14 @c Translation checkers: Gilles Thibault
15
16 @node Interfaces pour programmeurs
17 @chapter Interfaces pour programmeurs
18 @translationof Interfaces for programmers
19
20 Advanced tweaks may be performed by using Scheme.  If you are
21 not familiar with Scheme, you may wish to read our
22 @ref{Tutoriel Scheme}.
23
24 @menu
25 * Blocs de code Lilypond::
26 * Fonctions Scheme::
27 * Fonctions musicales::
28 * Fonctions événementielles::
29 * Fonctions pour markups::
30 * Contextes pour programmeurs::
31 * Fonctions de rappel::
32 * Code Scheme intégré::
33 * Retouches complexes::
34 @end menu
35
36 @node Blocs de code Lilypond
37 @section Blocs de code Lilypond
38 @translationof Lilypond code blocks
39
40 @untranslated
41
42
43 @node Fonctions Scheme
44 @section Fonctions Scheme
45 @translationof Scheme functions
46
47 @cindex Scheme, fonctions (syntaxe LilyPond)
48
49 @untranslated
50
51
52 @menu
53 * Définition de fonctions Scheme::
54 * Utilisation de fonctions Scheme::
55 * Fonctions Scheme fantômes::
56 @end menu
57
58 @node Définition de fonctions Scheme
59 @subsection Définition de fonctions Scheme
60 @translationof Scheme function definitions
61
62 @funindex define-scheme-function
63
64 @untranslated
65
66
67 @node Utilisation de fonctions Scheme
68 @subsection Utilisation de fonctions Scheme
69 @translationof Scheme function usage
70
71 @untranslated
72
73
74 @node Fonctions Scheme fantômes
75 @subsection Fonctions Scheme fantômes
76 @translationof Void scheme functions
77 @funindex define-void-function
78 @funindex \void
79
80 @untranslated
81
82
83 @node Fonctions musicales
84 @section Fonctions musicales
85 @translationof Music functions
86
87 @cindex musicale, fonction
88
89 @untranslated
90
91 @menu
92 * Définition de fonctions musicales::
93 * Utilisation de fonctions musicales::
94 * Fonctions de substitution simple::
95 * Fonctions de substitution intermédiaires::
96 * De l'usage des mathématiques dans les fonctions::
97 * Fonctions dépourvues d'argument::
98 * Fonctions musicales fantômes::
99 @end menu
100
101
102 @node Définition de fonctions musicales
103 @subsection Définition de fonctions musicales
104 @translationof Music function definitions
105
106 @cindex defining music functions
107 @funindex define-music-function
108
109 @untranslated
110
111
112 @node Utilisation de fonctions musicales
113 @subsection Utilisation de fonctions musicales
114 @translationof Music function usage
115
116 @untranslated
117
118
119 @node Fonctions de substitution simple
120 @subsection Fonctions de substitution simple
121 @translationof Simple substitution functions
122
123 @untranslated
124
125
126 @node Fonctions de substitution intermédiaires
127 @subsection Fonctions de substitution intermédiaires
128 @translationof Intermediate substitution functions
129
130 @untranslated
131
132
133 @node De l'usage des mathématiques dans les fonctions
134 @subsection De l'usage des mathématiques dans les fonctions
135 @translationof Mathematics in functions
136
137 @untranslated
138
139
140 @node Fonctions dépourvues d'argument
141 @subsection Fonctions dépourvues d'argument
142 @translationof Functions without arguments
143
144 @untranslated
145
146
147 @node Fonctions musicales fantômes
148 @subsection Fonctions musicales fantômes
149 @translationof Void music functions
150
151 @untranslated
152
153
154 @node Fonctions événementielles
155 @section Fonctions événementielles
156 @translationof Event functions
157
158 @funindex define-event-function
159 @cindex event functions
160
161 @untranslated
162
163
164 @node Fonctions pour markups
165 @section Fonctions pour @emph{markups}
166 @translationof Markup functions
167
168 @untranslated
169
170 @menu
171 * Construction d'un markup en Scheme::
172 * Fonctionnement interne des markups::
173 * Définition d'une nouvelle commande de markup::
174 * Définition d'une nouvelle commande de liste de markups::
175 @end menu
176
177
178 @node Construction d'un markup en Scheme
179 @subsection Construction d'un @emph{markup} en Scheme
180 @translationof Markup construction in Scheme
181
182 @cindex defining markup commands
183
184 @untranslated
185
186
187 @node Fonctionnement interne des markups
188 @subsection Fonctionnement interne des @emph{markups}
189 @translationof How markups work internally
190
191 @untranslated
192
193
194 @node Définition d'une nouvelle commande de markup
195 @subsection Définition d'une nouvelle commande de @emph{markup}
196 @translationof New markup command definition
197
198 @untranslated
199
200 @menu
201 * Syntaxe d'une commande markup::
202 * Attribution de propriétés::
203 * Exemple commenté::
204 * Adaptation d'une commande incorporée::
205 @end menu
206
207
208 @node Syntaxe d'une commande markup
209 @unnumberedsubsubsec Syntaxe d'une commande @emph{markup}
210 @translationof Markup command definition syntax
211
212 @untranslated
213
214
215 @node Attribution de propriétés
216 @unnumberedsubsubsec Attribution de propriétés
217 @translationof On properties
218
219 @untranslated
220
221
222 @node Exemple commenté
223 @unnumberedsubsubsec Exemple commenté
224 @translationof A complete example
225
226 @untranslated
227
228
229 @node Adaptation d'une commande incorporée
230 @unnumberedsubsubsec Adaptation d'une commande incorporée
231 @translationof Adapting builtin commands
232
233 @untranslated
234
235
236 @node Définition d'une nouvelle commande de liste de markups
237 @subsection Définition d'une nouvelle commande de liste de @emph{markups}
238 @translationof New markup list command definition
239
240 @untranslated
241
242
243 @node Contextes pour programmeurs
244 @section Contextes pour programmeurs
245 @translationof Contexts for programmers
246
247 @untranslated
248 @menu
249 * Évaluation d'un contexte::
250 * Application d'une fonction à tous les objets de mise en forme::
251 @end menu
252
253
254 @node Évaluation d'un contexte
255 @subsection Évaluation d'un contexte
256 @translationof Context evaluation
257
258 @cindex calling code during interpreting
259 @funindex \applyContext
260
261 @untranslated
262
263
264 @node Application d'une fonction à tous les objets de mise en forme
265 @subsection Application d'une fonction à tous les objets de mise en forme
266 @translationof Running a function on all layout objects
267
268
269 @cindex calling code on layout objects
270 @funindex \applyOutput
271
272 @untranslated
273
274
275 @node Fonctions de rappel
276 @section Fonctions de rappel
277 @translationof Callback functions
278
279 @untranslated
280
281
282 @node Code Scheme intégré
283 @section Code Scheme intégré
284 @translationof Inline Scheme code
285
286 TODO: the example for this section is ill-chosen since
287 @example
288 F = -\tweak #'font-size #-3 -\flageolet
289 @end example
290 (note the @samp{-} marking it as a post event) will actually work fine
291 for the stated purpose.  Until this section gets a rewrite, let's
292 pretend we don't know.
293
294 L'inconvénient principal de la commande @code{\tweak} est la rigidité de
295 sa syntaxe.  Par exemple, le code suivant produit une erreur.
296
297 @example
298 F = \tweak #'font-size #-3 -\flageolet
299
300 \relative c'' @{
301   c4^\F c4_\F
302 @}
303 @end example
304
305 @noindent
306 En d'autres termes, @code{\tweak} ne se comporte pas comme une
307 articulation@tie{}: il ne peut notamment pas être accolé avec les
308 symboles @samp{^} ou @samp{_}.
309
310 C'est en se servant du langage Scheme que l'on peut résoudre ce
311 problème.  Dans cet exemple, on a recours aux méthodes décrites dans
312 @ref{Ajout d'articulation à des notes (exemple)}, en
313 particulier quant à l'emploi de @code{\displayMusic}.
314
315 @example
316 F = #(let ((m (make-music 'ArticulationEvent
317                           'articulation-type "flageolet")))
318        (set! (ly:music-property m 'tweaks)
319              (acons 'font-size -3
320                     (ly:music-property m 'tweaks)))
321        m)
322
323 \relative c'' @{
324   c4^\F c4_\F
325 @}
326 @end example
327
328 @noindent
329 Ici les propriétés @code{tweak} de l'objet flageolet nommé
330 @samp{m} (créé au moyen de @code{make-music}) sont extraites par
331 @code{ly:music-property}, une nouvelle valeur de la taille de fonte
332 est ajoutée à la liste de ses propriétés (grâce à la fonction Scheme
333 @code{acons}), et le résultat de cette opération est renvoyé par
334 @code{set!}.  Le dernier élément, dans ce bloc @code{let}, est la valeur
335 finale de @samp{m} lui-même.
336
337
338 @node Retouches complexes
339 @section Retouches complexes
340 @translationof Difficult tweaks
341
342 Certains réglages sont plus délicats que d'autres.
343
344 @itemize
345 @item
346 L'un d'entre eux est l'apparence des objets dits @qq{extenseurs}
347 (@emph{spanner}), qui s'étendent horizontalement, tels que les liaisons.
348 Si, en principe, un seul de ces objets est créé à la fois et peut donc
349 être modifié de façon habituelle, lorsque ces objets doivent enjamber un
350 changement de ligne, ils sont dupliqués au début du ou des systèmes
351 suivants.  Comme ces objets sont des clones de l'objet d'origine, ils en
352 héritent toutes les propriétés, y compris les éventuelles commandes
353 @code{\override}.
354
355 En d'autres termes, une commande @code{\override} affecte toujours les
356 deux extrémités d'un objet @emph{spanner}.  Pour ne modifier que la
357 partie précédant ou suivant le changement de ligne, il faut intervenir
358 directement dans le processus de mise en page.
359 La fonction de rappel @code{after-line-breaking} contient toute
360 l'opération Scheme effectuée lorsque les sauts de lignes ont été
361 déterminés, et que des objets graphiques ont été divisés sur des
362 systèmes différents.
363
364 Dans l'exemple suivant, on définit une nouvelle opération nommée
365 @code{my-callback}.  Cette opération
366
367 @itemize
368 @item
369 détermine si l'objet a été divisé à l'occasion d'un changement de ligne
370 @item
371 dans l'affirmative, recherche les différents morceaux de l'objet
372 @item
373 vérifie si l'objet considéré est bien la deuxième moitié d'un objet
374 divisé
375 @item
376 dans l'affirmative, applique un espacement supplémentaire
377 (@code{extra-offset}).
378 @end itemize
379
380 On ajoute cette procédure à l'objet @rinternals{Tie} (liaison de tenue),
381 de façon à ce que le deuxième morceau d'une liaison divisée soit
382 rehaussé.
383
384 @c KEEP LY
385 @lilypond[quote,verbatim,ragged-right]
386 #(define (my-callback grob)
387    (let* (
388           ;; l'objet a-t-il été divisé ?
389           (orig (ly:grob-original grob))
390
391           ;; si oui, rechercher les morceaux frères (siblings)
392           (siblings (if (ly:grob? orig)
393                         (ly:spanner-broken-into orig)
394                         '())))
395
396      (if (and (>= (length siblings) 2)
397               (eq? (car (last-pair siblings)) grob))
398          (ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
399
400 \relative c'' {
401   \override Tie #'after-line-breaking =
402   #my-callback
403   c1 ~ \break
404   c2 ~ c
405 }
406 @end lilypond
407
408 @noindent
409 Lorsque cette astuce va être appliquée, notre nouvelle fonction de
410 rappel @code{after-line-breaking} devra également appeler celle
411 d'origine (@code{after-line-breaking}), si elle existe.  Ainsi, pour
412 l'utiliser dans le cas d'un crescendo (objet @code{Hairpin}), il faudra
413 également appeler @code{ly:spanner::kill-zero-spanned-time}.
414
415
416 @item
417 Pour des raisons d'ordre technique, certains objets ne peuvent être
418 modifiés par @code{\override}.  Parmi ceux-là, les objets
419 @code{NonMusicalPaperColumn} et @code{PaperColumn}.  La commande
420 @code{\overrideProperty} sert à les modifier, de façon similaire à
421 @code{\once \override} mais avec une syntaxe différente@tie{}:
422
423 @example
424 \overrideProperty
425 #"Score.NonMusicalPaperColumn"  % Nom de l'objet
426 #'line-break-system-details     % Nom de la propriété
427 #'((next-padding . 20))         % Valeur
428 @end example
429
430 Notez toutefois que la commande @code{\override} peut tout de même être
431 appliquée à @code{NonMusicalPaperColumn} et @code{PaperColumn} dans un
432 bloc @code{\context}.
433
434 @end itemize
435
436
437 @node Interfaces LilyPond Scheme
438 @chapter Interfaces LilyPond Scheme
439 @translationof LilyPond Scheme interfaces
440
441 @untranslated
442