]> git.donarmstrong.com Git - lilypond.git/blobdiff - Documentation/fr/extending/programming-interface.itely
resolve merge
[lilypond.git] / Documentation / fr / extending / programming-interface.itely
diff --git a/Documentation/fr/extending/programming-interface.itely b/Documentation/fr/extending/programming-interface.itely
new file mode 100644 (file)
index 0000000..a66da00
--- /dev/null
@@ -0,0 +1,393 @@
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
+
+@ignore
+    Translation of GIT committish: 3f4496001441e0b1b27d7bc5395c4520f4f2088c
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  For details, see the Contributors'
+    Guide, node Updating translation committishes..
+@end ignore
+
+@c \version "2.14.0"
+
+@c Translators: Valentin Villenave
+@c Translation checkers: Gilles Thibault, Jean-Charles Malahieude
+
+
+@node Interfaces pour les programmeurs
+@chapter Interfaces pour les programmeurs
+@translationof Interfaces for programmers
+
+@untranslated
+
+
+@menu
+* Fonctions musicales::
+* Interfaces de programmation::
+* Construction de fonctions complexes::
+* Interface de programmation des marqueurs de texte::
+* Contextes pour programmeurs::
+* Utilisation de procédures Scheme en tant que propriétés::
+* Utilisation de code Scheme au lieu de \"tweak\"::
+* Retouches complexes::
+@end menu
+
+@node Fonctions musicales
+@section Fonctions musicales
+@translationof Music functions
+
+@untranslated
+
+
+@menu
+* Aperçu des fonctions musicales::
+* Fonctions de substitution simple::
+* Fonctions de substitution par paire::
+* De l'usage des mathématiques dans les fonctions::
+* Fonctions fantômes::
+* Fonctions dépourvues d'argument::
+* Liste des fonctions musicales prédéfinies::
+@end menu
+
+@node Aperçu des fonctions musicales
+@subsection Aperçu des fonctions musicales
+@translationof Overview of music functions
+
+@untranslated
+
+
+@node Fonctions de substitution simple
+@subsection Fonctions de substitution simple
+@translationof Simple substitution functions
+
+@untranslated
+
+
+@node Fonctions de substitution par paire
+@subsection Fonctions de substitution par paire
+@translationof Paired substitution functions
+
+@untranslated
+
+
+@node De l'usage des mathématiques dans les fonctions
+@subsection De l'usage des mathématiques dans les fonctions
+@translationof Mathematics in functions
+
+@untranslated
+
+
+@node Fonctions fantômes
+@subsection Fonctions fantômes
+@translationof Void functions
+
+@untranslated
+
+
+@node Fonctions dépourvues d'argument
+@subsection Fonctions dépourvues d'argument
+@translationof Functions without arguments
+
+@untranslated
+
+
+@node Liste des fonctions musicales prédéfinies
+@subsection Liste des fonctions musicales prédéfinies
+@translationof Overview of available music functions
+
+@untranslated
+
+
+@include identifiers.tely
+@node Interfaces de programmation
+@section Interfaces de programmation
+@translationof Programmer interfaces
+
+@untranslated
+
+
+@menu
+* Variables d'entrée et Scheme::
+* Représentation interne de la musique::
+@end menu
+
+@node Variables d'entrée et Scheme
+@subsection Variables d'entrée et Scheme
+@translationof Input variables and Scheme
+
+@untranslated
+
+
+@node Représentation interne de la musique
+@subsection Représentation interne de la musique
+@translationof Internal music representation
+
+@untranslated
+
+
+@node Construction de fonctions complexes
+@section Construction de fonctions complexes
+@translationof Building complicated functions
+
+@untranslated
+
+
+@menu
+* Affichage d'expressions musicales::
+* Propriétés de la musique::
+* Exemple : redoubler une note avec liaison::
+* Exemple : ajouter une articulation à plusieurs notes::
+@end menu
+
+@node Affichage d'expressions musicales
+@subsection Affichage d'expressions musicales
+@translationof Displaying music expressions
+
+@untranslated
+
+
+@node Propriétés de la musique
+@subsection Propriétés de la musique
+@translationof Music properties
+
+@untranslated
+
+
+@node Exemple : redoubler une note avec liaison
+@subsection Exemple : redoubler une note avec liaison
+@translationof Doubling a note with slurs (example)
+
+@untranslated
+
+
+@node Exemple : ajouter une articulation à plusieurs notes
+@subsection Exemple : ajouter une articulation à plusieurs notes
+@translationof Adding articulation to notes (example)
+
+@untranslated
+
+
+@node Interface de programmation des marqueurs de texte
+@section Interface de programmation des marqueurs de texte
+@translationof Markup programmer interface
+
+@untranslated
+
+
+@menu
+* Construction Scheme d'un marqueur::
+* Fonctionnement interne des marqueurs::
+* Définition d'une nouvelle commande de marqueur::
+* Définition d'une nouvelle commande de liste de marqueurs::
+@end menu
+
+@node Construction Scheme d'un marqueur
+@subsection Construction Scheme d'un marqueur
+@translationof Markup construction in Scheme
+
+@untranslated
+
+
+@node Fonctionnement interne des marqueurs
+@subsection Fonctionnement interne des marqueurs
+@translationof How markups work internally
+
+@untranslated
+
+
+@node Définition d'une nouvelle commande de marqueur
+@subsection Définition d'une nouvelle commande de marqueur
+@translationof New markup command definition
+
+@untranslated
+
+
+@node Définition d'une nouvelle commande de liste de marqueurs
+@subsection Définition d'une nouvelle commande de liste de marqueurs
+@translationof New markup list command definition
+
+@untranslated
+
+
+@node Contextes pour programmeurs
+@section Contextes pour programmeurs
+@translationof Contexts for programmers
+
+@untranslated
+
+
+@menu
+* Évaluation d'un contexte::
+* Application d'une fonction à tous les objets de mise en forme::
+@end menu
+
+@node Évaluation d'un contexte
+@subsection Évaluation d'un contexte
+@translationof Context evaluation
+
+@untranslated
+
+
+@node Application d'une fonction à tous les objets de mise en forme
+@subsection Application d'une fonction à tous les objets de mise en forme
+@translationof Running a function on all layout objects
+
+@untranslated
+
+
+@node Utilisation de procédures Scheme en tant que propriétés
+@section Utilisation de procédures Scheme en tant que propriétés
+@translationof Scheme procedures as properties
+
+@untranslated
+
+
+@menu
+* Utilisation de code Scheme au lieu de \"tweak\"::
+* Retouches complexes::
+@end menu
+
+@node Utilisation de code Scheme au lieu de \"tweak\"
+@section Utilisation de code Scheme au lieu de @code{\tweak}
+@translationof Using Scheme code instead of tweak
+
+L'inconvénient principal de la commande @code{\tweak} est la rigidité de
+sa syntaxe.  Par exemple, le code suivant produit une erreur.
+
+@example
+F = \tweak #'font-size #-3 -\flageolet
+
+\relative c'' @{
+  c4^\F c4_\F
+@}
+@end example
+
+@noindent
+En d'autres termes, @code{\tweak} ne se comporte pas comme une
+articulation@tie{}: il ne peut notamment pas être accolé avec les
+symboles @samp{^} ou @samp{_}.
+
+C'est en se servant du langage Scheme que l'on peut résoudre ce
+problème.  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 @code{\displayMusic}.
+
+@example
+F = #(let ((m (make-music 'ArticulationEvent
+                          'articulation-type "flageolet")))
+       (set! (ly:music-property m 'tweaks)
+             (acons 'font-size -3
+                    (ly:music-property m 'tweaks)))
+       m)
+
+\relative c'' @{
+  c4^\F c4_\F
+@}
+@end example
+
+@noindent
+Ici les propriétés @code{tweak} de l'objet flageolet nommé
+@samp{m} (créé au moyen de @code{make-music}) sont extraites par
+@code{ly:music-property}, une nouvelle valeur de la taille de fonte
+est ajoutée à la liste de ses propriétés (grâce à la fonction Scheme
+@code{acons}), et le résultat de cette opération est renvoyé par
+@code{set!}.  Le dernier élément, dans ce bloc @code{let}, est la valeur
+finale de @samp{m} lui-même.
+
+
+@node Retouches complexes
+@section Retouches complexes
+@translationof Difficult tweaks
+
+Certains réglages sont plus délicats que d'autres.
+
+@itemize @bullet
+
+
+@item
+L'un d'entre eux est l'apparence des objets dits @qq{spanner}, qui
+s'étendent horizontalement, tels que les liaisons.  Si, en principe, un
+seul de ces objets est créé à la fois et peut donc être modifié de façon
+habituelle, lorsque ces objets doivent enjamber un changement de ligne,
+ils sont dupliqués au début du ou des systèmes suivants.  Comme ces
+objets sont des clones de l'objet d'origine, ils en héritent toutes les
+propriétés, y compris les éventuelles commandes @code{\override}.
+
+
+En d'autres termes, une commande @code{\override} affecte toujours les
+deux extrémités d'un objet @q{spanner}.  Pour ne modifier que la partie
+précédant ou suivant le changement de ligne, il faut intervenir
+directement dans le processus de mise en page.
+La fonction de rappel @code{after-line-breaking} contient toute
+l'opération Scheme effectuée lorsque les sauts de lignes ont été
+déterminés, et que des objets graphiques ont été divisés sur des
+systèmes différents.
+
+Dans l'exemple suivant, on définit une nouvelle opération nommée
+@code{my-callback}.  Cette opération
+
+@itemize @bullet
+@item
+détermine si l'objet a été divisé à l'occasion d'un changement de ligne
+@item
+si oui, recherche les différents morceaux de l'objet
+@item
+vérifie si l'objet considéré est bien la deuxième moitié d'un objet
+divisé
+@item
+si oui, applique un espacement supplémentaire (@code{extra-offset}).
+@end itemize
+
+On ajoute cette procédure à l'objet @rinternals{Tie} (liaison de tenue),
+de façon à ce que le deuxième morceau d'une liaison divisée soit
+rehaussé.
+
+@c KEEP LY
+@lilypond[quote,verbatim,ragged-right]
+#(define (my-callback grob)
+  (let* (
+         ; l'objet a-t-il été divisé ?
+         (orig (ly:grob-original grob))
+
+         ; si oui, rechercher les morceaux frères (siblings)
+         (siblings (if (ly:grob? orig)
+                     (ly:spanner-broken-into orig) '() )))
+
+   (if (and (>= (length siblings) 2)
+             (eq? (car (last-pair siblings)) grob))
+     (ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
+
+\relative c'' {
+  \override Tie #'after-line-breaking =
+  #my-callback
+  c1 ~ \break c2 ~ c
+}
+@end lilypond
+
+@noindent
+Lorsque cette astuce va être appliquée, notre nouvelle fonction de
+rappel @code{after-line-breaking} devra également appeler celle
+d'origine (@code{after-line-breaking}), si elle existe.
+Ainsi, pour l'utiliser dans le cas d'un crescendo (objet
+@code{Hairpin}), il faudra appeler également
+@code{ly:spanner::kill-zero-spanned-time}.
+
+
+@item Pour des raisons d'ordre technique, certains objets ne peuvent
+être modifiés par @code{\override}.  Parmi ceux-là, les objets
+@code{NonMusicalPaperColumn} et @code{PaperColumn}.  La commande
+@code{\overrideProperty} sert à les modifier, de façon similaire à
+@code{\once \override}, mais avec une syntaxe différente@tie{}:
+
+@example
+\overrideProperty
+#"Score.NonMusicalPaperColumn"  % Nom de l'objet
+#'line-break-system-details     % Nom de la propriété
+#'((next-padding . 20))         % valeur
+@end example
+
+Notez cependant que la commande @code{\override} peut tout de même être
+appliquée à @code{NonMusicalPaperColumn} et @code{PaperColumn} dans un
+bloc @code{\context}.
+
+@end itemize