実践Linux                 TOPへ  Cプログラミング目次へ

プログラムのフォント  2011年7月更新


●X Window Systemのフォント(CentOS5の場合)
X においては、旧来の core font system と、 Xft の二つの描字システムがあり、両者でフォントの指定法が異なる。
どちらを使用しているかは環境変数GDK_USE_XFTの値で決定される。
0のときcore font system、0以外または未設定はXft。
/etc/X11/fs/configファイルにフォントの場所が記述されている。

●Xft
Xft は始めから TrueType 等の、スケーラブルフォントの良いサポートを目指して開発されたシステム。
最近のソフトは大体これを使用。

インストールされたフォントのリストをみるには
 # fc-list | less

 # nautilus fonts:///

●core X11 font system (伝統的)
ビットマップの例
-arabeyes-fixed-medium-r-normal--20-200-75-75-c-100-iso10646-1
最初の arabeyes はメーカー等の名、二番目の fixed がフォントの名前です。medium は太さ、 r はローマン。
数字のならびは、最初の 20 が文字のサイズ。最後の iso10646-1 はフォントのエンコーディングで、この例ではユニコード。

OpenType 等のスケーラブル ( = 任意の大きさに拡大可能な ) フォントの例
-misc-lateef-medium-r-normal--0-0-0-0-p-0-iso10646-1
サイズ関係の数字が、全て 0 になっている。スケーラブルなフォントでは、名前さえ指定すれば十分なので、 0 にする。(プログラム中では最初の0を20等に変えて大きさを指定。)

ワイルドカードとして * (アスタリスク) も使える。

インストールされたフォントのリストをみるには
 # xlsfonts
 ワイルドカードが使えるので、ユニコード = iso10646 のものを使いたいときは、
 # xlsfonts -fn "-*-iso10646-1" | less
書体を表示させる。
 # xfd -fn -misc-lateef-medium-r-normal--0-0-0-0-p-0-iso10646-1
 # xfontsel

コア X フォントサブシステム(xfs)にフォントを追加するには(例えば、windowsのMS明朝を追加してみる。)
@追加用に適当なディレクトリ/usr/share/fonts/local/を作成。
新しいフォントファイルを/usr/share/fonts/local/ ディレクトリにコピー。
rootで次のコマンドを発行して、フォント情報を作成。
# ttmkfdir -d /usr/share/fonts/local/ -o /usr/share/fonts/local/fonts.dir
# ttmkfdir -d /usr/share/fonts/local/ -o /usr/share/fonts/local/fonts.scale

A次作成したディレクトリをxfsの パスに追加。
安全のため/etc/X11/fs/configを別名コピーしておく。
次のコマンドをrootで入力。
# chkfontpath --add /usr/share/fonts/local/
/etc/X11/fs/configに/usr/share/fonts/localが追加される。

直接、/etc/X11/fs/configを編集してもよい。
# where to look for fonts
catalogue = /usr/share/X11/fonts/misc:unscaled,
/usr/share/X11/fonts/75dpi:unscaled,
/usr/share/X11/fonts/100dpi:unscaled,
/usr/share/X11/fonts/Type1,
/usr/share/X11/fonts/TTF,
/usr/share/fonts/default/Type1,
,
/usr/share/fonts/japanese/misc:unscaled,
/usr/share/fonts/japanese/misc,
/usr/share/fonts/japanese/TrueType,
/usr/share/fonts/local  ←追加


Bルートとして次のコマンドを使用してxfsフォントサーバーを 再起動。
# service xfs reload

●Xプログラム中での日本語のフォントの指定
X11
 # xlsfonts で探してもなかなか難しいので直接探す。
 CentOS5の場合、/usr/share/fonts/japanese/TrueTypeに「さざなみ」がある。
 ここのディレクトリのfonts.dirに「sazanami-gothic.ttf -misc-sazanami gothic-medium-r-normal--0-0-0-0-c-0-jisx0208.1983-0」等のような記述がある。
 この中で、最後が「-jisx0208.1983-0」となってるものが全角を意味する。
 全角は、この「-misc-sazanami gothic-medium-r-normal--0-0-0-0-c-0-jisx0208.1983-0」等を指定してやるとよい。
 半角は「-misc-sazanami gothic-medium-r-normal--0-0-0-0-c-0-iso10646-1」等。「iso10646-1」 はユニコードを意味する。
 「--0-0-0-0-c-0-」を「--12-0-0-0-c-0-」などに換えてやるとサイズが指定できる。

GTK+等でのフォントの指定例
 GdkFont *font1 = gdk_fontset_load(“-misc-sazanami gothic-medium-r-normal--0-0-0-0-c-0-jisx0208.1983-0, lucidasanstypewriter-bold-24”);
 -misc-sazanami gothic-medium-r-normal--0-0-0-0-c-0-jisx0208.1983-0が全角日本語表示用。
 lucidasanstypewriter-bold-24が半角英数字表示用。
 TrueTypeのフォントを使いたいときは、pango、cairoを使います。こちらを参照

●プログラム中で日本語はUTF-8コードで表記
UTF-8では、ASCIIコードは、1バイトで表すが、0x0800から0xFFFFまでのマルチバイト文字は、3バイトで表す。
UTF-8では、各文字の先頭ビットにより、文字の種類を簡単に判定できる。
1ビットめの値
 0: 制御コード、ASCII文字
 1: マルチバイト文字
コードは、http://ash.jp/ash/src/codetbl/のサイト等で調査。
例えば「フ」は16進数で「E38395」。
プログラム中では "\xE3\x83\x95"または8進数で "\343\203\225" と記述する。
E3、83、95それぞれが8進数で 343、203、225に対応。
変換は、http://hogehoge.tk/tool/number.htmlのサイト等で行うと簡単。


TOPへ  Cプログラミング目次へ