Mercurial > hg > RemoteEditor > vim7
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 は文字の削除では呼ばれないので、ここでセーブする必要がある) +