在雙向字串中顯示插入號
在單向文字中,插入點的位置不存在歧義,因為字元的開頭邊緣與前一個字元的尾端邊緣處於同一個位置。 不過,在雙向文字中,相反方向的文本段落之間的游標位置是模棱兩可的。 例如,在由左至右段落 「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 僅限於 TRUE 或 FALSE值。
ScriptCPtoX(
iCharPos - fAdvancing, fAdvancing,
cChars, cGlyphs, &wLogClust, &sva, &iAdvance, &sa, &iCaretX
);
ScriptCPtoX 合理地處理超出範圍的位置。 它會傳回 iCharPos<0 的前端邊緣,以及 iCharPos 的後端邊緣,其中>等於長度。 如需詳細資訊,請參閱 管理插入點位置和命中測試
相關主題