]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/fr/user/programming-interface.itely
c11bfb424456ac0ae607f050fd1206351a420590
[lilypond.git] / Documentation / fr / user / programming-interface.itely
1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
2 @c This file is part of lilypond.tely
3 @ignore
4     Translation of GIT committish: 76de7e168dbc9ffc7671d99663c5ce50dae42abb
5
6     When revising a translation, copy the HEAD committish of the
7     version that you are working on.  See TRANSLATION for details.
8 @end ignore
9
10 @c \version "2.12.0"
11
12 @c Translators: Valentin Villenave
13 @c Translation checkers: Gilles Thibault
14
15
16 @node Interfaces for programmers
17 @chapter Interfaces for programmers
18
19 @untranslated
20
21
22 @menu
23 * Music functions::
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::
30 * Difficult tweaks::
31 @end menu
32
33 @node Music functions
34 @section Music functions
35
36 @untranslated
37
38
39 @menu
40 * Overview of music functions::
41 * Simple substitution functions::
42 * Paired substitution functions::
43 * Mathematics in functions::
44 * Void functions::
45 * Functions without arguments::
46 * Overview of available music functions::
47 @end menu
48
49 @node Overview of music functions
50 @subsection Overview of music functions
51
52 @untranslated
53
54
55 @node Simple substitution functions
56 @subsection Simple substitution functions
57
58 @untranslated
59
60
61 @node Paired substitution functions
62 @subsection Paired substitution functions
63
64 @untranslated
65
66
67 @node Mathematics in functions
68 @subsection Mathematics in functions
69
70 @untranslated
71
72
73 @node Void functions
74 @subsection Void functions
75
76 @untranslated
77
78
79 @node Functions without arguments
80 @subsection Functions without arguments
81
82 @untranslated
83
84
85 @node Overview of available music functions
86 @subsection Overview of available music functions
87
88 @untranslated
89
90
91 @include identifiers.tely
92 @node Programmer interfaces
93 @section Programmer interfaces
94
95 @untranslated
96
97
98 @menu
99 * Input variables and Scheme::
100 * Internal music representation::
101 @end menu
102
103 @node Input variables and Scheme
104 @subsection Input variables and Scheme
105
106 @untranslated
107
108
109 @node Internal music representation
110 @subsection Internal music representation
111
112 @untranslated
113
114
115 @node Building complicated functions
116 @section Building complicated functions
117
118 @untranslated
119
120
121 @menu
122 * Displaying music expressions::
123 * Music properties::
124 * Doubling a note with slurs (example)::
125 * Adding articulation to notes (example)::
126 @end menu
127
128 @node Displaying music expressions
129 @subsection Displaying music expressions
130
131 @untranslated
132
133
134 @node Music properties
135 @subsection Music properties
136
137 @untranslated
138
139
140 @node Doubling a note with slurs (example)
141 @subsection Doubling a note with slurs (example)
142
143 @untranslated
144
145
146 @node Adding articulation to notes (example)
147 @subsection Adding articulation to notes (example)
148
149 @untranslated
150
151
152 @node Markup programmer interface
153 @section Markup programmer interface
154
155 @untranslated
156
157
158 @menu
159 * Markup construction in Scheme::
160 * How markups work internally::
161 * New markup command definition::
162 * New markup list command definition::
163 @end menu
164
165 @node Markup construction in Scheme
166 @subsection Markup construction in Scheme
167
168 @untranslated
169
170
171 @node How markups work internally
172 @subsection How markups work internally
173
174 @untranslated
175
176
177 @node New markup command definition
178 @subsection New markup command definition
179
180 @untranslated
181
182
183 @node New markup list command definition
184 @subsection New markup list command definition
185
186 @untranslated
187
188
189 @node Contexts for programmers
190 @section Contexts for programmers
191
192 @untranslated
193
194
195 @menu
196 * Context evaluation::
197 * Running a function on all layout objects::
198 @end menu
199
200 @node Context evaluation
201 @subsection Context evaluation
202
203 @untranslated
204
205
206 @node Running a function on all layout objects
207 @subsection Running a function on all layout objects
208
209 @untranslated
210
211
212 @node Scheme procedures as properties
213 @section Scheme procedures as properties
214
215 @untranslated
216
217
218 @menu
219 * Using Scheme code instead of tweak::
220 * Difficult tweaks::
221 @end menu
222
223 @node Using Scheme code instead of tweak
224 @section Using Scheme code instead of @code{\tweak}
225
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.
228
229 @example
230 F = \tweak #'font-size #-3 -\flageolet
231
232 \relative c'' @{
233   c4^\F c4_\F
234 @}
235 @end example
236
237 @noindent
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{_}.
240
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}.
245
246 @example
247 F = #(let ((m (make-music 'ArticulationEvent
248                           'articulation-type "flageolet")))
249        (set! (ly:music-property m 'tweaks)
250              (acons 'font-size -3
251                     (ly:music-property m 'tweaks)))
252        m)
253
254 \relative c'' @{
255   c4^\F c4_\F
256 @}
257 @end example
258
259 @noindent
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
266 @samp{m} lui-même.
267
268
269 @node Difficult tweaks
270 @section Difficult tweaks
271
272 Certains réglages sont plus délicats que d'autres.
273
274 @itemize @bullet
275
276
277 @item
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}.
284
285
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.
292
293 Dans l'exemple suivant, on définit une nouvelle opération nommée
294 @code{my-callback}.  Cette opération
295
296 @itemize @bullet
297 @item
298 détermine si l'objet a été divisé à l'occasion d'un changement de ligne
299 @item
300 si oui, recherche les différents morceaux de l'objet
301 @item
302 vérifie si l'objet considéré est bien la deuxième moitié d'un objet divisé
303 @item
304 si oui, applique un espacement supplémentaire (@code{extra-offset}).
305 @end itemize
306
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é.
309
310 @c KEEP LY
311 @lilypond[quote,verbatim,ragged-right]
312 #(define (my-callback grob)
313   (let* (
314          ; l'objet a-t-il été divisé ?
315          (orig (ly:grob-original grob))
316
317          ; si oui, rechercher les morceaux frères (siblings)
318          (siblings (if (ly:grob? orig)
319                      (ly:spanner-broken-into orig) '() )))
320
321    (if (and (>= (length siblings) 2)
322              (eq? (car (last-pair siblings)) grob))
323      (ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
324
325 \relative c'' {
326   \override Tie #'after-line-breaking =
327   #my-callback
328   c1 ~ \break c2 ~ c
329 }
330 @end lilypond
331
332 @noindent
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}.
338
339
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 :
344
345 @example
346 \overrideProperty
347 #"Score.NonMusicalPaperColumn"  % Nom de l'objet
348 #'line-break-system-details     % Nom de la propriété
349 #'((next-padding . 20))         % valeur
350 @end example
351
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}.
354
355 @end itemize