PC Screen Font

フォントフォーマット From Wikipedia, the free encyclopedia

PC Screen Font(PSF)は、現在Linuxカーネルによってコンソールフォントに使用されているビットマップフォント形式である。PSFファイル形式のドキュメントは、Linuxのkbdユーティリティのソースコード内に含まれている[1]

ファイルフォーマット

ファイルヘッダー

すべてのPSFファイルはヘッダーで始まる。ヘッダーにはPSF1とPSF2の2種類が存在する。すべてのマルチバイト整数はリトルエンディアン(下位バイトが先)である。

さらに見る 長さ, 説明 ...
psf1 ヘッダー
長さ説明備考
2マジックバイト常に 36 04
1PSFフォントモード様々なフォントフラグ。フォントモードを参照。
1グリフサイズグリフのサイズ(バイト数)、8ビット符号なし整数。psf1では文字サイズは常にグリフの高さに等しい。
閉じる
さらに見る 長さ, 説明 ...
psf2 ヘッダー
長さ説明備考
4マジックバイト常に 72 b5 4a 86
4バージョン32ビット符号なし整数、現在は常に0
4ヘッダーサイズ32ビット符号なし整数、ヘッダーのバイトサイズ(通常は32)
4フラグ32ビット符号なし整数、フォントフラグを参照
4グリフ数32ビット符号なし整数、グリフの総数
4グリフサイズ32ビット符号なし整数、1グリフあたりのバイト数
4高さ32ビット符号なし整数、各グリフの高さ
432ビット符号なし整数、各グリフの幅
閉じる

すべてのpsf1グリフは幅8ピクセルである。

フォントモード

psf1ヘッダーにおけるフォントモードは、8ビット符号なし整数で、フォントに関する様々なフラグを含んでいる。

さらに見る 値(16進数), 名称 ...
フォントモードのビット
値(16進数名称意味
0x01PSF1_MODE512このビットがセットされている場合、フォントフェイスは512個のグリフを持つ。セットされていない場合、256個のグリフのみとなる
0x02PSF1_MODEHASTABこのビットがセットされている場合、フォントフェイスはUnicodeテーブルを持つ
0x04PSF1_MODESEQPSF1_MODEHASTABと同義
閉じる

フォントフラグ

psf2ヘッダーにおけるフォントフラグは、32ビット符号なし整数で、フォントに関する様々なフラグを含んでいる。現在は1つのフラグのみが存在する。

さらに見る 値(16進数), 名称 ...
フォントフラグのビット
値(16進数)名称意味
0x00000001PSF2_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で示される。

脚注

Related Articles

Wikiwand AI