X-TrueType 1.x に関する資料
X-TT 1.x は近い将来,開発を終了します.
新しくなった FreeType(libfreetype-xtt2) に関する資料
After X-TT Project では,CJKV環境で必須なX-TTの機能を
FreeTypeバックエンドでも
使えるようにするための改良作業を行なってきました.
その成果はThe XFree86 Project
に取り込まれ,
XFree86-4.4.0 リリースでは,"freetype"モジュール,そして
xfs,Xnestでも同様に完全なTTCap オプション
が利用可能になります.
以下に,この新しいFreeType(libfreetype-xtt2)バックエンド
についての資料を用意しました.
新しい FreeType バックエンドの威力
日本語フォント や unicode フォント のような
文字数の多いプロポーショナルフォントをロードするときに,
従来の FreeType バックエンドでは
文字が表示されるまでにあまりに時間がかかりすぎていました.
この問題を解消するために,
新しい FreeType(libfreetype-xtt2) バックエンドでは X-TT の
`very lazy' method を改良して実装しています.
以下にそのパフォーマンスを調べた結果を示します.
テストには以下の単純なコードを用いました:
/* bench.c */
#include <X11/Xlib.h>
int main( int argc, char *argv[] )
{
Display* dis;
dis=XOpenDisplay(NULL);
XLoadQueryFont( dis, argv[1] );
return 0;
}
フォントは Cyberbit
unicode フォント
を使用しました.以下が計測に使ったコマンドです:
% time ./bench "-bitstream-cyberbit-medium-r-normal--0-0-0-0-p-0-iso10646-1"
結果をグラフにしてみました:
新しい FreeType バックエンドの
`very lazy' method は驚異的に高速である事がわかります.
新しい FreeType バックエンドでは,
マルチバイトなフォントをロードする時に,
この `very lazy' method がデフォルトで有効になります.
したがって,TTCapオプションを設定しなくても,
FreeTypeバックエンドを使っていれば,
たとえ数万の文字を持つプロポーショナルフォントを表示させても
イライラさせられる事はないでしょう.
TTCap オプションのリファレンス
次のようなオプションが指定できます:
fn=整数
-- このオプションにより,TrueType/OpenType コレクション(*.ttc, *.otc)
ファイルの face 番号を指定します.
(fn : Face Number)
ai=実数
-- このオプションによって,文字の傾きを指定することができます.
(ai : Automatic Italic)
fs=[pmc]
-- このオプションは,フォントメトリックの計算法を指定します.
このオプションに指定された文字が
XLFD の SPACING フィールドに指定されたものと見なされて,
フォントのメトリックが計算されます.このオプションが無かった場合,
XLFD の SPACING フィールドによってメトリックは制御されます.
(fs : Force Spacing)
bw=実数[;整数,整数,整数]
-- このオプションは,フォントのバウンディングボックスの幅の倍率を
指定します.
セミコロン以降の3つの整数で,ピクセル単位で width, left side
bearing, right side bearing を微調整できます.
小さいフォントでスペーシングが詰まりすぎたり,
あるいは広すぎたりする場合に利用できます.
このオプションが存在しない場合,倍率は 1 となります.
(bw : Bounding box Width)
ds=[ymn][b][;整数]
-- ダブルストライク(二重打ち)効果を使用したい場合,このオプションを
y または m にします.
従来のダブルストライク表示は
フォントサイズが小さい場合に可読性が悪くなる場合がありました.
"ds=m
" と指定すると,
mkbold
と同様の手法でビットマップのエッジを残しつつ太字にし,
可読性を改善します.
"ds=yb
" あるいは "ds=mb
"
のようにすると,
バウンディングボックスのサイズを横に1ドット大きくします.
最後の 整数 は
mkbold の手法を適用する最大のフォントサイズ(ピクセル値)を指定します.
Screen shot : ds=y
/
ds=m
(ds : Double Strike)
vl=[yn]
y を指定すると,プロポーショナルおよびモノスペーシングフォントにおいて,
ヘッダ情報(htmx)に基づく,
`very lazy' method(非常に怠惰な方法)でメトリック計算を行います.
これは,MS P Gothic 日本語フォント や
Bitstream Cyberbit unicode フォントのような
文字数の多いプロポーショナルフォントを実用的な速度で使いたい場合に有効です
(逆に,厳密な方法だと実用にならないでしょう).
メトリック計算を厳密に行わないのでレスポンスはかなり向上しますが,
逆にメトリック情報はいい加減なものになるでしょう(しかしながら,
この種のいい加減さが問題になるケースは非常に少ないでしょう).
`very lazy' method におけるビットマップポジションの最大誤差は
1 ピクセルで,これはキャラクターセルスペーシングの時と同様です.
従来の X-TT backend で "vl=y" を指定すると,しばしば欠けたビットマップが
表示される事がありました.
しかし,新しい FreeType バックエンドでは,
TrueType/OpenType の post table の italicAngle
を使ってメトリックを補正するため,この現象はほとんど起こらないでしょう.
このオプションがセットされない場合,
1バイトのフォントについてはアウトライン情報に基づく厳密な方法で計算され,
マルチバイトのフォントについては `very lazy' method が自動的に有効になり,
高速にメトリックを計算します.
したがって,新しい FreeType バックエンドではユーザはこのオプションを通常
気にする必要はありません.
(vl : Very Lazy metrics calculation method)
hi=[yn]
-- このオプションを n に設定すると,FreeType レンダラは
フォントのヒント情報を使わなくなります.
(hi : HInting)
cr=範囲[,範囲,...]
-- フォントのコードの範囲を制限します.それぞれの範囲は,
数
数-数
-数
数-
という書式で指定できます.
範囲をコンマで区切ることにより断片的な範囲を指定することもできますが,
実際には断片にはならずに
それぞれの範囲を覆い尽くすような一つの範囲を指定したのと等価に扱われます.
それぞれの数には八進数,十進数,十六進数を指定することができ,
八進数は 0 を前置することにより,また,十六進数は 0x
を前置することにより十進数と区別します.
このオプションは,
特に Unicode フォントの一部のグリフのみを使いたい場合などに有効です.
XLFD の範囲指定とは異なり,
クライアントからは,
フォントそのものが指定された範囲内のグリフしか持たないように見えます.
(cr : Code Range)
eb=[yn]
-- これを y にすると,埋め込みビットマップを使うよう試みます.
ただし,フォントが埋め込みビットマップデータを持っている必要があります.
"eb=y" の場合には,"ai" オプションを 使ったイタリック体の場合にも
埋め込みビットマップを使用します.
"eb" の指定がない場合には "ai" オプションを使ったイタリック体の場合には
埋め込みビットマップを使用しません.
Screen shot : eb=y
/
eb=n
(eb: Embedded Bitmaps)
fc=範囲
-- 強制的にコンスタントメトリックとする文字コードの範囲を指定します.
範囲は,
数
数-数
-数
数-
という書式で指定できます.
それぞれの数には八進数,十進数,十六進数を指定することができ,
八進数は 0 を前置することにより,また,十六進数は 0x
を前置することにより十進数と区別します.
また,"fc=0xaa00-0xa0ff" のように前後を逆にした指定が可能で,
例えばこの指定の場合は 0x0000-0xa0ff と 0xaa00-0xffff の範囲が
fc 指定となります(GB18030のプロポーショナルに便利でしょう).
このオプションは FreeType
バックエンド内部でプロポーショナルやモノスペーシングとなっている場合にのみ有効で,
指定した範囲のメトリックの計算は省略し,
すべて同じメトリック(このメトリックは"fm"オプションで指定します)となります.
このオプションはポロポーショナルな日本語やunicode,GB18030などの
2バイト文字の表示を高速化するのに大変有効です.
(fc : Force Constant spacing code range).
fm=文字コード
or fm=実数,実数,実数
-- "fc" オプションで指定した範囲の文字のメトリックを指定します.
"fm" オプションが指定されない場合,
"fc" 指定の範囲はヘッダ情報のメトリックを用います.
しかし,これはいつも便利とは限りません.
"fm" オプションでは,
そのメトリックを文字コードあるいはヘッダ情報のバウンディングボックスの幅に対する倍率で指定できます.
もし "fm=0x5a00" のような文字コードが指定されれば,
FreeTypeバックエンドは文字コード 0x5a00 のメトリックを取り出し,
そのメトリックを fc 指定の範囲に適用します.
一方,"fm=0.5,0,0.5" のように
ヘッダ情報のバウンディングボックスの幅に対する倍率で指定すると,
その指定が fc 指定の範囲のメトリックとなります.
この3つの実数はそれぞれ width, left side bearing, right side bearing
に対応します.
(fm : Force constant spacing Metrics).
fp=[yn]
-- X-TT 1.x で付加しなかったフォントプロパティを付加するかどうかを指定します.
X-TT 1.x バックエンドでは、
FONT_ASCENT, FONT_DESCENT, SUBSCRIPT_SIZE, SUBSCRIPT_X, SUBSCRIPT_Y,
SUPERSCRIPT_SIZE, SUPERSCRIPT_X, SUPERSCRIPT_Y, UNDERLINE_THICKNESS,
UNDERLINE_POSITION といったフォントプロパティを付加していませんでした。
FreeTypeバックエンドでは、
これらのプロパティはデフォルトでは付加するようになっています
(つまり "fp=y" です)。
このため、
これらのフォントプロパティを参照しているアプリケーションでは、
フォントによってアンダーラインの位置が
X-TT 1.x の場合と異なって表示される事があります
(Mozilla + Osaka フォントなどでアンダーラインの位置がずれるようです)。
その場合には、"fp=n" を指定すれば、FreeTypeバックエンドは
これらのプロパティを付加しなくなり、
X-TT 1.x の場合と全く同じ表示になるはずです。
(fp : Font Properties).
Last Modified: 31 Oct. 2004