Board logo

标题: 使用 m17n 实现各国语言间代码移植(2) [打印本页]

作者: look_w    时间: 2018-5-19 15:10     标题: 使用 m17n 实现各国语言间代码移植(2)

字符一瞥添加新拼字法也非常简单:不需要改编 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 脚本正确显示的。这需要两个阶段。第一个阶段是将字符序列从字节顺序(字符在内存中如何存储)转换成正确的手写顺序(字符如何在纸面上显示)。第二个阶段负责扫描特有的字形和读音序列(如果存在)并将这个序列替换成 “复合” 字形(英语有很多这种转换来增强文本的可读性。根据所使用的字体的不同, fi 序列通常都会使用一个 fi 字形代替,这要取决于我们选择的字体)。
图 3. 显示单词 “Hindi”这个重新排序过程的通用名字是 Complex Font Layout(CFL)。通常,CFL 信息都包含在字体中,在某些情况中,已经写死到显示库中了。在 m17n 中,CFL 信息可以在 FLT(Font Layout Table)中找到。有些拼字法需要少量的 FLT 数据;另外一些字符则需要很多信息来捕获复杂的规则。
例如, Sino-Japanese   orthography 就没有前后规则可以影响单个字形组合的复合。然而,泰国语的确有一些有趣的规则可以影响 orthography 的变化,但是它对于泰国口语不会产生任何影响。泰国语的拼字法 对于周围的文本来说非常敏感,但是对于口语来说则并非如此。印度脚本中特定的组合规则也相当复杂,必须使用 FLT 来显示。
最后,诸如字体、双向显示、Unicode 和语言之类的数据都会将文本的显示呈现在屏幕上。下一个棘手的问题 —— 也可能是现在正出现在您脑海中的问题 —— 是我们如何以非 ASCII 字体的形式来输入文本。
使用有 500 个键的键盘对于英语和很多欧洲语言来说,一个字符映射为一个键(或两个键)就足够了。大写键可以直接打印,键盘驱动程序可以对很多更为特殊的情况进行编码,但是其模型是相同的:按下一个键就代表输入某个特定的字符。
那么,如果一种拼字法中有数百个字符,或者更特殊一点,它们之间有很多组合,情况如何呢?那么我们就不能简单地使用一次击键来实现了,而是需要使用 击键序列 ,或者快速连续输入多个键。有一种特别的软件叫 输入法,它可以将每个键盘序列转换成一个字符或一系列字符。
当然,有些击键序列可能就是一次击键。另外,我们可以创建一种输入法将标准的拉丁字母键盘 转换 成其他语系的拼字法。例如,老式的日语键盘就将拉丁字母转换成平假名和片假名。然而,试图使用 26 个字母(A 到 Z 的拉丁字母)表示大约 46 个平假名有些困难。
键盘映射、击键序列以及音译输入法都可以使用 m17n 数据库来表示。这种方法很大的一个优点是可以将拼字法 的规则与应用程序代码清楚地区分开来。应用程序代码最适合由程序员来开发;如何显示正确的文本则是语言学家的工作。
获取 m17n 库正如上面介绍的一样,m17n 包括 3 个库和 m17n 数据库。现在,我们可以使用一个 m17n libc,另外还可以使用一个 Xlib 的 m17n 版本进行编码。开发团队正在努力编写第 3 层的库即 m17n X 工具包,它将成为 GTK+ 的一部分。m17n 开发人员也从事语言绑定的工作,这样诸如 Perl 和 Ruby 之类的编程语言就都可以使用 m17n 了(这个工具包和绑定何时可用,尚没有进度表)。m17n 库也已经被接纳为 Linux Standard Base(LSB)的一个部分,它可能会成为 Linux 国际化标准实现的一个很好的部分。
m17n 库的最新版本是 1.3.3,这是在 2006 年 2 月 22 日发布的。我们可以按照下面的方式来获取 m17n 库:
m17n 库依赖于几个其他库,这几个库在您的系统上可能有,也可能没有。请阅读前提条件中最新的列表。




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0