2017-04-14 79 views
2

你會發現下面的文字下方部分版本號MS OpenType font file specification過期實現如何優雅地處理新版本的OpenType字體?

實現讀表必須包括代碼來檢查版本號 所以,如果當格式,因此該版本 數字的變化,舊的實現將優雅地處理新版本 。

假設人們已經編寫了一個代碼來讀取版本爲1及以後的OpenType字體文件,該代碼用於處理相同的字體文件,但版本爲2.我無法想象如何可以「優雅地」成功,除非上述聲明意味着在處理它之前必須將代碼更新爲最終版本的字體文件。

+0

爲了保持stackoverflow實際上對未來的訪問者有用,你能接受答案還是留下評論,說明它沒有解決你的問題? –

回答

3

你錯在「優雅」爲「仍然解析字體文件」。規範的思想是存在版本號,以便每個解析器明確地檢查版本號,繼續解析它知道如何解析的版本,並且在不知道如何處理的版本上正確報告並確定性地行爲。

優美:

  • 開始讀表
  • 讀版本號爲表結構
  • 檢查版本號
  • 分支解析函數已知的版本號
  • 報告不能繼續解析爲未知的版本號
  • 取消解析運行在確定性,記錄的方式
  • 應用程序,使用的解析器現在可以優雅地用「無法加載請求的字體」的局面,他們在處理

並不擅長:

  • 開始讀表
  • 字節讀入解析器寫入時反映最新OpenType表格格式的結構。
  • 由於版本不匹配而導致數據損壞,可能會導致硬件崩潰,然後由於訪問超出表的分配範圍的內存。
  • 可能成爲數據損壞和/或崩潰因爲偏移量是錯誤的
  • 可能崩潰使用的解析器因爲損壞的數據返回,或者解析器崩潰是夠硬殺過程中的應用
  • 可能...等等

有零期望解析器將能夠解析新的OpenType表的格式,但它絕對應該交易他們以優雅的方式,檢查版本是否匹配,它知道如何工作並且報告沒有能力解析沒有解析規則的數據,並且有一個乾淨的退出,允許消費應用程序執行他們需要做的事情。