| |
【字型技术】
|
|
| |
复杂语系都需要Layout Engine? |
|
| |
|
|
| |
|
|
| |
印度文(Hindi)、缅甸文(Myanmar)等复杂语系,他的文字是由左向右排的,由子音和元音以非常复杂的方式组合而成,一般的字型系统是无法处理的。一般的使用者以为Unicode已经定义所有的Hindi字符;事实上,Unicode只定义基本的Hindi字符,如何将Hindi的子音和元音,依照印度文的组字规则,显示出正确的Hindi文字,需要专用的Layout Engine复杂语系组字引擎。
|
|
| |
|
|
| |
以右图Hindi单字为例子,输入同样的Unicode字符,如果没有使用Layout Engine复杂语系组字引擎,就像第1个图,组合出不正确的Hindi。
|
|
 |
|
|
| |
|
|
| |
另外,像阿拉伯文(Arabic)、波斯文(Farsi)与希伯来文(Hebrew)等由右向左排列的文字,在与英文等由左向右排的文字同时应用时,便需要运用Arphic Layout Engine来做双向文字混合排列 (Bi-directional text layout)。 以阿拉伯文(Arabic)为例子,同一个阿拉伯字符,在不同的句子字义,有前中后3种不同的字符位置表示,如下图,这个字符,可表示前中后3种不同的字符位置。 |
|
| |
|
|
| |
泰文(Thai)也是复杂语系的一种,虽然组字的规则,比Hindi、Arabic简单,但是泰文没有空格符,在显示设备上需要断行时必须由Layout Engine去判断,泰文音节及字汇的何处要做断行。泰文(Thai)文字还有1个特色,它有4个阶层。在字型设计上,无法设计成小尺寸的字型,如果要有清晰的泰文(Thai) 4阶,至少要18 pixel以上,如果显示1个字的LCD Monitor少于18 pixel,某些泰文字型的第1阶会被忽略,就会不容易辨识。 |
|
| |
 |
|
| |
|
|
| |
复杂语系字型的开发难易度比较 |
|
| |
这些印度文(Hindi)、阿拉伯文(Arabic)、泰文(Thai)、希伯莱文(Hebrew),何者的语系组字方式比较困难。由下列比较表可得知,印度文(Hindi), 孟加拉国文(Bengali), Tamil(泰米尔文), 斯里兰卡文(Sinhala)因为有很多的子音和元音的变化多,组字规则是比较复杂的。最复杂的语系是泰卢固文(Telugu), 缅甸文(Myanmar), 坎那达文(Kannada), 藏文(Tibetan),组字规则最为复杂,字型设计有很复杂。 |
|
| |
|
|
| |
复杂语系 |
字型的开发难易度 |
| Thai, Arabic, Hebrew, Farsi |
相对比较简单,可以做预先组字需处理由右到左的文字排列。 |
| Hindi, Bengali, Tamil, Sinhala |
组字规则比较复杂,子音和元音的变化多需处理由左到右的文字排列。 |
| Telugu, Myanmar, Kannada, Tibetan |
组字规则最为复杂,例如:藏文字母可以垂直堆栈,最高可以达到四层(子音),各字母会变扁,需要数千个造字。 |
|
|
| |
|
|
| |
Arphic Layout Engine支持的复杂语系范例 |
|
| |
Arphic Layout Engine 系由 ANSI C 规格撰写,可运用在不同平台上,使用者仅需提供 2~2.5K 的内存即可使其运作,绘图时仅需提供 Unicode 字符串 以及 Bitmap Buffer,Arphic Layout Engine 便可以将字符串输出至 Bitmap Buffer,而使用者可根据其装置特性,再将 Bitmap Buffer 输出至显示器。
以Arphic Layout Engine的印度文(Hindi)模块为例,程序内建支持Hindi文字复杂的组合规则,以105个基本Unicode字符及180个变形的连结字(ligature),组合成超过16,000 个常用 Hindi 字汇。这些Hindi字汇都经过专业的印度人士,逐字检验及核对其正确性。 |
|
| |

印度文使用Arphic Layout Engine的呈现方式
|
|
|
|
|
| |
 |
|
| |
|
|
| |
|
|
| |
|
|
| |
|
|