X字体

 

X字体

[email protected]
Reversion:0.8 Date: 2006/08/02

X有两种字体系统:core font system和xft。xft以其显示质量高、安装便捷而被越来越多的应用程序使用,gtk+2.2以后就缺省使用xft;但是一些老的应用程序如emacs仍然使用的是core font system,当前两种font system是共存的。

一个字体文件主要包含的是字符的glyph,如果是用位图来表示glyph,该字体就是bitmap font,如果是用数学描述来表示glyph,那就是scalable font。要能任意访问一个glyph,必须对这些glyph进行索引,不同的字体格式采用的索引方式不同,Type1用glyph的名字来索引,TrueType一般是用unicode来索引的。

通常是用某个encoding来访问字体文件里的glyph的,这对于不是用encoding来索引的字体,需要作一个encoding到字体所用索引的转换,而对用encoding索引的字体,可能需要作一个从访问用的encoding到字体所用encoding的转换,比如,针对gbk字符的simsun.ttf如果是用unicode来索引的,没有理由不允许用gbk encoding来访问,这样就需要一个gbk到unicode的编码转换。这种转换是如何进行的?对于xft,我们不用太关心,因为这一切都是自动进行的;而对core fonts,我们还是应该了解一下,这样将有助于理解后面描述的字体安装的步骤。

core fonts的两个scalable backends(Type1和FreeType TrueType backend)使用一个公共的fontenc layer来进行字体重编码。对一个用来访问字体的encoding,为了使之能访问到各种字体文件格式(也即字体采用的索引方式,包括glyph name、unicode、cap map等),fontenc layer为其定义了一些mapping,每个mapping针对一种字体格式;针对一个encoding的数据(包括encoding名、可能的一些别名,以及各个mapping)通常保存在一个后缀为enc文件里,放在X11/fonts/encoding目录下;X.org中的fontenc layer已经内置了一些encoding,还可以增加新的encoding支持,只要为该encoding编写规定格式的enc文件即可。

如何指定访问字体使用的编码呢?core fonts是用XLFD来描述使用字体的,XLFD的最后两个field:CHARSET_REGISTRY-CHARSET_ENCODING实际上指示了这种编码,但由于这两个field表达编码的方式是独立的,不同于fontenc layer使用的名字,因此我们还需要把XLFD定义的编码名映射到fontenc layer使用的encoding,这就是X11/fonts/encoding/encoding.dir文件的内容。

core fonts使用的XLFD必须先要注册然后才能使用,注册过程是通过写一个fonts.dir文件来完成的,该文件列出了准备使用的XLFD,同时为了能通过XFLD找到对应的字体文件,每个XLFD还和字体文件名做了映射,之后通过在X的配置文件里指定该该文件所在的目录,X server就能提供通过这些XLFD进行的字体访问了。

怎么写这个fonts.dir文件?怎么知道一个字体文件支持哪些XLFD?下面就simsun.ttf的安装为例来说明。

1. 核心字体的安装

以在ubuntu 6.06/X.Org X11R7.x下安装simsun.ttf为例,步骤如下:

  • 拷贝字体文件到选定的目录。

     

    查看xorg.conf,发现字体文件一般放在/usr/share/X11/fonts的子目录下,于是在/usr/share/X11/fonts下新建一个目录如TrueType,copy simsun.ttf到该目录下。

     

  • 生成fonts.scale和fonts.dir。

     

    由于simsun是TrueType字体,TrueType字体是freetype引擎支持的一种scalable font的格式,而mkfontdir不支持scalable字体,所以应该先用mkfontscale生成fonts.scale文件。mkfontscale分析字体文件,除了识别字体的family、weight等属性外,还会根据字体所用的索引方式,从fontenc layer里筛选出一个encoding集合,其中每个encoding都定义了到字体所用索引方式的mapping,进而通过这些encoding得到XLFD的编码名,最后生成一个该字体适用的XLFD列表,包括所有可以用来访问该字体的编码。

     

    不过对simsun.ttf,mkfontscale没有生成gbk-0的XLFD,但显然该字体是支持的,用mkfontscale -a gbk-0就可以了。最后用mkfontdir生成fonts.dir文件,fonts.scale的内容将会被copy到fonts.scale里,由于这里没有非scalable的字体,两个文件就是一样的。

     

  • 修改/etc/X11/xorg.conf。

     

    找到Section "Module",确认加载了freetype字体引擎(Load "freetype"),freetype用来渲染core font system的字体;

     

    找到Section "Files",添加我们设置好的字体目录 FontPath "/usr/share/X11/fontst/TrueType"

     

  • 重启X,用xlsfonts命令确认字体安装成功。

你可能感兴趣的:(X字体)