私がアホすぎて Squeak のフォントは難くて分からなくて忘れるのでメモ。
文字とは何か?
Squeak では文字列と文字は厳密に区別されている。文字は 'もじれつ' だけど、文字は $も のようにプログラムの中で書く。それぞれの文字ごとに、コンピュータの中で違った数字が割り当てられていて、asciiValue で取り出す事が出来る。asciiValue は ascii とは関係無い Squeak 独自の文字コードだ。
$も asciiValue 20983938
この 20983938 という数字は何かと言うと、「も」の unicode 番号の 0x3082(charCode と呼ぶ)、日本語文字を表す番号(leadingChar と呼ぶ) 5、マジックナンバー 0x400000 を組み合わせ次の式で求める事が出来る。下位 1-22 ビットを charCode (1ビット分オマケか?)、その上 23-30 ビットを leadingChar に使っていると考えても良い。
4194304 * 5 + 12418 = 20983938 (10進) 0x400000 * 5 + 0x3082 = 0x1403082 (16進)
leadingChar は、日本語以外に次の物があって、LanguageEnvironment
class>>leadingChar で定義されている。かなり欠番がある。
- Latin1 0
- Japanese 5
- SimplifiedChinese 6
- Greek 13
- Latin2 14
- Russian 15
フォントとは何か
文字コードから文字の形への対応がフォントだ。普通フォントと言うと字の形だけ言う時もあるけど、この場合形やサイズや太字や斜めや、そういうちょっと属性の違う物も別のフォントと数える。また、は文字コード(asciiValue)では無く、charCode(UNICODE) を使って対応を行う。実装の自由度を上げるため(?) Squeak の中ではコードから画像を得るメソッドは必須では無く、代わりにdisplayString:on:from:to:at:kern: という BitBlt に文字列を描画するメソッドが必要条件になっている。なので、テストは面倒だ。
| bb | bb _ Display getCanvas privatePort. bb combinationRule: Form paint. TextStyle defaultFont installOn: bb foregroundColor: Color black backgroundColor: Color white. TextStyle defaultFont displayString: 'も' on: bb from: 1 to: 1 at: 10@100 kern: 1.
フォントの違い
AbstractFont 以下、様々なクラスが定義されている。
フォント読み込みの手順
続く。