BDF字体转strike font

在Squeak中字体是以StrikeFont的形式保存的。有一个BDFFontReader类,可以 通过它将bdf字体转化为sf2格式的字体。由于这个久远的bug一直没有被整合,所以在使用 BDFFontReader之前,需要将BDFFontReader class>>new这个selector 手动删除。

另外需要注意的是,BDFFontReader只支持255个字符数的字体(在BDFFontReader class中有一段说明),需要先将bdf字体进行删减,之后才能被正确转化。

删减的方法是修改BDF文件中的CHARS值,一般改成192就可以了,相当于忽略255之后的所有字符。

文件的命名也是有讲究的。需要以nameNN.bdf的形式。其中NN是字体大小。将文件存放到squeak目录。利用 以下语句进行转化,不出意外的话,就可以得到nameNN.sf2文件了。

BDFFontReader convertFilesNamed: 'fixed' toFamilyNamed: 'fixed' inDirectoryNamed: ''.

关于粗体的设置,可以先参考StrikeFont class>>createDejaVu函数。比如分别 生成了fixed13.sf2, fixedB13.sf2和fixedI13.sf2这三个字体文件,可以通过以下代码将13号fixed字体加入系统,也就是就粗体和斜体是作为 derivativeFont的形式加入的。

fontArray := StrikeFont readStrikeFont2Family: 'fixed'.
boldFont := (StrikeFont readStrikeFont2Family: 'fixedB') first.
italicFont := (StrikeFont readStrikeFont2Family: 'fixedI') first.
(fontArray first) derivativeFont: boldFont at: 1.
(fontArray first) derivativeFont: italicFont at: 2.
textStyle := TextStyle fontArray: fontArray.
TextConstants at: 'fixed' asSymbol put: textStyle.

接下来研究一下是否有可能将文泉驿点阵以strikefont的方式加入到系统中。

Advertisements
此条目发表在Uncategorized分类目录。将固定链接加入收藏夹。

One Response to BDF字体转strike font

  1. Pingback引用通告: 简析Etoys的多语言支持 之 字体 | SqueakCN

发表评论

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / 更改 )

Twitter picture

You are commenting using your Twitter account. Log Out / 更改 )

Facebook photo

You are commenting using your Facebook account. Log Out / 更改 )

Google+ photo

You are commenting using your Google+ account. Log Out / 更改 )

Connecting to %s