mieki256's diary



2014/12/16(火) [n年前の日記]

#1 [dxruby][font] BDFフォントについてまだ調べてたり

いくつか分かってきたことがあるのでメモ。

STARTCHARの謎。 :

BDFフォントは、1文字分の情報を、STARCHAR xxxx 〜 ENDCHAR の間で記述してるのだけど。

自分、てっきり、STARTCHAR xxxx の xxxx は、文字番号だろうと思い込んでいたわけで。
 STARTCHAR 0x0025
 ...
 ENDCHAR
 STARTCHAR 0x0026
 ...

ところが、色々なBDFを眺めてたら、どうもそうではないようで。
 ...
 ENDCHAR
 STARTCHAR space
 ...
 ENDCHAR
 STARTCHAR exclam
 ...

おそらく、STARTCHAR の後ろには、それが何の文字なのかを示す文字列が書いてあるだけ、なのかなと。

すると文字の番号はどこに書いてあるかと言うと、STARTCHAR の次の行にある ENCODING がそれっぽくて。
 ...
 ENDCHAR
 STARTCHAR space
 ENCODING 32
 ...

てなわけで、昨日書いた DXRuby で BDFフォントを描画するソレは、BDFフォントによっては全然表示できなかったりするはずなので、現在手元で修正中。

CHARSETの謎。 :

BDFフォントは CHARSET_REGISTRY で文字コードを指定してるようで。今現在手元にあるBDFを眺めたら、どうも以下の種類があるらしく。
  • iso8859 ... 英数字
  • jisx0201 ... 半角カナ
  • jisx0208 ... ひらがな、漢字
  • iso10646 ... UTF-8みたいなもの
  • jisx0213
今時半角カナを使う人は居ないだろうから、JISX0201 は無視するとして。

iso8859 は、ASCIIコードみたいなもんだから問題無いかなと。Ruby の場合 _String#ord で、文字列から数値に変換できるので、ソレを使ってハッシュと照らし合わせて文字情報を取ってくればOKだろうと。

jisx0208 は、SJIS から jisx0208 に変換する公式が _文字コードまめ知識 で紹介されてたので、これもどうにか。

iso10646 は、Ruby 1.9 の場合、 _String#encode で SJIS から UTF-8 に変換したらそれっぽくなったのでOK。str.encode("UTF-8", "SJIS").ord みたいな。

分からんのが、jisx0213。sjis からどうやってコレに変換すればいいのやら…。nkfモジュールその他も調べてみたけど、何が何やら。

バウンディングボックスの謎。 :

Adobe から BDFフォントのサンプルとして公開されてたらしい、courR14.bdf を描画してみたら、abcdefg のあたりの上下がガタガタになってしまったのですよ。

調べてみたら、BDFフォントってのは、ベースラインの位置を原点とするようで。 _itouh: BDFについて を眺めると分かりますが。かつ、オフセット値のy方向は、上がプラスで下がマイナス、として記録されてる模様。

ということで、左上の位置を描画位置として指定したつもりの場合、
  1. y座標に、フォント全体のバウンディングボックスの縦幅を足して、
  2. フォント全体のバウンディングボックスのyオフセット値(えてしてマイナス値)を足して、
  3. 描画したい文字のバウンディングボックスの縦幅を引いて、
  4. 描画したい文字のバウンディングボックスのyオフセット値を引く。
…ことで、描画の左上の位置が求まるかなと。

x方向は、描画したい文字のバウンディングボックスのxオフセット値を足すだけでいいみたい。

2014/12/17追記。 :

SJIS から jisx0213 の変換は、jisx0208 と同じ公式でいいのかもしれない。試してみたら文字が出た。もしかして、jisx0208 に文字を追加 → jisx0213、なのだろうか…?

以上です。

過去ログ表示

Prev - 2014/12 - Next
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project