• Aucun résultat trouvé

Cette section termine de présenter les possibilités de description offertes par le modèle. Elle couvre les alias, les macros et les boucles.

4.5.1 Alias d’objet

Nous avons vu que divers objets pouvaient être construits comme des points ou des vecteurs pour aligner un segment ou en positionner un point lié. Ensuite, nous avons précisé que des objets (pour l’instant du squelette) pouvaient comporter des dépendances entre eux. Notamment, deux objets peuvent dépendre d’un troisième objet. Ce qu’il nous manque encore est la possibilité de matérialiser la construction d’un objet comme un signeur l’aurait à l’esprit à la signation.

Par exemple, l’axe de symétrie de l’immeuble, porté par le vecteur [elev] défini en 4.4.2 semble suffisamment présent pour être matérialisé et non construit à la volée à chaque fois qu’il sera nécessaire. De plus, la construction répétitive d’un même objet (en en répétant la formule) montre au mieux l’égalité des valeurs et des dépendances mais pas la réutilisation de l’objet en tant que telle. En créant un alias pour un objet, on peut faire apparaître les double-références [3.3.7.2].

Un alias est un identificateur auquel on affecte un objet que l’on définit. Voici le schéma d’une définition d’alias, dont la syntaxe ressemble à celle d’une influence contextuelle :

nom := expression

Par exemple pour l’axe de symétrie dans [immeuble] et en reprenant les dépendances contextuelles données plus haut, on définirait :

axe := Line // [elev] thru [loc]

où le point [loc] serait lui-même une influence contextuelle désignant l’emplacement du bâtiment référent dans l’espace de signation.

Ensuite, à l’interprétation de la description, n’importe quelle utilisation de nom dans une ex-pression est évaluée comme exex-pression. Par conséquent, si exex-pression ne dépend que d’objets fixes dans le temps, nom peut être considéré lui-même comme un objet fixe, et réciproquement. Consi-dérons la définition suivante d’un alias mil_mains pour le milieu du segment dont les extrémités coïncident avec les points d’articulation au poignets :

mil_mains := MID [ORIG !palm(l), ORIG !palm(r)]

Cette définition dépend de deux points non fixes. Toute référence à mil_mains sera évaluée à l’instant de cette référence et ne peut être connu a priori. En revanche, la définition de axe ci-dessus dépend de deux objets fixes. En effet, si [elev] et [loc] sont bien des influences contextuelles donc des objets dont les valeurs ne sont pas certaines a priori, ils n’en sont pas moins des objets fixes dans le temps que couvre la description.

4.5.2 Macro-contraintes

Une macro-contrainte (ou macro) est une contrainte symbolique d’un ensemble de contraintes primitives correspondant à une unique motivation, pensée globalement. Lorsqu’un tel ensemble de primitives de spécification est représentatif d’un comportement motivé, on peut définir une macro-contrainte équivalente, à la signation, à la conjonction des contraintes qui décrivent cette motivation. Un nom de macro débute par le caractère « # » et se définit comme suit (voir aussi l’annexe D.1.2.1), hors de toute description gestuelle :

Macro nom { contrainte contrainte

... }

Par exemple, on peut définir une macro-contrainte pour orienter tous les doigts d’une main dans le plan de la paume comme dans [table], [quoi ?], etc. Sans spécifier de serrement ou d’écartement des doigts ni même aucune orientation directrice pour ceux-ci, ni orienter la main dans l’espace, on peut orienter tous les doigts d’une main dans le même plan que la paume en alignant leurs vecteurs normaux avec celui du segment de la main qui les contrôle.

[table] [quoi ?]

Fig. 4.22 – Utilisation de la macro #main_plane sur les deux mains

On écrit :

Macro #main_plane(Side $h) {

Orient NRM !index($h,1) along NRM !palm($h) Orient NRM !index($h,2) along NRM !palm($h) Orient NRM !index($h,3) along NRM !palm($h) Orient NRM !middle($h,1) along NRM !palm($h)

... }

Cette macro est paramétrée par un côté (une valeur parmi s, w, l, r) comme c’est le cas des sites corporels @PA par exemple. Ce paramètre étant formel, on emploie un nom de variable, c’est-à-dire commençant par un « $ ».

Nous insistons pour que les macros représentent des motivations de signation. Il ne s’agit pas de définir une macro à usage unique pour seulement alléger une description ni de factoriser des groupes de contraintes présents dans plusieurs descriptions s’ils ne correspondent pas à des motivations ressenties comme groupées. Par exemple, une contrainte d’orientation directrice sur la tête et une autre sur l’index ne sauraient constituer une macro-contrainte même si elles sont souvent utilisées conjointement. L’utilisation d’une macro n’est pas une simple réécriture équivalente. Leur liste peut en revanche dépendre des langues des signes, et de même que celle des sites corporels, celle des macros n’est pas supposée identique d’une langue à l’autre.

Une fois définie, une macro peut être utilisée en lieu et place des primitives articulatoires, c’est-à-dire dans les spécifications des unités temporelles de description, voire dans de nouvelles définitions de macros. Et, comme toute primitive spécifiant une unité temporelle, une macro-contrainte sera donnée dans un des modes here ou keep. Pour utiliser la macro-contrainte définie ci-dessus sur la main droite, on écrit tout simplement :

#main_plane(r)

4.5.3 Boucles

La définition de #main_plane ci-dessus s’est montrée fastidieuse car elle répète une même contrainte sur différents segments. Cela montre l’intérêt d’apporter à l’écriture des descriptions une forme d’automatisation des répétitions, ce qui est possible avec les boucles For qui rappellent leurs homologues de nombreux langages de programmation. Elles s’écrivent :

For variable = valeur1, valeur2, ... primitive

primitive ... End

où variable représente un objet sur lequel seront distribués les éléments valeuri à son utilisation dans les primitives de la boucle. On peut alors raccourcir les trois lignes nécessaires à chaque doigt en une boucle distribuant la contrainte sur les phalanges. Les trois premières lignes de la macro #main_plane deviennent :

For $phal = 1, 2, 3

Orient NRM !index($h,$phal) along NRM !palm($h) End

Ceci achève la présentation du modèle. Nous avons vu ses propriétés spatio-temporelles, ses outils de spécification et son articulation avec les différents aspects linguistiques importants. Nous en proposons maintenant un exemple complet et commenté.