mandrakechina 发表于 2005-4-19 01:17:00

GNOME的字体适配是不是由Pango来管的?

我觉得有一件事很奇怪,在中英文混杂的情况下,Gtk应用会把圆括号映射到中文字体,而不是英文字体,而且有时还会出现数字和英文字母都用中文字体显示的问题。

所以想看看究竟是不是Pango的问题。

carlos 发表于 2005-4-19 09:18:09

中文的全角括号和数字根本就是另外的字符嘛,不存在映射到中文字体的问题,因为绝大多数英文字体都没有包含这些字形。我还没见过哪个 Gtk 程序会把半角的英文数字和括号映射为全角。

mandrakechina 发表于 2005-4-19 13:20:30

就是英文的括号啊,它并不是以Sans中规定的第一种字体显示(比如Bitstream),而是映射到了SimSun的括号上面。

carlos 发表于 2005-4-19 14:42:58

哇,眼睛真尖呀
连 vera sans 的括号和 SimSun 的英文半角括号都被你看出来了...

我前面还以为你说提全角呢。

xLoneStar 发表于 2005-4-19 16:41:50

这个是可以观察到的,在一个输入框中先输入一个标点,比如逗号,此时用一种字体显示。再接着键入一个中文字,你会观察到前一个逗号的字体发生了变化

mandrakechina 发表于 2005-4-19 22:16:00

但实际上,这种情况是不对的。从原理上来说,Pango应该按照每个字符来重新映射字体,而不应该按照字符串来映射。因为假如这个字符串中包含多国语言,那么就很可能会造成找不到一种字体可显示所有字符的情况。

xLoneStar 发表于 2005-4-20 10:35:10

我猜测,pango 的想法可能是,*尽量*用同一个字体来显示所有文字

很多字符同时出现在不同字体中,例如,那种头上带点的西欧字符。如果 pango 选用一种纯 ASCII 字体显示英文字符,又换用另一种 iso-8859-15 字体显示西欧字符,那么一句话看起来就会不一致,字符大大小小的变化。我想这可能就是他们决定,*尽量*使用一种覆盖面大的字体来显示所有文字的原因。

但同时,也得承认在显示中文和标点符号时,这样的安排看起来很怪异。我们的期望是中文字符用中文字体,西文、标点符号统统用西文字体,而不希望它变来变去。

mandrakechina 发表于 2005-4-20 17:37:22

那么菜单中的快捷键就显得很奇怪。比如“文件(F)”中,只有F用英文字体显示。无论如何,一个软件的一致性是应该得到体现的。

xLoneStar 发表于 2005-4-21 13:36:52

尤其是那个,随着输入字符不同,标点符号字体会变化,实在是不爽。但要改变这样的算法,可能要和 Owen Taylor 谈谈了吧!我怀疑这样的策略是来自于 fontconfig,要改变它似乎有点难度啊

mandrakechina 发表于 2005-4-22 22:53:59

fontconfig是不能根据Unicode代码选择字体的,只能根据所属的Unicode范围选择字体。

xLoneStar 发表于 2005-4-23 10:47:33

那么这个 Unicode “范围”,就应由上层提供了。也就是说 Pango 在处理标点符号时,给出了“错误”的范围,是这样理解吗?有没有办法验证?

mandrakechina 发表于 2005-4-23 22:30:09

可是如果是光有英文的话,括号是没问题的。

xLoneStar 发表于 2005-4-24 14:58:32

是呀,基于上面的分析,任何一个英文字体都包含标点符号,所以 pango 会用同一个字体显示英文字符和标点符号。

同理,因为中文字体不仅包含中文,也包含英文和标点,所以默认情况下,中文和英文会用同一个字体来显示,所以英文不好看。需要设定一下 fontconfig 规则之类才能让中文和英文分用不同字体。
页: [1]
查看完整版本: GNOME的字体适配是不是由Pango来管的?