2007年6月11日星期一

Xorz/Embedded的動態組字實做

之前的文章「Xorz/Embedded作為Phone UI」與「組字技術與手持式裝置的新機會」提到輕量級視窗圖形系統的實做進度,同時也思考組字技術帶來的新契機,無論是技術與實務規劃面來說,都還有很大的商議空間,但筆者認為這是必要的基礎建設。利用週末,終於在Xorz/Embedded實做出基本的中文動態組字功能,執行畫面如下:

以上展示「黃」(Unicode 0x9EC3)與其搭配不同組件 (部首) 的呈現方式。原本single.fnt (剎那單線體) 定義為:

!009EC300|黃0=0000162E0001F02E00005A1100015A5E0000A8110001A85F0000595F0001AC5F00000A5F0001F55F00003C7300013CCE00003D7B0001CA7B0001CACF00003B9E0001C99E00008066000180C1000062D6000242EB000116FA00009AD00002D0E50001DEF700003CC00001CAC0
又,考慮美觀,我從文鼎楷體轉出了stroked font,從而做了細部的調整,這方面還得與剎那搜尋工坊討論如何整合,但基本上組字的概念是可以延續的。「黈」這字在single.fnt是如此定義:
009EC800|黈0=黃0131272E1主0811078D9
相當明顯就是「黃」與「主」兩部件的左右結合,同理,「黌」則定義如下:
009ECC00|黌0=00D07E66B黃0156AD78A
改為上下部件的結合。當然,目前的實做還很陽春,但已經看得出效益,以目前的stroked font engine來說,只要先描述以上三個組件,如「黃」與「主」:
/* 0x9ec3 (黃) */
3, 66, 56, 0,
'm', 28, -36,
'2', 29, -36, 29, -36,
'2', 33, -37, 39, -37,
...
接著就採用single.fnt所定義的組字表示,去作遞迴表示即可,大幅省下儲存空間,也可避免許多維護成本,更重要的是,這一舉克服以往字型檔與程式碼不對稱的問題。除了中文動態組字外,其實Xorz/Embedded的繪字引擎也允許一些變化,比方說「Q版」的呈現,有點像是塗鴉文字,行文甚至有互相疊合的效果,這是為了配合某些特殊的應用,如廣告文字,所特別設計的系統,畢竟Xorz/Embedded一開始的定位就是針對嵌入式系統的特製輕量級圖形系統。

恰好TOSSUG在本週二也請到國內在動態組字學有專精的前輩,為我們分享中文缺字議題、動態組字技術,以及進行中的變革,詳情可參考「Tossug 2007 年第 7 場心得分享」,如果當天有空檔,或許筆者也可來作些介紹與展示。

沒有留言: