国際化対応言語環境の利用ガイド

mp 印刷フィルタの拡張概要

Solaris 9 リリースでは、mp 印刷フィルタが拡張されています。最新の mp は、内部的に次の 3 つのモードで動作します。そして、特定のロケールに対応する出力ファイルを生成し、国際テキストを印刷します。

次の各項では、特定の印刷方法をどのようなときに使用し、それぞれの方法でどのような構成ファイルやサポートファイルが mp によって使用されるかについて説明します。

mp でロケール固有のフォント構成ファイル mp.conf を使用する場合

コマンド行に -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 フォントが使用できます。/usr/lib/lp/locale/C/ には、このモードの印刷と次の印刷方法で共通に使用される .ps 印刷ページレイアウトファイルが含まれています。これらのファイルのカスタマイズ方法については、既存 prolog ファイルのカスタマイズと新しい prolog ファイルの追加を参照してください。

mp でロケール固有の PostScript プロローグファイルを使用する場合

コマンド行に -D オプションも -P オプションも指定せず、かつ/usr/openwin/lib/locale/$LANG/print/prolog.ps が存在する場合は、出力の先頭に prolog.ps ファイルが付加されます。.ps プロローグページの印刷スタイルによっては、出力の先頭にレイアウトファイルがさらに付加されることがあります。

この印刷方法では、PostScript フォントファイルだけが使用されます。prolog.ps ファイルのカスタマイズについては、mp が Xprt (X Print Server) クライアントとして動作する場合を参照してください。

mp が Xprt (X Print Server) クライアントとして動作する場合

この方法では、 X Print Server によってサポートされるネットワークに接続された任意のプリンタ向けの出力を mp で印刷できます。このコマンドでは、PostScript や、PCL の多くのバージョンがサポートされます。

-D-P コマンドオプションを使用し、かつ環境に XPDISPLAY 変数が設定されていない場合は、印刷サーバー起動スクリプトが、このクライアントが動作するマシンのポート 2100 で Xprt サーバーを起動します。このスクリプトは、mp が終了すると印刷サーバーを停止します。XPDISPLAY が設定されていると、mp クライアントは XPDISPLAY で動作する印刷サーバーに接続しようとします。ただし、サーバーが動作していなくても、サーバーを起動しません。

/usr/lib/lp/locale/C/mp ディレクトリには、Xprt クライアントとして動作する mp 用の .xpr 印刷ページレイアウトファイルが含まれています。これらのファイルは 300 dpi プリンタ用のサンプルです。ターゲットプリンタの dpi 値が異なる場合は、ターゲットプリンタの解像度に合わせてこの値が自動的に変換されます。

構成ファイルの地域対応化

構成ファイルを使用することによって、フォントエントリまたはフォントグループエントリの追加や変更を柔軟に行うことができます。

システムのデフォルト構成ファイルは、/usr/lib/lp/locale/$LANG/mp/mp.conf です。$LANG は、印刷が行われるロケールのロケール環境変数です。ユーザーは、-u config.file path オプションを指定することによって独自の構成ファイルを指定できます。

互換性のために 1 文字としてエンコードされた合字または変形グリフを表示書式と呼びます。 mp.conf ファイルは、主に、あるロケールの中間コードポイントを、そのコードポイントの印刷に使用されるフォントのエンコーディングでの表示書式に対応付けるために使用されます。

中間コードポイントは、ワイド文字か、PLS (Portable Layout Services) レイヤの出力です。ただし、CTL (Complex Text Layout) 印刷では、中間コードポイントは PLS の出力でなければなりません。mp(1) が生成するデフォルトの中間コードポイントは PLS 出力です。

サポートされているフォント形式は PCF (Portable Compiled Format)、TrueType、Type1 です。システム常駐とプリンタ常駐の両方の Type1 フォントがサポートされます。mp.conf 構成ファイルの形式と内容については、次の点に注意してください。

次の項目はそれぞれ mp.conf ファイルの別々のセクションに定義されます。

フォント別名の定義

mp.conf ファイルのフォント別名定義セクションには、印刷に使用する各フォントの別名を定義します。 各行の形式は次のとおりです。

FontNameAlias font-alias-name font-type font-path 			
font-alias-name

フォントの別名には、通常、フォントのエンコーディング/スクリプト名と、フォントが Roman、Bold、Italic、BoldItalic (R、B、I、BI) のどれであるかを示す文字を指定します。

たとえば、フォントが iso88591 Roman なら、/usr/openwin/lib/X11/fonts/75dpi/courR18.pcf.Z に別名として iso88591R を指定します。

フォントタイプ

.pcf フォントには PCF、Adobe Type1 フォントには Type1、TrueType フォントには TrueType をそれぞれ指定します。mp.conf ファイルに設定できるフォントはこの 3 種類だけです。

font-path

フォントファイルの絶対パス名を指定します。Type1 のプリンタ常駐フォントの場合は、Helvetica など、フォント名だけを指定します。

定義例は次のとおりです。

FontNameAlias   prnHelveticaR   Type1   Helvetica

フォントグループの定義

同じタイプのフォントをフォントグループとして定義することができます。フォントグループの形式は次のとおりです。

keyword

FontGroup

fontgroupname

フォント群のグループ名

GroupType

フォントタイプ。同じタイプのフォント (PCF、Type1、TrueType) からなるフォントグループを作成します。

Roman

フォントグループで使用する Roman Font の名前

Bold

フォントグループで使用する Bold Font の名前

Italic

フォントグループで使用する Italic Font の名前

BoldItalic

フォントグループで使用する BoldItalic Font の名前

グループの作成では Roman フォントのエントリだけが必須で、Bold、Italic、BoldItalic フォントの指定は任意です。メールやニュースでは、ヘッダーラインの表示に異なるタイプのフォントが使用されることがあります。Roman フォントだけを定義している場合、他のフォントの代わりに Roman フォントが使用されます。

対応付けセクション

mp.conf ファイルの対応付けセクションには、中間コードの範囲とロケールのフォントグループの対応付けを定義します。行の形式は次のとおりです。

keyword

MapCode2Font

range_start

0x で始まる 4 バイトの 16 進数値。1 つまたは複数のフォントグループに対応付けるコード範囲の始めを表します。

range_end

対応付けるコード範囲の終わりを表します。この値が「-」の場合は、1 つのコードポイント範囲だけがターゲットフォントに対応付けられます。

group

Type1、PCF、または TrueType フォントグループ。印刷書式に使用されます。

関連付けセクション

mp.conf ファイルの関係付けセクションでは、各フォントと共有オブジェクトを関係付けます。共有オブジェクトとは、中間コードポイントと、フォントエンコーディングを対応付けるものです。行の形式は次のとおりです。

keyword

CnvCode2Font

font alias name

フォントに対して定義されている別名

mapping function

中間コードポイントを受け取り、フォントエンコーディングでのグリフインデックスを取得し、そのグリフを描くために使用されます。

file path having mapping function

対応付けの関数が格納されている .so ファイル。dumpcs 内のユーティリティを使用すれば、EUC ロケールの中間コードセットを知ることができます。


注 –

mp (1) で使用される現在の TrueType エンジンでは、書式 4 と PlatformID 3 の cmap しか処理できません。つまり、構成できるのは Microsoft .ttf ファイルだけです。さらに、TrueType フォントエンジンが正しく機能するためには、文字マップエンコーディングが Unicode か Symbol でなければなりません。Solaris 環境ではほとんどの .ttf フォントがこれらの制約に従っていますので、Solaris ソフトウェアでは mp.conf ファイル内のすべての TrueType フォントを対応付けることができます。


PCF type1 X Logical Fonts Description (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

この場合は、前の TrueType フォントの cmap エンコーディングが Unicode であるため、中間コードと Unicode を対応付ける必要があります。この TrueType フォントの例では、 en_US.UTF-8 ロケールの中間コードが 0xe50000e9 であるとします。このコードはヘブライ語文字 (PLS レイヤによって生成された) に対応しています。このフォントは Unicode でエンコードされているため、0xe50000e9 が渡されたときにその出力が Unicode の表現形式に対応するように、対応する .so モジュール内の機能を設計する必要があります。この例では 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 の範囲にある文字を表示するためのフォントを現在の PCF フォントから TrueType フォントに変更します。

新しいフォントを追加する前に、現在設定されているフォントに対応する、構成ファイルのさまざまなコンポーネントを次に示します。

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

en_US.UTF-8 ロケールで行なう対応付けの候補として /usr/openwin/lib/locale/ja/X11/fonts/TT/HG-MinchoL.ttf を選択しているとします。これは 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/public/MAPPINGS/ の中から文字と Unicode を対応付けるテーブルを見つけます。これらの対応付けに従って 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 フォントを追加します。キーワードを TrueType から PCF に変更すれば、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 はロケールコンポーネントの 1 つです)。この場合、構成ファイルの仕組みは使用されません。

詳細については、サンプルの mp.conf 構成ファイルである /usr/lib/lp/locale/en_US.UTF-8/mp/mp.conf を参照してください。