言語ゲーム

とあるエンジニアが嘘ばかり書く日記

Twitter: @propella

エディタを作る。

Fonc (coke & pepsi) を使ってテキストエディタを作っている。新しい言語を覚えるのに一番の近道は、ツールを作る事だと思っていて、Fonc を Smalltalk みたいに使いこなせるように Workspace を作るのが最初の目的だ。一応 print it が出来るくらいにはなった。前に Javascript 用の Workspace を作った時は結構簡単だったが、Fonc 用のツールキットというのは全然存在しないので、まず字を画面に表示させる所から始めなくてはいけなくてめっちゃ大変だった。SDL と cairo を使って結構手を抜いたつもりだが、それでも文字の位置の計算なややこしい。

以下製作メモ。

文字列の表現には、一文字一つずつの双方リンクを使った。文献によると、一行一つのリンクが良いと書いてあるが、後で関数型言語で書き直す予定(?)なので、今はこんな感じ。

キャレットは、特殊な文字をリンクの中に仕込む方式にした。これはイアンの真似。

選択位置は、キャレットからのオフセットで表現する事にした。つまり、"HelloI world" の I の場所にキャレットがあって、オフセットが 3 だと "llo" が選択されているという事にした。キャレットが選択位置の先頭にある場合はオフセットをマイナスにすれば良い(後で逆にしたくなるかも知れない)。文献で探したのは、大体最初と最後の位置を保持しておく方法ばかりでオフセット方式はちょっとした僕の思いつき。

エディタなんか簡単だと思ってたら滅茶苦茶難しかった。特に、最適化を考えないとすぐ遅くなる所と、座標計算が難しい所。ゴールが明確な割りに実装が難しいので、パズル的に楽しむのには最適だと思う。最終的には、emacs みたいにエディタの中からエディタ自身の機能をどんどん拡張していけるようになったら良いなと思っている。