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

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


注 –

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