Squeak3.10 で、とりあえず「MS P 明朝」「MS P ゴシック」を使えるようにするためのメモ


個人的には、当面は手になじんだ 3.9 をひっぱるつもりですが、いつかは 3.10 でプレゼン…ということもあるかもしれないので、そのときになってはじめてビックリしたり打ちひしがれたりしないように、今、3.10 の日本語まわり、とくに日本語 TT の読み込みや表示がどの程度 壊されて 変更されてうまく動かなくなっている状態なのか、恐る恐る見てみました。


▼日本語ビットマップフォントや翻訳メッセージなどのリソースのインストール

id:chobi さんも書いておられるように、SqueakMap にある umejava さんの Japanese Environment Installer は機能するようで、ホッ。


▼ msmincho.ttc、msgothic.ttc の読み込み

Vista に含まれる msmincho.ttc、msgothic.ttc は読み込み時にエラーになるので、すでにこの時点でダメかもわからんね…と思ったのですが、以前使った XP に入っていた古い .ttc は読み込める模様。くだんの文字コードまわりの変更の影響でしょうか。古い .ttc を使う限りにおいては、以前書いた、プロポーショナルフォントを読み込む拡張も機能するみたいです。


▼フォント変更時のハングアップに対する後ろ向きな処置

と、ここまでは大きな問題はなさそうだったので、な〜んだ心配するほどのことはなかったな…と思った矢先、いざフォントを変更しようとすると見事にハングアップ。orz ざっと原因らしきものをしらべてみると、MultiTTCFont のスーパークラスである TTCFont でキャッシュ周りの仕様の変更があって、その影響でサブクラスの MultiTTCFont のキャッシュが機能しなくなってしまっているようです。

グリフの扱いは複雑で今の私の手には負えなさそうなので、きちんとした対処方法は思いつかなかったのですが、対症療法的に MultiTTCFont のキャッシュを無効にすることで、とりあえず表示させることは可能であることがわかりました。具体的には、キャッシュの有無を判断している MultiTTCFont>>#hasCached:ifTrue: に対して無条件に false を返させ、キャッシュに書き込む MultiTTCFont>>#at:put: に何もさせないように変更します。

MultiTTCFont >> hasCached: char ifTrue: twoArgBlock
    ^false
MultiTTCFont >> at: char put: form
    "do nothing"