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

既存のプロローグファイルのカスタマイズと新規プロローグファイルの追加

プロローグファイルは次の 2 つのカテゴリに分類されます。

まず、PostScript ファイルのカスタマイズについて説明します。

次に、プロローグファイルの各カテゴリのカスタマイズについて説明します。

共通プロローグファイル

共通プロローグファイルには、次のものがあります。

上記のファイルは印刷レイアウトプロローグファイルで、mp.common.ps は他のプロローグファイルの前に挿入される共通プロローグファイルです。

共通プロローグファイルである mp.common.ps は、/usr/lib/lp/locale/C/mp/ ディレクトリにあり、それには、StandardEncoding から ISOLatin1Encoding にフォントを再度符号化する PostScript ルーチンが含まれています。reencodeISO ルーチンが印刷レイアウトプロローグファイルから呼び出され、フォントのエンコーディングが変更されます。通常、このプロローグファイルには、カスタマイズは必要ありません。ユーザーが自分のプロローグファイルを作成している場合は、修正されたプロローグファイルがあるディレクトリを指すように環境変数 MP_PROLOGUE を設定します。

印刷レイアウトプロローグファイル

印刷レイアウトプロローグファイルである mp.*.ps ファイルには、印刷時にページレイアウトを制御するルーチンが入っています。これらのプロローグファイルは印刷ページのヘッダーとフッターで使用するユーザー名、印刷日、ページ番号に加えて、他の情報も設定できます。たとえば、有効な印刷領域のサイズや、使用する用紙の縦横の向きが指定できます。

一連の標準的な関数については、プロローグファイルごとに定義する必要があります。これらの関数は、新しい印刷ページの開始、印刷ページの終了、あるいは新しいカラムの終了時に呼び出されます。これらの関数の実装内容によって、印刷出力の印刷属性が定義されます。

次の PostScript 変数は mp(1) バイナリによって実行時に定義されます。すべての印刷レイアウトファイルはこれらの変数を使用して、user namesubjectprint time などの動的な情報を印刷できます。変数から取得したこの情報は、通常印刷ページのヘッダーやフッターに記載されます。

User

システムの passwd ファイルから取得される、mp を実行しているユーザーの名前

MailFor

印刷する記事の種類の名前を保持するため使用される変数。この変数の値には、次のものがあります。

  • 「Listing for」―入力がテキストファイルである時

  • 「Mail for」―入力がメールファイルである時

  • 「Article from」―入力がニュースグループの記事である時

Subject

メールやニュースのヘッダーから引用された主題。「-s」オプションを使用すると、メールやニュースのファイルや標準テキストファイルにも主題が強制できます。 

Timenow

ヘッダーやフッターに記載される印刷時刻。この情報は localtime() 関数から取得されます。

次は、印刷レイアウトプロローグファイルに実装されている関数です。これらの関数にはすべて副関数が使用できます。

endpage

使用法 : page_number endpage

印刷ページの下端に達した時に呼び出されます。この関数はページのグラフィックのコンテキストを復元し、showpage を発行します。プロローグファイルによっては、ヘッダーとフッターの情報はカラムごとではなくページごとでしか表示されません。ヘッダーとフッターでグレースケールの模様を表示する副関数を呼び出すように、この関数を実装することも可能です。

newpage

使用法 : page_number newpage

新しいページの開始時に実行されるルーチンやコマンド。ルーチンの機能には、ランドスケープモードの設定、印刷グラフィックコンテキストの保存、ページ座標の変換などがあります。

endcol

使用法 : page_number col_number endcol

ヘッダーやフッター情報の表示。新しい印刷位置への移動など。

新規に印刷レイアウトプロローグファイルを追加するときは、印刷レイアウトプロローグファイル内で次の変数を明示的に定義する必要があります。

NumCols 

<1 印刷ページのカラムの数> 

PrintWidth 

<印刷領域のインチでの幅> 

PrintHeight 

<印刷領域のインチでの高さ> 

ロケール依存プロローグファイル

ロケール依存プロローグファイルは /usr/openwin/lib/locale/$LANG/print/prolog.ps で、通常は PostScript ファイルです。このファイルには、PostScript プロローグ情報といくつかの追加の PostScript ルーチンを定義する組み込み Type1 フォントを入れることができます。プロローグファイルの主な目的の 1 つに、前もって mp(1) で定義され使用される一連のフォント名に対し、別名でロケールのフォントを設定することがあります。

/usr/bin/mpprolog.ps でも動作するよう、このファイルに対するサポートが提供されています。このファイルが存在するときは優先され、下位互換性を維持するために mp.conf ファイルが走査されることはありません。

以降の mp.conf ファイルに関する節は、『OpenWindows Localization Guide』から引用したものです。

prolog.ps とは

prolog.ps ファイルの目的は、非汎用フォントを設定することです。アプリケーションは、前もって定義されたこれらの PostScript フォント名を使用して印刷します。プロローグファイルは、Desk Set Calendar マネージャと mp に対し、少なくとも次のフォント名を定義しなくてはなりません。

これらのフォントは、次の使用例でローカル (地域) の文字セットを印刷できなければなりません。

prolog.ps ファイルの例

ローカライゼーションキットには、日本の環境向けに、prolog.ps のサンプルが用意されています。また、このファイルは/usr/openwin/lib/locale/ja/print/ ディレクトリにもあります。

既存の prolog.ps ファイルへの複合フォントの追加および変更方法

たとえば次の例では、LC_Base-Font という複合フォントが定義されます。

%
(Foo-Fine) makecodeset12 
(Base-Font) makeEUCfont
%

LC_Base-Font は Foo-Fine と Base-Font というベースフォントの複合フォントです。Foo-Fine は、ローカルのキャラクタセットがあるフォントです。フォントの追加や変更を行うために、PostScript に精通している必要はありません。

prolog.ps ファイルの作成方法

実際の例を調べてみることが、学習への早道といえます。prolog.ps の例では、makecodeset12makeEUCfont の 2 つのルーチンを書く必要があります。Makecodeset12 がローカルフォントのエンコーディング情報を設定します。このルーチンはロケールによって異なる場合があります。MakeEUCfont はベースフォントとローカルフォントを組み合わせて、複合フォントを形成します。プロローグファイルの作成者は makecodeset12makeEUCfont を書くために、PostScript に精通している必要があります。

prolog.ps ファイルに対するサポートは、下位互換性を維持する目的でのみ継続されています。ロケールで印刷するために新たに prolog.ps ファイルの作成はせず、代わりに mp.conf を使用します。

prolog.ps の場所

パスは次のとおりです。

/usr/openwin/lib/locale/$LANG/print/prolog.ps

.xpr ファイルのカスタマイズ

これらのファイルは、デフォルトで /usr/lib/lp/locale/C/mp/ にあります。.xpr ファイルは、mp.common.ps を除いて、各 PostScript プロローグレイアウトファイルに対応しています。MP_PROLOGUE 環境変数を定義すると、別のプロローグディレクトリが定義できます。

これらのファイルはキーワード/値のペアとして動作します。# で始まる行はコメントとみなされます。次の説明で明示的に指示がない限り、スペースによって異なるトークンに分離されます。各 .xpr ファイルの主な 3 つの領域は、次のキーワードのペアに結び付きます。

この 3 つの領域で、特定のキーワード/値のペアが使用できます。次に、各領域について説明します。

STARTCOMMON/ENDCOMMON のキーワード

STARTCOMMON キーワードの後と ENDCOMMON キーワードの前にあるキーワード/値のペアは、すべて印刷ページの一般的な属性を定義します。1 つのキーワードに対し有効な値が複数あるときは、/ を使用して区切ります。

ORIENTATION 0/1

0 は縦長、1 は横長の向きで印刷を行うことを示します。

PAGELENGTH <符号無し整数>

論理ページごとの行数を示す値。

LINELENGTH <符号無し整数>

1 つのカラムの行の文字数を示す値。

NUMCOLS <符号無し整数>

物理ページごとの論理ページ数。

HDNGFONTSIZE <符号無し整数>

ヘッダーフォントのポイントサイズ (デシポイント)。

BODYFONTSIZE <符号無し整数>

本文のフォントポイントサイズ (デシポイント)。

PROLOGDPI <符号無し整数>

現在の .xpr ファイルが作成される「インチ当たりのドット数」の大きさ。

YTEXTBOUNDARY <符号無し整数>

1 ページあるいは論理ページ(カラム)でテキストを印刷するときに、この y 座標によって境界が設定されます。この境界は、テキスト印刷が希望どおりの領域で行われているかどうかを確認するための追加的な検査に使用します。この境界は、Complex Text Layout や EUC の印刷で必要となります。これは対応するフォントから取得した文字の高さの情報が間違っている可能性があるためです。

STARTTEXT <符号無し整数> <符号無し整数>

ある物理ページの最初の論理ページで実際のテキスト印刷が開始される x/y 点 (デシポイント)。

PAGESTRING 0/1

1 は、見出しでページ番号の前に page の文字列を追加する必要があることを指定します。

0 は、ページ番号だけを表示するよう指定します。

EXTRAHDNGFONT "font string 1, font string 2, ... font string n”

font string 1 から font string n は、X Logical Font Description です。コンマで区切られたフォント名のリストから EXTRAHDNGFONT キーワードを分離するトークンは " で、スペースやタブではありません。見出しの印刷時には、これらのフォントが組み込みフォントより優先されます。通常は、EXTRABODYFONT を使用してプリンタ常駐フォントを割り当てます。プリンタ常駐フォントは、/usr/openwin/server/etc/XpConfig/C/print/models/<model name>/fonts ディレクトリで構成されています。fonts.dir にはプリンタ常駐フォントの XLFD が入っています。

通常は、.xpr ファイルで次のようにフォントを指定します。

"-monotype-Gill Sans-Regular-r-normal- -*-%d-*-*-p-0-iso8859-2"

%d がある場合は、.xpr ファイルにおける現在の見出しフォントのポイントサイズに、mp(1) によって置き換えられます。x 解像度と y 解像度は * で指定し、平均幅のフィールドは 0 に設定して、できれば、拡大縮小可能なフォントを選ぶように指示します。さらに細かくフォント名が指定できます。

EXTRABODYFONT “font string 1, font string 2, ... font string n”

これは、これらのフォントがページ本体を印刷するときに使用されることを除いて、EXTRAHDNGFONT と同じです。

XDISPLACEMENT <符号付き / 符号無し整数>

ページの x 方向への遷移量。この遷移量は +ve または -ve の値になります。

YDISPLACEMENT <符号付き / 符号無し整数>

このパラメータは、y 方向に移動する以外、x の遷移量と同じです。

標準ではない余白幅のプリンタの場合や、1 ページの印刷内容を入れ換える必要があるときに、この 2 つのキーワードは便利です。

STARTPAGE/ENDPAGE

この節におけるキーワードの値のペアは、STARTPAGE キーワードと ENDPAGE キーワードに結び付きます。この節には、物理ページ 1 枚に適用する描画情報や見出し情報を入れます。物理ページ 1 枚に、複数の論理ページがある場合がありますが、これらのキーワードの間にある描画ルーチンはすべて、1 物理ページ 1 枚に 1 度だけ適用されます。

有効な描画エンティティは LINE と ARCです。XDrawLine 関数と XDrawArc 関数が、これらのキーワードの値に対して実行されます。

この領域におけるサイズは PROLOGDPI の単位で対応付けされます。角度は度の単位で示されます。

LINE x1 y1 x2 y2

/y 符号なしの座標によって、行を引くときの点の組を定義します。

ARC x y width height angle1 angle2

x と y はともに、弧の原点を示す符号なし整数です。幅 (width) と高さ (height) は、弧の幅と高さを表す、符号なしの整数です。

USERSTRINGPOS x y

符号なしの座標は、見出しでユーザー情報を印刷する位置を示します。

TIMESTRINGPOS x y

符号なしの座標は、見出しで印刷時刻を印刷する位置を示します。

PAGESTRINGPOS x y

符号なしの座標は、各印刷ページのページ文字列を印刷する位置を示します。

SUBJECTSTRINGPOS x y

符号なしの座標は、ページで主題を印刷する位置を示します。

STARTCOLUMN/ENDCOLUMN

すべてのキーワードは前述の STARTPAGE/ENDPAGE の領域と同じですが、この領域では、エントリは物理ページ 1 枚に NUMCOLS 回適用されます。

NUMCOLS が 3 である場合、物理ページの印刷可能な領域は 3 つに分割され、行、弧、あるいは見出しの装飾がページごとに 3 回になります。