在雙向字串中顯示插入號

在單向文字中,插入號位置沒有模棱兩可,因為字元的前置邊緣與上一個字元的尾端邊緣相同。 不過,在雙向文字中,相反方向執行之間的插入號位置模棱兩可。 例如,在由左至右段落 「hellosalaam」 中,「hello」 的最後一個字母緊接在 「salaam」 的第一個字母前面。 顯示插入號的最佳位置取決於是否考慮遵循 「hello」 的 「o」 或 「s」 的 「s」 前面。

Uniscribe 會使用下一個表格中顯示的插入號定位慣例。

情況 視覺插入號放置
輸入 最後一個字元類型的尾端邊緣。
粘貼 貼上最後一個字元的尾端邊緣。
插入號前進 最後一個字元的尾端邊緣已傳遞。
插入號淘汰 最後一個字元的前置邊緣已傳遞。
首頁 線條的前置邊緣。
結束 線條的尾端邊緣。

 

插入號可以定位,如下列範例所示:

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

插入號的位置可能更簡單,如下所示,假設限制為TRUEFALSEfAdvancing值:

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

ScriptCPtoX 會以邏輯方式處理超出範圍的位置。 它會傳回iCharPos0 回合的前置邊緣,以及iCharPos>< = 長度的執行尾端邊緣。 如需詳細資訊,請參閱 管理插入號放置和點擊測試

使用 Uniscribe