ようやく Squeak 3.9

Squeak 3.9-final がリリースされて久しいですが、Squeak 3.9 で見た目の変わった Morphic は見たとたん 「ダサッ」と思ってしまったし(個人的好みの問題なので突っ込み却下)、sumim さんの この記事 で、デフォルトで 「_」が「←」にならなくなってしまったと聞いて、3.9環境への棲み替えは「や〜めた」してしまったのですが、そろそろ時代に置いてかれそうなので*1 、遅ればせながらSqueak 3.9 環境に。


日本語化と、sumim さんの Squeak3.9-final-7067 を自分好みにするためのメモ - Smalltalkのtは小文字ですを参考に「_」のグリフの変更 だけ。

あとコードのカラフル表示が好きなので Preference で #colorWhenPrettyPrinting と、依存する #browseWithPrettyPrint を Enableに。でも それだと _ を := と表示してしまうので、#ansiAssignmentOperatorWhenPrettyPrinting を Disable にしようとしたのですが・・・無い orz

あらためて 3.8 ではどうだったのかと、見てみると、#syntaxHighlightAsYouType で色づけされていて、#browseWithPrettyPrint のほうは使っていません。(そうだった。でも 3.9 の Preference は影も形もなくなってる・・・。

で、調べます。

調べる、べるべる

Squeak 3.8 の環境で SystemBrowser のコードペインの正体は はどうやら PluggableShoutMorph というクラス らしい。

このクラスの #setText: メソッドを見ると、メンバフィールド styler に束縛されたオブジェクトがテキストフォーマットをしてるらしいことがわかります。

PluggableShoutMorph >> setText: aText
    
    self okToStyle ifFalse:[^super setText: aText].
    super setText: (styler format: aText asText).
    aText size < 4096
        ifTrue:[    styler style: textMorph contents]
        ifFalse:[styler styleInBackgroundProcess:  textMorph contents]

工具ハロ→[モーフの検査 (inspect mortph)] で インスペクタ を開いて styler の中身を見ると "a SHTextStylerST80" というのが束縛されているので、これを Browse。

#format: は スーパークラス SHTextStyler のメソッドで、これはテンプレートメソッド #privateFormat: を呼び出しています。で、SHTextStylerST80 >> #privateFormat: の定義はこれ。

SHTextStylerST80 >> privateFormat: aText
    "Perform any formatting of aText necessary and answer either aText, or a formatted copy of aText"

    aText asString = Object sourceCodeTemplate
        ifTrue:[
            "the original source code template does not parse,
            replace it with one that does"
            ^self parseableSourceCodeTemplate asText].
    formatAssignments
        ifTrue:[
            Preferences syntaxHighlightingAsYouTypeAnsiAssignment 
                ifTrue:[^self convertAssignmentsToAnsi: aText].
            Preferences syntaxHighlightingAsYouTypeLeftArrowAssignment 
                ifTrue:[^self convertAssignmentsToLeftArrow: aText]].       
    ^aText

Preferences syntaxHighlightingAsYouTypeなんちゃら〜、を呼んでます。これです。



さあ、Squeak 3.9 に移って、コードペイン を見てみよう。

・・・部品からして違うじゃん orz。

PluggableTextMorph からちょっと追っかけてみたのだけれど、残念、それっぽいのが見つからなかったです。うーんブラウザ側かな。

うー、時間切れ。取りあえず色づけと "←" 表示の両立は今日は諦め。明日また調べます。


* * *


なんだか 良くも悪くも Squeak な感じでした。生きてるオブジェクトを足がかりに構造を探索するのは楽しいです(仕事中なのについつい・・ごにょごにょ)。こうやってバリバリ調べるのが他の環境に比べて簡単だから、反面 変更や後方互換に無頓着になるのが欠点ですけど。

「←」をやめてしまったのは本当に残念です。↑とか←とか、直感的でいいなぁ、Smalltalkいいなぁ、と思っているだけに、Squeak のこの対応は ちょっとだけ裏切られたような気分です。

*1:「老いて枯れそう」 と変換されたよ。的確すぎて orz