テキストエディタを作る

k.inabaさんの「テキストエディタを作るメモ」のGapBufferやらRopeやらPieceTableやらを見て、テキストエディタを作るのに興味出てきたのと、C#IronPythonやCPythonでGUIを作る勉強をするのも兼ねて、Windowsで動くテキストエディタを作ることにした。


データ構造として行の保持方法としては、とりあえず1つの行を文字クラス(String)で表現すると仮定して、複数行の保持はリンクリストで行うのがベスト。しかし、問題点として、行番号を指定してデータを取り出すのが遅いのが難点。


データを直にリンクリストにするのではなく、間接的にもできる。PieceTableっぽくなるが、無限回undoが実装しやするなるのかは疑問。

  • Stringの可変長配列で複数行を表現
  • 配列のindex値のリンクリストで行の順番を表現


あとは、無限回のundo/redo機能や、1つの行をどのように保持するかをもう少し詰めるつもり。