Share via


Gestion de l’insertion et des tests d’accès

Les langages de script complexes sont divisés en clusters par ScriptShape. La réorganisation des caractères se produit toujours dans les limites du cluster. Les clusters eux-mêmes sont assurés d’avancer dans le sens de l’ordre de lecture.

Les informations de cluster dans le tableau de cluster logique sont utilisées pour partager la largeur d’un cluster de glyphes de façon égale entre les caractères logiques qu’ils représentent. Par exemple, le glyphe lam alef est divisé en quatre zones :

  • La moitié d’avant du lam.
  • La moitié de fin du lam.
  • La moitié de tête de l’alef.
  • La moitié de fin de l’alef.

Les conventions pour le placement de l’attention au sein des clusters dépendent du script. Pour l’écriture arabe, si la position d’insertion est définie entre un caractère de base et sa marque de combinaison, le signe s’affiche à mi-chemin du caractère de base. Pour le script thaï, l’insertion ne peut pas être positionnée dans un cluster. Ainsi, lorsque l’utilisateur avance l’insertion, l’application doit avancer au-delà de tous les glyphes qui composent le cluster.

Les fonctions ScriptXtoCP et ScriptCPtoX se traduisent entre les positions d’insertion (en décalages de point de code) et les positions x (en pixels). La fonction ScriptXtoCP connaît les conventions de position d’insertion de chaque script :

  • Pour l’indien et le thaïlandais, les positions d’insertion sont alignées sur les limites du cluster.
  • Pour l’arabe, les positions de caresses sont interpolées avec des clusters.
  • Pour l’hébreu, dans les versions antérieures à Usp10.dll, version 1.420, les positions d’insertion sont interpolées avec des clusters. À compter de Usp10.dll, version 1.420, les positions d’insertion sont ancrées aux limites du cluster.

ScriptXtoCP et ScriptCPtoX fonctionnent uniquement dans les exécutions. Les fonctions nécessitent que certains paramètres proviennent d’appels Uniscribe antérieurs, comme indiqué dans le tableau suivant.

Paramètre Source
Psa Comme retourné par ScriptItemize.
cGlyphspwLogClust
psva
Comme retourné par ScriptShape.
piAdvance Comme retourné par ScriptPlace.

 

L’application doit établir l’exécution dans laquelle un décalage d’insertion ou une position x donné est avant de transmettre les informations à ScriptCPtoX ou ScriptXtoCP. Si l’application n’enregistre pas les informations de largeur, elle peut effectuer des tests d’accès et un placement de caresses après avoir affiché chaque exécution. En guise d’alternative, l’application peut mettre en cache suffisamment d’informations pour effectuer des tests d’accès et un placement de caresses sur la ligne active sans nécessiter le retraitement du paragraphe.

ScriptXtoCP retourne une valeur d’arête de fin afin que l’application connaisse le côté du caractère ou du cluster sur lequel l’utilisateur a cliqué. La valeur est 0 ou la largeur du caractère ou du cluster en points de code. La position du caractère retourné est la position du caractère sur lequel l’utilisateur a cliqué. Pour plus d’informations, consultez Affichage de l’insertion dans des chaînes bidirectionnelles.

Pour les langues telles que le thaï, pour lesquels l’utilisateur ne souhaite pas placer le signe d’insertion dans un cluster, ScriptXtoCP définit l’indicateur latéral de fin sur 0 ou sur la largeur du cluster. Pour les langues telles que l’arabe, pour lesquelles l’utilisateur s’attend à pouvoir modifier au sein d’un cluster, ScriptXtoCP définit l’indicateur latéral de fin sur 0 ou sur 1.

Pour aider l’application à établir des emplacements valides pour l’insertion lors de la gestion des touches de direction, Uniscribe fournit des informations sur les positions d’insertion valides dans le membre fCharStop dans les attributs logiques retournés par ScriptBreak. TRUE est retourné pour la plupart des caractères et FALSE pour les caractères intercluster dans les scripts tels que thaï. L’application doit case activée la valeur fNeedsCaretInfo dans la structure de SCRIPT_PROPERTIES d’un élément pour voir s’il est nécessaire d’appeler ScriptBreak pour case activée pour des positions d’insertion valides. Si la valeur fNeedsCaretInfo est FALSE, tous les points de code sont des positions d’insertion valides.

Utilisation de Uniscribe