国际语言环境指南

mp 打印过滤器增强模式概述

mp 打印过滤器在当前 Solaris 发行版中得到增强。最新版的 mp 可以用三种不同的模式进行内部处理,以便在一种语言环境中产生输出文件来打印国际文本。可用的模式包括:

下面部分将描述何时使用特定的打印方法以及 mp 针对这些打印方法所使用的配置和支持文件。

与特定于语言环境的字体配置文件 mp.conf 一起使用 mp

如果命令行中没有给出 -D 或 -P 选项,则此打印方法为缺省方法,除非 /usr/openwin/lib/locale/$LANG/print或 /usr/lib/lp/locale/$LANG/mp 目录中存在 prolog.ps 文件。prolog.ps 文件强制 mp 使用文件中的 PostScript 嵌入字体进行打印。即使语言环境中存在 prolog.ps,使用 -M 选项也会忽略 prolog.ps 文件而使用 mp.conf 文件(如果存在)。

此方法使用 /usr/lib/lp/locale/$LANG/mp/mp.conf 字体配置文件。您可能不必更改此文件,除非您需要使用替换字体进行打印。此文件可使用 TrueType、Type 1 或 pcf 字体进行配置。

与特定于语言环境的 PostScript Prolog 文件一起使用 mp

/usr/lib/lp/locale/C/ 目录包含对此打印模式通用的 .ps 打印页面布局文件。添加和定制 prolog 文件中提供了如何定制这些文件的描述。

如果命令行中没有给出 -D 或 -P 选项,并且存在 /usr/openwin/lib/locale/$LANG/print/prolog.ps,则 prolog.ps 文件将被前置到输出中。根据 .ps prolog 页的打印样式,布局文件也被前置到输出中。

此打印方法仅使用 PostScript 字体文件。添加和定制 prolog 文件中描述了 prolog.ps 文件的定制。

将 mp 用作 Xprt(X 打印服务器)客户机

将 mp 用作 Xprt 客户机允许 mp 打印连接到网络上受 Xprt print 打印服务支持的任何打印机的输出。作为 Xprt 客户机,mp 支持 PostScript 和许多版本的 PCL。

Xprt 客户机按照下列规则尝试连接到 Xprt 服务器:

使用 mp.conf 配置文件的本地化

配置文件为添加或更改字体项或字体组项提供灵活性。

系统配置缺省文件是 /usr/lib/lp/locale/$LANG/mp/mp.conf,其中 $LANG 是有打印操作的语言环境中的语言环境变量。可以使用 -u config.file path 选项指定个人配置文件。

为了便于兼容,连字或变体字型已被编码为字符,这种形式称为 变形显现形式。mp.conf 文件主要用于将一种语言环境中的中间代码点映射为用来打印该代码点的字体编码中的表现形式。

中间代码点可以是宽字符,也可以是可移植布局服务 (PLS) 层的输出。复杂文本布局打印要求中间代码点为 PLS 输出。由 mp 生成的缺省中间代码为 PLS 输出。

当前受支持的字体格式是可移植已编译格式 (PCF)、TrueType 和 Type1 格式。既支持系统常驻 Type1 字体又支持打印机常驻 Type1 字体。请记住下列有关 mp.conf 配置文件的格式和内容的信息:

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 字体项。粗体、斜体和粗斜体字体均为可选。例如,邮件或新闻文章的标题可用不同类型的字体来显示。如果仅定义了 Roman 字体,则将使用此字体代替其他字体。

映射部分

mp.conf 文件的映射部分从中间代码范围映射到语言环境中的字体组。本部分中每一行的格式如下所示。

关键字

MapCode2Font。

range_start

以 0x 开头的 4 字节十六进制值表示要映射到一个或多个字体组的代码范围的开始。

range_end

表示要映射的代码范围的结尾。如果值是 '-',则只有一个中间代码点被映射到目标字体。

组

一个 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

此字体以 ISO 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 将生成宽字符代码。

如果语言环境支持 CTL,则您可以使用下表中列出的可选关键字/值对。这些变量可以采用该表中间列中给出的任何可能值。

表 7–1 可选关键字/值对

可选关键字 

可选值 

Default 

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 中字符的 PCF 字体由 TrueType 字体替代。

  1. 在添加新字体前,请查看配置文件中与当前配置字体相对应的各种组件。

    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 语言环境。由于 HG-MinchoL.ttf 是 Unicode TrueType 字体文件,因而可以使用 .so 模块映射函数直接返回传入的 ucs-2 代码点。

    unsigned short _ttfjis0201(unsigned short ucs2) {
                     return(ucs2);
             }
    1. 将此映射保存为 ttfjis0201.c 文件。

    2. 创建共享对象文件。

      cc -G -Kpic -o ttfjis0201.so ttfjis0201.c
  2. 要映射 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
    1. 对于 jisx0201 编码,请准备一个从 ucs-2 映射到 jisx0201 的共享对象。获得用于创建 .so 模块的映射表。对于 Unicode 语言环境,查找映射到 ftp.unicode.org/pub/MAPPINGS/ 目录中 Unicode 的字符集。

    2. 使用以下映射编写一个 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);
                       }
    3. 在创建映射文件时,请将所有 usc-2 包括到 jisx0201 的各种事例中。

      cc  -G -o xu2jis0201.so xu2jis0201.c

如何创建共享对象文件

下列过程中的实例说明如何创建共享对象文件。

  1. 要添加字体,请编辑与 mp.conf 文件中各部分对应的下列实例的行。

    下例说明如何添加 TrueType 字体。.so 路径指向 xu2jis0201.so 文件。

    FontNameAlias   jis0201R TrueType /home/fn/HG-Minchol.ttf
    FontGroup     jis0201 TrueType jis0201R
    MapCode2Font  0x0020 	0x007f  jis0201
    CnvCode2Font   jis0201R 	 _ttfjis0201 <.so path>

    注意 –

    要添加 PCF 字体,请将关键字从 TrueType 更改为 PCF。


  2. 用已更改的 mp.conf 文件调用 mp 命令以打印新字体中的范围 0x0020-0x007f。

    也可以用同样的 .so 文件映射其他日文字符范围,例如,可以映射范围 0x0000FF61 0x0000FF9F。


    注意 –

    要保持向后兼容,可以使用 /usr/openwin/lib/locale/$LANG/print/prolog.ps 文件在当前语言环境中创建输出。在使用 prolog.ps 文件时,不需要任何配置文件。


您可以在 /usr/lib/lp/locale/en_US.UTF-8/mp 目录中找到样本 mp.conf 文件。