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