最近,我为我的研究工作在 FreeType 中制作了一个小型辅助模块。该模块主要负责处理客户端应用程序输入的 METAFONT。我使用 FTVIEW 作为我的客户端应用程序,它接受 METAFONT 文件以在屏幕上显示样式文本。
我正在使用 Mftrace 程序将任何 METAFONT 请求转换为其相应的 Type1 格式,然后使用默认的 Type1 驱动程序模块对其进行处理并在屏幕上显示结果。它运行良好。
现在我想要的是使用mf
程序(METAFONT 的默认编译器)而不是 Mftrace,使用 FreeType 来处理 METAFONT。该mf
程序将.mf
文件作为输入并返回一个.tfm
和.gf
文件。.gf
然后使用 GFtoPK 或 GFtoDVI 分别将此文件转换为.pk
或.dvi
文件,然后可用于显示。
由于 FreeType 引擎不支持.gf
和pk
文件,我了解到有一个名为 VFlib 的旧库实际上支持这两种类型的文件。我读过关于 VFlib 的文章,并了解到它也是一个字体库,可以处理多种字体类型,并且可以从这些不同的字体格式(如、、.ttf
等)中将字形制作成位图。.pfb
.gf
.pk
由于.gf
和.pk
文件实际上是位图字体格式(后者是.gf
文件的更压缩的文件,可以使用 GFToPK 等程序获得),我的问题是:这个 VFlib 库实际上如何支持.gf
和格式?如果输入或文件.pk
,这个库的主要任务是什么?.gf
.pk
答案1
在阅读了一些关于此的论文之后 VFlib 库我得到了答案。
GF 和 PK 字体驱动程序的主要目的是让应用程序员不需要了解 GF 和 PK 字体文件中的内部数据表示。VFlib 以通用格式转换位图。术语“通用格式”是指 VFlib 中定义的 VF_Bitmap 结构。这是在 VFlib 中表示位图数据的通用数据结构。无论字体的数据样式(位图/轮廓)如何,VFlib 都使用 VF_Bitmap 结构来表示字体中字符的位图。
支持 gf 和 pk 的另一个目的是,由于它们是位图形式,我们必须为不同的放大倍数和分辨率准备许多文件。例如,当我们使用“cmr10”字体时,我们必须选择由 MetaFont 生成的合适的字体文件。例如,
- Mangification 1.00, 300 dpi --> "cmr10.300pk"
- Mangification 1.20, 300 dpi --> "cmr10.360pk"
- Mangification 1.00, 600 dpi --> "cmr10.600pk"
- Mangification 1.20, 600 dpi --> "cmr10.720pk"
选择合适的文件名是一件繁琐的事情,而 VFlib 会处理这些麻烦的事情。给定参数字体名称(例如“cmr10.pk”)、设备分辨率(例如 300)和放大倍数(例如 1.20),VFlib PK 驱动程序会在内部计算合适的文件名(例如“cmr10.360pk”)并找到其在文件系统中的位置。应用程序员无需关心实际的字体文件名和字体目录。