changeset 18:70868348fbd8

*** empty log message ***
author kono
date Sun, 07 Sep 2008 22:55:48 +0900
parents efce76870846
children 03814a8d0b2a
files src/REPNOTE.txt
diffstat 1 files changed, 49 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/REPNOTE.txt	Sun Sep 07 22:55:48 2008 +0900
@@ -0,0 +1,49 @@
+Sun Sep  7 20:18:14 JST 2008
+
+ml_replace
+    文字のinsert の時には毎回呼ばれる
+    文字のdeleteの時には、最初の一回しか呼ばれない
+ml_append
+    行のopen の時に一回だけ呼ばれる
+    複数行appendしても、一回ずつ呼ばれる
+ml_delete
+    複数行deleteしても、一回ずつ呼ばれる
+
+changed_common
+   これらが呼ばれて変更があった時に呼ばれる
+   複数行の変更は一回にまとめられて、変更行数がxtraに入る
+
+というわけなので、以下のようなアルゴリズムになると思われる   
+
+ml_* で、prev_line_flushを呼ぶ。
+
+    prev_line とcurrent lineを比較して異なっていたら、
+        insert されているdelete commandがあったらキャンセルする
+        溜っているのは、changed_commonのreplaceのケースのみ
+
+    prev_line をcurrent lineに設定して、
+
+    delete の場合は、DELETE_CMDとして現在の行をセーブして終了
+	ml_deleteは1行毎に呼ばれる
+        送ってしまっても構わない
+
+    append の場合は何もしない
+        最後にまとめてchanged_common でINSERT_CMDを発行すれば良い`
+
+    あとはreplaceの場合となる
+
+	既にprev_lineがsaveしてあったら何もしないで終了
+	     文字のinsertの場合
+
+	そうでなかったら、current lineを DELETE_CMD としてセーブする
+             最初のreplaceの場合
+
+changed_common で、
+
+    xtra < 0 の場合は何もしないで溜ったコマンドを送信
+	ml_delete の分だけDELETE_CMDが送信される (送ってなければ)
+    xtra > 0 の場合は、INSERT_CMD を行数の分だけ送信
+    xtra == 0 の場合は、INSERT_CMD を送信して、
+        現在行をDELETE_CMDとしてセーブ
+	 (ml_replace は文字の削除では呼ばれないので、ここでセーブする必要がある)
+