構成ファイルを使用することによって、フォントエントリまたはフォントグループエントリの追加や変更を柔軟に行うことができます。
システムのデフォルト構成ファイルは、/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 構成ファイルの形式と内容については、次の点に注意してください。
各行の先頭は、有効なキーワード (命令) でなければなりません。
キーワードの引数は、キーワードと同じ行になければなりません。
# 文字で始まる行は、その終わりまでコメントとみなされます。
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 Font の名前
フォントグループで使用する Bold Font の名前
フォントグループで使用する Italic Font の名前
フォントグループで使用する BoldItalic Font の名前
グループの作成では 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
このフォントは 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 を参照してください。