Solaris 8 のソフトウェア開発 (追補)

構成ファイルのローカライゼーション

構成ファイルを使用するのは、必要に応じて、フォントエントリやフォントグループエントリの変更や追加が自在に行えるからです。

使用されているシステムのデフォルトの構成ファイルは /usr/lib/lp/locale/$LANG/mp/mp.conf です。ただし、$LANG は印刷が行われるロケールのロケール環境変数です。ユーザーは専用の構成ファイルを持つことができ、-u <config.file path> オプションで指定できます。

mp.conf ファイルは主に、ロケールの中間コードポイント (符号位置) を、印刷に用いるフォントのエンコーディング (符号化方式) のプレゼンテーションフォーム (表現形式) に対応付けさせるために用いられます。


注 –

互換性のための文字としてエンコーディングされた合字や可変のグリフを、プレゼンテーションフォーム (表現形式) といいます。


中間コードポイントはワイドキャラクタか Portable Layout Service (PLS) 層の出力のどちらかです。Complex Text Layout の印刷では、中間コードポイントは PLS 出力でなければなりません。mp(1) によって生成されるデフォルトの中間コードは、PLS 出力です。

現在サポートされるフォントフォーマットは、Portable Compiled Format (PCF)、TrueType、および Type1 のフォーマットです。システム常駐とプリンタ常駐の両方の Type1 フォントがサポートされています。

mp.conf 構成ファイルのローカライゼーションの目的は、特定のロケールの必要性に応じて印刷できるように mp を構成することです。次に、mp(1) 用の mp.conf 構成ファイルのフォーマットと内容について説明します。

mp.conf ファイルに関し、次の情報をそれぞれの節で説明します。

フォントの別名化

この節では、印刷で使用するフォントのために別名を定義します。この節の各行は、次の形式になっています。

keyword			font alias name		 	font type 		   font path
<keyword>

この節のキーワードは FontNameAlias です。

<font alias name>

フォント名の別名に関する一般的な慣例では、フォントのエンコーディング/スクリプト名 (文字の種類) を指定し、続けて、フォントがローマ字、ボールド、イタリック体、あるいはボールドイタリック体なのかを示す文字 (R、B、I、または BI) を指定します。たとえば /usr/openwin/lib/X11/fonts/75dpi/courR18.pcf.Z なら、iso88591 のローマ字フォントなので、別名 iso88591R を指定することができます。

<font type>

.pcf フォントには PCF を、Adobe Type1 フォントには Type1 を、TrueType フォントには TrueType を指定します。この設定ファイルでは、この 3 種類のフォントだけが構成できます。

<font path>

設定フォントファイルには、絶対パス名を指定します。type1 プリンタ常駐フォントには、フォント名だけを指定します。次に、例を示します。

FontNameAlias			 prnHelveticaR 			 Type1  			  Helvetica

フォントグループの定義

同じ種類のフォントを組み合わせて、フォントグループを作成できます。フォントグループのフォーマットは次のとおりです。


注 –

グループの作成では、ローマ字フォントのエントリだけが必須です。ボールド、イタリック体、およびボールドイタリック体のフォントは省略できます。さまざまなフォントを使用して、メールやニュースの記事の見出し行が表示できます。ローマ字のフォントだけが定義されている場合は、他のフォントの代わりに使用します。


ロケール内の、中間コード範囲からフォントグループへの対応付け

それぞれのフォントと、中間コードポイントをフォントのエンコーディングのプレゼンテーションフォームに対応付けする共有オブジェクトとの関連付け


注 –

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


X Logical Fonts Description (XLFD) に対応するフォントを対応付けする共有オブジェクトを作成するときは、次のことを考慮します。PCF/Type1 フォントを対応付けしている場合は、中間コード範囲から 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

このフォントは iso8859-8 で符号化されているため、共有オブジェクトは中間コードと対応する iso8859-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 ロケールで中間コードがヘブライ文字 (PLS 層で生成) の 0xe50000e9 である場合は、次の点を考慮する必要があります。フォントが Unicode で符号化されているため、0xe50000e9 を入力したときに、出力が Unicode のプレゼンテーションフォームに対応するように、対応する .so モジュール内の関数を設計する必要があります。ここでの例は 0x000005d9 です。

<mapping function> 関数のプロトタイプは、次のとおりでなければなりません。

unsigned int function(unsigned int inter_code_pt)

次に示されているのは、mp.conf で使用できる任意のキーワード/値のペアです。

PresentationForm        WC/PLSOutput

デフォルトの値は、PLSOutput です。ユーザーが「WC」を指定している場合、生成される中間コードポイントはワイドキャラクタです。CTL の印刷では、デフォルト値を使用する必要があります。

ロケールが CTL 以外のロケールでキーワードの値が PLSOutput の場合は無視され、mp(1) は代わりにワイドキャラクタコードを生成します。

ロケールで CTL がサポートされている場合は、次に示す任意のキーワード/値のペアが使用できます。これらの変数は、表の右側に記載されているどの値でもとることができます。

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

しかし、/usr/openwin/lib/locale/ja/X11/fonts/75dpi/gotmrk20.pcf.Z などの PCF ファイルを対応付けしている場合は、/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

JIS X 0201 がエンコーディングである場合、UCS-2 から JIS X 0201 へと対応付けする共有オブジェクトを作成します。.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);
                 }

対応付けファイルを作成するときに、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>

# この行は追加する前に mp.conf から削除する必要があります。

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 を参照してください。