PC Screen Font
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/04/13 08:36 UTC 版)
PC Screen Font(PSF)は、現在Linuxカーネルによってコンソールフォントに使用されているビットマップフォント形式である。PSFファイル形式のドキュメントは、Linuxのkbdユーティリティのソースコード内に含まれている[1]。
ファイルフォーマット
ファイルヘッダー
すべてのPSFファイルはヘッダーで始まる。ヘッダーにはPSF1とPSF2の2種類が存在する。すべてのマルチバイト整数はリトルエンディアン(下位バイトが先)である。
長さ | 説明 | 備考 |
---|---|---|
2 | マジックバイト | 常に 36 04
|
1 | PSFフォントモード | 様々なフォントフラグ。フォントモードを参照。 |
1 | グリフサイズ | グリフのサイズ(バイト数)、8ビット符号なし整数。psf1では文字サイズは常にグリフの高さに等しい。 |
長さ | 説明 | 備考 |
---|---|---|
4 | マジックバイト | 常に 72 b5 4a 86
|
4 | バージョン | 32ビット符号なし整数、現在は常に0 |
4 | ヘッダーサイズ | 32ビット符号なし整数、ヘッダーのバイトサイズ(通常は32) |
4 | フラグ | 32ビット符号なし整数、フォントフラグを参照 |
4 | グリフ数 | 32ビット符号なし整数、グリフの総数 |
4 | グリフサイズ | 32ビット符号なし整数、1グリフあたりのバイト数 |
4 | 高さ | 32ビット符号なし整数、各グリフの高さ |
4 | 幅 | 32ビット符号なし整数、各グリフの幅 |
すべてのpsf1グリフは幅8ピクセルである。
フォントモード
psf1ヘッダーにおけるフォントモードは、8ビット符号なし整数で、フォントに関する様々なフラグを含んでいる。
値(16進数) | 名称 | 意味 |
---|---|---|
0x01 |
PSF1_MODE512 | このビットがセットされている場合、フォントフェイスは512個のグリフを持つ。セットされていない場合、256個のグリフのみとなる |
0x02 |
PSF1_MODEHASTAB | このビットがセットされている場合、フォントフェイスはUnicodeテーブルを持つ |
0x04 |
PSF1_MODESEQ | PSF1_MODEHASTABと同義 |
フォントフラグ
psf2ヘッダーにおけるフォントフラグは、32ビット符号なし整数で、フォントに関する様々なフラグを含んでいる。現在は1つのフラグのみが存在する。
値(16進数) | 名称 | 意味 |
---|---|---|
0x00000001 | PSF2_HAS_UNICODE_TABLE | このビットがセットされている場合、フォントフェイスはunicodeテーブルを持つ |
ファイルビットマップ
実際のグリフデータはヘッダーの直後に続く。各グリフ内の各ビットはフォント内の1ピクセルを表しており、0は未描画、1は描画を示す。各グリフの各行は、バイト単位で揃えられるようにパディングされている。たとえば、12x12フォントでは1行あたり2バイトとなる。12x12のPSFビットマップにおける文字「A」は以下のように表現されることがある。
パディング フォントデータ | +----------------+ +--+ 000001100000 0000 000011110000 0000 000110011000 0000 001100001100 0000 011000000110 0000 110000000011 0000 111111111111 0000 111111111111 0000 110000000011 0000 110000000011 0000 110000000011 0000 110000000011 0000
12ビット分の実データと、それぞれの行を最も近いバイト単位まで埋めるパディングが含まれている。行は最左列から順に格納される。
Unicodeテーブル
PSFファイルがUnicodeテーブルを含む場合、各グリフはUnicodeテーブル内にエントリを持ち、最初のグリフはテーブルの最初のエントリに、2番目のグリフは2番目のエントリに対応する。Unicodeテーブル内のエントリの形式は、PSFヘッダーの種類によって異なる。
PSF1Unicodeテーブル
PSF1ファイルのUnicodeテーブル内のエントリは、0xffffで終わる16ビットリトルエンディアンの符号なし整数の連続として表される。エントリ内の最初の整数群は、対応するグリフで表現されるUnicode文字を含む。これらのUnicode文字は、整数0xfffeに達するまで続く。その後は、0xfffeから始まり、個別のUnicode文字ではなく、グリフに対応するUnicode文字列を表す整数の連続が記述される。新たな0xfffeが現れるたびに新しい文字列の列が始まり、0xffffに到達するまで続く。たとえば、以下のような16ビットリトルエンディアンの符号なし整数の連続は、次のように解釈される。
0xdead 0xbeef 0xfffe 0x3141 0x5926 0xfffe 0x1234 0x5678 0xffff
U+DEAD、U+BEEF、U+3141 U+5926の列、またはU+1234 U+5678の列が現れた場合には、該当するUnicodeテーブルのエントリに対応するグリフを表示する。
PSF2Unicodeテーブル
PSF2ファイルのUnicodeテーブル内のエントリは、PSF1ファイルとほぼ同様である。ただし、Unicode文字はUTF-8で表され、Unicode文字列の開始は2バイトの0xfffeではなく1バイトの0xfeで示され、Unicodeエントリの終了も2バイトの0xffffではなく1バイトの0xffで示される。
脚注
- PC Screen Fontのページへのリンク