]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/fr/notation/programming-interface.itely
Merge branch 'lilypond/translation' of ssh://git.sv.gnu.org/srv/git/lilypond into...
[lilypond.git] / Documentation / fr / notation / programming-interface.itely
1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
2
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 pour les programmeurs
17 @chapter Interfaces pour les programmeurs
18 @translationof Interfaces for programmers @c external
19
20 @untranslated
21
22
23 @menu
24 * Fonctions musicales::
25 * Interfaces de programmation::
26 * Construction de fonctions complexes::
27 * Interface de programmation des marqueurs de texte::
28 * Contextes pour programmeurs::
29 * Utilisation de procédures Scheme en tant que propriétés::
30 * Utilisation de code Scheme au lieu de \"tweak\"::
31 * Retouches complexes::
32 @end menu
33
34 @node Fonctions musicales
35 @section Fonctions musicales
36 @translationof Music functions @c external
37
38 @untranslated
39
40
41 @menu
42 * Aperçu des fonctions musicales::
43 * Fonctions de substitution simple::
44 * Fonctions de substitution par paire::
45 * De l'usage des mathématiques dans les fonctions::
46 * Fonctions fantômes::
47 * Fonctions dépourvues d'argument::
48 * Liste des fonctions musicales prédéfinies::
49 @end menu
50
51 @node Aperçu des fonctions musicales
52 @subsection Aperçu des fonctions musicales
53 @translationof Overview of music functions @c external
54
55 @untranslated
56
57
58 @node Fonctions de substitution simple
59 @subsection Fonctions de substitution simple
60 @translationof Simple substitution functions @c external
61
62 @untranslated
63
64
65 @node Fonctions de substitution par paire
66 @subsection Fonctions de substitution par paire
67 @translationof Paired substitution functions @c external
68
69 @untranslated
70
71
72 @node De l'usage des mathématiques dans les fonctions
73 @subsection De l'usage des mathématiques dans les fonctions
74 @translationof Mathematics in functions @c external
75
76 @untranslated
77
78
79 @node Fonctions fantômes
80 @subsection Fonctions fantômes
81 @translationof Void functions @c external
82
83 @untranslated
84
85
86 @node Fonctions dépourvues d'argument
87 @subsection Fonctions dépourvues d'argument
88 @translationof Functions without arguments @c external
89
90 @untranslated
91
92
93 @node Liste des fonctions musicales prédéfinies
94 @subsection Liste des fonctions musicales prédéfinies
95 @translationof Overview of available music functions @c external
96
97 @untranslated
98
99
100 @include identifiers.tely
101 @node Interfaces de programmation
102 @section Interfaces de programmation
103 @translationof Programmer interfaces @c external
104
105 @untranslated
106
107
108 @menu
109 * Variables d'entrée et Scheme::
110 * Représentation interne de la musique::
111 @end menu
112
113 @node Variables d'entrée et Scheme
114 @subsection Variables d'entrée et Scheme
115 @translationof Input variables and Scheme @c external
116
117 @untranslated
118
119
120 @node Représentation interne de la musique
121 @subsection Représentation interne de la musique
122 @translationof Internal music representation @c external
123
124 @untranslated
125
126
127 @node Construction de fonctions complexes
128 @section Construction de fonctions complexes
129 @translationof Building complicated functions @c external
130
131 @untranslated
132
133
134 @menu
135 * Affichage d'expressions musicales::
136 * Propriétés de la musique::
137 * Exemple : redoubler une note avec liaison::
138 * Exemple : ajouter une articulation à plusieurs notes::
139 @end menu
140
141 @node Affichage d'expressions musicales
142 @subsection Affichage d'expressions musicales
143 @translationof Displaying music expressions @c external
144
145 @untranslated
146
147
148 @node Propriétés de la musique
149 @subsection Propriétés de la musique
150 @translationof Music properties @c external
151
152 @untranslated
153
154
155 @node Exemple : redoubler une note avec liaison
156 @subsection Exemple : redoubler une note avec liaison
157 @translationof Doubling a note with slurs (example) @c external
158
159 @untranslated
160
161
162 @node Exemple : ajouter une articulation à plusieurs notes
163 @subsection Exemple : ajouter une articulation à plusieurs notes
164 @translationof Adding articulation to notes (example) @c external
165
166 @untranslated
167
168
169 @node Interface de programmation des marqueurs de texte
170 @section Interface de programmation des marqueurs de texte
171 @translationof Markup programmer interface @c external
172
173 @untranslated
174
175
176 @menu
177 * Construction Scheme d'un marqueur::
178 * Fonctionnement interne des marqueurs::
179 * Définition d'une nouvelle commande de marqueur::
180 * Définition d'une nouvelle commande de liste de marqueurs::
181 @end menu
182
183 @node Construction Scheme d'un marqueur
184 @subsection Construction Scheme d'un marqueur
185 @translationof Markup construction in Scheme @c external
186
187 @untranslated
188
189
190 @node Fonctionnement interne des marqueurs
191 @subsection Fonctionnement interne des marqueurs
192 @translationof How markups work internally @c external
193
194 @untranslated
195
196
197 @node Définition d'une nouvelle commande de marqueur
198 @subsection Définition d'une nouvelle commande de marqueur
199 @translationof New markup command definition @c external
200
201 @untranslated
202
203
204 @node Définition d'une nouvelle commande de liste de marqueurs
205 @subsection Définition d'une nouvelle commande de liste de marqueurs
206 @translationof New markup list command definition @c external
207
208 @untranslated
209
210
211 @node Contextes pour programmeurs
212 @section Contextes pour programmeurs
213 @translationof Contexts for programmers @c external
214
215 @untranslated
216
217
218 @menu
219 * Évaluation d'un contexte::
220 * Application d'une fonction à tous les objets de mise en forme::
221 @end menu
222
223 @node Évaluation d'un contexte
224 @subsection Évaluation d'un contexte
225 @translationof Context evaluation @c external
226
227 @untranslated
228
229
230 @node Application d'une fonction à tous les objets de mise en forme
231 @subsection Application d'une fonction à tous les objets de mise en forme
232 @translationof Running a function on all layout objects @c external
233
234 @untranslated
235
236
237 @node Utilisation de procédures Scheme en tant que propriétés
238 @section Utilisation de procédures Scheme en tant que propriétés
239 @translationof Scheme procedures as properties @c external
240
241 @untranslated
242
243
244 @menu
245 * Utilisation de code Scheme au lieu de \"tweak\"::
246 * Retouches complexes::
247 @end menu
248
249 @node Utilisation de code Scheme au lieu de \"tweak\"
250 @section Utilisation de code Scheme au lieu de @code{\tweak}
251 @translationof Using Scheme code instead of tweak
252
253 L'inconvénient principal de la commande @code{\tweak} est la rigidité de sa
254 syntaxe.  Par exemple, le code suivant produit une erreur.
255
256 @example
257 F = \tweak #'font-size #-3 -\flageolet
258
259 \relative c'' @{
260   c4^\F c4_\F
261 @}
262 @end example
263
264 @noindent
265 En d'autres termes, @code{\tweak} ne se comporte pas comme une articulation :
266 il ne peut notamment pas être accolé avec les symboles @samp{^} ou @samp{_}.
267
268 C'est en se servant du langage Scheme que l'on peut résoudre ce problème.
269 Dans cet exemple, on a recours aux méthodes décrites dans @ref{Exemple : ajouter une articulation à plusieurs notes}, en particulier quant à l'emploi de
270 @code{\displayMusic}.
271
272 @example
273 F = #(let ((m (make-music 'ArticulationEvent
274                           'articulation-type "flageolet")))
275        (set! (ly:music-property m 'tweaks)
276              (acons 'font-size -3
277                     (ly:music-property m 'tweaks)))
278        m)
279
280 \relative c'' @{
281   c4^\F c4_\F
282 @}
283 @end example
284
285 @noindent
286 Ici les propriétés @code{tweak} de l'objet flageolet nommé
287 @samp{m} (créé au moyen de @code{make-music}) sont extraites par
288 @code{ly:music-property}, une nouvelle valeur de la taille de fonte
289 est ajoutée à la liste de ses propriétés (grâce à la fonction Scheme
290 @code{acons}), et le résultat de cette opération est renvoyé par @code{set!}.
291 Le dernier élément, dans ce bloc @code{let}, est la valeur finale de
292 @samp{m} lui-même.
293
294
295 @node Retouches complexes
296 @section Retouches complexes
297 @translationof Difficult tweaks
298
299 Certains réglages sont plus délicats que d'autres.
300
301 @itemize @bullet
302
303
304 @item
305 L'un d'entre eux est l'apparence des objets dits @q{spanner}, qui s'étendent
306 horizontalement, tels que les liaisons.  Si, en principe, un seul de ces objets
307 est créé à la fois et peut donc être modifié de façon habituelle, lorsque ces
308 objets doivent enjamber un changement de ligne, ils sont dupliqués au début
309 du ou des systèmes suivants.  Comme ces objets sont des clones de l'objet d'origine,
310 ils en héritent toutes les propriétés, y compris les éventuelles commandes @code{\override}.
311
312
313 En d'autres termes, une commande @code{\override} affecte toujours les deux extrémités
314 d'un objet @q{spanner}.  Pour ne modifier que la partie précédant ou suivant le changement
315 de ligne, il faut intervenir directement dans le processus de mise en page.
316 La fonction de rappel @code{after-line-breaking} contient toute l'opération Scheme
317 effectuée lorsque les sauts de lignes ont été déterminés, et que des objets graphiques
318 ont été divisés sur des systèmes différents.
319
320 Dans l'exemple suivant, on définit une nouvelle opération nommée
321 @code{my-callback}.  Cette opération
322
323 @itemize @bullet
324 @item
325 détermine si l'objet a été divisé à l'occasion d'un changement de ligne
326 @item
327 si oui, recherche les différents morceaux de l'objet
328 @item
329 vérifie si l'objet considéré est bien la deuxième moitié d'un objet divisé
330 @item
331 si oui, applique un espacement supplémentaire (@code{extra-offset}).
332 @end itemize
333
334 On ajoute cette procédure à l'objet @rinternals{Tie} (liaison de tenue),
335 de façon à ce que le deuxième morceau d'une liaison divisée soit rehaussé.
336
337 @c KEEP LY
338 @lilypond[quote,verbatim,ragged-right]
339 #(define (my-callback grob)
340   (let* (
341          ; l'objet a-t-il été divisé ?
342          (orig (ly:grob-original grob))
343
344          ; si oui, rechercher les morceaux frères (siblings)
345          (siblings (if (ly:grob? orig)
346                      (ly:spanner-broken-into orig) '() )))
347
348    (if (and (>= (length siblings) 2)
349              (eq? (car (last-pair siblings)) grob))
350      (ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
351
352 \relative c'' {
353   \override Tie #'after-line-breaking =
354   #my-callback
355   c1 ~ \break c2 ~ c
356 }
357 @end lilypond
358
359 @noindent
360 Lorsque cette astuce va être appliquée, notre nouvelle fonction de rappel
361 @code{after-line-breaking} devra également appeler celle d'origine
362 (@code{after-line-breaking}), si elle existe.
363 Ainsi, pour l'utiliser dans le cas d'un crescendo (objet @code{Hairpin}),
364 il faudra appeler également @code{ly:hairpin::after-line-breaking}.
365
366
367 @item Pour des raisons d'ordre technique, certains objets ne peuvent être modifiés par
368 @code{\override}.  Parmi ceux-là, les objets @code{NonMusicalPaperColumn}
369 et @code{PaperColumn}.  La commande @code{\overrideProperty} sert à les modifier, de
370 façon similaire à @code{\once \override}, mais avec une syntaxe différente :
371
372 @example
373 \overrideProperty
374 #"Score.NonMusicalPaperColumn"  % Nom de l'objet
375 #'line-break-system-details     % Nom de la propriété
376 #'((next-padding . 20))         % valeur
377 @end example
378
379 Notez cependant que la commande @code{\override} peut tout de même être appliquée
380 à @code{NoteMusicalPaperColumn} et @code{PaperColumn} dans un bloc @code{\context}.
381
382 @end itemize