1

我似乎無法在文檔中找到任何關於此的信息,一直使用的函數是FT_Get_Char_Index(ftFace,i);;並且它只需要一個unicode代碼點。但是如何組合角色,需要多個代碼點的角色呢?如何在freetype中渲染組合的unicode字符?

我知道這些字符中的一些可以簡單地通過unicode標準化以表示爲另一個(單個)代碼點,但是有些字符不能,對嗎?我們如何處理這些?

我正在製作一個通用的文本編輯軟件,並希望它支持所有的unicode。但也許這個多碼點字符的問題很小,以至於不值得麻煩?這些字符在一些主要的亞洲語言中是不是很常見?

如果使用freetype無法正確完成,應該怎麼做?

回答

2

如果我理解正確,在沒有額外使用某種佈局庫的情況下,您將無法做到自己想做的事。佈局庫使用OpenType字體中的補充信息來定位組合標記(以及許多其他內容)。例如,假設您有序列U + 0041,U + 0301(拉丁文大寫A,合併急性標記)。一般來說,你不能僅僅將這兩者與它們在渲染空間內的默認定位一起拍打,因爲急性標記將與'A'的形狀相沖突。

佈局庫將分析該序列的字體的OpenType佈局表,並返回可用於正確定位序列中每個項目的位置信息。例如,你可以給它順序,它可能會說:「把'A'放在原來的位置;將右邊的50個單位向右移90個單位」(它比這個複雜得多,但希望能給出你的想法)。