Anzeigen des Caret in bidirektionalen Zeichenfolgen

Im unidirektionalen Text hat die Caret-Position keine Mehrdeutigkeit, da sich die Kante eines Zeichens an der gleichen Stelle wie die nachfolgende Kante des vorherigen Zeichens befindet. Im bidirektionalen Text ist die Caretposition zwischen Läufen entgegengesetzter Richtung jedoch mehrdeutig. Im absatz "hellosalaam" von links nach rechts steht beispielsweise der letzte Buchstabe von "hello" unmittelbar vor dem ersten Buchstaben von "salaam". Die beste Position, in der das Caret angezeigt werden soll, hängt davon ab, ob es als "o" von "hello" oder vor dem "s" von "salaam" betrachtet wird.

Uniscribe verwendet die in der nächsten Tabelle gezeigten Caretpositionierungskonventionen.

Situation Visuelle Pflegeplatzierung
Eingabe Nachgestellter Rand des letzten eingegebenen Zeichens.
Einfügen Nachgestellter Rand des letzten Zeichens.
Caret schreitet voran Nachgestellter Rand des letzten Übergebenen Zeichens.
Caret geht in Den Ruhestand Führende Kante des letzten Übergebenen Zeichens.
Startseite Führende Kante der Linie.
Ende Nachgestellter Zeilenrand.

 

Das Caret kann wie im folgenden Beispiel gezeigt positioniert werden:

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

Die Positionierung des Carets kann einfacher sein, wie unten gezeigt, wenn ein fAdvancing-Wert auf TRUE oder FALSE beschränkt ist:

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

ScriptCPtoX verarbeitet Positionen außerhalb des Bereichs logisch. Es gibt die führende Kante der Ausführung für iCharPos<0 und den nachfolgenden Rand der Ausführung für iCharPos>= length zurück. Weitere Informationen finden Sie unter Verwalten von Caret-Platzierung und Treffertests.

Verwenden von Uniscribe