次の方法で共有


双方向文字列でのキャレットの表示

一方向のテキストでは、キャレット位置は、文字の前の端が前の文字の末尾の端と同じ位置にあるため、あいまいさはありません。 ただし、双方向テキストでは、反対方向の実行間のキャレット位置があいまいです。 たとえば、左から右の段落 "hellosalaam" では、"hello" の最後の文字が "salaam" の最初の文字の直前に置かれます。 キャレットを表示する最適な位置は、"hello" の "o" に従うか、"サラーム" の "s" の前にあると見なされるかによって異なります。

Uniscribe では、次の表に示すキャレット配置規則を使用します。

状況 ビジュアル キャレットの配置
Typing (入力) 最後に入力された文字の末尾の端。
貼り付け 貼り付けた最後の文字の末尾の端。
キャレットの進行 最後に渡された文字の末尾の端。
キャレットの廃止 最後に渡された文字の先頭の端。
ホーム 行の先頭の端。
End 行の末尾の端。

 

キャレットは、次の例に示すように配置できます。

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

次に示すように、 fAdvancing 値が TRUE または FALSE に制限されている場合、キャレットの位置を簡単にすることができます。

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

ScriptCPtoX は 、範囲外の位置を論理的に処理します。 iCharPos0 の実行の先頭端と、iCharPos><= length の実行の末尾の端を返します。 詳細については、「キャレット配置とヒット テストの管理」を参照してください。

Uniscribe の使用