言語ゲーム

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

Twitter: @propella

bottle

エディタのデザイン

金曜日にプレゼンがあって、久しぶりに徹夜した物だから週末はめちゃくちゃしんどかった。ので、今日はほとんど一日寝ていた。まだしんどい。が、せっかくなので内部でプレゼンしたスライドをアップする。エディタのような普通のアプリをどうやったら綺麗に…

テキストエディタの数学的表現を探す

昨日眠れなくてずっと布団の中で考えていたメモです。意味と実装という言葉がよくプログラミングの中で使われます。意味は二つのオブジェクトの間の関係を表していて、例えばテキストエディタで言うとテキストデータと実際に表示されるビットマップとの間に…

Gtk のテキストウィジェットその3 内部構造

ではようやく本題に。以下の事を調べる予定です。 オブジェクトの静的構造 下カーソルキーを押したとき何が起こるか テキストレイアウトのタイミングと必要な情報 オブジェクトの静的構造。 http://d.hatena.ne.jp/propella/20080304/p1 の実行中オブジェク…

Gtk のシグナル

#include <gtk/gtk.h> static void released(GtkWidget *widget, gpointer data) { g_print("Hello World\n"); // g_signal_emit_by_name(widget, "released", 0); } static void destroy(GtkWidget *widget, gpointer data) { gtk_main_quit(); } int main(int argc, c</gtk/gtk.h>…

Gtk のテキストウィジェットその2 (オブジェクトシステム)

ソースコードは http://d.hatena.ne.jp/propella/20080304/p1 と同じ物を使います。前回よく分からなくて飛ばした話から。Gtk のオブジェクトシステムである GObject は、それだけでかなり面白い機構です。やたら複雑な理由は、静的型、動的型を問わず他の言…

Gtk のソースを追いかける準備メモ。

linux のデバッガを使って Gtk+-2 と glib のソースを追いかけます。普通にデバッガを使っても普通はライブラリの中まで入っていけ無いので、ちょっと工夫します。 最初からインストールされているのと同じバージョンのソースを使う。 デバッグオプション付…

Squeak の ParagraphEditor 再び

テキストをに画面表示するために、長く伸びた行を画面に収まるよう途中で回り込ませる処理が必要だ。そこん所を調べてみた。表示関連をデバッガで追いかけるには下手にブレークポイントを仕込めないので、注意深く実験。 描画のデバッグ Workspace を開ける …

論文読み Charles Crowley. Data Structures for Text Sqeuences. 1998

http://ned.rubyforge.org/doc/crowley98data.ps.gz 他に面白いリンクがここに一杯ある。 http://ned.rubyforge.org/ 結論 テキストエディタのデータ構造としては、piece table method が一番良い。 感想 今更テキストエディタを自分で作りたいという変わっ…

Swing におけるテキストの表現

Swing のテキストエディタは、テキストを表現する為のデータ構造を複数提供しているらしいので調べてみた。前回使ったコード http://d.hatena.ne.jp/propella/20080315/p1 で、JTextArea を基点に色々調べていくと、 this: JTextArea テキストを表示する部品…

テキストエディタのデザイン

ここらでエディタのデザインについて再考する。エディタを関数と考えるとこんな感じだろう。(テキスト画像, 新テキスト) = f(イベント, 画面情報, 旧テキスト)つまり、あるテキストがあって、そこにキーボードやマウスイベントを発生して更新した後のテキス…

VisualWorks のテキストエディタ

Smalltalk ついでに VisualWorks のテキストエディタについても調べてみた。調べる前にポイントを整理。 文字列を挿入する時のイベントの流れ 選択の表現 編集対象テキストの表現 テキスト表示 テキスト表示の最適化 まず大まかな構成から。 Workspace open …

ParagraphEditor

エディタについて色々調べてきたけど、Squeak のエディタである ParagraphEditor も結構良い仕事をしている事が分かったのでメモ。Workspace で何度か中ボタンを押すと、Text1 のような名前のオブジェクトを選択できる。Text1 は TextMorphForEditView のイ…

エディタを作る近況

最近やってる事を書きます。しばらく前に、アランさんからメールが来て、ここしばらくイアンの奴に全力投球するようにと言われました。他に Javascript がどうだとか OpenDocument がどうだとか沢山あるけど、色々出来ないのでとりあえず全然分かっていない…

Swing のテキストウィジェットで遊ぶ

Swing のテキストウィジェットって、OS のコードを使わないで全部自力で書いているらしいので、参考になると思いソースを読んでみました。まず動作を追いやすいように、テキストウィジェットを表示して、何かが入力されると現在の文字数をコンソールに出力す…

Gtk シグナルのオマケ。二つのパターン。

シグナルの送信で二つのパターンがある。イベントハンドリング(オブジェクトツリーを下位から上位に辿る)の場合(例: gtk_text_view_backspace)。上位オブジェクトは下位オブジェクトを emit する。下位オブジェクトは自分自身でシグナルを受け取る。モデル伝…

Gtk シグナルと関数の戻り値

つまらない話ですが続けます。Gtk のシグナルが論理的に何なのかと考えてみました。Gtk のシグナルの特徴は送り手が一人だけど受けてが沢山居るという事です。という事は返り値も無く副作用のみなので、関数型大好きな私には受け入れ難い概念です。また、双…

Gtk イベントから画像出力までの流れ

ついでに Gtk でイベント処理がどう行われているのかもちらっと見てみた。例によって gtk_text_view_scroll_to_mark でブレークして観察すると、gtk_main_do_event が一つずつイベントを処理するようになっている。イベントは親から子へ伝わる。例えばキーボ…

Gtk のテキストウィジェット

早速 Gtk のテキストウィジェットがどんな風に動いているのか見てみた。まず自分自身のソースをただ表示するだけの単純なプログラムを書いてみる。window があって、その中に scrolledWindow があって、その中に textView があるという構造だ。という事は、…

エディタを作る2

Fonc 用エディタの動機をさらに書く。Fonc の為にダンアメランが描画周りをやって、大島さんがフレームワークを作ると言ってるけど、そう言うのを待つの嫌だし、エディタって意外と他の部分と非依存に作れるのでは?と思った。emacs なんかターミナルでも X …

エディタを作る。

Fonc (coke & pepsi) を使ってテキストエディタを作っている。新しい言語を覚えるのに一番の近道は、ツールを作る事だと思っていて、Fonc を Smalltalk みたいに使いこなせるように Workspace を作るのが最初の目的だ。一応 print it が出来るくらいにはなっ…