2016-02-21 24 views
1

我們知道代碼點65代表A。有一對一的映射,因此很容易渲染。從字體文件中取出符號A並進行渲染。Unicode代碼點到字體符號映射?

65 == A 

現在讓我們考慮印地文的語言。代碼點0x0924代表,同樣易於映射。

0x0924 == त 

但是,如果碼點0x0924之後緊接着代碼點0x094d0x0930分別表示,該表示是不是這些3的組合中,而且新的符號त्र

0x0924 0x094d 0x0930 != त ् र 

0x0924 0x094d 0x0930 == त्र 

我的問題是。

  1. 哪個程序負責指示分組代碼點將創建新的符號,但不是符號的連接。
  2. 同時打字,做同樣的程序監控和輸入動態地改變時,新的代碼點被追加由於打字
  3. 如何對這樣的規則創建的字體已經呈現象徵?

回答

4

歡迎使用現代字體:他們不是你的想法。 「一個代碼點映射到一個字母」的時代是20年前的時代,現代字體在過去的幾十年中一直在做的不僅僅是這些。我將根據OpenType字體(大多數人稱之爲「ttf」和「otf」字體)來解釋這個問題,因爲這是您最有可能使用的類型,在這種情況下:字體非常控制的一切,而您所依賴的文本引擎僅僅是遵循其指示。

OpenType字體有一個"Character Map",它提供(所有)從輸入字節代碼到可用字形列表某處的某個字形(「形狀」)的簡單一對一映射。

而且它們可以有多個映射,因爲ASCII中的代碼與某些Windows代碼頁,Mac語言/編碼對或Unicode(僅涵蓋前127個字符的ASCII代碼)中的代碼不同,以及即使不是也相當於)。

但是,將二進制代碼映射到其他二進制代碼非常簡單。現代字體的真正力量,特別是OpenType,是接下來發生的事情。

  1. OpenType字體具有完全結紮控制,所以只是因爲碼X產量字形GX和碼Y字形產生GY,絕不意味着X + Y將產生GX + GY。有很多不同種類的連字可能(一對一,多對一,上下文,基於位置等),並且它們全都受GSUB表格控制(「GSUB」代表「G 「lyph」SUB「)。當你輸入多個印地文格式並且它們形成一個單一的「字母」時,這就是GSUB所做的。例如,如果我輸入「f」+「i」,則很有可能在設計良好的字體中看到單個連字符fi。同樣,如果您正在編寫阿拉伯文,其中字母具有不同的形狀,具體取決於它們在某個單詞中的位置,這也是由GSUB涵蓋的。 GSUB表格可以包含數百個不同的規則集,以確保所有語言都能正確呈現。
  2. 是的,但它不像字體那樣「程序」。現代的字體有點像遊戲ROM,因爲你需要一個引擎來執行它們,但是它們會調用所有的鏡頭幷包含所有的邏輯。文本渲染引擎只是「嘿字體,我有這個字節序列作爲輸入,請告訴我如何將它轉換成輪廓向量」,字體包含所有需要發生的信息。
  3. 「使用字體軟件」。這是一個明顯的答案:良好的字體是用軟件製作的,可以讓你做所有你需要做的事情,以便你的語言支持能夠工作。 FontForgeFontStudio,FontCreator等等,以及用於優化字體所需的所有OpenType功能的額外工具(其中有令人難以置信的許多)。

取得良好的字體,甚至只是他們的編程(所以沒有采取字體設計考慮的話)是一個相當專業的工作。

+0

假設我只想編輯現有的TTF文件,更改字形的GSUB映射代碼點或字符映射。哪個工具更好? –

+1

第一個錯誤是假設是「正義」,第二個錯誤是GSUB是規則不是關於映射代碼點。第三個是你絕對不需要改變字形的charmap。忽略所有這些都是瘋狂的,任何鏈接的工具都有自己的方式讓你編輯OpenType特性,並且他們都有自己的做法,都是平等的「你需要學習如何做到這一點」。所以,請選擇,祝你好運。 –

相關問題