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
Rubriques connexes