読者です 読者をやめる 読者になる 読者になる

レガシーコード生産ガイド

私に教えられることなら

Squeak5.0で好きなTrueTypeフォントを使い、日本語を表示する

Smalltalk Squeak 備忘録

(2015-11-23追記)id:sumimさんがFontImporterToolを使うやり方を紹介されています。

必要なものは日本語が表示できるTrueTypeフォントファイル(.ttf.ttc)のみです。私の環境はLinuxですが、読みかえれば他のOSでも可能だと思います。Squeak-5.0-All-in-Oneを使用しています。

他に正しいやり方、安全なやり方などがある場合はコメント欄で教えてください。

また、私は狂気を司るデイドラロード・シェオゴラスの呪いによって、真面目に文章を書くと死にます。よって文中では情報の正誤に影響の無い範囲でくだらない冗談などを記述します。そういったものが苦手な方は、我慢してください。

フォント設置

まずTTFファイルを設置します。squeak-jaのドキュメントによると、TTFileDescriptionがフォントファイルを探す場所は

  1. Squeakの実行ディレクトリ
  2. 実行ディレクトリ下の'fonts'ディレクトリ
  3. 各OSのフォントディレクトリ

とあります。

まず1と2の場合です。紛らわしいのですが、Squeak5.0では実行ファイルがSqueak-5.0-All-in-One.appの中深くにあるため、実行ディレクトリはZipファイルを解凍したディレクトリではありません。 FileDirectory defaultによって実行ディレクトリを取得することができます。

私が取得した結果はSqueak-5.0-All-in-One/Squeak-5.0-All-in-One.app/Contents/Resourcesでした。もしかしたら環境によって変わるかもしれないので確認してください。私は2を選んだので、ここにfontsディレクトリを作りTTFファイルを入れました。

3の場合は、TTFileDescription class >> fontPathsDo:に記述があります。WindowsではC:\Windows\FontsMacOS(X)では/System/Library/Fonts/Library/Fontsunix系では/usr/share/fontsのようです。

読み込み

以下は全てTTFileDescriptionのクラスメソッドの話です。

squeak-jaのドキュメントによるとinstallFamilyNamed:でファミリー名を指定することでインストールできるようです。

しかしそのメソッドallFontsAndFilesが返すDictionaryからフォントを探すのですが、そのDictionaryはどうもシステム終了時に更新されるようです。

Dictionaryはクラス変数AllFontsAndFilesに記録されていて、initializeで初期化されます。システム終了時の更新もそれを単に初期化するだけで、次のallFontsAndFiles呼び出し時に無ければ作るだけのようです。

よって一度initializeし、allFontsAndFilesで更新すれば良さそうです。

最終的に、次のコードでフォントディレクトリにある全てのTTFをインストールすることができます。

TTFileDescription initialize.
TTFileDescription allFontsAndFiles keysDo: [:fname| TTFileDescription installFamilyNamed: fname].

表示

あとはワールドメニューのappearancesystem fontsから変更することで日本語を表示できます。

が、Linux Mintとfcitx、mozcの組み合わせだとIMEをONにできないので、他アプリケーションからのコピー&ペーストなどでしか入力できません……

f:id:phaendal:20151108023407p:plain

広告を非表示にする