管理插入號放置和點擊測試

複雜字集語言會依ScriptShape細分成叢集。 字元重新排序一律發生在叢集界限內。 叢集本身保證會以讀取順序的方向前進。

邏輯叢集陣列中的叢集資訊是用來在所代表邏輯字元之間共用字元叢集的寬度。 例如,lam alef 圖像分成四個區域:

  • lam 的前置半部。
  • lam 尾端的一半。
  • alef 的前置半部。
  • alef 的尾端一半。

叢集中插入號放置的慣例取決於腳本。 針對阿拉伯文腳本,如果插入號位置是在基底字元與其結合標記之間設定,插入號就會顯示在基底字元的一半。 對於泰文腳本,插入號不能放在叢集中。 因此,當使用者前進插入號時,應用程式必須前進到組成叢集的所有圖像。

ScriptXtoCPScriptCPtoX函式會在程式碼點位移 () 和 x 位置之間轉譯 (圖元) 。 ScriptXtoCP函式瞭解每個腳本的插入號位置慣例:

  • 對於印度和泰文,插入號位置會貼齊到叢集界限。
  • 針對阿拉伯文,插入號位置會以叢集插補。
  • 針對希伯來文,在 Usp10.dll 1.420 版之前的版本中,插入號位置會與叢集一起插入。 從Usp10.dll 1.420 版開始,插入號位置會貼齊到叢集界限。

ScriptXtoCPScriptCPtoX只會在執行中運作。 函式要求某些參數來自先前的 Uniscribe 呼叫,如下表所示。

參數 來源
Psa ScriptItemize所傳回。
cGlyphspwLogClust
psva
ScriptShape所傳回。
piAdvance ScriptPlace傳回。

 

應用程式必須建立執行,其中指定的插入號位移或 x 位置是在將資訊傳遞至 ScriptCPtoXScriptXtoCP之前。 如果應用程式未儲存寬度資訊,則會在顯示每個回合之後執行點擊測試及插入號放置。 或者,應用程式可以快取足夠的資訊,以在目前的行上執行點擊測試和插入號放置,而不需要重新處理段落。

ScriptXtoCP 會傳回尾端邊緣值,讓應用程式知道使用者按一下的字元或叢集端。 值為 0 或字元或叢集的寬度,以字碼點為單位。 傳回的字元位置是使用者按一下的字元位置。 如需詳細資訊,請參閱 在雙向字串中顯示插入號

對於泰文等語言,使用者通常不想將插入號放在叢集中, ScriptXtoCP 會將尾端旗標設定為 0 或叢集寬度。 對於阿拉伯文之類的語言,使用者預期能夠在叢集中編輯, ScriptXtoCP 會將尾端旗標設定為 0 或 1。

為了協助應用程式在處理方向鍵時建立插入號的有效位置,Uniscribe 會提供ScriptBreak所傳回之邏輯屬性中 fCharStop成員中有效插入號位置的資訊。 泰文之類的腳本中,大部分字元都會傳回 TRUE 和 FALSE 。 應用程式應該檢查SCRIPT_PROPERTIES結構中的fNeedsCaretInfo值,以查看是否需要呼叫ScriptBreak來檢查是否有有效的插入號位置。 如果 fNeedsCaretInfo 值為 FALSE,則所有代碼點都是有效的插入號位置。

使用 Uniscribe