Verwalten der Platzierung von Caretzeichen und Treffer Tests

Komplexe Skriptsprachen werden von scriptshapein Cluster unterteilt. Die Neuanordnen von Zeichen erfolgt immer innerhalb von Cluster Grenzen. Es ist garantiert, dass die Cluster selbst in der Richtung der Lesefolge fortgeführt werden.

Cluster Informationen im Array logischer Cluster werden verwendet, um die Breite eines Clusters von Symbolen gleichmäßig auf die logischen Zeichen zu verteilen, die Sie darstellen. Beispielsweise ist das Symbol "Lam Alef" in vier Bereiche unterteilt:

  • Die führende Hälfte der Lam.
  • Die nachfolgende Hälfte des Lam.
  • Die führende Hälfte von Alef.
  • Die nachfolgende Hälfte der Alef.

Konventionen für die Platzierung von Caretzeichen innerhalb von Clustern sind vom Skript abhängig. Wenn für das Arabische Skript die Position der Einfügemarke zwischen einem Basiszeichen und der zugehörigen Markierung festgelegt ist, wird die Einfügemarke in der Mitte des Basis Zeichens angezeigt. Für das thailändische Skript kann die Einfügemarke nicht innerhalb eines Clusters positioniert werden. Wenn der Benutzer also die Einfügemarke verschiebt, muss sich die Anwendung hinter allen Symbolen befinden, aus denen der Cluster besteht.

Die Funktionen scriptxycp und scriptcptox übersetzen zwischen Caretzeichen (in Code Punkt Offsets) und x-Positionen (in Pixel). Die scriptxtoicp -Funktion kennt die Positions Konventionen der Einfügemarke der einzelnen Skripts:

  • Für indische und Thai werden Einfügepositionen an Cluster Grenzen ausgerichtet.
  • Bei Arabisch werden Caretzeichen mit Clustern interpoliert.
  • Bei Hebräisch werden in Versionen vor Usp10.dll, Version 1,420, Einfügepositionen mit Clustern interpoliert. Beginnend mit Usp10.dll, Version 1,420, werden Einfügepositionen an Cluster Grenzen ausgerichtet.

Scriptxtcp und scriptcptox funktionieren nur innerhalb von Ausführungen. Die Funktionen erfordern, dass bestimmte Parameter aus früheren uniscrietaufrufen stammen, wie in der folgenden Tabelle dargestellt.

Parameter Source
PSA Wie von scriptitemizezurückgegeben.
cglyphspwlogclust
psva
Wie von scriptshapezurückgegeben.
piadvance Wie von scriptplacezurückgegeben.

Die Anwendung muss den Testlauf einrichten, in dem eine bestimmte Einfügemarke oder x-Position vor dem übergeben der Informationen an scriptcptox oder scriptxtocpliegt. Wenn die Anwendung die breiten Informationen nicht speichert, kann Sie nach dem Anzeigen der einzelnen Testlauf die Treffer Tests und die Platzierung der Einfügemarke durchführen. Als Alternative kann die Anwendung genug Informationen zwischenspeichern, um Treffer Tests und einfügeplatzierung in der aktuellen Zeile zu erreichen, ohne dass der Absatz verarbeitet werden muss.

Scriptxescp gibt einen nachfolgenden Edge-Wert zurück, sodass die Anwendung die Seite des Zeichens oder Clusters kennt, auf die der Benutzer geklickt hat. Der Wert ist entweder 0 oder die Breite des Zeichens oder Clusters in Code Punkten. Die zurückgegebene Zeichenposition ist die Position des Zeichens, auf das der Benutzer geklickt hat. Weitere Informationen finden Sie unter Anzeigen der Einfügemarke in bidirektionalenZeichen folgen.

Für Sprachen wie z. b. Thai, bei denen der Benutzer die Einfügemarke nicht in einem Cluster platzieren will, legt scriptxdecp das Flag der nachfolgenden Seite auf 0 oder die Cluster Breite fest. Für Sprachen, wie z. b. Arabisch, für die der Benutzer die Bearbeitung innerhalb eines Clusters erwartet, legt scriptxescp das Flag für die nachfolgende Seite auf 0 oder auf 1 fest.

Damit die Anwendung bei der Verarbeitung der Pfeiltasten gültige Speicherorte für die Einfügemarke festlegt, stellt uniscriinformationen zu gültigen Einfügepositionen im fcharstoppmember in den von scriptbreakzurückgegebenen logischen Attributen bereit. " True " wird für die meisten Zeichen und " false " für Austausch Zeichen in Skripts wie "Thai" zurückgegeben. Die Anwendung sollte den fneedscaretinfo -Wert in der Skript _ Eigenschaften Struktur für ein Element überprüfen, um festzustellen, ob es erforderlich ist, scriptbreak aufzurufen, um nach gültigen Einfügepositionen zu suchen. Wenn der fneedscaretinfo -Wert " false" lautet, sind alle Code Punkte gültige Einfügemarke.

Verwenden von uniscri