FreePWING では、辞書に固有の字を外字として定義して利用することも できます。 ただし、外字を利用するには、外字定義ファイルと、各文字の ビットマップデータ (フォントデータ) を用意する必要があります。 以下、この章では外字を使用する方法を詳しく見ていきます。
外字を定義する際は、各字のビットマップデータを用意しなくてはなりません。 ビットマップデータは、小さな長方形の点を縦横に何個も敷き詰めたもので 構成されます。 また、マップ自体はモノクロのデータで、色情報は持ちません。 ちょうど、XBM (X BitMap) 形式の画像データと同じです。
次は音楽のト音記号の外字ビットマップデータの例です。 (■が前景色の点、□が背景色の点です。)
□□□□□■■■ □□□□■□■□ □□□■□■□□ □□□■□■□□ □□□■■□□□ □□■□■□□□ □□■□■■■□ □■□■□■□■ □■□■□■□■ □■□□□■□■ □□■□□■■□ □□□■■■□□ □□□□■□□□ ■■□□■□□□ ■■□■□□□□ □■■□□□□□
JIS X 4081 では、「全角」「半角」という 2 種類の外字を定義しています。 全角外字はビットマップの縦と横の点の数がほぼ同じ外字で、それに対して 半角外字では横方向の点の数が縦の半分になります。 上のト音記号は、半角外字 (横 8、縦 16) です。
半角外字と全角外字はまったく独立しています。 辞書は、全角あるいは半角のどちらか一方の外字だけ定義することも できますし、両方とも定義することも可能です。 両方定義する場合でも、ある字を半角、全角の一方にだけ登録することも 可能です。
ビットマップデータは、全角、半角それぞれの外字に対して、以下のように 4 つずつサイズの違うものを用意することが可能です。
外字の種類 \ 高さ | 高さ 16 | 高さ 24 | 高さ 30 | 高さ 48 |
半角外字 (横×縦) | 8×16 | 16×24 | 16×30 | 24×48 |
全角外字 (横×縦) | 16×16 | 24×24 | 32×30 | 48×48 |
このうち、縦方向の点が 16 個のビットマップ (半角の 8x16, 全角の 16x16) は必須です。 他のサイズは、大きなサイズのビットマップから順に省略することができます。 これはたとえば、縦の点の数が 48 と 30 の外字を省略して 16 と 24 だけ 定義することは可能ですが、48 と 24 を省略して 16 と 30 だけ定義する ことはできない、ということです。
また、ビットマップは、それぞれの外字について利用可能なすべてのサイズの 分を用意しなければなりません。 たとえば、あなたが 16, 24, のサイズのビットマップを用意すると決めたら、 定義した外字すべてに対して、必ず 16 と 24 のサイズのビットマップを それぞれ用意しなければなりません。 ある外字は 16 と 24 のサイズのビットマップを用意するけれども、別の外字 には 16 だけしか用意しないということはできません。
FreePWING では、外字のビットマップデータには XBM 形式のファイルを 用います。 登録したい外字一字毎、サイズ毎に一つの XBM ファイルを用意します。 XBM ファイルは、UNIX の X の環境であれば bitmap コマンド等で作成 できます。 ビットマップエディタが XBM 形式を扱えるものでなければ、描画した後で 画像形式の変換ツールを使って XBM に変換して下さい。
ビットマップが用意できたら、次に外字定義ファイルを作成します。 半角外字、全角外字を両方とも定義する場合は、定義ファイルも 2 つに 分けて用意します。
外字定義ファイルには、次のような形式で 1 行に 1 つの外字を定義します。
外字名 XBMファイル名 XBMファイル名 XBMファイル名 XBMファイル名
以下は記述例です。
g-clef g-clef16.xbm g-clef24.xbm g-clef30.xbm g-clef48.xbm f-clef f-clef16.xbm f-clef24.xbm f-clef30.xbm f-clef48.xbm
各パラメタは 1 個以上の空白かタブで区切ります。
「外字名」とは、その外字を利用するときに参照する名前です。 全外字で一意であれば、好きな名前を付けることができます。 ただし、外字名には空白やタブ、改行文字は使用することができません 外字名は半角と全角で独立していますので、同じ名前のものを定義しても、 衝突することはありません。 半角外字内、全角外字内で複数回同じ外字名を定義すると、エラーになります。
「XBMファイル名」は、外字のビットマップファイル名です。 左から順に高さが 16, 24, 30, 48 のものを並べます。 一部のサイズのビットマップを用意しない場合は、そのパラメタは指定 しないで下さい。 ですから、実際は XBM ファイル名は 1 〜 4個の範囲で指定されることに なります。 ただし、指定するファイル名の個数は、ファイル内で一定でなければ なりません。 途中で変化するとエラーになります。
なお、ファイル名はカレントディレクトリからの相対パス指定になります。 次のように、ディレクトリの区切りを入れることも可能です。
g-clef bitmap/g-clef16.xbm bitmap/g-clef24.xbm f-clef bitmap/f-clef16.xbm bitmap/f-clef24.xbm
指定した XBM の画像サイズは、その外字のサイズと同一のものでなくては なりません。 異なったサイズだと、エラーが発生します。
前節までに書かれたことの準備ができたら、実際に外字データを生成します。
半角外字用には fpwhalfchar
コマンド、全角外字用には
fpwfullchar
コマンドを実行します。
両方定義しているときは、両方実行します。
順番はどちらが先でも構いません。
たとえば、半角外字の外字定義ファイル名が halfchar.txt
、
全角外字の外字定義ファイル名が fullchar.txt
だとすると、
次のようなコマンド行を入力して下さい。
% perl /usr/local/share/FreePWING/fpwutils/fpwhalfchar halfchar.txt % perl /usr/local/share/FreePWING/fpwutils/fpwfullchar fullchar.txt
(ここでは FreePWING を /usr/local
以下にインストールし、
libexecdir
の位置を変更していないものとします。
他の場所にインストールしているときは、適宜読み替えて下さい。)
正常に終了すれば、次のビットマップデータファイルができ上がります。 ただし、用意しなかったサイズの分は作成されません。
外字の種類 \ 高さ | 高さ 16 | 高さ 24 | 高さ 30 | 高さ 48 |
半角外字 | gai16h | gai24h | gai30h | gai48h |
全角外字 | gai16f | gai24f | gai30f | gai48f |
これらのファイルは honmon
と同じく、最終的に
辞書データパッケージの一部として使われます。
それ以外に中間ファイルも生成されますが、これらは本文の中で外字を
参照するときに使用されます。
fpwhalfchar, fpwfullchar を直接実行する代わりに fpwmake を使って外字 データを生成することもできます。 通常は、こちらのほうが楽で良いでしょう。
前節と同様に、半角外字の外字定義ファイル名が halfchar.txt
、
全角外字の外字定義ファイル名が fullchar.txt
だと仮定する
と、Makefile
に以下の記述を追加します。
HALFCHARS = halfchar.txt FULLCHARS = fullchar.txt
半角外字、全角外字の一方だけを生成する場合は、HALFCHARS
、
FULLCHARS
の一方だけを定義して下さい。
なお、複数個のファイルを指定することも可能です。
変換した書籍データのアーカイブ を作る際
に、HALFCHARS
、FULLCHARS
で指定した
外字定義ファイルは自動的にアーカイブに収録されますが、ファイル中に指定
されている XBM ファイルは、収録されません。
XBM ファイルをアーカイブに収録するには、ARCHIVEEXTRA
で
明示的に指定する必要があります。
ARCHIVEEXTRA = g-clef16.xbm g-clef24.xbm g-clef30.xbm g-clef48.xbm \ f-clef16.xbm f-clef24.xbm f-clef30.xbm f-clef48.xbm
XBM ファイルの数が多いときは、外字ファイルをサブディレクトリに置き、
ARCHIVEEXTRA
にはそのディレクトリ名を指定すると
良いでしょう。
ARCHIVEEXTRA = gaiji
外字を本文中で使用するには、あらかじめ fpwhalfchar
、
fpwfullchar
コマンドを実行して、定義された外字の
参照ファイルを用意しておかなければなりません。
つまり、fpwhalfchar
、fpwfullchar
は
変換プログラムよりも前に実行する必要があります。
(fpwmake を使用するのであれば、自動的に正しい順番で実行されますので、
実行順序を気にする必要はないでしょう。)
半角外字を本文中に書き込むには、本文書き込み用のクラス
FreePWING::FPWUtils::Text
のオブジェクトに対して
add_half_user_character()
を呼び出します。
if (!$fpwtext-$gt;add_half_user_character('g-clef')) { die $fpwtext->error_message() . "\n"; }
この例では、"g-clef" という名前の半角外字を書き込んでいます。 この外字名は、半角外字の外字定義ファイルに登録されているもので なければなりません。 未登録の外字を使用すると、エラーになります。
全角外字については、代わりに
add_full_user_character()
メソッドを呼び出す点が異なる
だけで、呼び出し方などはすべて同じです。