Partager via


Affichage du caret dans des chaînes bidirectionnelles

Dans le texte unidirectionnel, la position de caresse n’a pas d’ambiguïté, car le bord d’entrée d’un caractère se trouve au même endroit que le bord de fin du caractère précédent. Toutefois, dans le texte bidirectionnel, la position du caret entre les séries de direction opposée est ambiguë. Par exemple, dans le paragraphe de gauche à droite « hellosalaam », la dernière lettre de « hello » précède immédiatement la première lettre de « salaam ». La meilleure position dans laquelle afficher le caret dépend de si l’on considère qu’il suit le « o » de « hello » ou pour précéder le « s » de « salaam ».

Uniscribe utilise les conventions de positionnement de caret indiquées dans le tableau suivant.

Situation Placement de caresses visuelles
Saisie Bord de fin du dernier caractère tapé.
Coller Bord de fin du dernier caractère collé.
Caret progressant Bord de fin du dernier caractère passé.
Mise à la retraite des soins Bord d’avant du dernier caractère passé.
Accueil Bord d’avant de la ligne.
End Bord de fin de ligne.

 

Le caret peut être positionné comme indiqué dans l’exemple suivant :

if (fAdvancing) {
    ScriptCPtoX(
        iCharPos - 1, TRUE, 
        cChars, cGlyphs, &wLogClust, &sva, &iAdvance, &sa, &iCaretX
        );
} else {
    ScriptCPtoX(
        iCharPos, FALSE, 
        cChars, cGlyphs, &wLogClust, &sva, &iAdvance, &sa, &iCaretX
        );
}

Le positionnement du caret peut être plus simple, comme indiqué ci-dessous, étant donné une valeur fAdvancing limitée à TRUE ou FALSE :

ScriptCPtoX(
    iCharPos - fAdvancing, fAdvancing, 
    cChars, cGlyphs, &wLogClust, &sva, &iAdvance, &sa, &iCaretX
    );

ScriptCPtoX gère logiquement les positions hors plage. Il retourne le bord d’avant de l’exécution pour iCharPos<0 et le bord de fin de l’exécution pour iCharPos>= longueur. Pour plus d’informations, consultez Gestion du placement et des tests d’accès au caret

Utilisation d’Uniscribe