共用方式為


在雙向字串中顯示插入號

在單向文字中,插入點的位置不存在歧義,因為字元的開頭邊緣與前一個字元的尾端邊緣處於同一個位置。 不過,在雙向文字中,相反方向的文本段落之間的游標位置是模棱兩可的。 例如,在由左至右段落 「hellosalaam」 中,「hello」 的最後一個字母緊接在 「salaam」 的第一個字母之前。 插入符號最佳顯示位置取決於考慮是跟隨 'hello' 的 'o' 之後,或位於 'salaam' 的 '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
        );
}

插入號的位置可能更簡單,如下所示,前提是 的 fAdvancing 僅限於 TRUEFALSE值。

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

ScriptCPtoX 合理地處理超出範圍的位置。 它會傳回 iCharPos<0 的前端邊緣,以及 iCharPos 的後端邊緣,其中>等於長度。 如需詳細資訊,請參閱 管理插入點位置和命中測試

使用 Uniscribe