Squeak5.0で日本語表示をするシリーズ: FontImporterTool を使う


ご多分に漏れず1バイト文字圏に自由気ままに振る舞われているのと、将来的には EncodingTag/leadingChar とかの仕組みが変わるような話も耳にして、5.0 までになった Squeak ではもはや日本語表示は無理なのかなぁ…4.3J とか 4.4J を使い続けるかなぁ…と、はなからあきらめて試してすらいなかったのですが、id:phaendal さんが http://phaendal.hatenablog.com/entry/2015/11/08/024055 の方法であっさり日本語表示できたの目の当たりにして、改心してちょっと調べてみました。


いろいろと眺めてみたところ、破壊されているのは確かですが、想像していたような壊滅的状況というわけではなく、根気強く直していけばなんとかなりそうな印象でした。しかし、それにつけても TrueType の表示に関わる TTなんちゃらクラス群は似たような名前のクラスが入り交じっていて、TrueType フォント周りはまったく無知な私が自力でなんとかするにしても、状況を把握する段階でかなり時間がかかりそうなので、とりあえず日本語を表示して遊びたいという向けの暫定的情報として FontImporterTool というのを見つけたのでこれだけ書いておきます。


このツールは Appsメニュー → Font Importer 等、あるいは、FontImporterTool open を do it (alt/cmd + d) することで起動できます。その名の通り、TrueType フォントをシステムにリンク、もしくはグリフデータごと読み込んでイメージ(環境)への組込みが可能な機構を持っているようです。

http://squab.no-ip.com/collab/uploads/FontImporterTool01.png


ただ相変わらずの Squeak クオリティで、デフォではいろいろと壊れているのでちょこちょこ直さないとうまく動きません。たとえば現状では、左側で選択したフォントが右側のプレビューで表示されないというなんだかなぁ…なバグがあります。

http://squab.no-ip.com/collab/uploads/FontImporterTool02.png


TrueType フォントファイル(.ttf、.ttc)によっては日本語フォントを提供していても、今の Squeak5.0 では日本語の表示ができないものもあるのでこれは不便です。そこで、とりあえず、FontImportTool>>#currentSelection: をさくっと一カ所修正(#contents を #previewText に変えて accept (alt/cmd + s)。イニシャルを求められたら適当に入れてあげてください)すれば、期待された動作をするようになるはずです。


http://squab.no-ip.com/collab/uploads/FontImporterTool03.png

http://squab.no-ip.com/collab/uploads/FontImporterTool04.png


これで選択したフォントの表示例が(なんとか)出るようになるので、この欄に 'あ' などと入力すれば選択したフォントで日本語表示が可能かどうか手軽に判断できるようになります。

http://squab.no-ip.com/collab/uploads/FontImporterTool05.png


フォントが決まったらインポートなのですが、ここで注意しないといけないのは、日本語表示用のフォントを下のボタンで Import しても表示できないということです。とんでもないワナですね。^^; Import ボタンを押したくなるのをぐっとこらえて、左側の枠の表示できるようにしたいフォント名のところで黄ボタン(通常は右ボタン)クリックし、 Link Font を選ぶ必要があります。

http://squab.no-ip.com/collab/uploads/FontImporterTool06.png


これで、ワークスペースなどの別ウインドウでもフォント選択ツール(FontChooserTool。alt/cmd + k)でフォントを選択すれば表示が可能になります。

http://squab.no-ip.com/collab/uploads/FontImporterTool07.png


システムフォントに設定するなどすれば日本語文字列の表示が可能になるはずです。手元の Windows では日本語入力も IME 経由で可能そうですが、他の OS ではいろいろといじる必要があるかもしれません。他にも、日本語フォントは MultiTTCFont でインポートされなければならないのに TTCFont になっているとか(したがって cache を再構築したりすると死にます)、もろもろの不都合があるので仕組みを勉強しつつ、暇をみて直していければと思っています。