1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
4 Translation of GIT committish: 98f5cb86133b03c2c4739cab384d48021e5d11df
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..
13 @c Translators: Valentin Villenave
14 @c Translation checkers: Gilles Thibault
17 @node Interfaces pour les programmeurs
18 @chapter Interfaces pour les programmeurs
19 @translationof Interfaces for programmers
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::
35 @node Fonctions musicales
36 @section Fonctions musicales
37 @translationof Music functions
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::
52 @node Aperçu des fonctions musicales
53 @subsection Aperçu des fonctions musicales
54 @translationof Overview of music functions
59 @node Fonctions de substitution simple
60 @subsection Fonctions de substitution simple
61 @translationof Simple substitution functions
66 @node Fonctions de substitution par paire
67 @subsection Fonctions de substitution par paire
68 @translationof Paired substitution functions
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
80 @node Fonctions fantômes
81 @subsection Fonctions fantômes
82 @translationof Void functions
87 @node Fonctions dépourvues d'argument
88 @subsection Fonctions dépourvues d'argument
89 @translationof Functions without arguments
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
101 @include identifiers.tely
102 @node Interfaces de programmation
103 @section Interfaces de programmation
104 @translationof Programmer interfaces
110 * Variables d'entrée et Scheme::
111 * Représentation interne de la musique::
114 @node Variables d'entrée et Scheme
115 @subsection Variables d'entrée et Scheme
116 @translationof Input variables and Scheme
121 @node Représentation interne de la musique
122 @subsection Représentation interne de la musique
123 @translationof Internal music representation
128 @node Construction de fonctions complexes
129 @section Construction de fonctions complexes
130 @translationof Building complicated functions
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::
142 @node Affichage d'expressions musicales
143 @subsection Affichage d'expressions musicales
144 @translationof Displaying music expressions
149 @node Propriétés de la musique
150 @subsection Propriétés de la musique
151 @translationof Music properties
156 @node Exemple : redoubler une note avec liaison
157 @subsection Exemple : redoubler une note avec liaison
158 @translationof Doubling a note with slurs (example)
163 @node Exemple : ajouter une articulation à plusieurs notes
164 @subsection Exemple : ajouter une articulation à plusieurs notes
165 @translationof Adding articulation to notes (example)
170 @node Interface de programmation des marqueurs de texte
171 @section Interface de programmation des marqueurs de texte
172 @translationof Markup programmer interface
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::
184 @node Construction Scheme d'un marqueur
185 @subsection Construction Scheme d'un marqueur
186 @translationof Markup construction in Scheme
191 @node Fonctionnement interne des marqueurs
192 @subsection Fonctionnement interne des marqueurs
193 @translationof How markups work internally
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
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
212 @node Contextes pour programmeurs
213 @section Contextes pour programmeurs
214 @translationof Contexts for programmers
220 * Évaluation d'un contexte::
221 * Application d'une fonction à tous les objets de mise en forme::
224 @node Évaluation d'un contexte
225 @subsection Évaluation d'un contexte
226 @translationof Context evaluation
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
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
246 * Utilisation de code Scheme au lieu de \"tweak\"::
247 * Retouches complexes::
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
254 L'inconvénient principal de la commande @code{\tweak} est la rigidité de sa
255 syntaxe. Par exemple, le code suivant produit une erreur.
258 F = \tweak #'font-size #-3 -\flageolet
266 En d'autres termes, @code{\tweak} ne se comporte pas comme une articulation :
267 il ne peut notamment pas être accolé avec les symboles @samp{^} ou @samp{_}.
269 C'est en se servant du langage Scheme que l'on peut résoudre ce problème.
270 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
271 @code{\displayMusic}.
274 F = #(let ((m (make-music 'ArticulationEvent
275 'articulation-type "flageolet")))
276 (set! (ly:music-property m 'tweaks)
278 (ly:music-property m 'tweaks)))
287 Ici les propriétés @code{tweak} de l'objet flageolet nommé
288 @samp{m} (créé au moyen de @code{make-music}) sont extraites par
289 @code{ly:music-property}, une nouvelle valeur de la taille de fonte
290 est ajoutée à la liste de ses propriétés (grâce à la fonction Scheme
291 @code{acons}), et le résultat de cette opération est renvoyé par @code{set!}.
292 Le dernier élément, dans ce bloc @code{let}, est la valeur finale de
296 @node Retouches complexes
297 @section Retouches complexes
298 @translationof Difficult tweaks
300 Certains réglages sont plus délicats que d'autres.
306 L'un d'entre eux est l'apparence des objets dits @q{spanner}, qui s'étendent
307 horizontalement, tels que les liaisons. Si, en principe, un seul de ces objets
308 est créé à la fois et peut donc être modifié de façon habituelle, lorsque ces
309 objets doivent enjamber un changement de ligne, ils sont dupliqués au début
310 du ou des systèmes suivants. Comme ces objets sont des clones de l'objet d'origine,
311 ils en héritent toutes les propriétés, y compris les éventuelles commandes @code{\override}.
314 En d'autres termes, une commande @code{\override} affecte toujours les deux extrémités
315 d'un objet @q{spanner}. Pour ne modifier que la partie précédant ou suivant le changement
316 de ligne, il faut intervenir directement dans le processus de mise en page.
317 La fonction de rappel @code{after-line-breaking} contient toute l'opération Scheme
318 effectuée lorsque les sauts de lignes ont été déterminés, et que des objets graphiques
319 ont été divisés sur des systèmes différents.
321 Dans l'exemple suivant, on définit une nouvelle opération nommée
322 @code{my-callback}. Cette opération
326 détermine si l'objet a été divisé à l'occasion d'un changement de ligne
328 si oui, recherche les différents morceaux de l'objet
330 vérifie si l'objet considéré est bien la deuxième moitié d'un objet divisé
332 si oui, applique un espacement supplémentaire (@code{extra-offset}).
335 On ajoute cette procédure à l'objet @rinternals{Tie} (liaison de tenue),
336 de façon à ce que le deuxième morceau d'une liaison divisée soit rehaussé.
339 @lilypond[quote,verbatim,ragged-right]
340 #(define (my-callback grob)
342 ; l'objet a-t-il été divisé ?
343 (orig (ly:grob-original grob))
345 ; si oui, rechercher les morceaux frères (siblings)
346 (siblings (if (ly:grob? orig)
347 (ly:spanner-broken-into orig) '() )))
349 (if (and (>= (length siblings) 2)
350 (eq? (car (last-pair siblings)) grob))
351 (ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
354 \override Tie #'after-line-breaking =
361 Lorsque cette astuce va être appliquée, notre nouvelle fonction de rappel
362 @code{after-line-breaking} devra également appeler celle d'origine
363 (@code{after-line-breaking}), si elle existe.
364 Ainsi, pour l'utiliser dans le cas d'un crescendo (objet @code{Hairpin}),
365 il faudra appeler également @code{ly:hairpin::after-line-breaking}.
368 @item Pour des raisons d'ordre technique, certains objets ne peuvent être modifiés par
369 @code{\override}. Parmi ceux-là, les objets @code{NonMusicalPaperColumn}
370 et @code{PaperColumn}. La commande @code{\overrideProperty} sert à les modifier, de
371 façon similaire à @code{\once \override}, mais avec une syntaxe différente :
375 #"Score.NonMusicalPaperColumn" % Nom de l'objet
376 #'line-break-system-details % Nom de la propriété
377 #'((next-padding . 20)) % valeur
380 Notez cependant que la commande @code{\override} peut tout de même être appliquée
381 à @code{NonMusicalPaperColumn} et @code{PaperColumn} dans un bloc @code{\context}.