3. Didacticiel pour Script-Fu

Dans ce cours, nous commencerons par une introduction aux notions fondamentales indispensables à l’utilisation du langage de programmation Scheme. Puis nous programmerons un script-fu que vous pourrez ajouter à votre collection. Ce script demande un texte à l’utilisateur et l’affiche dans une nouvelle image dont la taille est parfaitement adaptée au texte. Ensuite, nous améliorerons ce script, en ajoutant un cadre autour du texte. Nous terminerons sur la façon d’augmenter vos connaissances sur les Script-Fus.

[Note] Note

This section was adapted from a tutorial written for the GIMP 1 User Manual by Mike Terry.

3.1. Faisons connaissance avec Scheme

3.1.1. Start with Scheme

Scheme is a dialect of the Lisp family of programming languages. GIMP uses TinyScheme, which is a lightweight interpreter of a subset of the so-called R5RS standard.

Règle n°1 :

Chaque déclaration dans Scheme est entourée de parenthèses ().

Règle n°2 :

La fonction nom/opérateur est toujours le premier terme entre les parenthèses, et le reste constitue les paramètres pour la fonction.

However, not everything enclosed in parentheses is a function — they can also be items in a list — but we'll get to that later. This notation is referred to as prefix notation, because the function prefixes everything else. If you're familiar with postfix notation, or own a calculator that uses Reverse Polish Notation (such as most HP calculators), you should have no problem adapting to formulating expressions in Scheme.

Règle n°3 :

Les opérateurs mathématiques sont aussi considérés comme des fonctions et viennent donc en premier quand vous écrivez des formules mathématiques.

Ceci résulte logiquement de la notation préfixée.

3.1.2. Exemples de notations Préfixée, Infixée, et Postfixée

Voici quelques exemples rapides pour illustrer les différences entre les notations préfixée, infixée, et postfixée Nous allons ajouter 1 et 23 :

  • Notation préfixée : + 1 23 (c’est ce que veut Sheme)

  • Notation infixée : 1 + 23 (c’est la façon « naturelle » d’écrire)

  • Notation postfixée : 1 23 + (utilisée par les calculatrices HP)

3.1.3. Pratiquons Scheme

In GIMP, select FiltersDevelopmentScript-FuScript-Fu Console from the main menu. This will start up the Script-Fu Console window, which allows us to work interactively in Scheme.

3.1.4. La fenêtre Console de Script-Fu

At the bottom of this window is a text entry field for commands. Here, we can test out simple Scheme commands interactively. Let's start out easy, and add some numbers:

(+ 3 5)

En tapant cette séquence et en appuyant sur Entrée vous obtenez le résultat attendu : 8, dans le panneau central.

Figure 13.1. Utilisation de la console.

Utilisation de la console.

The « + » function can take more arguments, so we can add more than one number:

(+ 3 5 6)

Et, comme prévu, vous obtenez 14.

So far, so good — we type in a Scheme statement and it's executed immediately in the Script-Fu Console window. Now for a word of caution…

3.1.5. Faire attention aux parenthèses supplémentaires

If you're like me, you're used to being able to use extra parentheses whenever you want to — like when you're typing a complex mathematical equation and you want to separate the parts by parentheses to make it clearer when you read it. In Scheme, you have to be careful and not insert these extra parentheses incorrectly. For example, say we wanted to add 3 to the result of adding 5 and 6 together:

3 + (5 + 6) + 7 = :

Sachant que l’opérateur « + » accepte une liste de nombres à additionner, vous pourriez être tenté d’écrire :

(+ 3 (5 6) 7)

However, this is incorrect — remember, every statement in Scheme starts and ends with parens, so the Scheme interpreter will think that you're trying to call a function named « 5 » in the second group of parens, rather than summing those numbers before adding them to 3.

Il faut donc écrire :

(+ 3 (+ 5 6) 7)

3.1.6. Assurez-vous que les espacements sont corrects

Si vous êtes familier avec d’autres langages de programmation tels que C/C++, Perl ou Java, vous savez que vous n’avez pas besoin de mettre un espace avant ou après un opérateur mathématique :

        3+5, 3 +5, 3+ 5
      

Toutes ces formulations sont acceptées par C/C++, Java ou Perl. Mais ce n’est pas le cas de Sheme qui nécessite obligatoirement un espace après toute fonction ou tout opérateur.

Entraînez-vous avec de simples opérations mathématiques dans la Console pour Script-Fu jusqu’à ce que vous soyez parfaitement à l’aise avec ces premières notions.