Fonctions, troisième partie: alternates contextuelles avancées

  • by Rainer Erich Scheichelbauer
  • Tutorial
  • – Modified on

Il n’y a rien de plus décevant qu’une police de caractères qui imite l’écriture à la main, mais qui répète exactement la même forme lorsque vous tapez une lettre deux fois de suite, comme dans ‘créées’ ou ‘betterave’. Et si vous faisiez en sorte que votre police alterne entre plusieurs variantes pour chaque glyphe?

Glyphes alternatifs

Pour commencer, nous avons besoin de mettre en place des glyphes alternatifs. Une bonne idée est de le faire avec des alternates stylistiques. Imaginez donc que vous avez un glyphe A, et vous ajouterez A.ss01 et A.ss02. La même chose pour B, vous ajouterez B.ss01 et B.ss02. Faites cela avec chaque glyphe que vous voulez faire alterner, peut-être bien avec tous vos glyphes. Et si vous voulez, vous pourriez même aller jusqu'à .ss20. Pour garder les choses simples, je me limiterai ici à deux alternates par glyphe. Vos variations de A et B pourraient avoir l’air de ceci:

A et B sur la gauche sont les glyphes par défaut. Les deux jeux de variations qui les suivent sont les glyphes .ss01 et .ss02.

De toute évidence, nous avons besoin de substitutions contextuelles pour réaliser une réelle rotation entre les glyphes alternatifs. Nous ne pouvons sérieusement nous attendre à ce que l’utilisateur sélectionne manuellement chacune des lettres, et les remplace, une à la fois, par une variante sélectionnée dans la palette de glyphes.

Rotation contextuelle

Débutons par quelque chose de simple et faisons la rotation pour une seule lettre, le A. Cliquez sur l’onglet Fonctions de vos Informations de police (Cmd-I), ajoutez une fonction calt et tapez ce qui suit:

sub A A' by A.ss01;
sub A.ss01 A' by A.ss02;

Une fois terminé, cela devrait ressembler à ceci:

Appuyez maintenant sur le bouton Compiler en bas à gauche. Retournez ensuite à la fenêtre principale, ouvrez un nouvel onglet Édition (Cmd-T), activez la fonction calt (Contextual Alternates) du menu déroulant en bas à gauche et tapez votre A quelques fois. Ouaip, cela fonctionne:

Donc elle fait quoi au juste, cette fonction? La première ligne cherche deux glyphes A consécutifs. Si une telle paire est trouvée, le deuxième A sera remplacé par A.ss01. Maintenant, si nous tapons un troisième A, ce troisième A sera à nouveau un A par défaut, et le résultat serait une séquence de A.ss01 A. Ha, je vous ai bien eu, c’est ici que la deuxième ligne entre en jeu: elle trouve cette combinaison et remplace le A qui suit un A.ss01 par A.ss02. Cool.

Rotation à l’intérieur des classes de glyphes

Maintenant, ne serait-il pas génial de pouvoir non seulement faire une rotation entre des glyphes individuels, mais aussi pour des alphabets complets? Pas de soucis, cher ami, les classes de glyphes sont précisément conçues pour cela. Retournez à Fichier > Informations de police… > Fonctions, et pour chaque classe que vous voulez ajouter, cliquez sur le bouton plus en bas à gauche, sélectionnez Classe du menu qui apparaît…

…ensuite, remplacez xxxx par le nom de classe et ajoutez le code (noms de glyphes séparés d’une espace). Faites ensuite ce qui suit pour ces trois classes:

  • DEFAULT, dans laquelle vous écrirez, par exemple, A B C D E F, et ainsi de suite;
  • ALT1, dans celle-ci vous ferez la liste de tous les glyphes de votre police qui se terminent par .ss01: A.ss01 B.ss01 C.ss01, etc.
  • ALT2, vous y ferez la liste de tous les glyphes de votre police qui se terminent par .ss02: A.ss02 B.ss02 C.ss02, et ainsi de suite.

Nos classes ressemblent maintenant à ceci:

Bien entendu, vous pouvez ajouter autant de noms de glyphes que vous voulez, si ces glyphes se trouvent dans votre police et que vous gardez ces trois classes synchronisées. Autrement dit, les trois classes doivent contenir le même nombre de glyphes dans le même ordre, autrement votre A pourrait se transformer en B etc., ce que vous préférez sans doute éviter.

Nous pouvons maintenant modifier notre fonction calt de la façon suivante:

sub @DEFAULT @DEFAULT' by @ALT1;
sub @ALT1 @DEFAULT' by @ALT2;

Souvenez-vous, le signe arobase (@) dénote une classe de glyphes en code de fonction. Ce que nous faisons ici est exactement la même chose que précédemment, excepté qu’il s’agit maintenant de classes complètes au lieu d’un seul glyphe. Lorsque vous aurez terminé, votre onglet Fonctions devrait ressembler à ceci:

Appuyez sur le bouton Compiler et tadaaaam! c’est fait, mais assurons-nous toutefois que tout fonctionne. Dans l’onglet Édition, assurez-vous que la fonction calt est active et tapez ‘BABABA’ ou quelque chose d’autre avec les lettres qui se trouvent dans vos classes.

Bien joué, top là!

Deux cycles séparés pour un effet plus aléatoire

Est-ce tout? Bien sûr que non. Il nous reste un grave problème à régler. Nous avons un cycle de rotation qui s’effectue ainsi: 1-2-3-1-2-3-etc. pour absolument chacune des lettres. Okay, imaginez maintenant que nous voulons écrire le nom de notre groupe préféré de tous les temps:

Tout allait plutôt bien pour les trois premières lettres. Le premier A est du groupe DEFAULT, le premier B de ALT1 et le second B de ALT2. Ce qui suit est très décevant. Le deuxième A fait partie, à nouveau, de DEFAULT. Donc, alors que notre petite rotation fonctionne à merveille pour des lettres consécutives, nous faisons face à un problème avec deux lettres dont la distance équivaut à la longueur du cycle. Dans notre exemple, nous alternons entre trois versions d’une lettre, ce qui signifie que chaque troisième lettre proviendra de la même classe. Argh.

Par chance, nous avons deux cycles différents. Une différenciation logique est d’utiliser un cycle pour les consonnes et un autre pour les voyelles. Pour les échantillons de code qui suivent, je tiens pour acquis que normalement pas plus de deux voyelles se suivront directement l’une après l’autre et pas plus de trois consonnes. (En fait, il vous en faudra plus pour la plupart des langues, mais après avoir lu ce qui suit, vous devriez savoir comment faire pour ajuster les nombres à vos besoins.)

Arrangeons donc vos classes de consonnes de la façon suivante:

Con0: B C D
Con1: B.ss01 C.ss01 D.ss01
Con2: B.ss02 C.ss02 D.ss02

Voc0: A E I
Voc1: A.ss01 E.ss01 I.ss01
Voc2: A.ss02 E.ss02 I.ss02

Etc: space comma

Je le dis encore une fois, élargissez-les selon vos besoins. La classe Etc est pour une espace ainsi que toutes les lettres pour lesquelles vous étiez trop paresseux pour leur dessiner des alternates. Évidemment, vous pouvez séparer vos glyphes dans ces deux groupes de classes de n’importe quelle façon. Vous pouvez même placer un glyphe dans les deux (préférablement seulement de façon exceptionnelle). Et c’est vous qui décidez où vous voulez mettre ces choses comme les signes de ponctuation et les chiffres. Vous pourriez vouloir considérer que certaines lettres, comme y ou w, sont des consonnes dans certaines langues et des voyelles pour d’autres. De plus, pensez à inclure vos diacritiques.

C'est maintenant parti. Nous commencerons par les consonnes. Recréons ce que nous avions déjà:

# consonant-consonant
sub @Con0 @Con0' by @Con1;
sub @Con1 @Con0' by @Con2;

Rien de nouveau jusqu’à maintenant. À chaque fois que des consonnes se suivent l’une à la suite de l’autre, elles font une rotation entre les trois variantes. Et si elles étaient interrompues par une autre lettre?

Il nous faut ajouter le fragment qui suit. C’est le même que plus tôt, mais il tente de considérer une lettre qui fait ‘interruption’:

# consonant-other-consonant
sub @Con0 [@Voc0 @Voc1 @Voc2 @Etc] @Con0' by @Con1;
sub @Con1 [@Voc0 @Voc1 @Voc2 @Etc] @Con0' by @Con2;

Vous pouvez créer une classe de façon impromptue, c’est-à-dire que vous n’avez pas besoin de la définir d’abord. Dans ce cas-ci, nous prenons toutes les classes de voyelles et la classe et cætera pour n’en faire qu’une seule. Cela semble plutôt simple. Pour faire la même chose avec deux lettres qui font interruption, nous ajoutons:

# consonant-other-other-consonant
sub @Con0 [@Voc0 @Voc1 @Voc2 @Etc] [@Voc0 @Voc1 @Voc2 @Etc] @Con0' by @Con1;
sub @Con1 [@Voc0 @Voc1 @Voc2 @Etc] [@Voc0 @Voc1 @Voc2 @Etc] @Con0' by @Con2;

Okay, faisons maintenant la même chose avec des voyelles. J’irai à l’essentiel, voici le code des voyelles:

# vowel-vowel
sub @Voc0 @Voc0' by @Voc1;
sub @Voc1 @Voc0' by @Voc2;

# vowel-other-vowel
sub @Voc0 [@Con0 @Con1 @Con2 @Etc] @Voc0' by @Voc1;
sub @Voc1 [@Con0 @Con1 @Con2 @Etc] @Voc0' by @Voc2;

# vowel-other-other-vowel
sub @Voc0 [@Con0 @Con1 @Con2 @Etc] [@Con0 @Con1 @Con2 @Etc] @Voc0' by @Voc1;
sub @Voc1 [@Con0 @Con1 @Con2 @Etc] [@Con0 @Con1 @Con2 @Etc] @Voc0' by @Voc2;

# vowel-other-other-other-vowel
sub @Voc0 [@Con0 @Con1 @Con2 @Etc] [@Con0 @Con1 @Con2 @Etc] [@Con0 @Con1 @Con2 @Etc] @Voc0' by @Voc1;
sub @Voc1 [@Con0 @Con1 @Con2 @Etc] [@Con0 @Con1 @Con2 @Etc] [@Con0 @Con1 @Con2 @Etc] @Voc0' by @Voc2;

Comme vous pouvez le constater, j’ai ajouté une itération supplémentaire pour la séquence voyelle-autre-autre-autre-voyelle, pour la simple raison que, quelques paragraphes précédents, j’ai considéré un maximum de trois consonnes entre deux voyelles. À partir de ces exemples, vous devriez savoir comment étendre le modèle. Si vous avez besoin que votre règle de substitution couvre plus de lettres qui font interruption, il vous suffit d’ajouter plus de groupes avec plus de classes entre crochets. Si vous avez un alphabet alternate de plus, chaque groupe de règles aura une ligne supplémentaire avec la troisième classe respective.

Très bien, résumons le tout. Voici ce que nous avons jusqu’à maintenant:

# consonant-consonant
sub @Con0 @Con0' by @Con1;
sub @Con1 @Con0' by @Con2;

# consonant-other-consonant
sub @Con0 [@Voc0 @Voc1 @Voc2 @Etc] @Con0' by @Con1;
sub @Con1 [@Voc0 @Voc1 @Voc2 @Etc] @Con0' by @Con2;

# consonant-other-other-consonant
sub @Con0 [@Voc0 @Voc1 @Voc2 @Etc] [@Voc0 @Voc1 @Voc2 @Etc] @Con0' by @Con1;
sub @Con1 [@Voc0 @Voc1 @Voc2 @Etc] [@Voc0 @Voc1 @Voc2 @Etc] @Con0' by @Con2;

# vowel-vowel
sub @Voc0 @Voc0' by @Voc1;
sub @Voc1 @Voc0' by @Voc2;

# vowel-other-vowel
sub @Voc0 [@Con0 @Con1 @Con2 @Etc] @Voc0' by @Voc1;
sub @Voc1 [@Con0 @Con1 @Con2 @Etc] @Voc0' by @Voc2;

# vowel-other-other-vowel
sub @Voc0 [@Con0 @Con1 @Con2 @Etc] [@Con0 @Con1 @Con2 @Etc] @Voc0' by @Voc1;
sub @Voc1 [@Con0 @Con1 @Con2 @Etc] [@Con0 @Con1 @Con2 @Etc] @Voc0' by @Voc2;

# vowel-other-other-other-vowel
sub @Voc0 [@Con0 @Con1 @Con2 @Etc] [@Con0 @Con1 @Con2 @Etc] [@Con0 @Con1 @Con2 @Etc] @Voc0' by @Voc1;
sub @Voc1 [@Con0 @Con1 @Con2 @Etc] [@Con0 @Con1 @Con2 @Etc] [@Con0 @Con1 @Con2 @Etc] @Voc0' by @Voc2;

Faisons un autre essai. Appuyez sur Compiler, allez ensuite à un onglet Édition, activez la fonction calt, et c’est parti:

Super! Voyez comment le second A est différent du premier? Ça donne envie de chanter, ‘You are the dancing queen, young and sweet, only seventeen!’ Je vous remercie de votre attention, et chers Agnetha, Björn, Benny et Anni-Frid, merci pour la musique.

Et maintenant, si vous êtes un vrai geek, vous allez trouver comment obtenir trois cycles séparés. Mais je vous laisse le faire par vous-même. C’est tout pour cette partie. Bonnes rotations!


2016-02-16: Mise à jour des classes de glyphes pour une meilleure compréhension (remerciements Stephen Nixon!)
2018-03-03: Ajout du rappel pour savoir comment ajouter les classes OT.

Traduction française de Nathalie Dumont.