配置文件为添加或更改字体项或字体组项提供灵活性。
系统缺省配置文件 /usr/lib/lp/locale/$LANG/mp/mp.conf ,其中 $LANG 是发生打印的语言环境中的语言环境变量。用户可具有一个个人配置文件,该配置文件由 -u config.file 路径 选项指定。
为了便于兼容,连字或变体字型已被编码为字符,这种形式称为 变形显现形式。 mp.conf 文件主要用于将一种语言环境中的中间代码点映射为用来打印该代码点的字体编码中的变形显现形式。
中间代码点可以是宽字符,也可以是可移植布局服务 (PLS) 层的输出。 复杂文本布局打印要求中间代码点为 PLS 输出。由 mp(1) 生成的缺省中间代码为 PLS 输出。
当前受支持的字体格式是可移植已编译格式 (PCF)、TrueType 和 Type1 格式。既支持系统常驻 Type1 字体又支持打印机常驻 Type1 字体。请记住下列有关 mp.conf 配置文件的格式和内容:
行必须以有效关键字(指令)开头。
关键字的参数必须与关键字出现在同一行。
以 # 字符开头的行被认为是注释,注释延续至该行末尾。
以 0x 开头的数字参数被认为是十六进制数。
mp.conf 文件中的不同部分包括:
字体别名
字体组定义
从中间代码范围映射到语言环境中的字体组
将每种字体与共享对象相关联,此共享对象把中间代码点映射到字体编码中的变形显现形式
mp.conf 文件的字体别名部分用于定义打印时使用的每种字体的别名。这部分的每一行都具有以下形式:
FontNameAlias 字体别名 字体名称 字体路径
为字体名称起别名的常用惯例是,指定字体的编码/脚本名称,名称后面跟一个字母,表示该字体是 Roman 字体、粗体、斜体或粗斜体(R、B、I 或 BI)。
例如,由于 /usr/openwin/lib/X11/fonts/75dpi/courR18.pcf.Z, 是 iso88591 Roman 字体,因此给它起的别名为 iso88591R。
为 .pcf 字体指定 PCF 、为 Adobe Type1 字体指定 Type1 并为 truetype 字体指定 TrueType 。 在此 mp.config 文件中只能配置这三种字体。
请在此处给出字体文件的绝对路径名。对于 Type1 打印机常驻字体,只指定字体名称,如 Helvetica。
FontNameAlias prnHelveticaR Type1 Helvetica
您可以将同一类型的字体合并为一个字体组。字体组的格式如下:
FontGroup。
字体的组名称。
字体类型。只为同一类型的字体(PCF、Type1 和 TrueType)创建字体组。
字体组中的 Roman 字体名称。
字体组中的粗体字体名称。
字体组中的斜体字体名称。
字体组中的粗斜体字体名称。
对于创建组,只需要 Roman 字体项。粗体、斜体和粗斜体字体均为可选。邮件/新闻文章的标题可用不同类型的字体来显示,例如。如果只定义了 Roman 字体,则将使用它代替其它字体。
mp.conf 文件的映射部分从中间代码范围映射到语言环境中的字体组。 此部分中的每一行都具有如下形式。
MapCode2Font。
以 0x 开头的 4–字节十六进制值表示要映射到一个或多个字体组的代码范围的开始。
表示要映射的代码范围的结尾。它可以是 '-' 值;其中只有单个中间代码点被映射到目标字体。
一个 Type1、PCF 或 TrueType 字体组,表示形式通过它进行打印。
mp.conf 文件的关联部分将每种字体与共享对象相关联,此共享对象把中间代码点映射到字体编码中的变形显现形式。此部分中的每一行都具有如下形式。
CnvCode2Font。
为字体定义的别名。
获取中间代码并返回字体编码中的变形显现形式,变形显现形式再获取字型索引,从而得到字型。
包含映射函数的 .so 文件名。您可以使用 dumpcs 中的公用程序来查找 EUC 语言环境的中间代码集。
由 mp (1) 使用的当前 TrueType 引擎只能处理格式 4 和 PlatformID 3 cmap。即,您只能配置 Microsoft .ttf 文件。 另外,要想使 TrueType 字体正常工作,字符映射编码必须是 Unicode 或 Symbol。由于 Solaris 环境中的大多数 .ttf 字体遵循这些限制,因此您可以在 mp.conf 文件内映射 Solaris 软件中的所有 TrueType 字体。
您创建用于映射与 PCF type1 X 逻辑字体说明 (XLFD) 相对应的字体的共享对象后,再创建从中间代码范围映射到由 XLFD 指定的编码的共享对象。 例如:
-monotype-arial-bold-r-normal-bitmap-10-100-75-75-p-54-iso8859-8
相应的 PCF 字体为:
/usr/openwin/lib/locale/iso_8859_8/X11/fonts/75dpi/ariabd10.pcf.Z
该字体以 isoISO 8859-8 进行编码,因此共享对象必须在中间代码和对应的 ISO 8859-8 代码点之间映射。
如果带有 XLFD 的 TrueType 字体:
-monotype-arial-medium-r-normal--0-0-0-0-p-0-iso8859-8
具有对应的字体:
/usr/openwin/lib/locale/iso_8859_8/X11/fonts/TrueType/arial__h.ttf
您应该在中间代码和 Unicode 之间映射,因为前一种 TrueType 字体的 cmap 编码在 Unicode 中。在此 TrueType 字体示例中,假定 en_US.UTF-8 语言环境中与希伯来字符(由 PLS 层产生)相对应的样例中间代码为 0xe50000e9。 由于该字体为 Unicode 编码,因此以这样的方式来设计对应的 .so 模块内的函数,即当您传递 0xe50000e9时,输出与 Unicode 中的变形显现形式相对应。 此处的示例为 0x000005d9。
映射函数的函数原型应为:
unsigned int function(unsigned int inter_code_pt)
以下是可在 mp.conf: 中使用的可选关键字/值对:
PresentationForm WC/PLSOutput
缺省值为 PLSOutput。如果用户指定 WC,则生成的中间代码点为宽字符。 对于 CTL 打印,应使用此缺省值。
如果语言环境为非 CTL 语言环境并且键盘值为 PLSOutput,则该值将被忽略,而且 mp(1) 将生成宽字符代码。
如果语言环境支持 CTL,则您可以使用下表中列出的可选关键字/值对。这些变量可以假设该表中间列中给出的任何可能值。
表 7–1 可选关键字/值对
可选关键字 |
可选值 |
缺省 |
---|---|---|
Orientation |
ORIENTATION_LTR/ ORIENTATION_RTL/ ORIENTATION_CONTEXTUAL |
ORIENTATION_LTR |
Numerals |
NUMERALS_NOMINAL/ NUMERALS_NATIONAL/ NUMERALS_CONTEXTUAL |
NUMERALS_NOMINAL |
TextShaping |
TEXT_SHAPED/ TEXT_NOMINAL/ TEXT_SHFORM1/ TEXT_SHFORM2/ TEXT_SHFORM3/ TEXT_SHFORM4 |
TEXT_SHAPED |
下列示例说明了将新的 PCF、TrueType 或 Type1 打印机常驻字体添加到配置文件时需要遵循的步骤。
将用于显示 0x00000021 - 0x0000007f 范围内字符的字体替换为 TrueType 字体,而不是当前配置的 PCF 字体。
在添加新字体前,请查看配置文件中与当前配置字体相对应的各种组件,如下所示。
FontNameAlias iso88591R PCF /usr/openwin/lib/X11/fonts/75dpi/courR18PCF.Z FontNameAlias iso88591B PCF /usr/openwin/lib/X11/fonts/75dpi/courB18PCF.Z . . . FontGroup iso88591 PCF iso88591R iso88591B . . . MapCode2Font 0x00000020 0x0000007f iso88591 . . . CnvCode2Font iso88591R _xuiso88591 /usr/lib/lp/locale/$LANG/mp/xuiso88591.so CnvCode2Font iso88591B _xuiso88591 /usr/lib/lp/locale/$LANG/mp/xuiso88591.so
假设您选择了 /usr/openwin/lib/locale/ja/X11/fonts/TT/HG-MinchoL.ttf 作为在 en_US.UTF-8 语言环境中进行映射的候选文件。由于这是一个 Unicode 字符映射的 TrueType 字体文件,因此在 .so 内的映射函数中,您只需要有直接返回传入 ucs-2 代码点的函数。
unsigned short _ttfjis0201(unsigned short ucs2) { return(ucs2); }
将此程序代码保存在 ttfjis0201.c 文件中。 按如下方式创建一个共享对象。
cc -G -Kpic -o ttfjis0201.so ttfjis0201.c
但是,如果您正在映射 PCF 文件(如 /usr/openwin/lib/locale/ja/X11/fonts/75dpi/gotmrk20.pcf.Z ),则在 /usr/openwin/lib/locale/ja/X11/fonts/75dpi/ 目录中查找 fonts.dir 文件。熟悉与 XLFD 相对应的编码,即:
-sun-gothic-medium-r-normal--22-200-75-75-c-100-jisx0201.1976-0
如果 jisx0201 为该编码,请准备一个从 ucs-2 映射到 jisx0201 的共享对象。您需要获得映射表,以便创建 .so 模块(如果一个都没有提供的话)。对于 Unicode 语言环境,查找从许多字符集到 ftp.unicode.org/pub/MAPPINGS/ 下的Unicode 的映射。请遵循这些映射 (1)(1) 以编写 xu2jis0201.c 文件:
unsigned short _xu2jis0201(unsigned short ucs2) { if(ucs2>= 0x20 && ucs2 <= 0x7d ) return (ucs2); if(ucs2==0x203e) return (0x7e); if(ucs2>= 0xff61 && ucs2 <= 0xff9f) return (ucs2 - 0xff60 + 0xa0); return(0); }
当您创建一个映射文件时,请将所有 UCS-2 包括到 jisx0201 事例中。
cc -G -o xu2jis0201.so xu2jis0201.c
此示例创建一个共享对象文件。
添加此字体的方法是:将下面的行添加到 mp.conf 文件的相应部分。下列示例说明如何添加 TrueType 字体。除了更改 PCF 关键字(而不是TrueType)外, PCF 字体遵循同一模式。
FontNameAlias jis0201R TrueType /home/fn/HG-Minchol.ttf FontGroup jis0201 TrueType jis0201R MapCode2Font 0x0020 0x007f jis0201 CnvCode2Font jis0201R _ttfjis0201 <.so path>
其中 .so 路径指向 xu2jis0201.so 文件。
用已更改的 mp.conf 文件调用 mp(1) 会导致范围 0x0020-0x007f 以新字体打印。也用同样的 .so 文件映射其它日文字符范围,例如,范围 0x0000FF61 0x0000FF9F。
为了维护向下兼容性, /usr/openwin/lib/locale/$LANG/print/prolog.ps 文件(如果存在的话)用于在当前语言环境(其中 $LANG 是语言环境组件之一)中创建输出。在这种情况下,不使用任何配置文件机制。
请参阅 /usr/lib/lp/locale/en_US.UTF-8/mp/mp.conf,它是一个样例 mp.conf 文件。