Solaris の最新リリースでは、mp 印刷フィルタが拡張されています。最新の mp は、内部的に次の 3 つのモードで動作します。そして、特定のロケールに対応する出力ファイルを生成し、国際テキストを印刷します。以下のモードが使用できます。
ロケール固有のフォント構成ファイル mp.conf を使用する
ロケール固有の PostScript プロローグファイル prolog.ps を使用する
Xprt (X Print Server ) クライアントとして動作する
次の各項では、特定の印刷方法をどのようなときに使用し、それぞれの方法でどのような構成ファイルやサポートファイルが 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 フォントが使用できます。
/usr/lib/lp/locale/C/ ディレクトリに、この印刷モードに共通の .ps 印刷ページレイアウトがあります。これらのファイルのカスタマイズ方法については、 「prolog ファイルの追加とカスタマイズ」 を参照してください。
コマンド行に -D オプションも -P オプションも指定せず、かつ /usr/openwin/lib/locale/$LANG/print/prolog.ps が存在する場合は、出力の先頭に prolog.ps ファイルが付加されます。.ps プロローグページの印刷スタイルによっては、出力の先頭にレイアウトファイルがさらに付加されることがあります。
この印刷方法では、PostScript フォントファイルだけが使用されます。prolog.ps ファイルのカスタマイズについては、「prolog ファイルの追加とカスタマイズ」を参照してください。
mp を Xprt クライアントとして使用すると、mp で Xprt 印刷サービスがサポートするネットワークに接続する任意のプリンタの出力を印刷できます。Xprt クライアントとして mp を使用すると、PostScript や PCL の多くのバージョンがサポートされます。
Xprt クライアントは、次のルールに基づいて Xprt サーバーへの接続を試みます。
mp コマンドに -D printer_name@machine[:dispNum] または -P printer_name@machine[:dispNum] オプションを 使用した場合、mp は printer_name という machine[:dispNum] 上の Xprt 印刷サービスに接続を試みます。
上記の machine[:dispNum] への接続が失敗した場合、あるいは -D または -P に指定した引数が printer_name だけの場合、mp コマンドは printer_name 引数をサポートする Xprt サーバーで XPSERVERLIST を確認します。たとえば、次のようにします。
system% setenv XPSERVERLIST "machine1[:dispNum1] machine2[:dispNum2] ..." |
上記のルールを使用してサーバーが見つからなかった場合、mp は、machine[:dispNum] に設定された XPDISPLAY 環境変数を確認します。たとえば、次のようにします。
system% setenv XPDISPLAY "machine[:dispNum]" |
XPDISPLAY 変数が設定されていない場合、または変数が無効な場合、mp はデフォルト表示の 2100 で接続を試みます。デフォルト表示の値も無効な場合、mp はエラーメッセージを表示して終了します。
/usr/lib/lp/locale/C/mp ディレクトリには、Xprt クライアント用の .xpr 印刷ページのサンプルレイアウトファイルが含まれています。サンプルファイルは 300 dpi プリンタ用です。対象のプリンタの 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 が生成するデフォルトの中間コードポイントは PLS 出力です。
サポートされているフォント形式は PCF (Portable Compiled Format)、TrueType、Type1 です。システム常駐とプリンタ常駐の両方の Type1 フォントがサポートされます。mp.conf 構成ファイルの形式と内容については、次の点に注意してください。
各行の先頭は、有効なキーワード (命令) でなければなりません。
キーワードの引数は、キーワードと同じ行になければなりません。
# 文字で始まる行は、その終わりまでコメントとみなされます。
0x で始まる数値引数は 16 進数の値とみなされます。
次の項目はそれぞれ mp.conf ファイルの別々のセクションに定義されます。
フォント別名の定義
特定のロケールにおける中間コード範囲とフォントグループの対応付け
各フォントと共有オブジェクトの対応付け。共有オブジェクトは、中間コードポイントと、フォントエンコーディングを対応付ける
mp.conf ファイルのフォント別名定義セクションには、印刷に使用する各フォントの別名を定義します。各行の形式は次のとおりです。
FontNameAlias font-alias-name font-type font-path
フォントの別名には、通常、フォントのエンコーディング/スクリプト名と、フォントが 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 種類だけです。
フォントファイルの絶対パス名。Type1 のプリンタ常駐フォントの場合は、Helvetica など、フォント名だけを指定します。
FontNameAlias prnHelveticaR Type1 Helvetica
同じタイプのフォントをフォントグループとして定義することができます。フォントグループの形式は次のとおりです。
FontGroup
フォント群のグループ名
フォントタイプ。同じタイプのフォント (PCF、Type1、TrueType) からなるフォントグループを作成します。
フォントグループで使用する Roman フォントの名前
フォントグループで使用する Bold フォントの名前
フォントグループで使用する Italic フォントの名前
フォントグループで使用する BoldItalic フォントの名前
グループの作成では Roman フォントのエントリだけが必須で、Bold、Italic、BoldItalic フォントの指定は任意です。メールやニュースでは、ヘッダーラインの表示に異なるタイプのフォントが使用されることがあります。Roman フォントだけを定義している場合、他のフォントの代わりに Roman フォントが使用されます。
mp.conf ファイルの対応付けセクションには、中間コードの範囲とロケールのフォントグループの対応付けを定義します。行の形式は次のとおりです。
MapCode2Font
0x で始まる 4 バイトの 16 進数値。1 つまたは複数のフォントグループに対応付けるコード範囲の始めを表します。
対応付けるコード範囲の終わりを表します。この値が「-」の場合は、1 つのコードポイント範囲だけがターゲットフォントに対応付けられます。
Type1、PCF、または TrueType フォントグループ。印刷書式に使用されます。
mp.conf ファイルの関係付けセクションでは、各フォントと共有オブジェクトを関係付けます。共有オブジェクトとは、中間コードポイントと、フォントエンコーディングを対応付けるものです。行の形式は次のとおりです。
CnvCode2Font
フォントに対して定義されている別名
中間コードポイントを受け取り、フォントエンコーディングでのグリフインデックスを取得し、そのグリフを描くために使用される
対応付けの関数が格納されている .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
このフォントは 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
この場合は、前の 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 はこの値を無視し、ワイド文字コードを生成します。
ロケールが 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 のプリンタ常駐フォントを構成ファイルに追加する方法を示しています。
この手順を実行して、現在設定されているフォントを変更します。最初の 2 つの手順では、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
たとえば、/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); }
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 への文字セットの対応付けを見つけます。
これらの対応付けを使用して、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); }
対応付けファイルを作成するときには、usc—2 をjisx0201 に対応付けるすべての組み合わせを組み込みます。
cc -G -o xu2jis0201.so xu2jis0201.c
次の手順例は、共有オブジェクトファイルを作成する方法を示しています。
フォントを追加するには、次の例の 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 に変更します。
変更した mp.conf ファイルを使って mp コマンドを呼び出し、新しいフォントの 0x0020 から 0x007f の範囲を印刷します。
同じ .so ファイルを使って、他の日本語の範囲を対応づけることができます。たとえば、0x0000FF61 から 0x0000FF9F の範囲を対応付けできます。
後方互換性を保つためには、/usr/openwin/lib/locale/$LANG/print/prolog.ps ファイルを使用して、現在のロケールで出力を作成します。prolog.ps ファイルを使用する場合、構成ファイルは必要ありません。
mp.conf ファイルのサンプルは、/usr/lib/lp/locale/en_US.UTF-8/mp ディレクトリを参照してください。