|
m17n 库是由 3 个库和一个存储单一脚本连同正确显示脚本所需要的元数据的数据库构成的:
- m17n
C库能够类似地实现 glibc (连同各种风格的 libc )的一些基本的文本处理功能。 - m17n X 库和 Xlib 是紧密对应的。他提供了基本的绘制字符的功能,并且对呈现所做的假设很少。
- m17n 工具包提供了一些功能,能够对复杂的脚本进行处理,使他们能够准备好在屏幕上进行显示。例如,泰国语在显示之前,必须进行排序、合成和重新排序。
- 最后,m17n 数据库存储了每种语言所特有的一些数据。例如,某种特有语言可能会需要自己的字体、一种特定的编码连同一些特别的机制来输入自己的数据。m17n 库是和语言无关的;m17n 数据库中保存了任何和语言有关的信息。
图 1 给出了 m17n 的 4 个部分,连同这些库是如何和现有的系统组件对应的。m17n 组件和传统 UNIX 库之间存在惊人的类似之处并不意外:m17n 的创建者希望能够让多语言的应用程式的编写尽量简单。我们只要使用一个等效的多语言库来替换相同语义的函数即可。
图 1. m17n 库的层次结构
(从侧面来看,m17n C 和 X 库就预示着 X 服务器能够提供国际化功能。但是,m17n 对底层操作系统和呈现机制的假设较少,因此我们能够将 m17n 移植到其他窗口系统上。实际上,将 m17n 集成到跨平台的 GUI 工具包(例如类 UNIX 系统上使用的 Qt)正是当前的工作重点,m17n 团队正在将自己的代码加入 GTK 的修正版本中。)
字符一瞥
添加新拼字法也很简单:无需改编 m17n 库来显示新脚本。相反,只需要创建一个新的 m17n M-text,并将 M-text 添加到 m17n 数据库上即可。
能够将 M-text 当作一个泛化的 C 字符串,因为这就能够将任意属性添加到通常和 C 字符串有关的字符代码中。一个属性能够指定语言要显示的字符,而另外一个属性则能够指定特定的字体。Bidi 信息也是使用 M-text 表示来进行编码的,并且基本的字形信息都能够出现。
例如,图 2(已得到 m17n 研发人员的许可进行复制)展示了这些属性如何用来修改文本字符串的外观。这个字符串很简单,内容是 “This is sample text to show the property”。然而,每个字符串都有一个 face 属性 —— 或多个 face 属性 —— 他决定了要使用哪些字体来显示字符。该图中所显示的 face 属性都故意进行了简化,但是我们能够看到这种特性所提供的灵活性,这对于世界上很多手写语言来说都是必要的。
图 2. 能够单独使用或一起使用来修改文本外观的属性
有很多脚本都需要复杂的过程来重新进行排序,或重新放置各个要显示的复杂合成图像。诸如泰米尔语、缅甸语和泰国语之类的脚本在进行显示之前都需要这种重新排序过程。作为更为具体的一个例子,图 3(也已获得作者许可进行复制)展示了单词 Hindi 是如何进行处理来使用 Devanagri 脚本正确显示的。这需要两个阶段。第一个阶段是将字符序列从字节顺序(字符在内存中如何存储)转换成正确的手写顺序(字符如何在纸面上显示)。第二个阶段负责扫描特有的字形和读音序列(假如存在)并将这个序列替换成 “复合” 字形(英语有很多这种转换来增强文本的可读性。根据所使用的字体的不同, f 和 i 序列通常都会使用一个 fi 字形代替,这要取决于我们选择的字体)。
图 3. 显示单词 “Hindi”
这个重新排序过程的通用名字是 Complex Font Layout(CFL)。通常,CFL 信息都包含在字体中,在某些情况中,已写死到显示库中了。在 m17n 中,CFL 信息能够在 FLT(Font Layout Table)中找到。有些拼字法需要少量的 FLT 数据;另外一些字符则需要很多信息来捕获复杂的规则。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




