From neoneye at rubyforge.org Tue Feb 1 02:30:26 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Tue Feb 1 02:30:28 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source README
Message-ID: <200502010730.j117UQdS028231@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv28222
Modified Files:
README
Log Message:
described smart home in more detail.
Index: README
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/README,v
retrieving revision 1.12
retrieving revision 1.13
diff -C2 -d -r1.12 -r1.13
*** README 29 Jan 2005 14:22:17 -0000 1.12
--- README 1 Feb 2005 07:30:24 -0000 1.13
***************
*** 6,10 ****
no advanced edit strategies (it has a new datastructure that rocks).
No undo/redo. If we don't consider the code for wrapping libncursesw,
! then the core of the editor only takes up 1200 lines of ruby code.
This README is written with this editor.
--- 6,10 ----
no advanced edit strategies (it has a new datastructure that rocks).
No undo/redo. If we don't consider the code for wrapping libncursesw,
! then the core of the editor only takes up 1500 lines of ruby code.
This README is written with this editor.
***************
*** 40,44 ****
backspace ...... erase char left of cursor (or selection)
delete ......... erase char right of cursor (or selection)
! home ........... move cursor to linebegin
end ............ move cursor to lineend
ctrl left ...... move word left
--- 40,44 ----
backspace ...... erase char left of cursor (or selection)
delete ......... erase char right of cursor (or selection)
! home ........... move cursor either to linebegin or textbegin
end ............ move cursor to lineend
ctrl left ...... move word left
From neoneye at rubyforge.org Tue Feb 1 02:36:27 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Tue Feb 1 02:36:29 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source TODO
Message-ID: <200502010736.j117aRdS028303@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv28298
Modified Files:
TODO
Log Message:
more stuff to do
Index: TODO
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v
retrieving revision 1.37
retrieving revision 1.38
diff -C2 -d -r1.37 -r1.38
*** TODO 31 Jan 2005 22:34:46 -0000 1.37
--- TODO 1 Feb 2005 07:36:25 -0000 1.38
***************
*** 4,8 ****
! resizing of window should flush the render_cache.
--- 4,11 ----
! user-interface:
! * resizing of window should flush the render_cache.
! * F1 should provide help.
! * search dialog (ala editpad).
From neoneye at rubyforge.org Tue Feb 1 11:12:38 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Tue Feb 1 11:12:39 2005
Subject: [Aeditor-commit] projects/documents/homepage2 weblog.html
Message-ID: <200502011612.j11GCcdS001572@rubyforge.org>
Update of /var/cvs/aeditor/projects/documents/homepage2
In directory rubyforge.org:/tmp/cvs-serv1564
Modified Files:
weblog.html
Log Message:
status for today.
Index: weblog.html
===================================================================
RCS file: /var/cvs/aeditor/projects/documents/homepage2/weblog.html,v
retrieving revision 1.3
retrieving revision 1.4
diff -C2 -d -r1.3 -r1.4
*** weblog.html 19 Jan 2005 19:21:57 -0000 1.3
--- weblog.html 1 Feb 2005 16:12:36 -0000 1.4
***************
*** 36,39 ****
--- 36,82 ----
+
Things I did today - 01 feb 2005
+ I have had my first day free from job in long time, so I have
+ been busy with solving all kind of issues (Things that I really
+ should have been doing ages ago). Im usually very bad at solving
+ realworld issues, because im sucked into a computer most of the time.
+
+ Someone tried to break in to my appartment this weekend,
+ apparently nothing got stolen. Its impossible for me to tell if
+ any of the backup cds are gone :-(. With that whole in
+ the window the temperature has been quite low inside. Today I
+ have arranged to get the broken window fixed.
+
+ On the job we released our program yesterday (31 jan 2005), so
+ my colleagues wanted to be able to reach me no matter
+ where i am, in case the customer has problems with our product.
+ I had a heavy cellphone ages ago, which I never used.
+ Today I have bought a cheap cellphone.
+
+ I have had these glasses for a long time, so long that they had
+ become ugly and twisted. Today I went to glass-specialist and got
+ the glasses rewamped. They look and feels now as good as new.
+
+
Today I went to the university and bought all the books that
+ I need for this course on the university. Plus I bought the
+ Programming Ruby second edition (and discovered that my
+ [ruby embedded into c++] project was mentioned in it, exciting).
+
+ Today I have rearranged the furnitures and cleaned up my
+ appartment, carried down 3 monitors and 6 computers
+ to my basement. All the piles of A4 papers have been putted in bags
+ and has been stored under my bed. My university assignments has been
+ put into a ringbinder.
+
+ In the appartment complex where I live, we are about to get
+ a cheap internet+phone+tv connection. Today I have been filling
+ out 3 formulars so that it can be installed at my place.
+
+ Today I talked in phone with the tax woman, attempting to figure
+ out how to solve a tax issue of mine. But I never really understood
+ this. Maybe im bad at money.
+
+ And today perhaps my 19" tft display will arrive?
+
AEditor 2.1 released - 19 jan 2005
Yesterday I packed up 2.1, codename "megacorp". Since last
From neoneye at rubyforge.org Tue Feb 1 16:32:17 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Tue Feb 1 16:32:19 2005
Subject: [Aeditor-commit] projects/documents/homepage/aeditor_shots 054.png
Message-ID: <200502012132.j11LWHdS017995@rubyforge.org>
Update of /var/cvs/aeditor/projects/documents/homepage/aeditor_shots
In directory rubyforge.org:/tmp/cvs-serv17966
Added Files:
054.png
Log Message:
draft on how I imaging aeditor should evolve.
--- NEW FILE: 054.png ---
(This appears to be a binary file; contents omitted.)
From neoneye at rubyforge.org Wed Feb 2 13:24:43 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Wed Feb 2 13:24:45 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source main_tui.rb
ncursesw.rb
Message-ID: <200502021824.j12IOhdS028066@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv28022
Modified Files:
main_tui.rb ncursesw.rb
Log Message:
Lines that contained fullwidth chars got rendered incorrect, because
I discarded its x information.. and padded with too many spaces.
Now they render better.
Discovered another glitch.. when the window is very narrow, then ncurses
or xterm seems to place other places that we asked it for. The text being
rendered has weird glyphs in it. Maybe its because I don't use addnstr ?
Index: main_tui.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v
retrieving revision 1.69
retrieving revision 1.70
diff -C2 -d -r1.69 -r1.70
*** main_tui.rb 31 Jan 2005 21:14:32 -0000 1.69
--- main_tui.rb 2 Feb 2005 18:24:41 -0000 1.70
***************
*** 246,249 ****
--- 246,274 ----
@canvas.height
end
+ def push_halfwidth(glyph, pen)
+ @x += 1
+ return if @x - @scroll_x <= 0
+ return if @x - @scroll_x > width
+ @render_glyphs[@n] = glyph
+ @render_pens[@n] = pen
+ @n += 1
+ end
+ def push_fullwidth(glyph, pen)
+ if @x - @scroll_x == -1
+ @x += 1
+ push_halfwidth(32, pen)
+ return
+ end
+ if @x - @scroll_x == width - 1
+ push_halfwidth(32, pen)
+ return
+ end
+ @x += 2
+ return if @x - @scroll_x <= 0
+ return if @x - @scroll_x > width
+ @render_glyphs[@n] = glyph
+ @render_pens[@n] = pen
+ @n += 1
+ end
def render_row(vy, text, ay, options)
***************
*** 278,287 ****
! n = 6 - @scroll_x # reserve some space for line-numbers
! x = 0
(text || '').unpack('U*').each do |glyph|
! w = measure_width(x, glyph)
pen = nil
! if sel1 <= x and x < sel2
pen = 3
end
--- 303,312 ----
! @n = 6 # reserve some space for line-numbers
! @x = 0
(text || '').unpack('U*').each do |glyph|
! w = measure_width(@x, glyph)
pen = nil
! if sel1 <= @x and @x < sel2
pen = 3
end
***************
*** 289,346 ****
w = 0 # ignore newlines
elsif glyph == 9
! @render_glyphs[n] = 32 # 0x2192 # 0x2500 # 46
! @render_pens[n] = pen || 8
! n += 1
(w-1).times do
! @render_glyphs[n] = 32
! @render_pens[n] = pen || 8
! n += 1
end
! elsif x >= @scroll_x
! @render_glyphs[n] = glyph
! @render_pens[n] = pen || 1
! n += 1
else
! w.times do
! @render_glyphs[n] = 32
! @render_pens[n] = pen || 1
! n += 1
! end
end
- x += w
end
! (@scroll_x + width - x).times do
pen = nil
! if sel1 <= x and x < sel2
pen = 3
end
!
! @render_glyphs[n] = 32
! @render_pens[n] = pen || 1
! n += 1
! x += 1
end
# format linenumbers
- ofs = 0
5.times do |i|
! @render_pens[ofs + i] = 4
end
if ay
number = (ay+1).to_s.rjust(5)
0.upto(4) do |i|
! @render_glyphs[ofs + i] = number[i]
end
else
0.upto(4) do |i|
! @render_glyphs[ofs + i] = 32
end
end
! @render_pens[ofs + 5] = 6
! @render_glyphs[ofs + 5] = 0x2502
# show fold
if (options & 2) != 0
! @render_glyphs[ofs + 5] = 32 # 0x256f # 0x2570
@render_pens.map!{5}
end
--- 314,359 ----
w = 0 # ignore newlines
elsif glyph == 9
! # these are also nice glyphs: 0x2192, 0x2500, 46
! push_halfwidth(32, pen || 8)
(w-1).times do
! push_halfwidth(32, pen || 8)
end
! elsif w == 1
! push_halfwidth(glyph, pen || 1)
! elsif w == 2
! push_fullwidth(glyph, pen || 1)
else
! $logger.error "unknown glyph #{glyph.inspect}"
! raise "glyph problem"
end
end
! while @x < @scroll_x + width
pen = nil
! if sel1 <= @x and @x < sel2
pen = 3
end
! push_halfwidth(32, pen || 1)
end
# format linenumbers
5.times do |i|
! @render_pens[i] = 4
end
if ay
number = (ay+1).to_s.rjust(5)
0.upto(4) do |i|
! @render_glyphs[i] = number[i]
end
else
0.upto(4) do |i|
! @render_glyphs[i] = 32
end
end
! @render_pens[5] = 6
! @render_glyphs[5] = 0x2502
# show fold
if (options & 2) != 0
! @render_glyphs[5] = 32 # 0x256f # 0x2570
@render_pens.map!{5}
end
***************
*** 350,354 ****
#@render_glyphs[x + 5] = 0x2570 # 45
5.times do |i|
! @render_pens[ofs + i] = 3
end
end
--- 363,367 ----
#@render_glyphs[x + 5] = 0x2570 # 45
5.times do |i|
! @render_pens[i] = 3
end
end
***************
*** 358,367 ****
if (@view.sel_y < ay and ay < @view.cursor_y) or
(@view.cursor_y < ay and ay < @view.sel_y)
! width.times do |i|
! @render_pens[ofs + 6 + i] = 3
end
end
end
#=begin
@canvas.render_row2(
--- 371,383 ----
if (@view.sel_y < ay and ay < @view.cursor_y) or
(@view.cursor_y < ay and ay < @view.sel_y)
! (@n-6).times do |i|
! @render_pens[6 + i] = 3
end
end
end
+ #if ay == 0
+ # $logger.info "line0 = #{@render_glyphs[0, @n].inspect} n=#{@n}"
+ #end
#=begin
@canvas.render_row2(
***************
*** 369,381 ****
@render_glyphs,
@render_pens,
! ofs,
! width+6
)
#=end
end
def cursor_show(x, y)
! @canvas.move(6 + x - @scroll_x, y)
end
def refresh
@canvas.refresh
end
--- 385,400 ----
@render_glyphs,
@render_pens,
! 0,
! @n
)
#=end
end
def cursor_show(x, y)
! cx = 6 + x - @scroll_x
! #$logger.info "cx=#{cx} cy=#{y}"
! @canvas.move(cx, y)
end
def refresh
+ #$logger.info "curses refresh"
@canvas.refresh
end
***************
*** 385,389 ****
@tabsize - (x % @tabsize)
else
- #LibC.wcwidth(glyph)
@canvas.measure_width(glyph)
end
--- 404,407 ----
Index: ncursesw.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/ncursesw.rb,v
retrieving revision 1.23
retrieving revision 1.24
diff -C2 -d -r1.23 -r1.24
*** ncursesw.rb 28 Jan 2005 21:00:20 -0000 1.23
--- ncursesw.rb 2 Feb 2005 18:24:41 -0000 1.24
***************
*** 99,102 ****
--- 99,103 ----
move(0, y)
clear_to_eol
+ move(0, y)
n.times do
set_color(pens[i])
From neoneye at rubyforge.org Wed Feb 2 13:37:03 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Wed Feb 2 13:37:04 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES TODO
Message-ID: <200502021837.j12Ib3dS028330@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv28326
Modified Files:
CHANGES TODO
Log Message:
problems with rendering
Index: CHANGES
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v
retrieving revision 1.36
retrieving revision 1.37
diff -C2 -d -r1.36 -r1.37
*** CHANGES 31 Jan 2005 22:34:46 -0000 1.36
--- CHANGES 2 Feb 2005 18:37:01 -0000 1.37
***************
*** 1,3 ****
! 31-01-2005 Neoneye 5D
* improved View#move_linebegin's smart mode so it gotoes the
indentation point even though its placed on an empty line.
--- 1,8 ----
! 02-02-2005 Neoneye
! * lines with fullwidth glyphs got rendered incorrect.
! lines wider than the view also got rendered incorrect.
! It no longer causes rendering fuckup.
!
! 31-01-2005 Neoneye
* improved View#move_linebegin's smart mode so it gotoes the
indentation point even though its placed on an empty line.
Index: TODO
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v
retrieving revision 1.38
retrieving revision 1.39
diff -C2 -d -r1.38 -r1.39
*** TODO 1 Feb 2005 07:36:25 -0000 1.38
--- TODO 2 Feb 2005 18:37:01 -0000 1.39
***************
*** 124,127 ****
--- 124,133 ----
+ If I start the editor with the default document, by typing
+ ruby main_tui.rb
+ If the cursor is placed on the first line, and I
+ begin sideways scrolling (in a narrow window).
+ Then I get rendering fuckup.. maybe xterm/ncurses issue?
+
is it possible to probe ncursesw for if a glyph is
renderable? In case the glyph cannot be rendered I would
From neoneye at rubyforge.org Wed Feb 2 14:20:45 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Wed Feb 2 14:20:46 2005
Subject: [Aeditor-commit] projects/documents/homepage2 weblog.html
Message-ID: <200502021920.j12JKjdS031277@rubyforge.org>
Update of /var/cvs/aeditor/projects/documents/homepage2
In directory rubyforge.org:/tmp/cvs-serv31268
Modified Files:
weblog.html
Log Message:
added description of myself.
Index: weblog.html
===================================================================
RCS file: /var/cvs/aeditor/projects/documents/homepage2/weblog.html,v
retrieving revision 1.4
retrieving revision 1.5
diff -C2 -d -r1.4 -r1.5
*** weblog.html 1 Feb 2005 16:12:36 -0000 1.4
--- weblog.html 2 Feb 2005 19:20:43 -0000 1.5
***************
*** 34,38 ****
Weblog about editors and Ruby
!
Things I did today - 01 feb 2005
--- 34,42 ----
Weblog about editors and Ruby
!
Hi, welcome to my blog, my name is Simon Strandgaard and im the
! author of AEditor. My age is 25 years and im studying
! mathematics and computer science. I usually chat on irc, logged in
! as neoneye on the #ruby-lang channel.
! I have a small appartment in Copenhagen, the capital of Denmark.
Things I did today - 01 feb 2005
From neoneye at rubyforge.org Wed Feb 2 14:57:18 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Wed Feb 2 14:57:18 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES TODO
main_tui.rb
Message-ID: <200502021957.j12JvIdS032501@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv32486
Modified Files:
CHANGES TODO main_tui.rb
Log Message:
clear cache when resize
Index: main_tui.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v
retrieving revision 1.70
retrieving revision 1.71
diff -C2 -d -r1.70 -r1.71
*** main_tui.rb 2 Feb 2005 18:24:41 -0000 1.70
--- main_tui.rb 2 Feb 2005 19:57:16 -0000 1.71
***************
*** 94,97 ****
--- 94,100 ----
end
end
+ def render_cache_clear
+ @render_info = {}
+ end
def event_loop
@view.resize(width, height)
***************
*** 228,231 ****
--- 231,235 ----
when 410
@view.resize(width, height)
+ render_cache_clear
when 800
@view.move_top
Index: CHANGES
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v
retrieving revision 1.37
retrieving revision 1.38
diff -C2 -d -r1.37 -r1.38
*** CHANGES 2 Feb 2005 18:37:01 -0000 1.37
--- CHANGES 2 Feb 2005 19:57:16 -0000 1.38
***************
*** 1,3 ****
--- 1,5 ----
02-02-2005 Neoneye
+ * resizing the window now clears the cache, so we no longer
+ get rendering fuckups.
* lines with fullwidth glyphs got rendered incorrect.
lines wider than the view also got rendered incorrect.
Index: TODO
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v
retrieving revision 1.39
retrieving revision 1.40
diff -C2 -d -r1.39 -r1.40
*** TODO 2 Feb 2005 18:37:01 -0000 1.39
--- TODO 2 Feb 2005 19:57:16 -0000 1.40
***************
*** 5,9 ****
user-interface:
- * resizing of window should flush the render_cache.
* F1 should provide help.
* search dialog (ala editpad).
--- 5,8 ----
From neoneye at rubyforge.org Wed Feb 2 15:33:57 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Wed Feb 2 15:33:58 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES tui.c
Message-ID: <200502022033.j12KXvdS002305@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv2291
Modified Files:
CHANGES tui.c
Log Message:
its much better to invoke raw() rather than cbreak().
Index: CHANGES
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v
retrieving revision 1.38
retrieving revision 1.39
diff -C2 -d -r1.38 -r1.39
*** CHANGES 2 Feb 2005 19:57:16 -0000 1.38
--- CHANGES 2 Feb 2005 20:33:55 -0000 1.39
***************
*** 1,3 ****
--- 1,8 ----
02-02-2005 Neoneye
+ * by invoking raw() rather than cbreak() in tui.c, then we
+ get all the input from ncurses. For instance with cbreak
+ if I typed CTRL-S I experienced that the display went dead
+ and nothing happened.. until I typed CTRL-Q. Xterm or ncurses
+ must have been in an odd mode. Luckily this issue is now gone.
* resizing the window now clears the cache, so we no longer
get rendering fuckups.
Index: tui.c
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/tui.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** tui.c 28 Jan 2005 20:56:02 -0000 1.1
--- tui.c 2 Feb 2005 20:33:55 -0000 1.2
***************
*** 3,6 ****
--- 3,22 ----
#include "locale.h"
+ /*
+
+ if (c == KEY_MOUSE) {
+ MEVENT event;
+
+ getmouse(&event);
+ wprintw(win, "KEY_MOUSE, %s", mouse_decode(&event));
+ getyx(win, y, x);
+ move(event.y, event.x);
+ addch('*');
+ wmove(win, y, x);
+ }
+
+ */
+
+
VALUE tui_init(VALUE self) {
setlocale(LC_ALL, "");
***************
*** 12,16 ****
keypad(stdscr, TRUE); /* enable keyboard mapping */
nonl(); /* tell curses not to do NL->CR/NL on output */
! cbreak(); /* take input chars one at a time, no wait for \n */
noecho(); /* don't echo input */
meta(stdscr, 1);
--- 28,32 ----
keypad(stdscr, TRUE); /* enable keyboard mapping */
nonl(); /* tell curses not to do NL->CR/NL on output */
! raw(); /* characters typed are immediately passed through */
noecho(); /* don't echo input */
meta(stdscr, 1);
From neoneye at rubyforge.org Wed Feb 2 17:08:17 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Wed Feb 2 17:08:18 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES TODO
main_tui.rb tui.c
Message-ID: <200502022208.j12M8HdS009658@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv9652
Modified Files:
CHANGES TODO main_tui.rb tui.c
Log Message:
colorize the 80th column.
Index: main_tui.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v
retrieving revision 1.71
retrieving revision 1.72
diff -C2 -d -r1.71 -r1.72
*** main_tui.rb 2 Feb 2005 19:57:16 -0000 1.71
--- main_tui.rb 2 Feb 2005 22:08:15 -0000 1.72
***************
*** 71,74 ****
--- 71,75 ----
#@view.lexer = @lexer
@tabsize = 4
+ @red_column = 70
@selection_mode = 0
@selection_text = ''
***************
*** 305,310 ****
end
@render_info[vy] = info
!
!
@n = 6 # reserve some space for line-numbers
@x = 0
--- 306,310 ----
end
@render_info[vy] = info
!
@n = 6 # reserve some space for line-numbers
@x = 0
***************
*** 315,318 ****
--- 315,321 ----
pen = 3
end
+ if @x <= @red_column and @x + w > @red_column
+ pen = 9
+ end
if glyph == 10 or glyph == 13
w = 0 # ignore newlines
***************
*** 337,341 ****
pen = 3
end
! push_halfwidth(32, pen || 1)
end
--- 340,348 ----
pen = 3
end
! if @x == @red_column
! push_halfwidth(0x2502, pen || 6)
! else
! push_halfwidth(32, pen || 1)
! end
end
Index: CHANGES
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v
retrieving revision 1.39
retrieving revision 1.40
diff -C2 -d -r1.39 -r1.40
*** CHANGES 2 Feb 2005 20:33:55 -0000 1.39
--- CHANGES 2 Feb 2005 22:08:15 -0000 1.40
***************
*** 1,3 ****
--- 1,5 ----
02-02-2005 Neoneye
+ * [main] @red_column added, which for instance colorizes the 80th
+ column, so that you are warned if you have too long lines.
* by invoking raw() rather than cbreak() in tui.c, then we
get all the input from ncurses. For instance with cbreak
Index: TODO
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v
retrieving revision 1.40
retrieving revision 1.41
diff -C2 -d -r1.40 -r1.41
*** TODO 2 Feb 2005 19:57:16 -0000 1.40
--- TODO 2 Feb 2005 22:08:15 -0000 1.41
***************
*** 7,10 ****
--- 7,11 ----
* F1 should provide help.
* search dialog (ala editpad).
+ * mouse support.
Index: tui.c
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/tui.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** tui.c 2 Feb 2005 20:33:55 -0000 1.2
--- tui.c 2 Feb 2005 22:08:15 -0000 1.3
***************
*** 47,50 ****
--- 47,51 ----
init_pair(7, COLOR_CYAN, COLOR_BLUE); /* - */
init_pair(8, COLOR_BLUE, COLOR_BLUE); /* tabs */
+ init_pair(9, COLOR_BLACK, COLOR_RED); /* error */
color_set(1, 0);
From neoneye at rubyforge.org Wed Feb 2 17:08:40 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Wed Feb 2 17:08:41 2005
Subject: [Aeditor-commit] projects/documents/homepage/aeditor_shots 055.png
Message-ID: <200502022208.j12M8edS009672@rubyforge.org>
Update of /var/cvs/aeditor/projects/documents/homepage/aeditor_shots
In directory rubyforge.org:/tmp/cvs-serv9606
Added Files:
055.png
Log Message:
photo of colorization of the 60th column.
--- NEW FILE: 055.png ---
(This appears to be a binary file; contents omitted.)
From neoneye at rubyforge.org Wed Feb 2 17:23:39 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Wed Feb 2 17:23:41 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES README
Message-ID: <200502022223.j12MNddS010200@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv10194
Modified Files:
CHANGES README
Log Message:
im ready to release something
Index: README
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/README,v
retrieving revision 1.13
retrieving revision 1.14
diff -C2 -d -r1.13 -r1.14
*** README 1 Feb 2005 07:30:24 -0000 1.13
--- README 2 Feb 2005 22:23:37 -0000 1.14
***************
*** 1,3 ****
! AEDITOR 2.2
===========
--- 1,3 ----
! AEDITOR 2.3
===========
***************
*** 14,18 ****
screenshot:
! http://aeditor.rubyforge.org/aeditor_shots/053.png
--- 14,18 ----
screenshot:
! http://aeditor.rubyforge.org/aeditor_shots/055.png
***************
*** 93,99 ****
Fetch ncurses version 5.4.
! ./configure --enable-widec --with-shared
! make
! make install
--- 93,114 ----
Fetch ncurses version 5.4.
! prompt> ./configure --enable-widec --with-shared
! prompt> make
! prompt> make install
!
!
!
! Installing of AEditor
! =====================
!
! prompt> ruby extconf.rb
! prompt> make
!
! now you can run aeditor
!
! prompt> ruby main_tui.rb
!
!
!
Index: CHANGES
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v
retrieving revision 1.40
retrieving revision 1.41
diff -C2 -d -r1.40 -r1.41
*** CHANGES 2 Feb 2005 22:08:15 -0000 1.40
--- CHANGES 2 Feb 2005 22:23:37 -0000 1.41
***************
*** 1,3 ****
--- 1,4 ----
02-02-2005 Neoneye
+ * released version 2.3 (darkmatter release).
* [main] @red_column added, which for instance colorizes the 80th
column, so that you are warned if you have too long lines.
From neoneye at rubyforge.org Thu Feb 3 03:14:51 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Thu Feb 3 03:14:52 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb
Message-ID: <200502030814.j138EpdS021799@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv21790
Modified Files:
core.rb
Log Message:
the View class: separated fundemental stuff from operations.
Index: core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v
retrieving revision 1.64
retrieving revision 1.65
diff -C2 -d -r1.64 -r1.65
*** core.rb 31 Jan 2005 22:34:46 -0000 1.64
--- core.rb 3 Feb 2005 08:14:49 -0000 1.65
***************
*** 259,263 ****
end
! class Caretaker
include Helpers
def initialize(model)
--- 259,263 ----
end
! class Base
include Helpers
def initialize(model)
***************
*** 388,415 ****
@scroll_x = x
end
- def scroll_to_cursor
- if @cursor_x < @scroll_x
- @scroll_x = @cursor_x
- end
- if @cursor_x >= @scroll_x + @width
- @scroll_x = @cursor_x + 1 - @width
- end
- if @cursor_y < @scroll_y
- @scroll_y = @cursor_y
- end
- if @cursor_y >= @scroll_y
- h1 = @height - 1
- bot = ay2vy(@scroll_y) + h1
- cvy = ay2vy(@cursor_y)
- if cvy > bot
- say = vy2ay(bot)
- if @cursor_y > say
- newsvy = [cvy - h1, 0].max
- @scroll_y = vy2ay(newsvy)
- end
- end
- end
- end
-
# purpose:
# convert from visible y coordinates to absolute y coordinates.
--- 388,391 ----
***************
*** 422,426 ****
vis[vy]
end
-
# purpose:
# convert from absolute y coordinates to visible y coordinates.
--- 398,401 ----
***************
*** 468,471 ****
--- 443,447 ----
@width, @height = width, height
end
+ # determine how wide the glyph are: 1=halfwidth, 2=fullwidth.
def measure_width(x, glyph)
return 1 unless @canvas
***************
*** 502,505 ****
--- 478,538 ----
[x, y]
end
+ # get list of folding levels
+ def folds
+ @lines.map{|l| l.folded_lines}
+ end
+ # get list of visible lines
+ def visible
+ res = []
+ i = 0
+ while i < @lines.size
+ res << i
+ i += @lines[i].folded_lines + 1
+ end
+ res
+ end
+ def check_integrity
+ errors = []
+ if @lines.size < 1
+ errors << "the number of lines must be 1 or greater"
+ end
+ if @dirty & DIRTY_CURSOR == 0
+ unless @scroll_y.between?(0, @lines.size-1)
+ errors << "scrolled over the edge, scroll_y=#{@scroll_y}"
+ end
+ end
+ unless @cursor_y.between?(0, @lines.size-1)
+ errors << "cursor over the edge, cursor_y=#{@cursor_y}"
+ end
+ return if errors.empty?
+ raise IntegrityError, errors.join("\n")
+ end
+ end
+
+
+ class Caretaker < Base
+ def scroll_to_cursor
+ if @cursor_x < @scroll_x
+ @scroll_x = @cursor_x
+ end
+ if @cursor_x >= @scroll_x + @width
+ @scroll_x = @cursor_x + 1 - @width
+ end
+ if @cursor_y < @scroll_y
+ @scroll_y = @cursor_y
+ end
+ if @cursor_y >= @scroll_y
+ h1 = @height - 1
+ bot = ay2vy(@scroll_y) + h1
+ cvy = ay2vy(@cursor_y)
+ if cvy > bot
+ say = vy2ay(bot)
+ if @cursor_y > say
+ newsvy = [cvy - h1, 0].max
+ @scroll_y = vy2ay(newsvy)
+ end
+ end
+ end
+ end
def insert(utf8_string)
ary = utf8_string.unpack("U*")
***************
*** 800,815 ****
@lines[@cursor_y].folded_lines = 0
end
- def folds
- @lines.map{|l| l.folded_lines}
- end
- def visible
- res = []
- i = 0
- while i < @lines.size
- res << i
- i += @lines[i].folded_lines + 1
- end
- res
- end
def move_to_prev_visible_line
visible.reverse_each do |y|
--- 833,836 ----
***************
*** 828,847 ****
end
end
- def check_integrity
- errors = []
- if @lines.size < 1
- errors << "the number of lines must be 1 or greater"
- end
- if @dirty & DIRTY_CURSOR == 0
- unless @scroll_y.between?(0, @lines.size-1)
- errors << "scrolled over the edge, scroll_y=#{@scroll_y}"
- end
- end
- unless @cursor_y.between?(0, @lines.size-1)
- errors << "cursor over the edge, cursor_y=#{@cursor_y}"
- end
- return if errors.empty?
- raise IntegrityError, errors.join("\n")
- end
end
--- 849,852 ----
From neoneye at rubyforge.org Thu Feb 3 04:52:21 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Thu Feb 3 04:52:23 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source test_core.rb
Message-ID: <200502030952.j139qLdS026428@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv26381
Modified Files:
test_core.rb
Log Message:
This morning it has taken me long time to get started.. 2 hours to be
precise. I struggled writing this days first test.. no matter what I tried,
the lexer seemed unnecessary complex.. I realized that by letting the
lexer be attached to the model, then the lexer could be a standalone
project which can do all caching on its own. Whenever the model is changed
it updates itself accordingly. This is nice.
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.51
retrieving revision 1.52
diff -C2 -d -r1.51 -r1.52
*** test_core.rb 31 Jan 2005 22:34:46 -0000 1.51
--- test_core.rb 3 Feb 2005 09:52:19 -0000 1.52
***************
*** 1657,1659 ****
# TODO: implement me
end
! end
\ No newline at end of file
--- 1657,1738 ----
# TODO: implement me
end
! end
!
!
! class MockLexer2 < AEditor::Lexer::Base
! def initialize(model)
! @model = model
! super()
! end
! def model_update(model, info)
! return if info.event == :before
! return if info.event != :after
! end
! def colorize(ay)
! b = @model.p2b(0, ay)
! w = @model.bytes[ay]
! text = @model.text[b, w]
! pen = text[0, 1].to_i
! glyphs = text.unpack('U*')
! glyphs.map{|g| pen}
! end
! end
!
! class TestViewColorize < Test::Unit::TestCase
! def setup
! super
! @model = AEditor::Model::Caretaker.new
! @model.load((1..9).to_a.map{|i| i.to_s * i}.join("\n"))
! @lexer = MockLexer2.new(@model)
! @model.attach(@lexer)
! end
! def teardown
! super
! @model.check_integrity
! end
! def test_typical1
! assert_equal([1, 1], @lexer.colorize(0))
! end
! def test_typical2
! assert_equal([2, 2, 2], @lexer.colorize(1))
! end
! def test_typical3
! assert_equal([3, 3, 3, 3], @lexer.colorize(2))
! end
! end
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
!
From neoneye at rubyforge.org Thu Feb 3 07:01:32 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Thu Feb 3 07:01:34 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb
test_core.rb
Message-ID: <200502031201.j13C1WdS000377@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv371
Modified Files:
core.rb test_core.rb
Log Message:
we can now cache the line states
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.52
retrieving revision 1.53
diff -C2 -d -r1.52 -r1.53
*** test_core.rb 3 Feb 2005 09:52:19 -0000 1.52
--- test_core.rb 3 Feb 2005 12:01:30 -0000 1.53
***************
*** 1663,1667 ****
--- 1663,1676 ----
def initialize(model)
@model = model
+ @line_states = [0]
+ @dirty_lines = []
+ @cache = {}
super()
+
+ @left_state = 0
+ @right_state = 0
+ @pens = []
+
+ @state_counter = 1
end
def model_update(model, info)
***************
*** 1669,1679 ****
return if info.event != :after
end
! def colorize(ay)
! b = @model.p2b(0, ay)
! w = @model.bytes[ay]
! text = @model.text[b, w]
pen = text[0, 1].to_i
glyphs = text.unpack('U*')
! glyphs.map{|g| pen}
end
end
--- 1678,1710 ----
return if info.event != :after
end
! def lex_line(text)
pen = text[0, 1].to_i
glyphs = text.unpack('U*')
! @pens = glyphs.map{|g| pen}
! @right_state = @state_counter
! @state_counter += 1
! nil
! end
! def colorize(ay)
! # TODO: flush dirty_list here
!
! # sync
! until @line_states.size > ay
! y = @line_states.size - 1
! lex_line(@model.line(y))
! @line_states << @right_state
! end
!
! @left_state = @line_states[ay]
! lex_line(@model.line(ay))
! @line_states[ay + 1] = @right_state
!
! @pens
! end
! def cached_states
! @line_states
! end
! def cached_lines
! @cache.keys.sort
end
end
***************
*** 1691,1702 ****
--- 1722,1746 ----
@model.check_integrity
end
+ def test_init
+ assert_equal([0], @lexer.cached_states)
+ end
def test_typical1
assert_equal([1, 1], @lexer.colorize(0))
+ assert_equal([0, 1], @lexer.cached_states)
end
def test_typical2
+ assert_equal("22\n", @model.line(1))
assert_equal([2, 2, 2], @lexer.colorize(1))
+ assert_equal([0, 1, 2], @lexer.cached_states)
end
def test_typical3
+ assert_equal("333\n", @model.line(2))
assert_equal([3, 3, 3, 3], @lexer.colorize(2))
+ assert_equal([0, 1, 2, 3], @lexer.cached_states)
+ end
+ def test_typical4
+ assert_equal("7777777\n", @model.line(6))
+ assert_equal([7, 7, 7, 7, 7, 7, 7, 7], @lexer.colorize(6))
+ assert_equal([0, 1, 2, 3, 4, 5, 6, 7], @lexer.cached_states)
end
end
Index: core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v
retrieving revision 1.65
retrieving revision 1.66
diff -C2 -d -r1.65 -r1.66
*** core.rb 3 Feb 2005 08:14:49 -0000 1.65
--- core.rb 3 Feb 2005 12:01:30 -0000 1.66
***************
*** 186,193 ****
end
private :notify
! def glyphs(y)
w = @bytes[y]
b = p2b(0, y)
! @text[b, w].unpack('U*')
end
# replace everything
--- 186,196 ----
end
private :notify
! def line(y)
w = @bytes[y]
b = p2b(0, y)
! @text[b, w]
! end
! def glyphs(y)
! line(y).unpack('U*')
end
# replace everything
From neoneye at rubyforge.org Thu Feb 3 07:19:30 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Thu Feb 3 07:19:31 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source test_core.rb
Message-ID: <200502031219.j13CJUdS000725@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv712
Modified Files:
test_core.rb
Log Message:
preparing to tag certain lines as dirty
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.53
retrieving revision 1.54
diff -C2 -d -r1.53 -r1.54
*** test_core.rb 3 Feb 2005 12:01:30 -0000 1.53
--- test_core.rb 3 Feb 2005 12:19:28 -0000 1.54
***************
*** 1664,1669 ****
@model = model
@line_states = [0]
! @dirty_lines = []
! @cache = {}
super()
--- 1664,1668 ----
@model = model
@line_states = [0]
! @topmost_dirty_line = 0
super()
***************
*** 1674,1677 ****
--- 1673,1684 ----
@state_counter = 1
end
+ def dirty(ay)
+ if ay >= 0 and ay < @line_states.size
+ @line_states[ay] = nil
+ if ay < @topmost_dirty_line
+ @topmost_dirty_line = ay
+ end
+ end
+ end
def model_update(model, info)
return if info.event == :before
***************
*** 1688,1702 ****
--- 1695,1724 ----
def colorize(ay)
# TODO: flush dirty_list here
+ if @topmost_dirty_line < ay
+ end
# sync
until @line_states.size > ay
y = @line_states.size - 1
+ @left_state = @line_states[y]
lex_line(@model.line(y))
@line_states << @right_state
end
+ # compute the requested line
@left_state = @line_states[ay]
lex_line(@model.line(ay))
+
+ # maybe propagate
+ if ay + 2 < @line_states.size
+ if @line_states[ay + 1] != @right_state
+ dirty(ay + 2)
+ end
+ end
@line_states[ay + 1] = @right_state
+
+ if @topmost_dirty_line < ay
+ @topmost_dirty_line = ay + 1
+ end
@pens
***************
*** 1706,1710 ****
end
def cached_lines
! @cache.keys.sort
end
end
--- 1728,1732 ----
end
def cached_lines
! #@cache.keys.sort
end
end
***************
*** 1743,1746 ****
--- 1765,1770 ----
assert_equal([7, 7, 7, 7, 7, 7, 7, 7], @lexer.colorize(6))
assert_equal([0, 1, 2, 3, 4, 5, 6, 7], @lexer.cached_states)
+ @lexer.dirty(2)
+ assert_equal([0, 1, nil, 3, 4, 5, 6, 7], @lexer.cached_states)
end
end
From neoneye at rubyforge.org Thu Feb 3 07:33:47 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Thu Feb 3 07:33:48 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source test_core.rb
Message-ID: <200502031233.j13CXldS000979@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv972
Modified Files:
test_core.rb
Log Message:
merged tests.. more dirtificaton of the lexer cacher
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.54
retrieving revision 1.55
diff -C2 -d -r1.54 -r1.55
*** test_core.rb 3 Feb 2005 12:19:28 -0000 1.54
--- test_core.rb 3 Feb 2005 12:33:45 -0000 1.55
***************
*** 1718,1722 ****
@line_states[ay + 1] = @right_state
! if @topmost_dirty_line < ay
@topmost_dirty_line = ay + 1
end
--- 1718,1722 ----
@line_states[ay + 1] = @right_state
! if @topmost_dirty_line <= ay
@topmost_dirty_line = ay + 1
end
***************
*** 1724,1730 ****
@pens
end
! def cached_states
@line_states
end
def cached_lines
#@cache.keys.sort
--- 1724,1733 ----
@pens
end
! def states
@line_states
end
+ def tdl
+ @topmost_dirty_line
+ end
def cached_lines
#@cache.keys.sort
***************
*** 1744,1770 ****
@model.check_integrity
end
- def test_init
- assert_equal([0], @lexer.cached_states)
- end
def test_typical1
assert_equal([1, 1], @lexer.colorize(0))
! assert_equal([0, 1], @lexer.cached_states)
! end
! def test_typical2
assert_equal("22\n", @model.line(1))
assert_equal([2, 2, 2], @lexer.colorize(1))
! assert_equal([0, 1, 2], @lexer.cached_states)
! end
! def test_typical3
assert_equal("333\n", @model.line(2))
assert_equal([3, 3, 3, 3], @lexer.colorize(2))
! assert_equal([0, 1, 2, 3], @lexer.cached_states)
end
! def test_typical4
assert_equal("7777777\n", @model.line(6))
assert_equal([7, 7, 7, 7, 7, 7, 7, 7], @lexer.colorize(6))
! assert_equal([0, 1, 2, 3, 4, 5, 6, 7], @lexer.cached_states)
! @lexer.dirty(2)
! assert_equal([0, 1, nil, 3, 4, 5, 6, 7], @lexer.cached_states)
end
end
--- 1747,1788 ----
@model.check_integrity
end
def test_typical1
+ assert_equal([0], @lexer.states)
assert_equal([1, 1], @lexer.colorize(0))
! assert_equal([0, 1], @lexer.states)
! assert_equal(1, @lexer.tdl)
assert_equal("22\n", @model.line(1))
assert_equal([2, 2, 2], @lexer.colorize(1))
! assert_equal([0, 1, 2], @lexer.states)
! assert_equal(2, @lexer.tdl)
assert_equal("333\n", @model.line(2))
assert_equal([3, 3, 3, 3], @lexer.colorize(2))
! assert_equal([0, 1, 2, 3], @lexer.states)
! assert_equal(3, @lexer.tdl)
! assert_equal("55555\n", @model.line(4))
! assert_equal([5, 5, 5, 5, 5, 5], @lexer.colorize(4))
! assert_equal([0, 1, 2, 3, 4, 5], @lexer.states)
! assert_equal(5, @lexer.tdl)
end
! def test_dirty1
assert_equal("7777777\n", @model.line(6))
assert_equal([7, 7, 7, 7, 7, 7, 7, 7], @lexer.colorize(6))
! assert_equal([0, 1, 2, 3, 4, 5, 6, 7], @lexer.states)
! assert_equal(7, @lexer.tdl)
! @lexer.dirty(3)
! assert_equal([0, 1, 2, nil, 4, 5, 6, 7], @lexer.states)
! assert_equal(3, @lexer.tdl)
! @lexer.dirty(5)
! assert_equal([0, 1, 2, nil, 4, nil, 6, 7], @lexer.states)
! assert_equal(3, @lexer.tdl)
! @lexer.dirty(1)
! assert_equal([0, nil, 2, nil, 4, nil, 6, 7], @lexer.states)
! assert_equal(1, @lexer.tdl)
! end
! def test_dirty2
! assert_equal([0], @lexer.states)
! assert_equal(0, @lexer.tdl)
! @lexer.dirty(3)
! assert_equal([0], @lexer.states, 'nothing should happen')
end
end
From neoneye at rubyforge.org Thu Feb 3 08:38:57 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Thu Feb 3 08:38:58 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source test_core.rb
Message-ID: <200502031338.j13DcvdS003866@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv3861
Modified Files:
test_core.rb
Log Message:
we can now lex the dirty lines
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.55
retrieving revision 1.56
diff -C2 -d -r1.55 -r1.56
*** test_core.rb 3 Feb 2005 12:33:45 -0000 1.55
--- test_core.rb 3 Feb 2005 13:38:55 -0000 1.56
***************
*** 1693,1702 ****
nil
end
def colorize(ay)
! # TODO: flush dirty_list here
! if @topmost_dirty_line < ay
end
! # sync
until @line_states.size > ay
y = @line_states.size - 1
--- 1693,1710 ----
nil
end
+ def set_line_state(y, state)
+ dirty(y + 1) if y+1 < @line_states.size and @line_states[y + 1] != state
+ @line_states[y] = state
+ end
def colorize(ay)
! # render dirty lines
! @topmost_dirty_line.upto([ay, @line_states.size-1].min) do |y|
! next if @line_states[y]
! @left_state = @line_states[y-1]
! lex_line(@model.line(y))
! set_line_state(y, @right_state)
end
! # render missing lines
until @line_states.size > ay
y = @line_states.size - 1
***************
*** 1709,1720 ****
@left_state = @line_states[ay]
lex_line(@model.line(ay))
!
! # maybe propagate
! if ay + 2 < @line_states.size
! if @line_states[ay + 1] != @right_state
! dirty(ay + 2)
! end
! end
! @line_states[ay + 1] = @right_state
if @topmost_dirty_line <= ay
--- 1717,1721 ----
@left_state = @line_states[ay]
lex_line(@model.line(ay))
! set_line_state(ay+1, @right_state)
if @topmost_dirty_line <= ay
***************
*** 1722,1726 ****
end
! @pens
end
def states
--- 1723,1727 ----
end
! @pens
end
def states
***************
*** 1786,1789 ****
--- 1787,1804 ----
assert_equal([0], @lexer.states, 'nothing should happen')
end
+ def test_sync_dirty1
+ assert_equal([6, 6, 6, 6, 6, 6, 6], @lexer.colorize(5))
+ @lexer.dirty(5)
+ @lexer.dirty(3)
+ @lexer.dirty(1)
+ assert_equal(1, @lexer.tdl)
+ assert_equal([0, nil, 2, nil, 4, nil, 6], @lexer.states)
+ assert_equal([2, 2, 2], @lexer.colorize(1))
+ assert_equal([0, 7, 8, nil, 4, nil, 6], @lexer.states)
+ assert_equal(2, @lexer.tdl)
+ assert_equal([3, 3, 3, 3], @lexer.colorize(2))
+ assert_equal([0, 7, 8, 9, nil, nil, 6], @lexer.states)
+ assert_equal(3, @lexer.tdl)
+ end
end
From neoneye at rubyforge.org Thu Feb 3 10:22:53 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Thu Feb 3 10:22:54 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source test_core.rb
Message-ID: <200502031522.j13FMrdS011339@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv11312
Modified Files:
test_core.rb
Log Message:
argh.. I had lots of offbyone problems.. now I have reworked the design
so that it hopefully are more robust.
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.56
retrieving revision 1.57
diff -C2 -d -r1.56 -r1.57
*** test_core.rb 3 Feb 2005 13:38:55 -0000 1.56
--- test_core.rb 3 Feb 2005 15:22:51 -0000 1.57
***************
*** 1663,1667 ****
def initialize(model)
@model = model
! @line_states = [0]
@topmost_dirty_line = 0
super()
--- 1663,1667 ----
def initialize(model)
@model = model
! @line_states = []
@topmost_dirty_line = 0
super()
***************
*** 1673,1689 ****
@state_counter = 1
end
- def dirty(ay)
- if ay >= 0 and ay < @line_states.size
- @line_states[ay] = nil
- if ay < @topmost_dirty_line
- @topmost_dirty_line = ay
- end
- end
- end
def model_update(model, info)
return if info.event == :before
return if info.event != :after
end
def lex_line(text)
pen = text[0, 1].to_i
glyphs = text.unpack('U*')
--- 1673,1692 ----
@state_counter = 1
end
def model_update(model, info)
return if info.event == :before
return if info.event != :after
+ # TODO: manipulate @line_states
+ sy = info.source_y2
+ dy = info.dest_y2
+ n = dy - sy
+ if n > 0
+ n.times { @line_states.insert(sy, nil) }
+ else
+ @line_states.slice!(dy, -n)
+ end
+ info.y1.upto([sy, dy].min) {|i| dirty(i+1) }
end
def lex_line(text)
+ #puts "lex #{text.inspect}"
pen = text[0, 1].to_i
glyphs = text.unpack('U*')
***************
*** 1693,1702 ****
nil
end
! def set_line_state(y, state)
! dirty(y + 1) if y+1 < @line_states.size and @line_states[y + 1] != state
@line_states[y] = state
end
def colorize(ay)
# render dirty lines
@topmost_dirty_line.upto([ay, @line_states.size-1].min) do |y|
next if @line_states[y]
--- 1696,1717 ----
nil
end
! def dirty(y)
! return unless y >= 0 and y < @line_states.size
! @line_states[y] = nil
! @topmost_dirty_line = [@topmost_dirty_line, y].min
! end
! def set_right_state(y, state)
! dirty(y + 1) if y + 1 < @line_states.size and @line_states[y + 1] != state
@line_states[y] = state
end
+ def get_left_state(y)
+ raise "y (#{y}) must not be negative" if y < 0
+ raise "y (#{y}) was outside" if y-1 >= @line_states.size
+ return 0 if y == 0
+ @line_states[y - 1]
+ end
def colorize(ay)
# render dirty lines
+ =begin
@topmost_dirty_line.upto([ay, @line_states.size-1].min) do |y|
next if @line_states[y]
***************
*** 1705,1725 ****
set_line_state(y, @right_state)
end
# render missing lines
! until @line_states.size > ay
! y = @line_states.size - 1
! @left_state = @line_states[y]
lex_line(@model.line(y))
! @line_states << @right_state
end
# compute the requested line
! @left_state = @line_states[ay]
lex_line(@model.line(ay))
! set_line_state(ay+1, @right_state)
!
! if @topmost_dirty_line <= ay
! @topmost_dirty_line = ay + 1
! end
@pens
--- 1720,1738 ----
set_line_state(y, @right_state)
end
+ =end
# render missing lines
! (@line_states.size).upto(ay-1) do |y|
! #puts "render #{y}"
! @left_state = get_left_state(y)
lex_line(@model.line(y))
! set_right_state(y, @right_state)
end
# compute the requested line
! @left_state = get_left_state(ay)
lex_line(@model.line(ay))
! @topmost_dirty_line = [@topmost_dirty_line, ay + 1].max
! set_right_state(ay, @right_state)
@pens
***************
*** 1749,1767 ****
end
def test_typical1
! assert_equal([0], @lexer.states)
assert_equal([1, 1], @lexer.colorize(0))
! assert_equal([0, 1], @lexer.states)
assert_equal(1, @lexer.tdl)
assert_equal("22\n", @model.line(1))
assert_equal([2, 2, 2], @lexer.colorize(1))
! assert_equal([0, 1, 2], @lexer.states)
assert_equal(2, @lexer.tdl)
assert_equal("333\n", @model.line(2))
assert_equal([3, 3, 3, 3], @lexer.colorize(2))
! assert_equal([0, 1, 2, 3], @lexer.states)
assert_equal(3, @lexer.tdl)
assert_equal("55555\n", @model.line(4))
assert_equal([5, 5, 5, 5, 5, 5], @lexer.colorize(4))
! assert_equal([0, 1, 2, 3, 4, 5], @lexer.states)
assert_equal(5, @lexer.tdl)
end
--- 1762,1781 ----
end
def test_typical1
! assert_equal([], @lexer.states)
! assert_equal(0, @lexer.tdl)
assert_equal([1, 1], @lexer.colorize(0))
! assert_equal([1], @lexer.states)
assert_equal(1, @lexer.tdl)
assert_equal("22\n", @model.line(1))
assert_equal([2, 2, 2], @lexer.colorize(1))
! assert_equal([1, 2], @lexer.states)
assert_equal(2, @lexer.tdl)
assert_equal("333\n", @model.line(2))
assert_equal([3, 3, 3, 3], @lexer.colorize(2))
! assert_equal([1, 2, 3], @lexer.states)
assert_equal(3, @lexer.tdl)
assert_equal("55555\n", @model.line(4))
assert_equal([5, 5, 5, 5, 5, 5], @lexer.colorize(4))
! assert_equal([1, 2, 3, 4, 5], @lexer.states)
assert_equal(5, @lexer.tdl)
end
***************
*** 1769,1791 ****
assert_equal("7777777\n", @model.line(6))
assert_equal([7, 7, 7, 7, 7, 7, 7, 7], @lexer.colorize(6))
! assert_equal([0, 1, 2, 3, 4, 5, 6, 7], @lexer.states)
assert_equal(7, @lexer.tdl)
@lexer.dirty(3)
! assert_equal([0, 1, 2, nil, 4, 5, 6, 7], @lexer.states)
assert_equal(3, @lexer.tdl)
@lexer.dirty(5)
! assert_equal([0, 1, 2, nil, 4, nil, 6, 7], @lexer.states)
assert_equal(3, @lexer.tdl)
@lexer.dirty(1)
! assert_equal([0, nil, 2, nil, 4, nil, 6, 7], @lexer.states)
assert_equal(1, @lexer.tdl)
end
def test_dirty2
! assert_equal([0], @lexer.states)
assert_equal(0, @lexer.tdl)
@lexer.dirty(3)
! assert_equal([0], @lexer.states, 'nothing should happen')
end
! def test_sync_dirty1
assert_equal([6, 6, 6, 6, 6, 6, 6], @lexer.colorize(5))
@lexer.dirty(5)
--- 1783,1805 ----
assert_equal("7777777\n", @model.line(6))
assert_equal([7, 7, 7, 7, 7, 7, 7, 7], @lexer.colorize(6))
! assert_equal([1, 2, 3, 4, 5, 6, 7], @lexer.states)
assert_equal(7, @lexer.tdl)
@lexer.dirty(3)
! assert_equal([1, 2, 3, nil, 5, 6, 7], @lexer.states)
assert_equal(3, @lexer.tdl)
@lexer.dirty(5)
! assert_equal([1, 2, 3, nil, 5, nil, 7], @lexer.states)
assert_equal(3, @lexer.tdl)
@lexer.dirty(1)
! assert_equal([1, nil, 3, nil, 5, nil, 7], @lexer.states)
assert_equal(1, @lexer.tdl)
end
def test_dirty2
! assert_equal([], @lexer.states)
assert_equal(0, @lexer.tdl)
@lexer.dirty(3)
! assert_equal([], @lexer.states, 'nothing should happen')
end
! def xtest_sync_dirty1
assert_equal([6, 6, 6, 6, 6, 6, 6], @lexer.colorize(5))
@lexer.dirty(5)
***************
*** 1796,1804 ****
assert_equal([2, 2, 2], @lexer.colorize(1))
assert_equal([0, 7, 8, nil, 4, nil, 6], @lexer.states)
! assert_equal(2, @lexer.tdl)
assert_equal([3, 3, 3, 3], @lexer.colorize(2))
assert_equal([0, 7, 8, 9, nil, nil, 6], @lexer.states)
assert_equal(3, @lexer.tdl)
end
end
--- 1810,1832 ----
assert_equal([2, 2, 2], @lexer.colorize(1))
assert_equal([0, 7, 8, nil, 4, nil, 6], @lexer.states)
! assert_equal(3, @lexer.tdl)
assert_equal([3, 3, 3, 3], @lexer.colorize(2))
assert_equal([0, 7, 8, 9, nil, nil, 6], @lexer.states)
+ assert_equal(3, @lexer.tdl) # TODO: fix me
+ end
+ def xtest_modelnotify1
+ assert_equal([6, 6, 6, 6, 6, 6, 6], @lexer.colorize(5))
+ assert_equal([0, 1, 2, 3, 4, 5, 6], @lexer.states)
+ assert_equal(7, @lexer.tdl)
+ @model.replace(0, 2, 1, 2, "0")
+ assert_equal([0, 1, 2, nil, 4, 5, 6], @lexer.states)
assert_equal(3, @lexer.tdl)
end
+ def xtest_modelnotify2
+ assert_equal([6, 6, 6, 6, 6, 6, 6], @lexer.colorize(5))
+ assert_equal([0, 1, 2, 3, 4, 5, 6], @lexer.states)
+ @model.replace(0, 2, 1, 3, "0\n0")
+ assert_equal([0, 1, 2, nil, nil, 5, 6], @lexer.states)
+ end
end
From neoneye at rubyforge.org Thu Feb 3 10:31:23 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Thu Feb 3 10:31:24 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source test_core.rb
Message-ID: <200502031531.j13FVNdS011560@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv11546
Modified Files:
test_core.rb
Log Message:
the lexer seems to have become more robust
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.57
retrieving revision 1.58
diff -C2 -d -r1.57 -r1.58
*** test_core.rb 3 Feb 2005 15:22:51 -0000 1.57
--- test_core.rb 3 Feb 2005 15:31:21 -0000 1.58
***************
*** 1713,1724 ****
def colorize(ay)
# render dirty lines
! =begin
! @topmost_dirty_line.upto([ay, @line_states.size-1].min) do |y|
next if @line_states[y]
! @left_state = @line_states[y-1]
lex_line(@model.line(y))
! set_line_state(y, @right_state)
end
- =end
# render missing lines
--- 1713,1722 ----
def colorize(ay)
# render dirty lines
! @topmost_dirty_line.upto([ay, @line_states.size].min-1) do |y|
next if @line_states[y]
! @left_state = get_left_state(y)
lex_line(@model.line(y))
! set_right_state(y, @right_state)
end
# render missing lines
***************
*** 1801,1817 ****
assert_equal([], @lexer.states, 'nothing should happen')
end
! def xtest_sync_dirty1
! assert_equal([6, 6, 6, 6, 6, 6, 6], @lexer.colorize(5))
@lexer.dirty(5)
@lexer.dirty(3)
@lexer.dirty(1)
assert_equal(1, @lexer.tdl)
! assert_equal([0, nil, 2, nil, 4, nil, 6], @lexer.states)
assert_equal([2, 2, 2], @lexer.colorize(1))
! assert_equal([0, 7, 8, nil, 4, nil, 6], @lexer.states)
! assert_equal(3, @lexer.tdl)
! assert_equal([3, 3, 3, 3], @lexer.colorize(2))
! assert_equal([0, 7, 8, 9, nil, nil, 6], @lexer.states)
! assert_equal(3, @lexer.tdl) # TODO: fix me
end
def xtest_modelnotify1
--- 1799,1815 ----
assert_equal([], @lexer.states, 'nothing should happen')
end
! def test_sync_dirty1
! assert_equal([7, 7, 7, 7, 7, 7, 7, 7], @lexer.colorize(6))
@lexer.dirty(5)
@lexer.dirty(3)
@lexer.dirty(1)
assert_equal(1, @lexer.tdl)
! assert_equal([1, nil, 3, nil, 5, nil, 7], @lexer.states)
assert_equal([2, 2, 2], @lexer.colorize(1))
! assert_equal([1, 8, nil, nil, 5, nil, 7], @lexer.states)
! assert_equal(2, @lexer.tdl)
! assert_equal([4, 4, 4, 4, 4], @lexer.colorize(3))
! assert_equal([1, 8, 9, 10, nil, nil, 7], @lexer.states)
! assert_equal(4, @lexer.tdl)
end
def xtest_modelnotify1
From neoneye at rubyforge.org Thu Feb 3 10:46:29 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Thu Feb 3 10:46:30 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source test_core.rb
Message-ID: <200502031546.j13FkTdS011946@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv11922
Modified Files:
test_core.rb
Log Message:
now lexer behaves nice when it gets a model_notify
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.58
retrieving revision 1.59
diff -C2 -d -r1.58 -r1.59
*** test_core.rb 3 Feb 2005 15:31:21 -0000 1.58
--- test_core.rb 3 Feb 2005 15:46:27 -0000 1.59
***************
*** 1663,1672 ****
def initialize(model)
@model = model
! @line_states = []
@topmost_dirty_line = 0
super()
! @left_state = 0
! @right_state = 0
@pens = []
--- 1663,1672 ----
def initialize(model)
@model = model
! @right_states = []
@topmost_dirty_line = 0
super()
! @left = 0
! @right = 0
@pens = []
***************
*** 1676,1689 ****
return if info.event == :before
return if info.event != :after
! # TODO: manipulate @line_states
sy = info.source_y2
dy = info.dest_y2
n = dy - sy
if n > 0
! n.times { @line_states.insert(sy, nil) }
else
! @line_states.slice!(dy, -n)
end
! info.y1.upto([sy, dy].min) {|i| dirty(i+1) }
end
def lex_line(text)
--- 1676,1689 ----
return if info.event == :before
return if info.event != :after
! # TODO: manipulate @right_states
sy = info.source_y2
dy = info.dest_y2
n = dy - sy
if n > 0
! n.times { @right_states.insert(sy, nil) }
else
! @right_states.slice!(dy, -n)
end
! info.y1.upto([sy, dy].min) {|i| dirty(i) }
end
def lex_line(text)
***************
*** 1692,1741 ****
glyphs = text.unpack('U*')
@pens = glyphs.map{|g| pen}
! @right_state = @state_counter
@state_counter += 1
nil
end
def dirty(y)
! return unless y >= 0 and y < @line_states.size
! @line_states[y] = nil
@topmost_dirty_line = [@topmost_dirty_line, y].min
end
def set_right_state(y, state)
! dirty(y + 1) if y + 1 < @line_states.size and @line_states[y + 1] != state
! @line_states[y] = state
end
def get_left_state(y)
raise "y (#{y}) must not be negative" if y < 0
! raise "y (#{y}) was outside" if y-1 >= @line_states.size
return 0 if y == 0
! @line_states[y - 1]
end
def colorize(ay)
# render dirty lines
! @topmost_dirty_line.upto([ay, @line_states.size].min-1) do |y|
! next if @line_states[y]
! @left_state = get_left_state(y)
lex_line(@model.line(y))
! set_right_state(y, @right_state)
end
# render missing lines
! (@line_states.size).upto(ay-1) do |y|
#puts "render #{y}"
! @left_state = get_left_state(y)
lex_line(@model.line(y))
! set_right_state(y, @right_state)
end
# compute the requested line
! @left_state = get_left_state(ay)
lex_line(@model.line(ay))
@topmost_dirty_line = [@topmost_dirty_line, ay + 1].max
! set_right_state(ay, @right_state)
@pens
end
def states
! @line_states
end
def tdl
--- 1692,1741 ----
glyphs = text.unpack('U*')
@pens = glyphs.map{|g| pen}
! @right = @state_counter
@state_counter += 1
nil
end
def dirty(y)
! return unless y >= 0 and y < @right_states.size
! @right_states[y] = nil
@topmost_dirty_line = [@topmost_dirty_line, y].min
end
def set_right_state(y, state)
! dirty(y + 1) if y + 1 < @right_states.size and @right_states[y + 1] != state
! @right_states[y] = state
end
def get_left_state(y)
raise "y (#{y}) must not be negative" if y < 0
! raise "y (#{y}) was outside" if y-1 >= @right_states.size
return 0 if y == 0
! @right_states[y - 1]
end
def colorize(ay)
# render dirty lines
! @topmost_dirty_line.upto([ay, @right_states.size].min-1) do |y|
! next if @right_states[y]
! @left = get_left_state(y)
lex_line(@model.line(y))
! set_right_state(y, @right)
end
# render missing lines
! (@right_states.size).upto(ay-1) do |y|
#puts "render #{y}"
! @left = get_left_state(y)
lex_line(@model.line(y))
! set_right_state(y, @right)
end
# compute the requested line
! @left = get_left_state(ay)
lex_line(@model.line(ay))
@topmost_dirty_line = [@topmost_dirty_line, ay + 1].max
! set_right_state(ay, @right)
@pens
end
def states
! @right_states
end
def tdl
***************
*** 1813,1829 ****
assert_equal(4, @lexer.tdl)
end
! def xtest_modelnotify1
assert_equal([6, 6, 6, 6, 6, 6, 6], @lexer.colorize(5))
! assert_equal([0, 1, 2, 3, 4, 5, 6], @lexer.states)
! assert_equal(7, @lexer.tdl)
@model.replace(0, 2, 1, 2, "0")
! assert_equal([0, 1, 2, nil, 4, 5, 6], @lexer.states)
! assert_equal(3, @lexer.tdl)
end
! def xtest_modelnotify2
assert_equal([6, 6, 6, 6, 6, 6, 6], @lexer.colorize(5))
! assert_equal([0, 1, 2, 3, 4, 5, 6], @lexer.states)
@model.replace(0, 2, 1, 3, "0\n0")
! assert_equal([0, 1, 2, nil, nil, 5, 6], @lexer.states)
end
end
--- 1813,1830 ----
assert_equal(4, @lexer.tdl)
end
! def test_modelnotify1
assert_equal([6, 6, 6, 6, 6, 6, 6], @lexer.colorize(5))
! assert_equal([1, 2, 3, 4, 5, 6], @lexer.states)
! assert_equal(6, @lexer.tdl)
@model.replace(0, 2, 1, 2, "0")
! assert_equal([1, 2, nil, 4, 5, 6], @lexer.states)
! assert_equal(2, @lexer.tdl)
end
! def test_modelnotify2
assert_equal([6, 6, 6, 6, 6, 6, 6], @lexer.colorize(5))
! assert_equal([1, 2, 3, 4, 5, 6], @lexer.states)
@model.replace(0, 2, 1, 3, "0\n0")
! assert_equal([1, 2, nil, nil, 5, 6], @lexer.states)
! assert_equal(2, @lexer.tdl)
end
end
From neoneye at rubyforge.org Thu Feb 3 15:00:01 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Thu Feb 3 15:00:02 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source test_core.rb
Message-ID: <200502032000.j13K01dS027006@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv26635
Modified Files:
test_core.rb
Log Message:
lexer cache.. more testing of remove/insert
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.59
retrieving revision 1.60
diff -C2 -d -r1.59 -r1.60
*** test_core.rb 3 Feb 2005 15:46:27 -0000 1.59
--- test_core.rb 3 Feb 2005 19:59:59 -0000 1.60
***************
*** 1813,1817 ****
assert_equal(4, @lexer.tdl)
end
! def test_modelnotify1
assert_equal([6, 6, 6, 6, 6, 6, 6], @lexer.colorize(5))
assert_equal([1, 2, 3, 4, 5, 6], @lexer.states)
--- 1813,1817 ----
assert_equal(4, @lexer.tdl)
end
! def test_modelnotify_same1
assert_equal([6, 6, 6, 6, 6, 6, 6], @lexer.colorize(5))
assert_equal([1, 2, 3, 4, 5, 6], @lexer.states)
***************
*** 1821,1825 ****
assert_equal(2, @lexer.tdl)
end
! def test_modelnotify2
assert_equal([6, 6, 6, 6, 6, 6, 6], @lexer.colorize(5))
assert_equal([1, 2, 3, 4, 5, 6], @lexer.states)
--- 1821,1825 ----
assert_equal(2, @lexer.tdl)
end
! def test_modelnotify_same2
assert_equal([6, 6, 6, 6, 6, 6, 6], @lexer.colorize(5))
assert_equal([1, 2, 3, 4, 5, 6], @lexer.states)
***************
*** 1828,1831 ****
--- 1828,1846 ----
assert_equal(2, @lexer.tdl)
end
+ def test_modelnotify_remove1
+ assert_equal([6, 6, 6, 6, 6, 6, 6], @lexer.colorize(5))
+ assert_equal([1, 2, 3, 4, 5, 6], @lexer.states)
+ @model.replace(0, 2, 0, 3, "")
+ assert_equal([1, 2, nil, 5, 6], @lexer.states)
+ assert_equal(2, @lexer.tdl)
+ end
+ def test_modelnotify_insert1
+ assert_equal([6, 6, 6, 6, 6, 6, 6], @lexer.colorize(5))
+ assert_equal([1, 2, 3, 4, 5, 6], @lexer.states)
+ @model.replace(0, 3, 0, 3, "0\n")
+ assert_equal("333\n0\n4444\n", @model.line(2) + @model.line(3) + @model.line(4))
+ assert_equal([1, 2, 3, nil, 4, 5, 6], @lexer.states)
+ assert_equal(3, @lexer.tdl)
+ end
end
From neoneye at rubyforge.org Thu Feb 3 20:05:45 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Thu Feb 3 20:05:45 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source test_core.rb
Message-ID: <200502040105.j1415jdS012904@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv12893
Modified Files:
test_core.rb
Log Message:
preparations for LRU caching of pens
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.60
retrieving revision 1.61
diff -C2 -d -r1.60 -r1.61
*** test_core.rb 3 Feb 2005 19:59:59 -0000 1.60
--- test_core.rb 4 Feb 2005 01:05:42 -0000 1.61
***************
*** 1676,1680 ****
return if info.event == :before
return if info.event != :after
- # TODO: manipulate @right_states
sy = info.source_y2
dy = info.dest_y2
--- 1676,1679 ----
***************
*** 1682,1687 ****
--- 1681,1688 ----
if n > 0
n.times { @right_states.insert(sy, nil) }
+ # TODO: displace all cached pens
else
@right_states.slice!(dy, -n)
+ # TODO: displace all cached pens
end
info.y1.upto([sy, dy].min) {|i| dirty(i) }
***************
*** 1700,1703 ****
--- 1701,1705 ----
@right_states[y] = nil
@topmost_dirty_line = [@topmost_dirty_line, y].min
+ # TODO: dirtify cached pens for this line
end
def set_right_state(y, state)
***************
*** 1728,1731 ****
--- 1730,1738 ----
end
+ # if ay < @right_states.size and @right_states[ay]
+ # res = load(ay)
+ # return res.clone if res
+ # end
+
# compute the requested line
@left = get_left_state(ay)
***************
*** 1734,1737 ****
--- 1741,1746 ----
set_right_state(ay, @right)
+ # store(ay, @pens.clone)
+
@pens
end
***************
*** 1835,1838 ****
--- 1844,1854 ----
assert_equal(2, @lexer.tdl)
end
+ def test_modelnotify_remove2
+ assert_equal([6, 6, 6, 6, 6, 6, 6], @lexer.colorize(5))
+ assert_equal([1, 2, 3, 4, 5, 6], @lexer.states)
+ @model.replace(0, 1, 0, 4, "")
+ assert_equal([1, nil, 6], @lexer.states)
+ assert_equal(1, @lexer.tdl)
+ end
def test_modelnotify_insert1
assert_equal([6, 6, 6, 6, 6, 6, 6], @lexer.colorize(5))
***************
*** 1843,1846 ****
--- 1859,1869 ----
assert_equal(3, @lexer.tdl)
end
+ def test_modelnotify_insert2
+ assert_equal([6, 6, 6, 6, 6, 6, 6], @lexer.colorize(5))
+ assert_equal([1, 2, 3, 4, 5, 6], @lexer.states)
+ @model.replace(0, 3, 0, 3, "0\n0\n0\n")
+ assert_equal([1, 2, 3, nil, nil, nil, 4, 5, 6], @lexer.states)
+ assert_equal(3, @lexer.tdl)
+ end
end
From neoneye at rubyforge.org Fri Feb 4 04:27:24 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Fri Feb 4 04:27:24 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES
Message-ID: <200502040927.j149ROdS019062@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv19057
Modified Files:
CHANGES
Log Message:
status last night
Index: CHANGES
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v
retrieving revision 1.41
retrieving revision 1.42
diff -C2 -d -r1.41 -r1.42
*** CHANGES 2 Feb 2005 22:23:37 -0000 1.41
--- CHANGES 4 Feb 2005 09:27:22 -0000 1.42
***************
*** 1,2 ****
--- 1,5 ----
+ 03-02-2005 Neoneye
+ * early code for a lexer cache.
+
02-02-2005 Neoneye
* released version 2.3 (darkmatter release).
From neoneye at rubyforge.org Fri Feb 4 06:07:44 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Fri Feb 4 06:07:45 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source test_core.rb
Message-ID: <200502041107.j14B7idS024026@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv24019
Modified Files:
test_core.rb
Log Message:
wrote a LRUCache class
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.61
retrieving revision 1.62
diff -C2 -d -r1.61 -r1.62
*** test_core.rb 4 Feb 2005 01:05:42 -0000 1.61
--- test_core.rb 4 Feb 2005 11:07:42 -0000 1.62
***************
*** 1660,1663 ****
--- 1660,1804 ----
+ class LRUCache
+ def initialize
+ @size = 1
+ @pens = {}
+ @used = []
+ end
+ attr_reader :size, :used, :pens
+ def resize(n)
+ raise ArgumentError if n < 0
+ @size = n
+ wipe
+ end
+ def wipe
+ while @used.size > @size
+ @pens.delete(@used.pop)
+ end
+ end
+ private :wipe
+ def store(key, value)
+ @used.delete(key)
+ @used.unshift(key)
+ @pens[key] = value
+ wipe
+ end
+ def has_key?(key)
+ @pens.has_key?(key)
+ end
+ def load(key)
+ return nil unless has_key?(key)
+ @used.delete(key)
+ @used.unshift(key)
+ @pens[key]
+ end
+ def insert(y, n)
+ displaced = {}
+ @used.each_with_index do |key, i|
+ if key >= y
+ @used[i] = key+n
+ displaced[key+n] = @pens.delete(key)
+ end
+ end
+ @pens.merge!(displaced)
+ end
+ def remove(y, n)
+ # phase 1: erase key-values between y and y+n
+ to_delete = []
+ @used.each_with_index do |key, i|
+ if key >= y and key < y+n
+ to_delete << key
+ end
+ end
+ to_delete.each do |key|
+ @used.delete(key)
+ @pens.delete(key)
+ end
+ # phase 2: displace key-values above y+n to y
+ displaced = {}
+ @used.each_with_index do |key, i|
+ if key >= y+n
+ @used[i] = key-n
+ displaced[key-n] = @pens.delete(key)
+ end
+ end
+ @pens.merge!(displaced)
+ end
+ end
+
+ class TestLRUCache < Test::Unit::TestCase
+ def setup
+ @lru = LRUCache.new
+ end
+ def teardown
+ end
+ def test_init
+ assert_equal(1, @lru.size)
+ end
+ def test_store1
+ @lru.resize(4)
+ assert_equal([], @lru.used)
+ @lru.store(5, 'im 5')
+ assert_equal([5], @lru.used)
+ @lru.store(3, 'im 3')
+ assert_equal([3, 5], @lru.used)
+ @lru.store(7, 'im 7')
+ assert_equal([7, 3, 5], @lru.used)
+ @lru.store(1, 'im 1')
+ assert_equal([1, 7, 3, 5], @lru.used)
+ assert_equal([1, 3, 5, 7], @lru.pens.keys.sort)
+ @lru.store(9, 'im 9')
+ assert_equal([9, 1, 7, 3], @lru.used)
+ assert_equal([1, 3, 7, 9], @lru.pens.keys.sort)
+ @lru.resize(2)
+ assert_equal([9, 1], @lru.used)
+ assert_equal([1, 9], @lru.pens.keys.sort)
+ assert_equal(true, @lru.has_key?(1))
+ assert_equal(false, @lru.has_key?(3))
+ end
+ def test_store2
+ @lru.resize(4)
+ @lru.store(3, 'c')
+ @lru.store(1, 'a')
+ @lru.store(2, 'b')
+ assert_equal([2, 1, 3], @lru.used)
+ @lru.store(1, 'A')
+ assert_equal([1, 2, 3], @lru.used)
+ end
+ def test_load1
+ @lru.resize(4)
+ @lru.store(1, 'a')
+ @lru.store(2, 'b')
+ @lru.store(3, 'c')
+ assert_equal('a', @lru.load(1))
+ assert_equal('b', @lru.load(2))
+ assert_equal('c', @lru.load(3))
+ assert_equal(nil, @lru.load(4))
+ end
+ def test_insert1
+ @lru.resize(4)
+ @lru.store(3, 'z')
+ @lru.store(1, 'x')
+ @lru.store(2, 'y')
+ assert_equal(%w(x y z), @lru.pens.values.sort)
+ assert_equal([1, 2, 3], @lru.pens.keys.sort)
+ @lru.insert(2, 1)
+ assert_equal([3, 1, 4], @lru.used)
+ assert_equal(%w(x y z), @lru.pens.values.sort)
+ assert_equal([1, 3, 4], @lru.pens.keys.sort)
+ end
+ def test_remove1
+ @lru.resize(4)
+ @lru.store(3, 'z')
+ @lru.store(1, 'x')
+ @lru.store(2, 'y')
+ @lru.store(4, 'w')
+ @lru.remove(2, 2)
+ assert_equal([2, 1], @lru.used)
+ assert_equal(%w(w x), @lru.pens.values.sort)
+ assert_equal([1, 2], @lru.pens.keys.sort)
+ end
+ end
+
class MockLexer2 < AEditor::Lexer::Base
def initialize(model)
From neoneye at rubyforge.org Fri Feb 4 06:33:34 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Fri Feb 4 06:33:36 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES
core.rb test_core.rb
Message-ID: <200502041133.j14BXYdS024418@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv24413
Modified Files:
CHANGES core.rb test_core.rb
Log Message:
Wrote a LRU cache
Index: CHANGES
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v
retrieving revision 1.42
retrieving revision 1.43
diff -C2 -d -r1.42 -r1.43
*** CHANGES 4 Feb 2005 09:27:22 -0000 1.42
--- CHANGES 4 Feb 2005 11:33:32 -0000 1.43
***************
*** 1,2 ****
--- 1,6 ----
+ 04-02-2005 Neoneye
+ * wrote a LRU cache so that I can remember the colorization per
+ visible line.
+
03-02-2005 Neoneye
* early code for a lexer cache.
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.62
retrieving revision 1.63
diff -C2 -d -r1.62 -r1.63
*** test_core.rb 4 Feb 2005 11:07:42 -0000 1.62
--- test_core.rb 4 Feb 2005 11:33:32 -0000 1.63
***************
*** 1660,1736 ****
- class LRUCache
- def initialize
- @size = 1
- @pens = {}
- @used = []
- end
- attr_reader :size, :used, :pens
- def resize(n)
- raise ArgumentError if n < 0
- @size = n
- wipe
- end
- def wipe
- while @used.size > @size
- @pens.delete(@used.pop)
- end
- end
- private :wipe
- def store(key, value)
- @used.delete(key)
- @used.unshift(key)
- @pens[key] = value
- wipe
- end
- def has_key?(key)
- @pens.has_key?(key)
- end
- def load(key)
- return nil unless has_key?(key)
- @used.delete(key)
- @used.unshift(key)
- @pens[key]
- end
- def insert(y, n)
- displaced = {}
- @used.each_with_index do |key, i|
- if key >= y
- @used[i] = key+n
- displaced[key+n] = @pens.delete(key)
- end
- end
- @pens.merge!(displaced)
- end
- def remove(y, n)
- # phase 1: erase key-values between y and y+n
- to_delete = []
- @used.each_with_index do |key, i|
- if key >= y and key < y+n
- to_delete << key
- end
- end
- to_delete.each do |key|
- @used.delete(key)
- @pens.delete(key)
- end
- # phase 2: displace key-values above y+n to y
- displaced = {}
- @used.each_with_index do |key, i|
- if key >= y+n
- @used[i] = key-n
- displaced[key-n] = @pens.delete(key)
- end
- end
- @pens.merge!(displaced)
- end
- end
-
class TestLRUCache < Test::Unit::TestCase
def setup
! @lru = LRUCache.new
end
- def teardown
- end
def test_init
assert_equal(1, @lru.size)
--- 1660,1667 ----
class TestLRUCache < Test::Unit::TestCase
def setup
! @lru = AEditor::Lexer::LRUCache.new
end
def test_init
assert_equal(1, @lru.size)
Index: core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v
retrieving revision 1.66
retrieving revision 1.67
diff -C2 -d -r1.66 -r1.67
*** core.rb 3 Feb 2005 12:01:30 -0000 1.66
--- core.rb 4 Feb 2005 11:33:32 -0000 1.67
***************
*** 887,890 ****
--- 887,956 ----
module Lexer
+
+ # purpose:
+ # remember the most recently used pen-lines
+ class LRUCache
+ def initialize
+ @size = 1
+ @pens = {}
+ @used = []
+ end
+ attr_reader :size, :used, :pens
+ def resize(n)
+ raise ArgumentError if n < 0
+ @size = n
+ wipe
+ end
+ def wipe
+ while @used.size > @size
+ @pens.delete(@used.pop)
+ end
+ end
+ private :wipe
+ def store(key, value)
+ @used.delete(key)
+ @used.unshift(key)
+ @pens[key] = value
+ wipe
+ end
+ def has_key?(key)
+ @pens.has_key?(key)
+ end
+ # note: remember to .clone the data you get from .load
+ def load(key)
+ return nil unless has_key?(key)
+ @used.delete(key)
+ @used.unshift(key)
+ @pens[key]
+ end
+ def displace(y, n)
+ displaced = {}
+ @used.each_with_index do |key, i|
+ if key >= y
+ @used[i] = key+n
+ displaced[key+n] = @pens.delete(key)
+ end
+ end
+ @pens.merge!(displaced)
+ end
+ alias :insert :displace
+ private :displace
+ public :insert
+ def remove_in_range(y, n)
+ ary = []
+ @used.each {|key| ary << key if key >= y and key < y+n }
+ ary.each do |key|
+ @used.delete(key)
+ @pens.delete(key)
+ end
+ end
+ private :remove_in_range
+ def remove(y, n)
+ remove_in_range(y, n)
+ displace(y+n, -n)
+ end
+ end
+
+
class Base
end
From neoneye at rubyforge.org Fri Feb 4 07:13:29 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Fri Feb 4 07:13:35 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb
test_core.rb
Message-ID: <200502041213.j14CDTdS026580@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv26575
Modified Files:
core.rb test_core.rb
Log Message:
added aliases [] and []= to the LRU class
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.63
retrieving revision 1.64
diff -C2 -d -r1.63 -r1.64
*** test_core.rb 4 Feb 2005 11:33:32 -0000 1.63
--- test_core.rb 4 Feb 2005 12:13:27 -0000 1.64
***************
*** 1662,1666 ****
class TestLRUCache < Test::Unit::TestCase
def setup
! @lru = AEditor::Lexer::LRUCache.new
end
def test_init
--- 1662,1666 ----
class TestLRUCache < Test::Unit::TestCase
def setup
! @lru = AEditor::Lexer::LRU.new
end
def test_init
***************
*** 1670,1683 ****
@lru.resize(4)
assert_equal([], @lru.used)
! @lru.store(5, 'im 5')
assert_equal([5], @lru.used)
! @lru.store(3, 'im 3')
assert_equal([3, 5], @lru.used)
! @lru.store(7, 'im 7')
assert_equal([7, 3, 5], @lru.used)
! @lru.store(1, 'im 1')
assert_equal([1, 7, 3, 5], @lru.used)
assert_equal([1, 3, 5, 7], @lru.pens.keys.sort)
! @lru.store(9, 'im 9')
assert_equal([9, 1, 7, 3], @lru.used)
assert_equal([1, 3, 7, 9], @lru.pens.keys.sort)
--- 1670,1683 ----
@lru.resize(4)
assert_equal([], @lru.used)
! @lru[5] = 'im 5'
assert_equal([5], @lru.used)
! @lru[3] = 'im 3'
assert_equal([3, 5], @lru.used)
! @lru[7] = 'im 7'
assert_equal([7, 3, 5], @lru.used)
! @lru[1] = 'im 1'
assert_equal([1, 7, 3, 5], @lru.used)
assert_equal([1, 3, 5, 7], @lru.pens.keys.sort)
! @lru[9] = 'im 9'
assert_equal([9, 1, 7, 3], @lru.used)
assert_equal([1, 3, 7, 9], @lru.pens.keys.sort)
***************
*** 1690,1715 ****
def test_store2
@lru.resize(4)
! @lru.store(3, 'c')
! @lru.store(1, 'a')
! @lru.store(2, 'b')
assert_equal([2, 1, 3], @lru.used)
! @lru.store(1, 'A')
assert_equal([1, 2, 3], @lru.used)
end
def test_load1
@lru.resize(4)
! @lru.store(1, 'a')
! @lru.store(2, 'b')
! @lru.store(3, 'c')
! assert_equal('a', @lru.load(1))
! assert_equal('b', @lru.load(2))
! assert_equal('c', @lru.load(3))
! assert_equal(nil, @lru.load(4))
end
def test_insert1
@lru.resize(4)
! @lru.store(3, 'z')
! @lru.store(1, 'x')
! @lru.store(2, 'y')
assert_equal(%w(x y z), @lru.pens.values.sort)
assert_equal([1, 2, 3], @lru.pens.keys.sort)
--- 1690,1715 ----
def test_store2
@lru.resize(4)
! @lru[3] = 'c'
! @lru[1] = 'a'
! @lru[2] = 'b'
assert_equal([2, 1, 3], @lru.used)
! @lru[1] = 'A'
assert_equal([1, 2, 3], @lru.used)
end
def test_load1
@lru.resize(4)
! @lru[1] = 'a'
! @lru[2] = 'b'
! @lru[3] = 'c'
! assert_equal('a', @lru[1])
! assert_equal('b', @lru[2])
! assert_equal('c', @lru[3])
! assert_equal(nil, @lru[4])
end
def test_insert1
@lru.resize(4)
! @lru[3] = 'z'
! @lru[1] = 'x'
! @lru[2] = 'y'
assert_equal(%w(x y z), @lru.pens.values.sort)
assert_equal([1, 2, 3], @lru.pens.keys.sort)
***************
*** 1721,1728 ****
def test_remove1
@lru.resize(4)
! @lru.store(3, 'z')
! @lru.store(1, 'x')
! @lru.store(2, 'y')
! @lru.store(4, 'w')
@lru.remove(2, 2)
assert_equal([2, 1], @lru.used)
--- 1721,1728 ----
def test_remove1
@lru.resize(4)
! @lru[3] = 'z'
! @lru[1] = 'x'
! @lru[2] = 'y'
! @lru[4] = 'w'
@lru.remove(2, 2)
assert_equal([2, 1], @lru.used)
Index: core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v
retrieving revision 1.67
retrieving revision 1.68
diff -C2 -d -r1.67 -r1.68
*** core.rb 4 Feb 2005 11:33:32 -0000 1.67
--- core.rb 4 Feb 2005 12:13:27 -0000 1.68
***************
*** 890,894 ****
# purpose:
# remember the most recently used pen-lines
! class LRUCache
def initialize
@size = 1
--- 890,894 ----
# purpose:
# remember the most recently used pen-lines
! class LRU
def initialize
@size = 1
***************
*** 914,917 ****
--- 914,918 ----
wipe
end
+ alias_method('[]=', :store)
def has_key?(key)
@pens.has_key?(key)
***************
*** 924,927 ****
--- 925,929 ----
@pens[key]
end
+ alias_method('[]', :load)
def displace(y, n)
displaced = {}
From neoneye at rubyforge.org Fri Feb 4 07:42:28 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Fri Feb 4 07:42:29 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb
test_core.rb
Message-ID: <200502041242.j14CgSdS027211@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv27205
Modified Files:
core.rb test_core.rb
Log Message:
LRU#delete added
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.64
retrieving revision 1.65
diff -C2 -d -r1.64 -r1.65
*** test_core.rb 4 Feb 2005 12:13:27 -0000 1.64
--- test_core.rb 4 Feb 2005 12:42:26 -0000 1.65
***************
*** 1730,1733 ****
--- 1730,1747 ----
assert_equal([1, 2], @lru.pens.keys.sort)
end
+ def test_delete1
+ @lru.resize(4)
+ @lru[3] = 'z'
+ @lru[1] = 'x'
+ @lru[2] = 'y'
+ assert_equal('x', @lru.delete(1))
+ assert_equal([2, 3], @lru.used)
+ assert_equal(%w(y z), @lru.pens.values.sort)
+ assert_equal([2, 3], @lru.pens.keys.sort)
+ assert_equal('y', @lru.delete(2))
+ assert_equal([3], @lru.used)
+ assert_equal(%w(z), @lru.pens.values.sort)
+ assert_equal([3], @lru.pens.keys.sort)
+ end
end
Index: core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v
retrieving revision 1.68
retrieving revision 1.69
diff -C2 -d -r1.68 -r1.69
*** core.rb 4 Feb 2005 12:13:27 -0000 1.68
--- core.rb 4 Feb 2005 12:42:26 -0000 1.69
***************
*** 926,929 ****
--- 926,933 ----
end
alias_method('[]', :load)
+ def delete(key)
+ @used.delete(key)
+ @pens.delete(key)
+ end
def displace(y, n)
displaced = {}
***************
*** 942,949 ****
ary = []
@used.each {|key| ary << key if key >= y and key < y+n }
! ary.each do |key|
! @used.delete(key)
! @pens.delete(key)
! end
end
private :remove_in_range
--- 946,950 ----
ary = []
@used.each {|key| ary << key if key >= y and key < y+n }
! ary.each {|key| delete(key) }
end
private :remove_in_range
From neoneye at rubyforge.org Fri Feb 4 10:09:13 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Fri Feb 4 10:09:14 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source test_core.rb
Message-ID: <200502041509.j14F9DdS002990@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv2976
Modified Files:
test_core.rb
Log Message:
added LRU caching to the MockLexer2
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.65
retrieving revision 1.66
diff -C2 -d -r1.65 -r1.66
*** test_core.rb 4 Feb 2005 12:42:26 -0000 1.65
--- test_core.rb 4 Feb 2005 15:09:11 -0000 1.66
***************
*** 1756,1762 ****
--- 1756,1767 ----
@right = 0
@pens = []
+ @lru = AEditor::Lexer::LRU.new
@state_counter = 1
end
+ attr_reader :lru
+ def resize(n)
+ @lru.resize(n)
+ end
def model_update(model, info)
return if info.event == :before
***************
*** 1767,1774 ****
if n > 0
n.times { @right_states.insert(sy, nil) }
! # TODO: displace all cached pens
else
@right_states.slice!(dy, -n)
! # TODO: displace all cached pens
end
info.y1.upto([sy, dy].min) {|i| dirty(i) }
--- 1772,1779 ----
if n > 0
n.times { @right_states.insert(sy, nil) }
! @lru.insert(sy, n) # displace all cached pens
else
@right_states.slice!(dy, -n)
! @lru.remove(dy+n, -n) # displace all cached pens
end
info.y1.upto([sy, dy].min) {|i| dirty(i) }
***************
*** 1787,1791 ****
@right_states[y] = nil
@topmost_dirty_line = [@topmost_dirty_line, y].min
! # TODO: dirtify cached pens for this line
end
def set_right_state(y, state)
--- 1792,1796 ----
@right_states[y] = nil
@topmost_dirty_line = [@topmost_dirty_line, y].min
! @lru.delete(y) # dirtify cached pens for this line
end
def set_right_state(y, state)
***************
*** 1816,1823 ****
end
! # if ay < @right_states.size and @right_states[ay]
! # res = load(ay)
! # return res.clone if res
! # end
# compute the requested line
--- 1821,1828 ----
end
! if ay < @right_states.size and @right_states[ay]
! res = @lru[ay]
! return res if res
! end
# compute the requested line
***************
*** 1827,1831 ****
set_right_state(ay, @right)
! # store(ay, @pens.clone)
@pens
--- 1832,1836 ----
set_right_state(ay, @right)
! @lru[ay] = @pens
@pens
***************
*** 1837,1843 ****
@topmost_dirty_line
end
- def cached_lines
- #@cache.keys.sort
- end
end
--- 1842,1845 ----
***************
*** 1952,1955 ****
--- 1954,2026 ----
assert_equal(3, @lexer.tdl)
end
+ # requesting a line which has already been computed
+ # must result in the exact same result as first time
+ # it was computed.. because its cached.
+ # except if it was too long ago..
+ def test_caching1
+ assert_equal([], @lexer.lru.pens.keys.sort)
+ pens1 = @lexer.colorize(1)
+ assert_equal([2, 2, 2], pens1)
+ assert_equal([1], @lexer.lru.pens.keys.sort)
+ pens2 = @lexer.colorize(1)
+ assert_same(pens1, pens2, 'should be cached')
+ @lexer.dirty(1)
+ assert_equal([], @lexer.lru.used)
+ pens3 = @lexer.colorize(1)
+ assert_not_same(pens1, pens3, 'should not be cached')
+ end
+ def test_caching2
+ @lexer.resize(2)
+ assert_equal([], @lexer.lru.pens.keys.sort)
+ pens1 = @lexer.colorize(1)
+ assert_equal([2, 2, 2], pens1)
+ assert_equal([1], @lexer.lru.pens.keys.sort)
+ pens2 = @lexer.colorize(2)
+ assert_equal([3, 3, 3, 3], pens2)
+ assert_equal([2, 1], @lexer.lru.used)
+ pens3 = @lexer.colorize(1)
+ assert_same(pens1, pens3, 'should be cached')
+ assert_equal([1, 2], @lexer.lru.used)
+ pens4 = @lexer.colorize(3)
+ assert_equal([4, 4, 4, 4, 4], pens4)
+ assert_equal([3, 1], @lexer.lru.used)
+ pens5 = @lexer.colorize(2)
+ assert_not_same(pens2, pens5, 'should not be cached')
+ end
+ def test_caching3
+ assert_equal([], @lexer.lru.pens.keys.sort)
+ pens1 = @lexer.colorize(1)
+ assert_equal([2, 2, 2], pens1)
+ assert_equal([1], @lexer.lru.pens.keys.sort)
+ pens2 = @lexer.colorize(2)
+ assert_equal([3, 3, 3, 3], pens2)
+ assert_equal([2], @lexer.lru.pens.keys.sort)
+ assert_not_same(pens1, pens2, 'should not be cached')
+ pens3 = @lexer.colorize(1) # this is what we want to test
+ assert_equal([2, 2, 2], pens3)
+ assert_equal([1], @lexer.lru.pens.keys.sort)
+ assert_not_same(pens1, pens3, 'should not be cached')
+ end
+ def test_caching4
+ @lexer.resize(5)
+ 5.times {|y| @lexer.colorize(y) }
+ assert_equal([4, 3, 2, 1, 0], @lexer.lru.used)
+ @model.replace(0, 2, 1, 2, '0')
+ assert_equal([4, 3, 1, 0], @lexer.lru.used, 'dirtification')
+ end
+ def test_caching5
+ @lexer.resize(5)
+ 5.times {|y| @lexer.colorize(y) }
+ assert_equal([4, 3, 2, 1, 0], @lexer.lru.used)
+ @model.replace(0, 2, 0, 2, "0\n")
+ assert_equal([5, 4, 3, 1, 0], @lexer.lru.used, 'positive displacement')
+ end
+ def test_caching6
+ @lexer.resize(5)
+ 5.times {|y| @lexer.colorize(y) }
+ assert_equal([4, 3, 2, 1, 0], @lexer.lru.used)
+ @model.replace(0, 2, 0, 3, "")
+ assert_equal([3, 1, 0], @lexer.lru.used, 'negative displacement')
+ end
end
From neoneye at rubyforge.org Fri Feb 4 10:27:05 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Fri Feb 4 10:27:06 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES
core.rb test_core.rb
Message-ID: <200502041527.j14FR5dS003665@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv3645
Modified Files:
CHANGES core.rb test_core.rb
Log Message:
moved MockLexer2 from 'test_core.rb' into 'core.rb'.. named it Simple
Index: CHANGES
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v
retrieving revision 1.43
retrieving revision 1.44
diff -C2 -d -r1.43 -r1.44
*** CHANGES 4 Feb 2005 11:33:32 -0000 1.43
--- CHANGES 4 Feb 2005 15:27:03 -0000 1.44
***************
*** 1,3 ****
--- 1,7 ----
04-02-2005 Neoneye
+ * integrated LRU cache with the linestate cache and named it
+ Lexer::Simple. A lexer must derive from this class and just
+ overload the lex_line method. The simple class with take care
+ of all caching.
* wrote a LRU cache so that I can remember the colorization per
visible line.
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.66
retrieving revision 1.67
diff -C2 -d -r1.66 -r1.67
*** test_core.rb 4 Feb 2005 15:09:11 -0000 1.66
--- test_core.rb 4 Feb 2005 15:27:03 -0000 1.67
***************
*** 343,347 ****
end
def test_init_with_lexer1
! lexer = MockLexer.new
view = AEditor::View::Caretaker.new(@model)
assert_nil(view.lexer)
--- 343,347 ----
end
def test_init_with_lexer1
! lexer = MockLexer.new(@model)
view = AEditor::View::Caretaker.new(@model)
assert_nil(view.lexer)
***************
*** 504,508 ****
@view.resize(4, 2)
@view.canvas, @canvas.view = @canvas, @view
! @lexer = MockLexer.new
@view.lexer = @lexer
end
--- 504,508 ----
@view.resize(4, 2)
@view.canvas, @canvas.view = @canvas, @view
! @lexer = MockLexer.new(@model)
@view.lexer = @lexer
end
***************
*** 1746,1781 ****
end
! class MockLexer2 < AEditor::Lexer::Base
def initialize(model)
- @model = model
- @right_states = []
- @topmost_dirty_line = 0
- super()
-
- @left = 0
- @right = 0
- @pens = []
- @lru = AEditor::Lexer::LRU.new
-
@state_counter = 1
! end
! attr_reader :lru
! def resize(n)
! @lru.resize(n)
! end
! def model_update(model, info)
! return if info.event == :before
! return if info.event != :after
! sy = info.source_y2
! dy = info.dest_y2
! n = dy - sy
! if n > 0
! n.times { @right_states.insert(sy, nil) }
! @lru.insert(sy, n) # displace all cached pens
! else
! @right_states.slice!(dy, -n)
! @lru.remove(dy+n, -n) # displace all cached pens
! end
! info.y1.upto([sy, dy].min) {|i| dirty(i) }
end
def lex_line(text)
--- 1746,1753 ----
end
! class MockLexer2 < AEditor::Lexer::Simple
def initialize(model)
@state_counter = 1
! super(model)
end
def lex_line(text)
***************
*** 1788,1848 ****
nil
end
- def dirty(y)
- return unless y >= 0 and y < @right_states.size
- @right_states[y] = nil
- @topmost_dirty_line = [@topmost_dirty_line, y].min
- @lru.delete(y) # dirtify cached pens for this line
- end
- def set_right_state(y, state)
- dirty(y + 1) if y + 1 < @right_states.size and @right_states[y + 1] != state
- @right_states[y] = state
- end
- def get_left_state(y)
- raise "y (#{y}) must not be negative" if y < 0
- raise "y (#{y}) was outside" if y-1 >= @right_states.size
- return 0 if y == 0
- @right_states[y - 1]
- end
- def colorize(ay)
- # render dirty lines
- @topmost_dirty_line.upto([ay, @right_states.size].min-1) do |y|
- next if @right_states[y]
- @left = get_left_state(y)
- lex_line(@model.line(y))
- set_right_state(y, @right)
- end
-
- # render missing lines
- (@right_states.size).upto(ay-1) do |y|
- #puts "render #{y}"
- @left = get_left_state(y)
- lex_line(@model.line(y))
- set_right_state(y, @right)
- end
-
- if ay < @right_states.size and @right_states[ay]
- res = @lru[ay]
- return res if res
- end
-
- # compute the requested line
- @left = get_left_state(ay)
- lex_line(@model.line(ay))
- @topmost_dirty_line = [@topmost_dirty_line, ay + 1].max
- set_right_state(ay, @right)
-
- @lru[ay] = @pens
-
- @pens
- end
- def states
- @right_states
- end
- def tdl
- @topmost_dirty_line
- end
end
! class TestViewColorize < Test::Unit::TestCase
def setup
super
--- 1760,1766 ----
nil
end
end
! class TestLexerSimple < Test::Unit::TestCase
def setup
super
***************
*** 2024,2061 ****
end
end
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
--- 1942,1943 ----
Index: core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v
retrieving revision 1.69
retrieving revision 1.70
diff -C2 -d -r1.69 -r1.70
*** core.rb 4 Feb 2005 12:42:26 -0000 1.69
--- core.rb 4 Feb 2005 15:27:03 -0000 1.70
***************
*** 955,962 ****
end
-
class Base
end
end # module Lexer
--- 955,1068 ----
end
class Base
+ def initialize(model)
+ @model = model
+ end
+ def resize(n)
+ # do nothing
+ end
+ def model_update(model, info)
+ # do nothing
+ end
+ def colorize(ay)
+ raise "derived class must overload"
+ end
+ end
+
+ class Simple < Base
+ def initialize(model)
+ @right_states = []
+ @topmost_dirty_line = 0
+ @left = 0
+ @right = 0
+ @pens = []
+ @lru = LRU.new
+ super(model)
+ end
+ attr_reader :lru
+ def resize(n)
+ @lru.resize(n)
+ end
+ def model_update(model, info)
+ return if info.event == :before
+ return if info.event != :after
+ sy = info.source_y2
+ dy = info.dest_y2
+ n = dy - sy
+ if n > 0
+ n.times { @right_states.insert(sy, nil) }
+ @lru.insert(sy, n) # displace all cached pens
+ else
+ @right_states.slice!(dy, -n)
+ @lru.remove(dy+n, -n) # displace all cached pens
+ end
+ info.y1.upto([sy, dy].min) {|i| dirty(i) }
+ end
+ def lex_line(text)
+ #puts "lex #{text.inspect}"
+ pen = text[0, 1].to_i
+ glyphs = text.unpack('U*')
+ @pens = glyphs.map{|g| pen}
+ @right = @state_counter
+ @state_counter += 1
+ nil
+ end
+ def dirty(y)
+ return unless y >= 0 and y < @right_states.size
+ @right_states[y] = nil
+ @topmost_dirty_line = [@topmost_dirty_line, y].min
+ @lru.delete(y) # dirtify cached pens for this line
+ end
+ def set_right_state(y, state)
+ dirty(y + 1) if y + 1 < @right_states.size and @right_states[y + 1] != state
+ @right_states[y] = state
+ end
+ def get_left_state(y)
+ raise "y (#{y}) must not be negative" if y < 0
+ raise "y (#{y}) was outside" if y-1 >= @right_states.size
+ return 0 if y == 0
+ @right_states[y - 1]
+ end
+ def colorize(ay)
+ # render dirty lines
+ @topmost_dirty_line.upto([ay, @right_states.size].min-1) do |y|
+ next if @right_states[y]
+ @left = get_left_state(y)
+ lex_line(@model.line(y))
+ set_right_state(y, @right)
+ end
+
+ # render missing lines
+ (@right_states.size).upto(ay-1) do |y|
+ #puts "render #{y}"
+ @left = get_left_state(y)
+ lex_line(@model.line(y))
+ set_right_state(y, @right)
+ end
+
+ if ay < @right_states.size and @right_states[ay]
+ res = @lru[ay]
+ return res if res
+ end
+
+ # compute the requested line
+ @left = get_left_state(ay)
+ lex_line(@model.line(ay))
+ @topmost_dirty_line = [@topmost_dirty_line, ay + 1].max
+ set_right_state(ay, @right)
+
+ @lru[ay] = @pens
+
+ @pens
+ end
+ def states
+ @right_states
+ end
+ def tdl
+ @topmost_dirty_line
+ end
end
+
end # module Lexer
From neoneye at rubyforge.org Fri Feb 4 13:46:05 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Fri Feb 4 13:46:05 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb
main_tui.rb
Message-ID: <200502041846.j14Ik5dS015635@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv15584
Modified Files:
Tag: b04022005
core.rb main_tui.rb
Log Message:
early syntax coloring is working
Index: main_tui.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v
retrieving revision 1.72
retrieving revision 1.72.2.1
diff -C2 -d -r1.72 -r1.72.2.1
*** main_tui.rb 2 Feb 2005 22:08:15 -0000 1.72
--- main_tui.rb 4 Feb 2005 18:46:03 -0000 1.72.2.1
***************
*** 10,13 ****
--- 10,52 ----
end
+ require 'lexer'
+
+ class LexTest < AEditor::Lexer::Simple
+ def initialize(model)
+ super(model)
+ @i = 0
+ end
+ def lex_line(text)
+ glyphs = text.unpack('U*')
+ @pens = glyphs.map{ @i }
+ @i = (@i + 1) % 5
+ end
+ end
+
+ class LexRuby < AEditor::Lexer::Simple
+ def initialize(model)
+ super(model)
+ @lexer = LexerRuby::Lexer.new
+ end
+ def lex_line(text)
+ @lexer.set_states([])
+ @lexer.set_result([])
+ @lexer.lex_line(text)
+ tokens, states = @lexer.result.transpose
+ @pens = []
+ @colors = {
+ :tab => 6,
+ :keyword => 2,
+ :punct => 2,
+ :string => 4
+ }
+ @colors.default = 1
+ tokens.each_with_index do |tok, i|
+ $logger.info states.inspect
+ @pens += [ @colors[states[i]] ] * tok.size
+ end
+ end
+ end
+
class MainTUI < AEditor::Canvas::Base
NEONEYE = [0xff2e, 0xff25, 0xff2f,
***************
*** 68,71 ****
--- 107,113 ----
@view.canvas, self.view = self, @view
@model.attach(@view)
+
+ @lexer = LexRuby.new(@model)
+ @view.lexer = @lexer
#@lexer = MockLexer.new
#@view.lexer = @lexer
***************
*** 276,280 ****
@n += 1
end
! def render_row(vy, text, ay, options)
--- 318,322 ----
@n += 1
end
! def render_row(vy, text, ay, pens, options)
***************
*** 309,315 ****
@n = 6 # reserve some space for line-numbers
@x = 0
! (text || '').unpack('U*').each do |glyph|
w = measure_width(@x, glyph)
pen = nil
if sel1 <= @x and @x < sel2
pen = 3
--- 351,360 ----
@n = 6 # reserve some space for line-numbers
@x = 0
! (text || '').unpack('U*').each_with_index do |glyph, index|
w = measure_width(@x, glyph)
pen = nil
+ if pens
+ pen = pens[index]
+ end
if sel1 <= @x and @x < sel2
pen = 3
Index: core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v
retrieving revision 1.70
retrieving revision 1.70.2.1
diff -C2 -d -r1.70 -r1.70.2.1
*** core.rb 4 Feb 2005 15:27:03 -0000 1.70
--- core.rb 4 Feb 2005 18:46:03 -0000 1.70.2.1
***************
*** 367,370 ****
--- 367,371 ----
cy = y
end
+ pens = nil
if ay and ay.between?(0, @model.bytes.size-1)
b = @model.p2b(0, ay)
***************
*** 374,379 ****
options |= 2 if @lines[ay].folded_lines > 0
render_ay = ay
end
! @canvas.render_row(y, fragment, render_ay, options)
end
@canvas.cursor_show(@cursor_x, cy) if cy
--- 375,381 ----
options |= 2 if @lines[ay].folded_lines > 0
render_ay = ay
+ pens = @lexer.colorize(ay) if @lexer
end
! @canvas.render_row(y, fragment, render_ay, pens, options)
end
@canvas.cursor_show(@cursor_x, cy) if cy
From neoneye at rubyforge.org Fri Feb 4 13:50:59 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Fri Feb 4 13:51:00 2005
Subject: [Aeditor-commit] projects/documents/homepage/aeditor_shots 056.png
Message-ID: <200502041850.j14IoxdS015770@rubyforge.org>
Update of /var/cvs/aeditor/projects/documents/homepage/aeditor_shots
In directory rubyforge.org:/tmp/cvs-serv15647
Added Files:
056.png
Log Message:
picture of today.
--- NEW FILE: 056.png ---
(This appears to be a binary file; contents omitted.)
From neoneye at rubyforge.org Sat Feb 5 07:09:13 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Sat Feb 5 07:09:14 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb
Message-ID: <200502051209.j15C9DdS028857@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv28824
Modified Files:
Tag: b04022005
core.rb
Log Message:
fuchsto pointed out that my error message were wrong. Fixed.. Thanks.
Index: core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v
retrieving revision 1.70.2.1
retrieving revision 1.70.2.2
diff -C2 -d -r1.70.2.1 -r1.70.2.2
*** core.rb 4 Feb 2005 18:46:03 -0000 1.70.2.1
--- core.rb 5 Feb 2005 12:09:11 -0000 1.70.2.2
***************
*** 86,90 ****
if x < 0
raise ArgumentError,
! "x must be greater than 0, but was #{x}."
end
n = 0
--- 86,90 ----
if x < 0
raise ArgumentError,
! "x must be greater or equal to 0, but was #{x}."
end
n = 0
From neoneye at rubyforge.org Sat Feb 5 07:41:24 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Sat Feb 5 07:41:25 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES
lexer.rb main_tui.rb
Message-ID: <200502051241.j15CfOdS029567@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv29542
Modified Files:
Tag: b04022005
CHANGES lexer.rb main_tui.rb
Log Message:
syntax coloring has become a little more faster.. because I disabled
some debug statements in the lexer.
Index: lexer.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/lexer.rb,v
retrieving revision 1.1
retrieving revision 1.1.2.1
diff -C2 -d -r1.1 -r1.1.2.1
*** lexer.rb 3 Feb 2005 07:58:28 -0000 1.1
--- lexer.rb 5 Feb 2005 12:41:22 -0000 1.1.2.1
***************
*** 202,206 ****
# check for normal code
tokens.each do |bad, good|
! $logger.debug(2) { "processing bad=#{bad} good=#{good}" }
if bad
format(bad, :bad)
--- 202,206 ----
# check for normal code
tokens.each do |bad, good|
! #$logger.debug(2) { "processing bad=#{bad} good=#{good}" }
if bad
format(bad, :bad)
***************
*** 475,479 ****
escaped_letter = s1[1, 1]
ok = chars.any?{|char| escaped_letter.include?(char)}
! $logger.debug(2) { "filter s1=#{s1.inspect} chars=#{chars.inspect} ok=#{ok.inspect}" }
s0, s1 = s1, nil unless ok
end
--- 475,479 ----
escaped_letter = s1[1, 1]
ok = chars.any?{|char| escaped_letter.include?(char)}
! #$logger.debug(2) { "filter s1=#{s1.inspect} chars=#{chars.inspect} ok=#{ok.inspect}" }
s0, s1 = s1, nil unless ok
end
***************
*** 567,571 ****
tokens = tokenize(text)
tokens.each do |bad, good|
! $logger.debug(2) { "processing bad=#{bad} good=#{good}" }
if bad
format(bad, :bad)
--- 567,571 ----
tokens = tokenize(text)
tokens.each do |bad, good|
! #$logger.debug(2) { "processing bad=#{bad} good=#{good}" }
if bad
format(bad, :bad)
***************
*** 609,613 ****
if is_modulo
! $logger.debug(2) { "this is modulo" }
format(good.slice!(0, 1), :punct)
lex_line_normal(good)
--- 609,613 ----
if is_modulo
! #$logger.debug(2) { "this is modulo" }
format(good.slice!(0, 1), :punct)
lex_line_normal(good)
***************
*** 661,665 ****
#p "before good=#{good.inspect}"
if is_division
! $logger.debug(2) { "this is division" }
format(good.slice!(0, 1), :punct)
lex_line_normal(good)
--- 661,665 ----
#p "before good=#{good.inspect}"
if is_division
! #$logger.debug(2) { "this is division" }
format(good.slice!(0, 1), :punct)
lex_line_normal(good)
Index: main_tui.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v
retrieving revision 1.72.2.1
retrieving revision 1.72.2.2
diff -C2 -d -r1.72.2.1 -r1.72.2.2
*** main_tui.rb 4 Feb 2005 18:46:03 -0000 1.72.2.1
--- main_tui.rb 5 Feb 2005 12:41:22 -0000 1.72.2.2
***************
*** 43,47 ****
@colors.default = 1
tokens.each_with_index do |tok, i|
! $logger.info states.inspect
@pens += [ @colors[states[i]] ] * tok.size
end
--- 43,47 ----
@colors.default = 1
tokens.each_with_index do |tok, i|
! #$logger.info states.inspect
@pens += [ @colors[states[i]] ] * tok.size
end
Index: CHANGES
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v
retrieving revision 1.44
retrieving revision 1.44.2.1
diff -C2 -d -r1.44 -r1.44.2.1
*** CHANGES 4 Feb 2005 15:27:03 -0000 1.44
--- CHANGES 5 Feb 2005 12:41:22 -0000 1.44.2.1
***************
*** 1,3 ****
--- 1,4 ----
04-02-2005 Neoneye
+ * got early syntax coloring working.
* integrated LRU cache with the linestate cache and named it
Lexer::Simple. A lexer must derive from this class and just
From neoneye at rubyforge.org Sat Feb 5 10:48:58 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Sat Feb 5 10:49:00 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb
main_tui.rb
Message-ID: <200502051548.j15FmwdS005060@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv5017
Modified Files:
Tag: b04022005
core.rb main_tui.rb
Log Message:
I had forgotten to attach the Lexer::Simple cache to the model.
I had forgotten to resize the lexer cache to the right size.
I have investigated how to probe for if an incoming event is present,
so we don't update.. which is not enabled right now.
Index: main_tui.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v
retrieving revision 1.72.2.2
retrieving revision 1.72.2.3
diff -C2 -d -r1.72.2.2 -r1.72.2.3
*** main_tui.rb 5 Feb 2005 12:41:22 -0000 1.72.2.2
--- main_tui.rb 5 Feb 2005 15:48:56 -0000 1.72.2.3
***************
*** 110,113 ****
--- 110,114 ----
@lexer = LexRuby.new(@model)
@view.lexer = @lexer
+ @model.attach(@lexer)
#@lexer = MockLexer.new
#@view.lexer = @lexer
***************
*** 147,180 ****
dump_statistics
dump_memory_info
loop do
#GC.disable
! event = @canvas.getch
! break if event == 24
! begin
! if @dispatch2
! $logger.debug "dispatch2 with " +
! "#{@dispatch2.to_s} key-code=#{event}"
! send(@dispatch2, event)
! @dispatch2 = nil
! else
! $logger.debug "dispatch key-code=#{event}"
! dispatch(event)
end
- rescue => e
- bt = e.backtrace.map{|s|
- a, b, c = s.split(':', 3)
- bn = File.basename(a)
- "%15s | %5s | %s" % [bn, b, c]
- }.join("\n")
- $logger.error "exception:\n" +
- "#{e.class} #{e.message}\n" + bt
end
@view.scroll_to_cursor
! #dump_memory_info("before update")
! @view.update
! #dump_memory_info("after update, before GC")
! #GC.enable
! GC.start
! dump_memory_info("after GC")
end
@canvas.clear
--- 148,203 ----
dump_statistics
dump_memory_info
+ timeout = true
loop do
#GC.disable
!
! event = nil
! should_update = true
! r = (timeout) ? select([$stdin], nil, nil, 0.05) : [1]
! if r and r.size > 0
! event = @canvas.getch
! timeout = true
! should_update = false
!
! else
! timeout = false
! should_update = true
! end
!
! #event = @canvas.getch
! if event
! break if event == 24
! begin
! if @dispatch2
! $logger.debug "dispatch2 with " +
! "#{@dispatch2.to_s} key-code=#{event}"
! send(@dispatch2, event)
! @dispatch2 = nil
! else
! $logger.debug "dispatch key-code=#{event}"
! dispatch(event)
! end
! rescue => e
! bt = e.backtrace.map{|s|
! a, b, c = s.split(':', 3)
! bn = File.basename(a)
! "%15s | %5s | %s" % [bn, b, c]
! }.join("\n")
! $logger.error "exception:\n" +
! "#{e.class} #{e.message}\n" + bt
end
end
@view.scroll_to_cursor
! should_update = true # TODO: remove me
! if should_update
! #dump_memory_info("before update")
! @view.update
! #dump_memory_info("after update, before GC")
! #GC.enable
! GC.start
! dump_memory_info("after GC")
! else
! @view.update_cursor
! end
end
@canvas.clear
Index: core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v
retrieving revision 1.70.2.2
retrieving revision 1.70.2.3
diff -C2 -d -r1.70.2.2 -r1.70.2.3
*** core.rb 5 Feb 2005 12:09:11 -0000 1.70.2.2
--- core.rb 5 Feb 2005 15:48:56 -0000 1.70.2.3
***************
*** 342,345 ****
--- 342,347 ----
"cursor=#{@cursor_x},#{@cursor_y}"
+ @lexer.resize(@height*5) if @lexer
+
vis = visible
found_i = nil
***************
*** 382,385 ****
--- 384,415 ----
@canvas.refresh
end
+ def update_cursor
+ return unless @canvas
+ vis = visible
+ found_i = nil
+ if @scroll_y >= 0
+ vis.each_with_index do |y, i|
+ if y >= @scroll_y
+ found_i = i
+ break
+ end
+ end
+ else
+ found_i = @scroll_y
+ end
+ @canvas.scroll_x = @scroll_x
+ cy = nil
+ 0.upto(@height-1) do |y|
+ ay = nil
+ if found_i and (found_i + y).between?(0, vis.size-1)
+ ay = vis[found_i + y]
+ end
+ if @cursor_y == ay
+ cy = y
+ end
+ end
+ @canvas.cursor_show(@cursor_x, cy)
+ @canvas.refresh
+ end
# NOTE: there is intentionally no check for if y is
# inside the buffer.. because we want to be able to
From neoneye at rubyforge.org Sat Feb 5 12:45:35 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Sat Feb 5 12:45:36 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES
main_tui.rb
Message-ID: <200502051745.j15HjZdS010816@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv10799
Modified Files:
Tag: b04022005
CHANGES main_tui.rb
Log Message:
fixed bug in #render_row
Index: main_tui.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v
retrieving revision 1.72.2.3
retrieving revision 1.72.2.4
diff -C2 -d -r1.72.2.3 -r1.72.2.4
*** main_tui.rb 5 Feb 2005 15:48:56 -0000 1.72.2.3
--- main_tui.rb 5 Feb 2005 17:45:33 -0000 1.72.2.4
***************
*** 165,169 ****
end
- #event = @canvas.getch
if event
break if event == 24
--- 165,168 ----
***************
*** 189,193 ****
end
@view.scroll_to_cursor
- should_update = true # TODO: remove me
if should_update
#dump_memory_info("before update")
--- 188,191 ----
***************
*** 196,200 ****
#GC.enable
GC.start
! dump_memory_info("after GC")
else
@view.update_cursor
--- 194,198 ----
#GC.enable
GC.start
! #dump_memory_info("after GC")
else
@view.update_cursor
***************
*** 343,350 ****
def render_row(vy, text, ay, pens, options)
!
! sel1 = 0
! sel2 = -1
! if @view.sel_mode and ay
if (@view.sel_y == ay and @view.cursor_y == ay)
sel1, sel2 = [@view.sel_x, @view.cursor_x].sort
--- 341,350 ----
def render_row(vy, text, ay, pens, options)
!
! sy1, sy2 = [@view.sel_y, @view.cursor_y].sort
! is_selected = (ay and @view.sel_mode and sy1 <= ay and ay <= sy2)
!
! sel1, sel2 = 0, -1
! if is_selected
if (@view.sel_y == ay and @view.cursor_y == ay)
sel1, sel2 = [@view.sel_x, @view.cursor_x].sort
***************
*** 366,374 ****
info = RenderInfo.new(
text, ay, options,
! sel1, sel2, @view.sel_mode, @scroll_x)
if info.equal?(@render_info[vy])
return # nothing to render
end
@render_info[vy] = info
@n = 6 # reserve some space for line-numbers
--- 366,376 ----
info = RenderInfo.new(
text, ay, options,
! sel1, sel2, is_selected, @scroll_x)
if info.equal?(@render_info[vy])
+ #$logger.debug "row ##{vy} - ignore: #{info.inspect}"
return # nothing to render
end
@render_info[vy] = info
+ #$logger.debug "row ##{vy} - store: #{info.inspect}"
@n = 6 # reserve some space for line-numbers
Index: CHANGES
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v
retrieving revision 1.44.2.1
retrieving revision 1.44.2.2
diff -C2 -d -r1.44.2.1 -r1.44.2.2
*** CHANGES 5 Feb 2005 12:41:22 -0000 1.44.2.1
--- CHANGES 5 Feb 2005 17:45:33 -0000 1.44.2.2
***************
*** 1,2 ****
--- 1,8 ----
+ 05-02-2005 Neoneye
+ * enabled all those things which I had forgotten when I wrote
+ the Lexer::Simple. Now it renders very fast.
+ * Flush the input queue, so that keystrokes doesn't lags.
+ * Fixed bug in main_tui.rb's render_row caching.
+
04-02-2005 Neoneye
* got early syntax coloring working.
From neoneye at rubyforge.org Sat Feb 5 12:58:22 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Sat Feb 5 12:58:23 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source TODO
main_tui.rb
Message-ID: <200502051758.j15HwMdS011096@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv11082
Modified Files:
Tag: b04022005
TODO main_tui.rb
Log Message:
on last line.. there are no tokens.. this is to prevent from crashing.
Index: main_tui.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v
retrieving revision 1.72.2.4
retrieving revision 1.72.2.5
diff -C2 -d -r1.72.2.4 -r1.72.2.5
*** main_tui.rb 5 Feb 2005 17:45:33 -0000 1.72.2.4
--- main_tui.rb 5 Feb 2005 17:58:20 -0000 1.72.2.5
***************
*** 42,45 ****
--- 42,49 ----
}
@colors.default = 1
+ unless tokens
+ $logger.error "no tokens"
+ return
+ end
tokens.each_with_index do |tok, i|
#$logger.info states.inspect
Index: TODO
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v
retrieving revision 1.41
retrieving revision 1.41.2.1
diff -C2 -d -r1.41 -r1.41.2.1
*** TODO 2 Feb 2005 22:08:15 -0000 1.41
--- TODO 5 Feb 2005 17:58:20 -0000 1.41.2.1
***************
*** 1,5 ****
render with colors.
! A: syntax coloring, just import the old lexer.
! B: faster via caching.
--- 1,9 ----
render with colors.
! * propagate state to the following lines.
! * rubylexer should deal with unicode glyphs.
! * choose a lexer depending on the file suffix.
!
! misc:
! * all operations must write themselves to the logfile.
From neoneye at rubyforge.org Sun Feb 6 04:19:29 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Sun Feb 6 04:19:31 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb
test_core.rb
Message-ID: <200502060919.j169JTdS014375@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv14370
Modified Files:
Tag: b04022005
core.rb test_core.rb
Log Message:
now all tests passes ok again.
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.67
retrieving revision 1.67.2.1
diff -C2 -d -r1.67 -r1.67.2.1
*** test_core.rb 4 Feb 2005 15:27:03 -0000 1.67
--- test_core.rb 6 Feb 2005 09:19:27 -0000 1.67.2.1
***************
*** 280,284 ****
@sx << x
end
! def render_row(y, utf8_string, ay, options)
@data << utf8_string
end
--- 280,284 ----
@sx << x
end
! def render_row(y, utf8_string, ay, pens, options)
@data << utf8_string
end
***************
*** 311,315 ****
end
! class MockLexer < AEditor::Lexer::Base
end
--- 311,328 ----
end
! class MockLexer < AEditor::Lexer::Simple
! def initialize(model)
! super(model)
! @state_counter = 1
! end
! def lex_line(text)
! #puts "lex #{text.inspect}"
! pen = text[0, 1].to_i
! glyphs = text.unpack('U*')
! @pens = glyphs.map{|g| pen}
! @right = @state_counter
! @state_counter += 1
! nil
! end
end
Index: core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v
retrieving revision 1.70.2.3
retrieving revision 1.70.2.4
diff -C2 -d -r1.70.2.3 -r1.70.2.4
*** core.rb 5 Feb 2005 15:48:56 -0000 1.70.2.3
--- core.rb 6 Feb 2005 09:19:27 -0000 1.70.2.4
***************
*** 901,905 ****
@view = v
end
! def render_row(y, utf8_string, options)
raise NoMethodError, "derived class should implement this method"
end
--- 901,905 ----
@view = v
end
! def render_row(y, utf8_string, render_ay, pens, options)
raise NoMethodError, "derived class should implement this method"
end
***************
*** 1032,1041 ****
end
def lex_line(text)
- #puts "lex #{text.inspect}"
- pen = text[0, 1].to_i
- glyphs = text.unpack('U*')
- @pens = glyphs.map{|g| pen}
- @right = @state_counter
- @state_counter += 1
nil
end
--- 1032,1035 ----
From neoneye at rubyforge.org Sun Feb 6 04:59:32 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Sun Feb 6 04:59:32 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source main_tui.rb
Message-ID: <200502060959.j169xWdS026433@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv26418
Modified Files:
Tag: b04022005
main_tui.rb
Log Message:
the lexer can now propagate its state to the following lines.
Index: main_tui.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v
retrieving revision 1.72.2.5
retrieving revision 1.72.2.6
diff -C2 -d -r1.72.2.5 -r1.72.2.6
*** main_tui.rb 5 Feb 2005 17:58:20 -0000 1.72.2.5
--- main_tui.rb 6 Feb 2005 09:59:30 -0000 1.72.2.6
***************
*** 28,36 ****
super(model)
@lexer = LexerRuby::Lexer.new
end
def lex_line(text)
! @lexer.set_states([])
@lexer.set_result([])
@lexer.lex_line(text)
tokens, states = @lexer.result.transpose
@pens = []
--- 28,40 ----
super(model)
@lexer = LexerRuby::Lexer.new
+ @left = []
+ @right = nil
end
def lex_line(text)
! states = (@left == 0) ? [] : @left.map{|i| i.clone}
! @lexer.set_states(states)
@lexer.set_result([])
@lexer.lex_line(text)
+ @right = @lexer.states
tokens, states = @lexer.result.transpose
@pens = []
***************
*** 59,63 ****
class RenderInfo
def initialize(
! text, absolute_y, options, sel1, sel2, sel_mode, scroll_x)
@text = text
@absolute_y = absolute_y
--- 63,69 ----
class RenderInfo
def initialize(
! text, absolute_y, options,
! sel1, sel2, sel_mode,
! scroll_x, pens)
@text = text
@absolute_y = absolute_y
***************
*** 67,73 ****
--- 73,81 ----
@sel_mode = sel_mode
@scroll_x = scroll_x
+ @pens = pens
end
attr_reader :text, :absolute_y, :options
attr_reader :sel1, :sel2, :sel_mode, :scroll_x
+ attr_reader :pens
def equal?(other)
return false unless other.kind_of?(RenderInfo)
***************
*** 79,82 ****
--- 87,91 ----
return false if @sel_mode != other.sel_mode
return false if @scroll_x != other.scroll_x
+ return false if @pens != other.pens
true
end
***************
*** 370,374 ****
info = RenderInfo.new(
text, ay, options,
! sel1, sel2, is_selected, @scroll_x)
if info.equal?(@render_info[vy])
#$logger.debug "row ##{vy} - ignore: #{info.inspect}"
--- 379,384 ----
info = RenderInfo.new(
text, ay, options,
! sel1, sel2, is_selected,
! @scroll_x, pens)
if info.equal?(@render_info[vy])
#$logger.debug "row ##{vy} - ignore: #{info.inspect}"
From neoneye at rubyforge.org Sun Feb 6 06:06:59 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Sun Feb 6 06:07:00 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES TODO
core.rb main_tui.rb
Message-ID: <200502061106.j16B6xdS002691@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv2678
Modified Files:
Tag: b04022005
CHANGES TODO core.rb main_tui.rb
Log Message:
added cache statistics
Index: main_tui.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v
retrieving revision 1.72.2.6
retrieving revision 1.72.2.7
diff -C2 -d -r1.72.2.6 -r1.72.2.7
*** main_tui.rb 6 Feb 2005 09:59:30 -0000 1.72.2.6
--- main_tui.rb 6 Feb 2005 11:06:57 -0000 1.72.2.7
***************
*** 136,140 ****
--- 136,142 ----
@render_info = {}
+ reset_counters
end
+ attr_reader :count_hit, :count_miss
def self.run(filename)
require 'ncursesw'
***************
*** 151,154 ****
--- 153,160 ----
end
end
+ def reset_counters
+ @count_hit = 0
+ @count_miss = 0
+ end
def render_cache_clear
@render_info = {}
***************
*** 383,390 ****
--- 389,398 ----
if info.equal?(@render_info[vy])
#$logger.debug "row ##{vy} - ignore: #{info.inspect}"
+ @count_hit += 1
return # nothing to render
end
@render_info[vy] = info
#$logger.debug "row ##{vy} - store: #{info.inspect}"
+ @count_miss += 1
@n = 6 # reserve some space for line-numbers
Index: CHANGES
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v
retrieving revision 1.44.2.2
retrieving revision 1.44.2.3
diff -C2 -d -r1.44.2.2 -r1.44.2.3
*** CHANGES 5 Feb 2005 17:45:33 -0000 1.44.2.2
--- CHANGES 6 Feb 2005 11:06:57 -0000 1.44.2.3
***************
*** 1,2 ****
--- 1,6 ----
+ 06-02-2005 Neoneye
+ * We now count number of hits+misses per update.
+ * propagate the right-state to the next line.
+
05-02-2005 Neoneye
* enabled all those things which I had forgotten when I wrote
Index: TODO
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v
retrieving revision 1.41.2.1
retrieving revision 1.41.2.2
diff -C2 -d -r1.41.2.1 -r1.41.2.2
*** TODO 5 Feb 2005 17:58:20 -0000 1.41.2.1
--- TODO 6 Feb 2005 11:06:57 -0000 1.41.2.2
***************
*** 1,4 ****
render with colors.
! * propagate state to the following lines.
* rubylexer should deal with unicode glyphs.
* choose a lexer depending on the file suffix.
--- 1,7 ----
render with colors.
! * fix bug in caching.. so it will invalidate the right lines.
! I suspects its the model_update when removing lines.
! * propagation occurs.. but is rendered wrong.
! * delayed rendering looks ugly, please render it immediately.
* rubylexer should deal with unicode glyphs.
* choose a lexer depending on the file suffix.
Index: core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v
retrieving revision 1.70.2.4
retrieving revision 1.70.2.5
diff -C2 -d -r1.70.2.4 -r1.70.2.5
*** core.rb 6 Feb 2005 09:19:27 -0000 1.70.2.4
--- core.rb 6 Feb 2005 11:06:57 -0000 1.70.2.5
***************
*** 337,346 ****
end
def update
return unless @canvas
- $logger.info "view update, " +
- "scroll=#{@scroll_x},#{@scroll_y} " +
- "cursor=#{@cursor_x},#{@cursor_y}"
! @lexer.resize(@height*5) if @lexer
vis = visible
--- 337,353 ----
end
def update
+ #$logger.info "view update, " +
+ # "scroll=#{@scroll_x},#{@scroll_y} " +
+ # "cursor=#{@cursor_x},#{@cursor_y} " +
+ # "size=#{@width},#{@height}"
+
return unless @canvas
! @canvas.reset_counters
!
! if @lexer
! @lexer.reset_counters
! @lexer.resize(@height*5)
! end
vis = visible
***************
*** 383,386 ****
--- 390,403 ----
@canvas.cursor_show(@cursor_x, cy) if cy
@canvas.refresh
+
+ msg = ""
+ if @lexer
+ msg = " lexer=#{@lexer.count_hit},#{@lexer.count_miss}"
+ end
+ $logger.info "update: " +
+ "scroll=#{@scroll_x},#{@scroll_y} " +
+ "cursor=#{@cursor_x},#{@cursor_y} " +
+ "size=#{@width},#{@height} " +
+ "canvas=#{@canvas.count_hit},#{@canvas.count_miss}" + msg
end
def update_cursor
***************
*** 1004,1007 ****
--- 1021,1025 ----
class Simple < Base
def initialize(model)
+ reset_counters
@right_states = []
@topmost_dirty_line = 0
***************
*** 1012,1016 ****
super(model)
end
! attr_reader :lru
def resize(n)
@lru.resize(n)
--- 1030,1038 ----
super(model)
end
! attr_reader :lru, :count_hit, :count_miss
! def reset_counters
! @count_hit = 0
! @count_miss = 0
! end
def resize(n)
@lru.resize(n)
***************
*** 1057,1060 ****
--- 1079,1083 ----
lex_line(@model.line(y))
set_right_state(y, @right)
+ @count_miss += 1
end
***************
*** 1065,1073 ****
lex_line(@model.line(y))
set_right_state(y, @right)
end
if ay < @right_states.size and @right_states[ay]
res = @lru[ay]
! return res if res
end
--- 1088,1100 ----
lex_line(@model.line(y))
set_right_state(y, @right)
+ @count_miss += 1
end
if ay < @right_states.size and @right_states[ay]
res = @lru[ay]
! if res
! @count_hit += 1
! return res
! end
end
***************
*** 1077,1080 ****
--- 1104,1108 ----
@topmost_dirty_line = [@topmost_dirty_line, ay + 1].max
set_right_state(ay, @right)
+ @count_miss += 1
@lru[ay] = @pens
From neoneye at rubyforge.org Sun Feb 6 09:26:44 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Sun Feb 6 09:26:45 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb
main_tui.rb
Message-ID: <200502061426.j16EQidS010326@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv10276
Modified Files:
Tag: b04022005
core.rb main_tui.rb
Log Message:
I just tried open a UTF-8 document.. containing weird glyphs.
LibC::wcwidth sometimes return 0.. which I cannot use.
In this case we output a red questionmark.
Index: main_tui.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v
retrieving revision 1.72.2.7
retrieving revision 1.72.2.8
diff -C2 -d -r1.72.2.7 -r1.72.2.8
*** main_tui.rb 6 Feb 2005 11:06:57 -0000 1.72.2.7
--- main_tui.rb 6 Feb 2005 14:26:42 -0000 1.72.2.8
***************
*** 423,428 ****
push_fullwidth(glyph, pen || 1)
else
! $logger.error "unknown glyph #{glyph.inspect}"
! raise "glyph problem"
end
end
--- 423,428 ----
push_fullwidth(glyph, pen || 1)
else
! $logger.error "unknown glyph code=#{glyph.inspect} w=#{w}"
! push_halfwidth('?'[0], 9)
end
end
Index: core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v
retrieving revision 1.70.2.5
retrieving revision 1.70.2.6
diff -C2 -d -r1.70.2.5 -r1.70.2.6
*** core.rb 6 Feb 2005 11:06:57 -0000 1.70.2.5
--- core.rb 6 Feb 2005 14:26:42 -0000 1.70.2.6
***************
*** 291,295 ****
if info.event == :before
@old_p = xy2p(@cursor_x, @cursor_y)
! $logger.info "view old_p=#{@old_p}"
return
end
--- 291,295 ----
if info.event == :before
@old_p = xy2p(@cursor_x, @cursor_y)
! #$logger.info "view old_p=#{@old_p}"
return
end
***************
*** 499,503 ****
return 1 unless @canvas
return 1 unless @canvas.respond_to?(:measure_width)
! @canvas.measure_width(x, glyph)
end
# translate from canvas coordinates to buffer coordinates
--- 499,506 ----
return 1 unless @canvas
return 1 unless @canvas.respond_to?(:measure_width)
! w = @canvas.measure_width(x, glyph)
! return w if glyph == 9
! return 1 if w != 1 and w != 2
! w
end
# translate from canvas coordinates to buffer coordinates
From neoneye at rubyforge.org Sun Feb 6 09:59:45 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Sun Feb 6 09:59:46 2005
Subject: [Aeditor-commit] projects/documents/homepage/aeditor_shots 057.png
Message-ID: <200502061459.j16ExjdS011019@rubyforge.org>
Update of /var/cvs/aeditor/projects/documents/homepage/aeditor_shots
In directory rubyforge.org:/tmp/cvs-serv10955
Added Files:
057.png
Log Message:
experiments with utf8 glyphs
--- NEW FILE: 057.png ---
(This appears to be a binary file; contents omitted.)
From neoneye at rubyforge.org Sun Feb 6 11:31:21 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Sun Feb 6 11:31:22 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb
main_tui.rb
Message-ID: <200502061631.j16GVLdS016873@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv16866
Modified Files:
Tag: b04022005
core.rb main_tui.rb
Log Message:
cleaned up output to logfile.
made all tests pass ok again.
Index: main_tui.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v
retrieving revision 1.72.2.8
retrieving revision 1.72.2.9
diff -C2 -d -r1.72.2.8 -r1.72.2.9
*** main_tui.rb 6 Feb 2005 14:26:42 -0000 1.72.2.8
--- main_tui.rb 6 Feb 2005 16:31:19 -0000 1.72.2.9
***************
*** 136,145 ****
@render_info = {}
- reset_counters
end
- attr_reader :count_hit, :count_miss
def self.run(filename)
require 'ncursesw'
! dump_memory_info
CursesCanvas.open do |c|
oldtitle = c.get_title || "AEditor has exited"
--- 136,143 ----
@render_info = {}
end
def self.run(filename)
require 'ncursesw'
! #dump_memory_info
CursesCanvas.open do |c|
oldtitle = c.get_title || "AEditor has exited"
***************
*** 153,160 ****
end
end
- def reset_counters
- @count_hit = 0
- @count_miss = 0
- end
def render_cache_clear
@render_info = {}
--- 151,154 ----
***************
*** 162,169 ****
def event_loop
@view.resize(width, height)
! dump_memory_info("before update")
@view.update
! dump_memory_info("after update")
! dump_statistics
dump_memory_info
timeout = true
--- 156,163 ----
def event_loop
@view.resize(width, height)
! #dump_memory_info("before update")
@view.update
! #dump_memory_info("after update")
! #dump_statistics
dump_memory_info
timeout = true
***************
*** 300,303 ****
--- 294,298 ----
when 266
dump_statistics
+ dump_memory_info
when 330
case @selection_mode
***************
*** 540,544 ****
begin
$logger.info "program begin."
! dump_memory_info
MainTUI.run(ARGV.empty? ? nil : ARGV[0])
rescue Exception => e
--- 535,539 ----
begin
$logger.info "program begin."
! #dump_memory_info
MainTUI.run(ARGV.empty? ? nil : ARGV[0])
rescue Exception => e
Index: core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v
retrieving revision 1.70.2.6
retrieving revision 1.70.2.7
diff -C2 -d -r1.70.2.6 -r1.70.2.7
*** core.rb 6 Feb 2005 14:26:42 -0000 1.70.2.6
--- core.rb 6 Feb 2005 16:31:19 -0000 1.70.2.7
***************
*** 124,129 ****
# replace a region with something else
def replace(x1, y1, x2, y2, utf8_str)
! $logger.debug "model replace x1=#{x1.inspect} y1=#{y1.inspect} " +
! "x2=#{x2.inspect} y2=#{y2.inspect} text=#{utf8_str.inspect}"
check_integer(x1)
check_integer(y1)
--- 124,129 ----
# replace a region with something else
def replace(x1, y1, x2, y2, utf8_str)
! $logger.debug "model replace xy1=#{x1.inspect},#{y1.inspect} " +
! "xy2=#{x2.inspect},#{y2.inspect} text.size=#{utf8_str.size}"
check_integer(x1)
check_integer(y1)
***************
*** 912,915 ****
--- 912,916 ----
class Base
def initialize
+ reset_counters
@view = nil
@scroll_x = 0
***************
*** 917,920 ****
--- 918,922 ----
attr_reader :view
attr_accessor :scroll_x
+ attr_reader :count_hit, :count_miss
def view=(v)
raise TypeError unless v == nil or v.kind_of?(View::Caretaker)
***************
*** 933,936 ****
--- 935,942 ----
raise NoMethodError, "derived class should implement this method"
end
+ def reset_counters
+ @count_hit = 0
+ @count_miss = 0
+ end
end
From neoneye at rubyforge.org Sun Feb 6 11:48:56 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Sun Feb 6 11:48:56 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source test_core.rb
Message-ID: <200502061648.j16GmudS017357@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv17328
Modified Files:
Tag: b04022005
test_core.rb
Log Message:
I cannot seem to reproduce the problem im having when I run the editor
interactively.
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.67.2.1
retrieving revision 1.67.2.2
diff -C2 -d -r1.67.2.1 -r1.67.2.2
*** test_core.rb 6 Feb 2005 09:19:27 -0000 1.67.2.1
--- test_core.rb 6 Feb 2005 16:48:53 -0000 1.67.2.2
***************
*** 1951,1955 ****
5.times {|y| @lexer.colorize(y) }
assert_equal([4, 3, 2, 1, 0], @lexer.lru.used)
! @model.replace(0, 2, 0, 3, "")
assert_equal([3, 1, 0], @lexer.lru.used, 'negative displacement')
end
--- 1951,1966 ----
5.times {|y| @lexer.colorize(y) }
assert_equal([4, 3, 2, 1, 0], @lexer.lru.used)
! @model.replace(0, 2, 0, 3, "") # delete the whole line
! # line #2 is erased, line #3 is dirtified, these lines are not in the LRU
! assert_equal([3, 1, 0], @lexer.lru.used, 'negative displacement')
! end
! def test_caching7
! @model.load((1..9).to_a.join("\n"))
! @lexer.resize(5)
! 5.times {|y| @lexer.colorize(y) }
! assert_equal([4, 3, 2, 1, 0], @lexer.lru.used)
! @model.replace(1, 2, 0, 3, "") # simulate joinline
! assert_equal("1\n2\n34\n5\n6\n7\n8\n9", @model.text)
! # line #2 is erased, line #3 is dirtified, these lines are not in the LRU
assert_equal([3, 1, 0], @lexer.lru.used, 'negative displacement')
end
From neoneye at rubyforge.org Sun Feb 6 13:48:28 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Sun Feb 6 13:48:31 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source test_core.rb
Message-ID: <200502061848.j16ImSdS023785@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv23777
Modified Files:
Tag: b04022005
test_core.rb
Log Message:
added an extra test of the lexer..
this is tricky stuff.
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.67.2.2
retrieving revision 1.67.2.3
diff -C2 -d -r1.67.2.2 -r1.67.2.3
*** test_core.rb 6 Feb 2005 16:48:53 -0000 1.67.2.2
--- test_core.rb 6 Feb 2005 18:48:26 -0000 1.67.2.3
***************
*** 1940,1944 ****
assert_equal([4, 3, 1, 0], @lexer.lru.used, 'dirtification')
end
! def test_caching5
@lexer.resize(5)
5.times {|y| @lexer.colorize(y) }
--- 1940,1944 ----
assert_equal([4, 3, 1, 0], @lexer.lru.used, 'dirtification')
end
! def test_caching_insert1
@lexer.resize(5)
5.times {|y| @lexer.colorize(y) }
***************
*** 1947,1951 ****
assert_equal([5, 4, 3, 1, 0], @lexer.lru.used, 'positive displacement')
end
! def test_caching6
@lexer.resize(5)
5.times {|y| @lexer.colorize(y) }
--- 1947,1964 ----
assert_equal([5, 4, 3, 1, 0], @lexer.lru.used, 'positive displacement')
end
! # TODO: exercise the @lexer.set_right_state when its dirtifying the following line
! # TODO: figure out how this should work
! def xtest_caching_insert2
! @model.load("aaaa\nbbbb\ncccc\ndddd\neeee\nffff")
! @lexer.resize(5)
! 5.times {|y| @lexer.colorize(y) }
! assert_equal([4, 3, 2, 1, 0], @lexer.lru.used)
! @model.replace(2, 2, 2, 2, "\n")
! assert_equal("aaaa\nbbbb\ncc\ncc\ndddd\neeee\nffff", @model.text)
! # line #2 is splitted into 2 parts.. which becomes line #2 and #3
! # line #3 and #4 is displaced.. and becomes line #4 and #5
! assert_equal([5, 4, 1, 0], @lexer.lru.used, 'positive displacement')
! end
! def test_caching_remove1
@lexer.resize(5)
5.times {|y| @lexer.colorize(y) }
***************
*** 1955,1959 ****
assert_equal([3, 1, 0], @lexer.lru.used, 'negative displacement')
end
! def test_caching7
@model.load((1..9).to_a.join("\n"))
@lexer.resize(5)
--- 1968,1972 ----
assert_equal([3, 1, 0], @lexer.lru.used, 'negative displacement')
end
! def test_caching_remove2
@model.load((1..9).to_a.join("\n"))
@lexer.resize(5)
From neoneye at rubyforge.org Sun Feb 6 13:52:33 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Sun Feb 6 13:52:35 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source TODO
Message-ID: <200502061852.j16IqXdS023905@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv23898
Modified Files:
Tag: b04022005
TODO
Log Message:
big problems with caching
Index: TODO
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v
retrieving revision 1.41.2.2
retrieving revision 1.41.2.3
diff -C2 -d -r1.41.2.2 -r1.41.2.3
*** TODO 6 Feb 2005 11:06:57 -0000 1.41.2.2
--- TODO 6 Feb 2005 18:52:31 -0000 1.41.2.3
***************
*** 3,6 ****
--- 3,8 ----
I suspects its the model_update when removing lines.
* propagation occurs.. but is rendered wrong.
+ @lexer.set_right_state should compare the state
+ of the current line.. rather than the following line.
* delayed rendering looks ugly, please render it immediately.
* rubylexer should deal with unicode glyphs.
From neoneye at rubyforge.org Mon Feb 7 12:38:00 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Mon Feb 7 12:38:00 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source main_tui.rb
Message-ID: <200502071738.j17Hc0dS018173@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv18167
Modified Files:
Tag: b04022005
main_tui.rb
Log Message:
still lexing is slow
Index: main_tui.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v
retrieving revision 1.72.2.9
retrieving revision 1.72.2.10
diff -C2 -d -r1.72.2.9 -r1.72.2.10
*** main_tui.rb 6 Feb 2005 16:31:19 -0000 1.72.2.9
--- main_tui.rb 7 Feb 2005 17:37:57 -0000 1.72.2.10
***************
*** 177,181 ****
should_update = true
end
!
if event
break if event == 24
--- 177,182 ----
should_update = true
end
!
! t1 = Time.now
if event
break if event == 24
***************
*** 211,214 ****
--- 212,218 ----
@view.update_cursor
end
+ t2 = Time.now
+ $logger.info "this operation took #{t2 - t1} seconds"
+ #end
end
@canvas.clear
From neoneye at rubyforge.org Mon Feb 14 08:06:39 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Mon Feb 14 08:06:40 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb
test_core.rb
Message-ID: <200502141306.j1ED6ddS025120@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv25112
Modified Files:
Tag: b04022005
core.rb test_core.rb
Log Message:
preparing for a new caching system
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.67.2.3
retrieving revision 1.67.2.4
diff -C2 -d -r1.67.2.3 -r1.67.2.4
*** test_core.rb 6 Feb 2005 18:48:26 -0000 1.67.2.3
--- test_core.rb 14 Feb 2005 13:06:37 -0000 1.67.2.4
***************
*** 1678,1682 ****
end
def test_init
! assert_equal(1, @lru.size)
end
def test_store1
--- 1678,1682 ----
end
def test_init
! assert_equal(1, @lru.capacity)
end
def test_store1
***************
*** 1775,1779 ****
end
! class TestLexerSimple < Test::Unit::TestCase
def setup
super
--- 1775,1779 ----
end
! class TestLexerSimple #< Test::Unit::TestCase
def setup
super
***************
*** 1979,1980 ****
--- 1979,2072 ----
end
end
+
+ class TestNewCache < Test::Unit::TestCase
+ class MockLexer < AEditor::Lexer::NewCache
+ def initialize(model)
+ super(model)
+ @count = 0
+ end
+ attr_accessor :count
+ def lex_line(text)
+ @pens = [@count, @count, @count]
+ @right = @count
+ @count += 1
+ nil
+ end
+ end
+ def setup
+ @model = AEditor::Model::Caretaker.new
+ @model.load(('a'..'z').to_a.map{|i| i * 2}.join("\n"))
+ @lexer = MockLexer.new(@model)
+ @model.attach(@lexer)
+ @lexer.resize(10)
+ end
+ def a_size(count)
+ assert_equal(count, @lexer.lru.size)
+ end
+ def lex(line_number)
+ @lexer.colorize(line_number)
+ end
+ def reset
+ @lexer.reset_counters
+ end
+ def a_stats(hit, miss)
+ assert_equal(hit, @lexer.count_sync_hit, 'wrong number of hits')
+ assert_equal(miss, @lexer.count_sync_miss, 'wrong number of misses')
+ @lexer.reset_counters
+ end
+ def test_incremental_access1
+ a_size(0)
+ a_stats(0, 0)
+ lex(0)
+ a_size(1)
+ a_stats(0, 1)
+ lex(1)
+ a_size(2)
+ a_stats(1, 1)
+ lex(2)
+ a_size(3)
+ a_stats(2, 1)
+ lex(3)
+ a_size(4)
+ a_stats(3, 1)
+ end
+ def test_random_access1
+ lex(2)
+ a_size(1)
+ a_stats(0, 3)
+ lex(5)
+ a_size(2)
+ a_stats(3, 3)
+ lex(3)
+ a_size(3)
+ a_stats(4, 0)
+ end
+ end
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v
retrieving revision 1.70.2.7
retrieving revision 1.70.2.8
diff -C2 -d -r1.70.2.7 -r1.70.2.8
*** core.rb 6 Feb 2005 16:31:19 -0000 1.70.2.7
--- core.rb 14 Feb 2005 13:06:37 -0000 1.70.2.8
***************
*** 950,969 ****
class LRU
def initialize
! @size = 1
@pens = {}
@used = []
end
! attr_reader :size, :used, :pens
def resize(n)
raise ArgumentError if n < 0
! @size = n
wipe
end
def wipe
! while @used.size > @size
@pens.delete(@used.pop)
end
end
private :wipe
def store(key, value)
@used.delete(key)
--- 950,972 ----
class LRU
def initialize
! @capacity = 1
@pens = {}
@used = []
end
! attr_reader :capacity, :used, :pens
def resize(n)
raise ArgumentError if n < 0
! @capacity = n
wipe
end
def wipe
! while @used.size > @capacity
@pens.delete(@used.pop)
end
end
private :wipe
+ def size
+ @used.size
+ end
def store(key, value)
@used.delete(key)
***************
*** 1018,1025 ****
end
def resize(n)
! # do nothing
end
def model_update(model, info)
! # do nothing
end
def colorize(ay)
--- 1021,1028 ----
end
def resize(n)
! raise "derived class must overload"
end
def model_update(model, info)
! raise "derived class must overload"
end
def colorize(ay)
***************
*** 1127,1130 ****
--- 1130,1189 ----
end
+ class NewCache < Base
+ def initialize(model)
+ reset_counters
+ @right_states = []
+ @left = 0
+ @right = 0
+ @pens = []
+ @lru = LRU.new
+ super(model)
+ end
+ attr_reader :lru, :count_sync_hit, :count_sync_miss
+ attr_reader :count_color_hit, :count_color_miss
+ def reset_counters
+ @count_sync_hit = 0
+ @count_sync_miss = 0
+ @count_color_hit = 0
+ @count_color_miss = 0
+ end
+ def resize(n)
+ @lru.resize(n)
+ end
+ def sync_states(number_of_states)
+ 0.upto(number_of_states) do |i|
+ if i > @right_states.size
+ raise "should not happen"
+ end
+ if @right_states[i]
+ @count_sync_hit += 1
+ next
+ end
+ @count_sync_miss += 1
+
+ @left = (i == 0) ? 0 : @right_states[i - 1]
+ lex_line(i)
+
+ if @right != @right_states[i]
+ @right_states[i] = @right
+ @right_states[i+1] = nil
+ end
+ end
+ end
+ def colorize(line_number)
+ sync_states(line_number)
+
+ @lru.store(line_number, @pens)
+ end
+ end
+
+
+
+
+
+
+
+
+
end # module Lexer
From neoneye at rubyforge.org Mon Feb 14 09:41:17 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Mon Feb 14 09:41:19 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb
test_core.rb
Message-ID: <200502141441.j1EEfHdS029714@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv29688
Modified Files:
Tag: b04022005
core.rb test_core.rb
Log Message:
Argh.. I didn't realize that I had to delete the cached data from the
LRU cache when I made the old cache.
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.67.2.4
retrieving revision 1.67.2.5
diff -C2 -d -r1.67.2.4 -r1.67.2.5
*** test_core.rb 14 Feb 2005 13:06:37 -0000 1.67.2.4
--- test_core.rb 14 Feb 2005 14:41:15 -0000 1.67.2.5
***************
*** 1986,1992 ****
@count = 0
end
! attr_accessor :count
def lex_line(text)
! @pens = [@count, @count, @count]
@right = @count
@count += 1
--- 1986,1992 ----
@count = 0
end
! attr_accessor :count, :right_states
def lex_line(text)
! @pens = "s#{@count}"
@right = @count
@count += 1
***************
*** 2010,2044 ****
@lexer.reset_counters
end
! def a_stats(hit, miss)
! assert_equal(hit, @lexer.count_sync_hit, 'wrong number of hits')
! assert_equal(miss, @lexer.count_sync_miss, 'wrong number of misses')
@lexer.reset_counters
end
! def test_incremental_access1
a_size(0)
! a_stats(0, 0)
lex(0)
! a_size(1)
! a_stats(0, 1)
lex(1)
! a_size(2)
! a_stats(1, 1)
lex(2)
! a_size(3)
! a_stats(2, 1)
lex(3)
a_size(4)
- a_stats(3, 1)
end
! def test_random_access1
lex(2)
! a_size(1)
! a_stats(0, 3)
lex(5)
! a_size(2)
! a_stats(3, 3)
lex(3)
a_size(3)
! a_stats(4, 0)
end
end
--- 2010,2079 ----
@lexer.reset_counters
end
! def a_color(expected, line_number)
! res = @lexer.colorize(line_number)
! e = [expected, expected, expected]
! assert_equal(e, res)
! end
! def a_stats(sync_hit, sync_miss, color_hit, color_miss)
! exp = [sync_hit, sync_miss, color_hit, color_miss]
! res = [@lexer.count_sync_hit, @lexer.count_sync_miss,
! @lexer.count_color_hit, @lexer.count_color_miss]
! assert_equal(exp, res)
@lexer.reset_counters
end
! def a_color_stats(color_hit, color_miss)
! exp = [color_hit, color_miss]
! res = [@lexer.count_color_hit, @lexer.count_color_miss]
! assert_equal(exp, res)
! @lexer.reset_counters
! end
! def a_right(*expected_right_states)
! assert_equal(expected_right_states, @lexer.right_states)
! end
! def test_accumulate_by_incremental_access1
a_size(0)
! a_stats(0, 0, 0, 0)
! a_right()
lex(0)
! a_stats(0, 0, 0, 1)
! a_right(0)
lex(1)
! a_stats(1, 0, 0, 1)
! a_right(0, 1)
lex(2)
! a_stats(2, 0, 0, 1)
! a_right(0, 1, 2)
lex(3)
+ a_stats(3, 0, 0, 1)
+ a_right(0, 1, 2, 3)
a_size(4)
end
! def test_accumulate_by_random_access1
lex(2)
! a_stats(0, 2, 0, 1)
! a_right(0, 1, 2)
lex(5)
! a_stats(3, 2, 0, 1)
! a_right(0, 1, 2, 3, 4, 5)
lex(3)
+ a_stats(3, 0, 0, 1)
+ a_right(0, 1, 2, 6, nil, 5)
+ lex(2)
+ a_stats(2, 0, 1, 0)
+ a_right(0, 1, 2, 6, nil, 5)
+ lex(5)
+ a_stats(4, 1, 0, 1)
+ a_right(0, 1, 2, 6, 7, 8)
a_size(3)
! end
! def test_typical1
! assert_equal("s0", @lexer.colorize(0))
! assert_equal("s1", @lexer.colorize(1))
! a_color_stats(0, 2)
! assert_equal("s0", @lexer.colorize(0))
! assert_equal("s1", @lexer.colorize(1))
! a_color_stats(2, 0)
! assert_equal("s2", @lexer.colorize(2))
! a_color_stats(0, 1)
end
end
Index: core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v
retrieving revision 1.70.2.8
retrieving revision 1.70.2.9
diff -C2 -d -r1.70.2.8 -r1.70.2.9
*** core.rb 14 Feb 2005 13:06:37 -0000 1.70.2.8
--- core.rb 14 Feb 2005 14:41:15 -0000 1.70.2.9
***************
*** 1151,1154 ****
--- 1151,1166 ----
@lru.resize(n)
end
+ def dirty(y)
+ @right_states[y] = nil if y < @right_states.size
+ @lru.delete(y)
+ end
+ def set_right_state(y, state)
+ return if state == @right_states[y]
+ #puts "clearing #{y}, because #{state.inspect} is distinct " +
+ # "from #{@right_states[y].inspect}"
+ dirty(y)
+ dirty(y+1)
+ @right_states[y] = state
+ end
def sync_states(number_of_states)
0.upto(number_of_states) do |i|
***************
*** 1164,1178 ****
@left = (i == 0) ? 0 : @right_states[i - 1]
lex_line(i)
!
! if @right != @right_states[i]
! @right_states[i] = @right
! @right_states[i+1] = nil
! end
end
end
def colorize(line_number)
! sync_states(line_number)
! @lru.store(line_number, @pens)
end
end
--- 1176,1198 ----
@left = (i == 0) ? 0 : @right_states[i - 1]
lex_line(i)
! set_right_state(i, @right)
end
end
def colorize(line_number)
! #puts "line #{line_number}"
! sync_states(line_number-1)
! if @lru.has_key?(line_number)
! @count_color_hit += 1
! return @lru[line_number]
! end
! @count_color_miss += 1
!
! i = line_number
! @left = (i == 0) ? 0 : @right_states[i - 1]
! lex_line(i)
! set_right_state(i, @right)
! @lru[i] = @pens
! @pens
end
end
From neoneye at rubyforge.org Mon Feb 14 11:10:46 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Mon Feb 14 11:10:47 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb
test_core.rb
Message-ID: <200502141610.j1EGAkdS002615@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv2575
Modified Files:
Tag: b04022005
core.rb test_core.rb
Log Message:
Today I built a lego model with postit notes attached so that I better
could overview how things should work. I have now imported the testcases
that exercises model_notify for the lexer cache.. I realized that I really
need to dirtyfy the line which we are splitting.
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.67.2.5
retrieving revision 1.67.2.6
diff -C2 -d -r1.67.2.5 -r1.67.2.6
*** test_core.rb 14 Feb 2005 14:41:15 -0000 1.67.2.5
--- test_core.rb 14 Feb 2005 16:10:44 -0000 1.67.2.6
***************
*** 1949,1963 ****
# TODO: exercise the @lexer.set_right_state when its dirtifying the following line
# TODO: figure out how this should work
- def xtest_caching_insert2
- @model.load("aaaa\nbbbb\ncccc\ndddd\neeee\nffff")
- @lexer.resize(5)
- 5.times {|y| @lexer.colorize(y) }
- assert_equal([4, 3, 2, 1, 0], @lexer.lru.used)
- @model.replace(2, 2, 2, 2, "\n")
- assert_equal("aaaa\nbbbb\ncc\ncc\ndddd\neeee\nffff", @model.text)
- # line #2 is splitted into 2 parts.. which becomes line #2 and #3
- # line #3 and #4 is displaced.. and becomes line #4 and #5
- assert_equal([5, 4, 1, 0], @lexer.lru.used, 'positive displacement')
- end
def test_caching_remove1
@lexer.resize(5)
--- 1949,1952 ----
***************
*** 1996,2000 ****
def setup
@model = AEditor::Model::Caretaker.new
! @model.load(('a'..'z').to_a.map{|i| i * 2}.join("\n"))
@lexer = MockLexer.new(@model)
@model.attach(@lexer)
--- 1985,1989 ----
def setup
@model = AEditor::Model::Caretaker.new
! @model.load(('a'..'z').to_a.map{|i| i * 20}.join("\n"))
@lexer = MockLexer.new(@model)
@model.attach(@lexer)
***************
*** 2077,2080 ****
--- 2066,2142 ----
a_color_stats(0, 1)
end
+ def test_modelnotify_same1
+ lex(5)
+ @model.replace(0, 2, 1, 2, "0")
+ a_right(0, 1, nil, 3, 4, 5)
+ end
+ def test_modelnotify_same2
+ lex(5)
+ @model.replace(0, 2, 1, 3, "0\n0")
+ a_right(0, 1, nil, nil, 4, 5)
+ end
+ def test_modelnotify_remove1
+ lex(5)
+ @model.replace(0, 2, 0, 3, "")
+ a_right(0, 1, nil, 4, 5)
+ end
+ def test_modelnotify_remove2
+ lex(5)
+ @model.replace(0, 1, 0, 4, "")
+ a_right(0, nil, 5)
+ end
+ def test_modelnotify_insert1
+ lex(5)
+ @model.replace(0, 3, 0, 3, "0\n")
+ assert_equal(
+ "c0d",
+ @model.line(2)[0, 1] +
+ @model.line(3)[0, 1] +
+ @model.line(4)[0, 1])
+ a_right(0, 1, 2, nil, nil, 4, 5)
+ end
+ def test_modelnotify_insert2
+ lex(5)
+ @model.replace(0, 3, 0, 3, "0\n0\n0\n")
+ a_right(0, 1, 2, nil, nil, nil, nil, 4, 5)
+ end
+ def test_caching_insert1
+ @lexer.resize(5)
+ 5.times {|y| @lexer.colorize(y) }
+ assert_equal([4, 3, 2, 1, 0], @lexer.lru.used)
+ @model.replace(0, 2, 0, 2, "0\n")
+ # line #2 is dirtified
+ # line #3 and #4 is displaced
+ assert_equal([5, 4, 1, 0], @lexer.lru.used, 'positive displacement')
+ end
+ def test_caching_insert2
+ @model.load("aaaa\nbbbb\ncccc\ndddd\neeee\nffff")
+ @lexer.resize(5)
+ 5.times {|y| @lexer.colorize(y) }
+ assert_equal([4, 3, 2, 1, 0], @lexer.lru.used)
+ @model.replace(2, 2, 2, 2, "\n")
+ assert_equal("aaaa\nbbbb\ncc\ncc\ndddd\neeee\nffff", @model.text)
+ # line #2 is splitted into 2 parts.. which becomes line #2 and #3
+ # line #3 and #4 is displaced.. and becomes line #4 and #5
+ assert_equal([5, 4, 1, 0], @lexer.lru.used, 'positive displacement')
+ end
+ def test_caching_remove1
+ @lexer.resize(5)
+ 5.times {|y| @lexer.colorize(y) }
+ assert_equal([4, 3, 2, 1, 0], @lexer.lru.used)
+ @model.replace(0, 2, 0, 3, "") # delete the whole line
+ # line #2 is erased, line #3 is dirtified, these lines are not in the LRU
+ assert_equal([3, 1, 0], @lexer.lru.used, 'negative displacement')
+ end
+ def test_caching_remove2
+ @model.load((1..9).to_a.join("\n"))
+ @lexer.resize(5)
+ 5.times {|y| @lexer.colorize(y) }
+ assert_equal([4, 3, 2, 1, 0], @lexer.lru.used)
+ @model.replace(1, 2, 0, 3, "") # simulate joinline
+ assert_equal("1\n2\n34\n5\n6\n7\n8\n9", @model.text)
+ # line #2 is erased, line #3 is dirtified, these lines are not in the LRU
+ assert_equal([3, 1, 0], @lexer.lru.used, 'negative displacement')
+ end
end
Index: core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v
retrieving revision 1.70.2.9
retrieving revision 1.70.2.10
diff -C2 -d -r1.70.2.9 -r1.70.2.10
*** core.rb 14 Feb 2005 14:41:15 -0000 1.70.2.9
--- core.rb 14 Feb 2005 16:10:44 -0000 1.70.2.10
***************
*** 1155,1158 ****
--- 1155,1174 ----
@lru.delete(y)
end
+ def model_update(model, info)
+ return if info.event == :before
+ return if info.event != :after
+ sy = info.source_y2
+ dy = info.dest_y2
+ n = dy - sy
+ if n > 0
+ dirty(sy) # dirtify the line before splitting
+ n.times { @right_states.insert(sy, nil) }
+ @lru.insert(sy, n) # displace all cached pens
+ else
+ @right_states.slice!(dy, -n)
+ @lru.remove(dy+n, -n) # displace all cached pens
+ end
+ info.y1.upto([sy, dy].min) {|i| dirty(i) }
+ end
def set_right_state(y, state)
return if state == @right_states[y]
From neoneye at rubyforge.org Mon Feb 14 11:15:59 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Mon Feb 14 11:16:00 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source test_core.rb
Message-ID: <200502141615.j1EGFwdS002719@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv2713
Modified Files:
Tag: b04022005
test_core.rb
Log Message:
adapted the remaining testcases
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.67.2.6
retrieving revision 1.67.2.7
diff -C2 -d -r1.67.2.6 -r1.67.2.7
*** test_core.rb 14 Feb 2005 16:10:44 -0000 1.67.2.6
--- test_core.rb 14 Feb 2005 16:15:56 -0000 1.67.2.7
***************
*** 2139,2142 ****
--- 2139,2198 ----
assert_equal([3, 1, 0], @lexer.lru.used, 'negative displacement')
end
+ # requesting a line which has already been computed
+ # must result in the exact same result as first time
+ # it was computed.. because its cached.
+ # except if it was too long ago..
+ def test_caching1
+ assert_equal([], @lexer.lru.pens.keys.sort)
+ pens1 = @lexer.colorize(1)
+ assert_equal('s1', pens1)
+ assert_equal([1], @lexer.lru.pens.keys.sort)
+ pens2 = @lexer.colorize(1)
+ assert_same(pens1, pens2, 'should be cached')
+ @lexer.dirty(1)
+ assert_equal([], @lexer.lru.used)
+ pens3 = @lexer.colorize(1)
+ assert_not_same(pens1, pens3, 'should not be cached')
+ end
+ def test_caching2
+ @lexer.resize(2)
+ assert_equal([], @lexer.lru.pens.keys.sort)
+ pens1 = @lexer.colorize(1)
+ assert_equal('s1', pens1)
+ assert_equal([1], @lexer.lru.pens.keys.sort)
+ pens2 = @lexer.colorize(2)
+ assert_equal('s2', pens2)
+ assert_equal([2, 1], @lexer.lru.used)
+ pens3 = @lexer.colorize(1)
+ assert_same(pens1, pens3, 'should be cached')
+ assert_equal([1, 2], @lexer.lru.used)
+ pens4 = @lexer.colorize(3)
+ assert_equal('s3', pens4)
+ assert_equal([3, 1], @lexer.lru.used)
+ pens5 = @lexer.colorize(2)
+ assert_not_same(pens2, pens5, 'should not be cached')
+ end
+ def test_caching3
+ @lexer.resize(1)
+ assert_equal([], @lexer.lru.pens.keys.sort)
+ pens1 = @lexer.colorize(1)
+ assert_equal('s1', pens1)
+ assert_equal([1], @lexer.lru.pens.keys.sort)
+ pens2 = @lexer.colorize(2)
+ assert_equal('s2', pens2)
+ assert_equal([2], @lexer.lru.pens.keys.sort)
+ assert_not_same(pens1, pens2, 'should not be cached')
+ pens3 = @lexer.colorize(1) # this is what we want to test
+ assert_equal('s3', pens3)
+ assert_equal([1], @lexer.lru.pens.keys.sort)
+ assert_not_same(pens1, pens3, 'should not be cached')
+ end
+ def test_caching4
+ @lexer.resize(5)
+ 5.times {|y| @lexer.colorize(y) }
+ assert_equal([4, 3, 2, 1, 0], @lexer.lru.used)
+ @model.replace(0, 2, 1, 2, '0')
+ assert_equal([4, 3, 1, 0], @lexer.lru.used, 'dirtification')
+ end
end
From neoneye at rubyforge.org Mon Feb 14 11:35:10 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Mon Feb 14 11:35:11 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb
test_core.rb
Message-ID: <200502141635.j1EGZAdS003171@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv3163
Modified Files:
Tag: b04022005
core.rb test_core.rb
Log Message:
got rid of the old *buggy* lexer cache.
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.67.2.7
retrieving revision 1.67.2.8
diff -C2 -d -r1.67.2.7 -r1.67.2.8
*** test_core.rb 14 Feb 2005 16:15:56 -0000 1.67.2.7
--- test_core.rb 14 Feb 2005 16:35:07 -0000 1.67.2.8
***************
*** 1759,1974 ****
end
! class MockLexer2 < AEditor::Lexer::Simple
! def initialize(model)
! @state_counter = 1
! super(model)
! end
! def lex_line(text)
! #puts "lex #{text.inspect}"
! pen = text[0, 1].to_i
! glyphs = text.unpack('U*')
! @pens = glyphs.map{|g| pen}
! @right = @state_counter
! @state_counter += 1
! nil
! end
! end
!
! class TestLexerSimple #< Test::Unit::TestCase
! def setup
! super
! @model = AEditor::Model::Caretaker.new
! @model.load((1..9).to_a.map{|i| i.to_s * i}.join("\n"))
! @lexer = MockLexer2.new(@model)
! @model.attach(@lexer)
! end
! def teardown
! super
! @model.check_integrity
! end
! def test_typical1
! assert_equal([], @lexer.states)
! assert_equal(0, @lexer.tdl)
! assert_equal([1, 1], @lexer.colorize(0))
! assert_equal([1], @lexer.states)
! assert_equal(1, @lexer.tdl)
! assert_equal("22\n", @model.line(1))
! assert_equal([2, 2, 2], @lexer.colorize(1))
! assert_equal([1, 2], @lexer.states)
! assert_equal(2, @lexer.tdl)
! assert_equal("333\n", @model.line(2))
! assert_equal([3, 3, 3, 3], @lexer.colorize(2))
! assert_equal([1, 2, 3], @lexer.states)
! assert_equal(3, @lexer.tdl)
! assert_equal("55555\n", @model.line(4))
! assert_equal([5, 5, 5, 5, 5, 5], @lexer.colorize(4))
! assert_equal([1, 2, 3, 4, 5], @lexer.states)
! assert_equal(5, @lexer.tdl)
! end
! def test_dirty1
! assert_equal("7777777\n", @model.line(6))
! assert_equal([7, 7, 7, 7, 7, 7, 7, 7], @lexer.colorize(6))
! assert_equal([1, 2, 3, 4, 5, 6, 7], @lexer.states)
! assert_equal(7, @lexer.tdl)
! @lexer.dirty(3)
! assert_equal([1, 2, 3, nil, 5, 6, 7], @lexer.states)
! assert_equal(3, @lexer.tdl)
! @lexer.dirty(5)
! assert_equal([1, 2, 3, nil, 5, nil, 7], @lexer.states)
! assert_equal(3, @lexer.tdl)
! @lexer.dirty(1)
! assert_equal([1, nil, 3, nil, 5, nil, 7], @lexer.states)
! assert_equal(1, @lexer.tdl)
! end
! def test_dirty2
! assert_equal([], @lexer.states)
! assert_equal(0, @lexer.tdl)
! @lexer.dirty(3)
! assert_equal([], @lexer.states, 'nothing should happen')
! end
! def test_sync_dirty1
! assert_equal([7, 7, 7, 7, 7, 7, 7, 7], @lexer.colorize(6))
! @lexer.dirty(5)
! @lexer.dirty(3)
! @lexer.dirty(1)
! assert_equal(1, @lexer.tdl)
! assert_equal([1, nil, 3, nil, 5, nil, 7], @lexer.states)
! assert_equal([2, 2, 2], @lexer.colorize(1))
! assert_equal([1, 8, nil, nil, 5, nil, 7], @lexer.states)
! assert_equal(2, @lexer.tdl)
! assert_equal([4, 4, 4, 4, 4], @lexer.colorize(3))
! assert_equal([1, 8, 9, 10, nil, nil, 7], @lexer.states)
! assert_equal(4, @lexer.tdl)
! end
! def test_modelnotify_same1
! assert_equal([6, 6, 6, 6, 6, 6, 6], @lexer.colorize(5))
! assert_equal([1, 2, 3, 4, 5, 6], @lexer.states)
! assert_equal(6, @lexer.tdl)
! @model.replace(0, 2, 1, 2, "0")
! assert_equal([1, 2, nil, 4, 5, 6], @lexer.states)
! assert_equal(2, @lexer.tdl)
! end
! def test_modelnotify_same2
! assert_equal([6, 6, 6, 6, 6, 6, 6], @lexer.colorize(5))
! assert_equal([1, 2, 3, 4, 5, 6], @lexer.states)
! @model.replace(0, 2, 1, 3, "0\n0")
! assert_equal([1, 2, nil, nil, 5, 6], @lexer.states)
! assert_equal(2, @lexer.tdl)
! end
! def test_modelnotify_remove1
! assert_equal([6, 6, 6, 6, 6, 6, 6], @lexer.colorize(5))
! assert_equal([1, 2, 3, 4, 5, 6], @lexer.states)
! @model.replace(0, 2, 0, 3, "")
! assert_equal([1, 2, nil, 5, 6], @lexer.states)
! assert_equal(2, @lexer.tdl)
! end
! def test_modelnotify_remove2
! assert_equal([6, 6, 6, 6, 6, 6, 6], @lexer.colorize(5))
! assert_equal([1, 2, 3, 4, 5, 6], @lexer.states)
! @model.replace(0, 1, 0, 4, "")
! assert_equal([1, nil, 6], @lexer.states)
! assert_equal(1, @lexer.tdl)
! end
! def test_modelnotify_insert1
! assert_equal([6, 6, 6, 6, 6, 6, 6], @lexer.colorize(5))
! assert_equal([1, 2, 3, 4, 5, 6], @lexer.states)
! @model.replace(0, 3, 0, 3, "0\n")
! assert_equal("333\n0\n4444\n", @model.line(2) + @model.line(3) + @model.line(4))
! assert_equal([1, 2, 3, nil, 4, 5, 6], @lexer.states)
! assert_equal(3, @lexer.tdl)
! end
! def test_modelnotify_insert2
! assert_equal([6, 6, 6, 6, 6, 6, 6], @lexer.colorize(5))
! assert_equal([1, 2, 3, 4, 5, 6], @lexer.states)
! @model.replace(0, 3, 0, 3, "0\n0\n0\n")
! assert_equal([1, 2, 3, nil, nil, nil, 4, 5, 6], @lexer.states)
! assert_equal(3, @lexer.tdl)
! end
! # requesting a line which has already been computed
! # must result in the exact same result as first time
! # it was computed.. because its cached.
! # except if it was too long ago..
! def test_caching1
! assert_equal([], @lexer.lru.pens.keys.sort)
! pens1 = @lexer.colorize(1)
! assert_equal([2, 2, 2], pens1)
! assert_equal([1], @lexer.lru.pens.keys.sort)
! pens2 = @lexer.colorize(1)
! assert_same(pens1, pens2, 'should be cached')
! @lexer.dirty(1)
! assert_equal([], @lexer.lru.used)
! pens3 = @lexer.colorize(1)
! assert_not_same(pens1, pens3, 'should not be cached')
! end
! def test_caching2
! @lexer.resize(2)
! assert_equal([], @lexer.lru.pens.keys.sort)
! pens1 = @lexer.colorize(1)
! assert_equal([2, 2, 2], pens1)
! assert_equal([1], @lexer.lru.pens.keys.sort)
! pens2 = @lexer.colorize(2)
! assert_equal([3, 3, 3, 3], pens2)
! assert_equal([2, 1], @lexer.lru.used)
! pens3 = @lexer.colorize(1)
! assert_same(pens1, pens3, 'should be cached')
! assert_equal([1, 2], @lexer.lru.used)
! pens4 = @lexer.colorize(3)
! assert_equal([4, 4, 4, 4, 4], pens4)
! assert_equal([3, 1], @lexer.lru.used)
! pens5 = @lexer.colorize(2)
! assert_not_same(pens2, pens5, 'should not be cached')
! end
! def test_caching3
! assert_equal([], @lexer.lru.pens.keys.sort)
! pens1 = @lexer.colorize(1)
! assert_equal([2, 2, 2], pens1)
! assert_equal([1], @lexer.lru.pens.keys.sort)
! pens2 = @lexer.colorize(2)
! assert_equal([3, 3, 3, 3], pens2)
! assert_equal([2], @lexer.lru.pens.keys.sort)
! assert_not_same(pens1, pens2, 'should not be cached')
! pens3 = @lexer.colorize(1) # this is what we want to test
! assert_equal([2, 2, 2], pens3)
! assert_equal([1], @lexer.lru.pens.keys.sort)
! assert_not_same(pens1, pens3, 'should not be cached')
! end
! def test_caching4
! @lexer.resize(5)
! 5.times {|y| @lexer.colorize(y) }
! assert_equal([4, 3, 2, 1, 0], @lexer.lru.used)
! @model.replace(0, 2, 1, 2, '0')
! assert_equal([4, 3, 1, 0], @lexer.lru.used, 'dirtification')
! end
! def test_caching_insert1
! @lexer.resize(5)
! 5.times {|y| @lexer.colorize(y) }
! assert_equal([4, 3, 2, 1, 0], @lexer.lru.used)
! @model.replace(0, 2, 0, 2, "0\n")
! assert_equal([5, 4, 3, 1, 0], @lexer.lru.used, 'positive displacement')
! end
! # TODO: exercise the @lexer.set_right_state when its dirtifying the following line
! # TODO: figure out how this should work
! def test_caching_remove1
! @lexer.resize(5)
! 5.times {|y| @lexer.colorize(y) }
! assert_equal([4, 3, 2, 1, 0], @lexer.lru.used)
! @model.replace(0, 2, 0, 3, "") # delete the whole line
! # line #2 is erased, line #3 is dirtified, these lines are not in the LRU
! assert_equal([3, 1, 0], @lexer.lru.used, 'negative displacement')
! end
! def test_caching_remove2
! @model.load((1..9).to_a.join("\n"))
! @lexer.resize(5)
! 5.times {|y| @lexer.colorize(y) }
! assert_equal([4, 3, 2, 1, 0], @lexer.lru.used)
! @model.replace(1, 2, 0, 3, "") # simulate joinline
! assert_equal("1\n2\n34\n5\n6\n7\n8\n9", @model.text)
! # line #2 is erased, line #3 is dirtified, these lines are not in the LRU
! assert_equal([3, 1, 0], @lexer.lru.used, 'negative displacement')
! end
! end
!
! class TestNewCache < Test::Unit::TestCase
! class MockLexer < AEditor::Lexer::NewCache
def initialize(model)
super(model)
--- 1759,1764 ----
end
! class TestLexerSimple < Test::Unit::TestCase
! class MockLexer < AEditor::Lexer::Simple
def initialize(model)
super(model)
Index: core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v
retrieving revision 1.70.2.10
retrieving revision 1.70.2.11
diff -C2 -d -r1.70.2.10 -r1.70.2.11
*** core.rb 14 Feb 2005 16:10:44 -0000 1.70.2.10
--- core.rb 14 Feb 2005 16:35:07 -0000 1.70.2.11
***************
*** 393,397 ****
msg = ""
if @lexer
! msg = " lexer=#{@lexer.count_hit},#{@lexer.count_miss}"
end
$logger.info "update: " +
--- 393,397 ----
msg = ""
if @lexer
! msg = " lexer=#{@lexer.status}"
end
$logger.info "update: " +
***************
*** 1029,1134 ****
raise "derived class must overload"
end
! end
!
! class Simple < Base
! def initialize(model)
! reset_counters
! @right_states = []
! @topmost_dirty_line = 0
! @left = 0
! @right = 0
! @pens = []
! @lru = LRU.new
! super(model)
! end
! attr_reader :lru, :count_hit, :count_miss
! def reset_counters
! @count_hit = 0
! @count_miss = 0
! end
! def resize(n)
! @lru.resize(n)
! end
! def model_update(model, info)
! return if info.event == :before
! return if info.event != :after
! sy = info.source_y2
! dy = info.dest_y2
! n = dy - sy
! if n > 0
! n.times { @right_states.insert(sy, nil) }
! @lru.insert(sy, n) # displace all cached pens
! else
! @right_states.slice!(dy, -n)
! @lru.remove(dy+n, -n) # displace all cached pens
! end
! info.y1.upto([sy, dy].min) {|i| dirty(i) }
! end
! def lex_line(text)
! nil
! end
! def dirty(y)
! return unless y >= 0 and y < @right_states.size
! @right_states[y] = nil
! @topmost_dirty_line = [@topmost_dirty_line, y].min
! @lru.delete(y) # dirtify cached pens for this line
! end
! def set_right_state(y, state)
! dirty(y + 1) if y + 1 < @right_states.size and @right_states[y + 1] != state
! @right_states[y] = state
! end
! def get_left_state(y)
! raise "y (#{y}) must not be negative" if y < 0
! raise "y (#{y}) was outside" if y-1 >= @right_states.size
! return 0 if y == 0
! @right_states[y - 1]
! end
! def colorize(ay)
! # render dirty lines
! @topmost_dirty_line.upto([ay, @right_states.size].min-1) do |y|
! next if @right_states[y]
! @left = get_left_state(y)
! lex_line(@model.line(y))
! set_right_state(y, @right)
! @count_miss += 1
! end
!
! # render missing lines
! (@right_states.size).upto(ay-1) do |y|
! #puts "render #{y}"
! @left = get_left_state(y)
! lex_line(@model.line(y))
! set_right_state(y, @right)
! @count_miss += 1
! end
!
! if ay < @right_states.size and @right_states[ay]
! res = @lru[ay]
! if res
! @count_hit += 1
! return res
! end
! end
!
! # compute the requested line
! @left = get_left_state(ay)
! lex_line(@model.line(ay))
! @topmost_dirty_line = [@topmost_dirty_line, ay + 1].max
! set_right_state(ay, @right)
! @count_miss += 1
!
! @lru[ay] = @pens
!
! @pens
! end
! def states
! @right_states
! end
! def tdl
! @topmost_dirty_line
end
end
! class NewCache < Base
def initialize(model)
reset_counters
--- 1029,1038 ----
raise "derived class must overload"
end
! def status
! "-none-"
end
end
! class Simple < Base
def initialize(model)
reset_counters
***************
*** 1148,1151 ****
--- 1052,1064 ----
@count_color_miss = 0
end
+ def count_hit
+ @count_sync_hit + @count_color_hit
+ end
+ def count_miss
+ @count_sync_miss + @count_color_miss
+ end
+ def status
+ "#{@count_sync_hit}+#{@count_color_hit}/#{@count_sync_miss}+#{@count_color_miss}"
+ end
def resize(n)
@lru.resize(n)
***************
*** 1191,1195 ****
@left = (i == 0) ? 0 : @right_states[i - 1]
! lex_line(i)
set_right_state(i, @right)
end
--- 1104,1108 ----
@left = (i == 0) ? 0 : @right_states[i - 1]
! lex_line(@model.line(i))
set_right_state(i, @right)
end
***************
*** 1207,1211 ****
i = line_number
@left = (i == 0) ? 0 : @right_states[i - 1]
! lex_line(i)
set_right_state(i, @right)
@lru[i] = @pens
--- 1120,1124 ----
i = line_number
@left = (i == 0) ? 0 : @right_states[i - 1]
! lex_line(@model.line(i))
set_right_state(i, @right)
@lru[i] = @pens
From neoneye at rubyforge.org Mon Feb 14 11:35:31 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Mon Feb 14 11:35:33 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES TODO
Message-ID: <200502141635.j1EGZVdS003199@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv3183
Modified Files:
Tag: b04022005
CHANGES TODO
Log Message:
Got rid of the old *buggy* lexer cache
Index: CHANGES
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v
retrieving revision 1.44.2.3
retrieving revision 1.44.2.4
diff -C2 -d -r1.44.2.3 -r1.44.2.4
*** CHANGES 6 Feb 2005 11:06:57 -0000 1.44.2.3
--- CHANGES 14 Feb 2005 16:35:29 -0000 1.44.2.4
***************
*** 1,2 ****
--- 1,12 ----
+ 12-02-2005 Neoneye
+ * after being sick for some days and a short 3 days ski vacation,
+ im now back again with a fresh mind.
+ I built a lego model with postit notes attached to it,
+ wrote the lexer cache from scratch again. Discovered a few
+ errors in my old lexer cache (such as not erasing keys from
+ the LRU cache when invoking #dirty). However even though its
+ rewritten, full-propagation still occurs. It were supposed
+ to be minimal.
+
06-02-2005 Neoneye
* We now count number of hits+misses per update.
Index: TODO
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v
retrieving revision 1.41.2.3
retrieving revision 1.41.2.4
diff -C2 -d -r1.41.2.3 -r1.41.2.4
*** TODO 6 Feb 2005 18:52:31 -0000 1.41.2.3
--- TODO 14 Feb 2005 16:35:29 -0000 1.41.2.4
***************
*** 1,3 ****
--- 1,6 ----
render with colors.
+ * Simple#model_notify should not dirtify the last line.
+ * for some reasone propagation occurs with my new caching scheme,
+ it should NOT happen.
* fix bug in caching.. so it will invalidate the right lines.
I suspects its the model_update when removing lines.
From neoneye at rubyforge.org Mon Feb 14 11:53:22 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Mon Feb 14 11:53:23 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb
test_core.rb
Message-ID: <200502141653.j1EGrMdS003553@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv3530
Modified Files:
Tag: b04022005
core.rb test_core.rb
Log Message:
trying to figure out why Lexer::Simple cannot propagate/remove stuff
correct.
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.67.2.8
retrieving revision 1.67.2.9
diff -C2 -d -r1.67.2.8 -r1.67.2.9
*** test_core.rb 14 Feb 2005 16:35:07 -0000 1.67.2.8
--- test_core.rb 14 Feb 2005 16:53:20 -0000 1.67.2.9
***************
*** 1920,1932 ****
end
def test_caching_remove2
! @model.load((1..9).to_a.join("\n"))
@lexer.resize(5)
5.times {|y| @lexer.colorize(y) }
assert_equal([4, 3, 2, 1, 0], @lexer.lru.used)
@model.replace(1, 2, 0, 3, "") # simulate joinline
! assert_equal("1\n2\n34\n5\n6\n7\n8\n9", @model.text)
# line #2 is erased, line #3 is dirtified, these lines are not in the LRU
assert_equal([3, 1, 0], @lexer.lru.used, 'negative displacement')
end
# requesting a line which has already been computed
# must result in the exact same result as first time
--- 1920,1942 ----
end
def test_caching_remove2
! @model.load(('a'..'i').to_a.join("\n"))
@lexer.resize(5)
5.times {|y| @lexer.colorize(y) }
assert_equal([4, 3, 2, 1, 0], @lexer.lru.used)
@model.replace(1, 2, 0, 3, "") # simulate joinline
! assert_equal("a\nb\ncd\ne\nf\ng\nh\ni", @model.text)
# line #2 is erased, line #3 is dirtified, these lines are not in the LRU
assert_equal([3, 1, 0], @lexer.lru.used, 'negative displacement')
end
+ def test_caching_remove3
+ @model.load("a\nbcd\nefg\nh")
+ @lexer.resize(5)
+ 4.times {|y| @lexer.colorize(y) }
+ assert_equal([3, 2, 1, 0], @lexer.lru.used)
+ @model.replace(3, 1, 0, 2, '') # simulate joinline
+ assert_equal("a\nbcdefg\nh", @model.text)
+ # line #1 #2 is merged, line #2 is dirtified, these lines are not in the LRU
+ assert_equal([2, 0], @lexer.lru.used, 'negative displacement')
+ end
# requesting a line which has already been computed
# must result in the exact same result as first time
Index: core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v
retrieving revision 1.70.2.11
retrieving revision 1.70.2.12
diff -C2 -d -r1.70.2.11 -r1.70.2.12
*** core.rb 14 Feb 2005 16:35:07 -0000 1.70.2.11
--- core.rb 14 Feb 2005 16:53:20 -0000 1.70.2.12
***************
*** 1098,1101 ****
--- 1098,1102 ----
end
if @right_states[i]
+ $logger.debug 'none'
@count_sync_hit += 1
next
***************
*** 1110,1114 ****
def colorize(line_number)
#puts "line #{line_number}"
! sync_states(line_number-1)
if @lru.has_key?(line_number)
--- 1111,1115 ----
def colorize(line_number)
#puts "line #{line_number}"
! sync_states(line_number-1) # TODO: move outside renderloop
if @lru.has_key?(line_number)
From neoneye at rubyforge.org Mon Feb 14 16:57:37 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Mon Feb 14 16:57:38 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source test_core.rb
Message-ID: <200502142157.j1ELvbdS020095@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv20078
Modified Files:
Tag: b04022005
test_core.rb
Log Message:
I have managed to make up a testcase that exercises the problem im having
where inserted lines propagates to the bottom.
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.67.2.9
retrieving revision 1.67.2.10
diff -C2 -d -r1.67.2.9 -r1.67.2.10
*** test_core.rb 14 Feb 2005 16:53:20 -0000 1.67.2.9
--- test_core.rb 14 Feb 2005 21:57:35 -0000 1.67.2.10
***************
*** 1759,1783 ****
end
! class TestLexerSimple < Test::Unit::TestCase
! class MockLexer < AEditor::Lexer::Simple
! def initialize(model)
! super(model)
! @count = 0
! end
! attr_accessor :count, :right_states
! def lex_line(text)
! @pens = "s#{@count}"
! @right = @count
! @count += 1
! nil
! end
! end
! def setup
! @model = AEditor::Model::Caretaker.new
! @model.load(('a'..'z').to_a.map{|i| i * 20}.join("\n"))
! @lexer = MockLexer.new(@model)
! @model.attach(@lexer)
! @lexer.resize(10)
! end
def a_size(count)
assert_equal(count, @lexer.lru.size)
--- 1759,1763 ----
end
! module LexerHelpers
def a_size(count)
assert_equal(count, @lexer.lru.size)
***************
*** 1810,1813 ****
--- 1790,1818 ----
assert_equal(expected_right_states, @lexer.right_states)
end
+ extend self
+ end
+
+ class TestLexerSimple < Test::Unit::TestCase
+ class MockLexer < AEditor::Lexer::Simple
+ def initialize(model)
+ super(model)
+ @count = 0
+ end
+ attr_accessor :count, :right_states
+ def lex_line(text)
+ @pens = "s#{@count}"
+ @right = @count
+ @count += 1
+ nil
+ end
+ end
+ include LexerHelpers
+ def setup
+ @model = AEditor::Model::Caretaker.new
+ @model.load(('a'..'z').to_a.map{|i| i * 20}.join("\n"))
+ @lexer = MockLexer.new(@model)
+ @model.attach(@lexer)
+ @lexer.resize(10)
+ end
def test_accumulate_by_incremental_access1
a_size(0)
***************
*** 1997,2000 ****
--- 2002,2052 ----
end
+ class TestLexerReal < Test::Unit::TestCase
+ class MockLexer < AEditor::Lexer::Simple
+ def initialize(model)
+ super(model)
+ @count = 0
+ end
+ attr_accessor :count, :right_states
+ def lex_line(text)
+ @pens = "s#{@count}"
+ @right = @count
+ @count += 1
+ nil
+ end
+ end
+ include LexerHelpers
+ def setup
+ @model = AEditor::Model::Caretaker.new
+ @model.load(('a'..'z').to_a.map{|i| i * 20}.join("\n"))
+ @lexer = MockLexer.new(@model)
+ @model.attach(@lexer)
+ @lexer.resize(10)
+ end
+ def test_typical_insert1
+ @lexer.resize(5)
+ 5.times {|y| @lexer.colorize(y) }
+ assert_equal([4, 3, 2, 1, 0], @lexer.lru.used)
+ a_right(0, 1, 2, 3, 4)
+ a_color_stats(0, 5)
+ @model.replace(5, 1, 5, 1, "\n")
+ assert_equal([5, 4, 3, 0], @lexer.lru.used)
+ a_right(0, nil, nil, 2, 3, 4)
+ @lexer.colorize(0)
+ a_color_stats(1, 0)
+ @lexer.count = 1
+ @lexer.colorize(1)
+ a_right(0, 1, nil, 2, 3, 4)
+ a_color_stats(0, 1)
+ @lexer.count = 1
+ @lexer.colorize(2)
+ a_color_stats(0, 1)
+ #a_right(0, 1, 1, 2, 3, 4)
+ #@lexer.colorize(3)
+ #@lexer.colorize(4)
+ #a_color_stats(3, 2)
+ end
+ end
+
From neoneye at rubyforge.org Mon Feb 14 17:43:03 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Mon Feb 14 17:43:04 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source TODO
Message-ID: <200502142243.j1EMh3dS022689@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv22683
Modified Files:
Tag: b04022005
TODO
Log Message:
must introduce dirty flag
Index: TODO
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v
retrieving revision 1.41.2.4
retrieving revision 1.41.2.5
diff -C2 -d -r1.41.2.4 -r1.41.2.5
*** TODO 14 Feb 2005 16:35:29 -0000 1.41.2.4
--- TODO 14 Feb 2005 22:43:01 -0000 1.41.2.5
***************
*** 1,3 ****
--- 1,5 ----
render with colors.
+ * I must introduce a dirty flag array, I discovered that I had a
+ conceptual flaw in my lexercache.
* Simple#model_notify should not dirtify the last line.
* for some reasone propagation occurs with my new caching scheme,
From neoneye at rubyforge.org Mon Feb 14 18:32:49 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Mon Feb 14 18:32:51 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES
core.rb test_core.rb
Message-ID: <200502142332.j1ENWndS025252@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv25246
Modified Files:
Tag: b04022005
CHANGES core.rb test_core.rb
Log Message:
added a dirty flag array.. still needs more work
Index: CHANGES
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v
retrieving revision 1.44.2.4
retrieving revision 1.44.2.5
diff -C2 -d -r1.44.2.4 -r1.44.2.5
*** CHANGES 14 Feb 2005 16:35:29 -0000 1.44.2.4
--- CHANGES 14 Feb 2005 23:32:47 -0000 1.44.2.5
***************
*** 8,11 ****
--- 8,12 ----
rewritten, full-propagation still occurs. It were supposed
to be minimal.
+ * realized that I needed a dirty flag array to the Lexer::Simple.
06-02-2005 Neoneye
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.67.2.10
retrieving revision 1.67.2.11
diff -C2 -d -r1.67.2.10 -r1.67.2.11
*** test_core.rb 14 Feb 2005 21:57:35 -0000 1.67.2.10
--- test_core.rb 14 Feb 2005 23:32:47 -0000 1.67.2.11
***************
*** 1790,1793 ****
--- 1790,1796 ----
assert_equal(expected_right_states, @lexer.right_states)
end
+ def a_dirty(*expected)
+ assert_equal(expected, @lexer.dirty_lines)
+ end
extend self
end
***************
*** 1835,1838 ****
--- 1838,1842 ----
def test_accumulate_by_random_access1
lex(2)
+ a_dirty(false, false, false, true)
a_stats(0, 2, 0, 1)
a_right(0, 1, 2)
***************
*** 1842,1852 ****
lex(3)
a_stats(3, 0, 0, 1)
! a_right(0, 1, 2, 6, nil, 5)
lex(2)
a_stats(2, 0, 1, 0)
! a_right(0, 1, 2, 6, nil, 5)
lex(5)
- a_stats(4, 1, 0, 1)
a_right(0, 1, 2, 6, 7, 8)
a_size(3)
end
--- 1846,1858 ----
lex(3)
a_stats(3, 0, 0, 1)
! a_right(0, 1, 2, 6, 4, 5)
! a_dirty(false, false, false, false, true, false, true)
lex(2)
a_stats(2, 0, 1, 0)
! a_right(0, 1, 2, 6, 4, 5)
! a_dirty(false, false, false, false, true, false, true)
lex(5)
a_right(0, 1, 2, 6, 7, 8)
+ a_stats(4, 1, 0, 1)
a_size(3)
end
***************
*** 1864,1883 ****
lex(5)
@model.replace(0, 2, 1, 2, "0")
! a_right(0, 1, nil, 3, 4, 5)
end
def test_modelnotify_same2
lex(5)
@model.replace(0, 2, 1, 3, "0\n0")
! a_right(0, 1, nil, nil, 4, 5)
end
def test_modelnotify_remove1
lex(5)
@model.replace(0, 2, 0, 3, "")
! a_right(0, 1, nil, 4, 5)
end
def test_modelnotify_remove2
lex(5)
@model.replace(0, 1, 0, 4, "")
! a_right(0, nil, 5)
end
def test_modelnotify_insert1
--- 1870,1893 ----
lex(5)
@model.replace(0, 2, 1, 2, "0")
! a_right(0, 1, 2, 3, 4, 5)
! a_dirty(false, false, true, false, false, false, true)
end
def test_modelnotify_same2
lex(5)
@model.replace(0, 2, 1, 3, "0\n0")
! a_right(0, 1, 2, 3, 4, 5)
! a_dirty(false, false, true, true, false, false, true)
end
def test_modelnotify_remove1
lex(5)
@model.replace(0, 2, 0, 3, "")
! a_right(0, 1, 3, 4, 5)
! a_dirty(false, false, true, false, false, true)
end
def test_modelnotify_remove2
lex(5)
@model.replace(0, 1, 0, 4, "")
! a_right(0, 4, 5)
! a_dirty(false, true, false, true)
end
def test_modelnotify_insert1
***************
*** 1889,1898 ****
@model.line(3)[0, 1] +
@model.line(4)[0, 1])
! a_right(0, 1, 2, nil, nil, 4, 5)
end
def test_modelnotify_insert2
lex(5)
@model.replace(0, 3, 0, 3, "0\n0\n0\n")
! a_right(0, 1, 2, nil, nil, nil, nil, 4, 5)
end
def test_caching_insert1
--- 1899,1910 ----
@model.line(3)[0, 1] +
@model.line(4)[0, 1])
! a_right(0, 1, 2, nil, 3, 4, 5)
! a_dirty(false, false, false, true, true, false, false, true)
end
def test_modelnotify_insert2
lex(5)
@model.replace(0, 3, 0, 3, "0\n0\n0\n")
! a_right(0, 1, 2, nil, nil, nil, 3, 4, 5)
! a_dirty(false, false, false, true, true, true, true, false, false, true)
end
def test_caching_insert1
***************
*** 2032,2049 ****
@model.replace(5, 1, 5, 1, "\n")
assert_equal([5, 4, 3, 0], @lexer.lru.used)
! a_right(0, nil, nil, 2, 3, 4)
@lexer.colorize(0)
a_color_stats(1, 0)
@lexer.count = 1
@lexer.colorize(1)
! a_right(0, 1, nil, 2, 3, 4)
a_color_stats(0, 1)
@lexer.count = 1
@lexer.colorize(2)
a_color_stats(0, 1)
! #a_right(0, 1, 1, 2, 3, 4)
! #@lexer.colorize(3)
! #@lexer.colorize(4)
! #a_color_stats(3, 2)
end
end
--- 2044,2067 ----
@model.replace(5, 1, 5, 1, "\n")
assert_equal([5, 4, 3, 0], @lexer.lru.used)
! a_right(0, nil, 1, 2, 3, 4)
! a_dirty(false, true, true, false, false, false, true)
@lexer.colorize(0)
a_color_stats(1, 0)
@lexer.count = 1
@lexer.colorize(1)
! a_right(0, 1, 1, 2, 3, 4)
! a_dirty(false, false, true, false, false, false, true)
a_color_stats(0, 1)
@lexer.count = 1
@lexer.colorize(2)
a_color_stats(0, 1)
! a_right(0, 1, 1, 2, 3, 4)
! a_dirty(false, false, false, false, false, false, true)
! @lexer.colorize(3)
! a_right(0, 1, 1, 2, 3, 4)
! a_dirty(false, false, false, false, false, false, true)
! a_color_stats(1, 0) # TODO: should be a hits
! @lexer.colorize(4)
! a_color_stats(1, 0) # TODO: should be a hits
end
end
Index: core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v
retrieving revision 1.70.2.12
retrieving revision 1.70.2.13
diff -C2 -d -r1.70.2.12 -r1.70.2.13
*** core.rb 14 Feb 2005 16:53:20 -0000 1.70.2.12
--- core.rb 14 Feb 2005 23:32:47 -0000 1.70.2.13
***************
*** 1037,1040 ****
--- 1037,1041 ----
def initialize(model)
reset_counters
+ @dirty_lines = []
@right_states = []
@left = 0
***************
*** 1045,1049 ****
end
attr_reader :lru, :count_sync_hit, :count_sync_miss
! attr_reader :count_color_hit, :count_color_miss
def reset_counters
@count_sync_hit = 0
--- 1046,1050 ----
end
attr_reader :lru, :count_sync_hit, :count_sync_miss
! attr_reader :count_color_hit, :count_color_miss, :dirty_lines
def reset_counters
@count_sync_hit = 0
***************
*** 1065,1069 ****
end
def dirty(y)
! @right_states[y] = nil if y < @right_states.size
@lru.delete(y)
end
--- 1066,1072 ----
end
def dirty(y)
! (y - @dirty_lines.size).times { @dirty_lines << true }
! (y - @right_states.size).times { @right_states << nil }
! @dirty_lines[y] = true
@lru.delete(y)
end
***************
*** 1076,1083 ****
if n > 0
dirty(sy) # dirtify the line before splitting
! n.times { @right_states.insert(sy, nil) }
@lru.insert(sy, n) # displace all cached pens
else
@right_states.slice!(dy, -n)
@lru.remove(dy+n, -n) # displace all cached pens
end
--- 1079,1090 ----
if n > 0
dirty(sy) # dirtify the line before splitting
! n.times do
! @right_states.insert(sy, nil)
! @dirty_lines.insert(sy, true)
! end
@lru.insert(sy, n) # displace all cached pens
else
@right_states.slice!(dy, -n)
+ @dirty_lines.slice!(dy, -n)
@lru.remove(dy+n, -n) # displace all cached pens
end
***************
*** 1085,1102 ****
end
def set_right_state(y, state)
! return if state == @right_states[y]
! #puts "clearing #{y}, because #{state.inspect} is distinct " +
! # "from #{@right_states[y].inspect}"
dirty(y)
- dirty(y+1)
@right_states[y] = state
end
def sync_states(number_of_states)
0.upto(number_of_states) do |i|
! if i > @right_states.size
! raise "should not happen"
end
! if @right_states[i]
! $logger.debug 'none'
@count_sync_hit += 1
next
--- 1092,1122 ----
end
def set_right_state(y, state)
! propagate = false
! rs = @right_states
! if y < @right_states.size
! old = @right_states[y]
! if state != old
! propagate = true
! #puts "propagate #{y}->#{y+1}, because #{state.inspect} is " +
! # "distinct from #{old.inspect}"
! end
! elsif y >= @right_states.size
! propagate = true
! #puts "propagate #{y}->#{y+1}, because y >= size"
! end
dirty(y)
@right_states[y] = state
+ @dirty_lines[y] = false
+ #p @right_states, propagate
+ dirty(y+1) if propagate
+ #p @right_states
end
def sync_states(number_of_states)
0.upto(number_of_states) do |i|
! if i < @dirty_lines.size and i > @right_states.size
! raise "should not happen, i=#{i} " +
! "rs.size=#{@right_states.size} dl=#{@dirty_lines.size}"
end
! if i < @dirty_lines.size and @dirty_lines[i] == false
@count_sync_hit += 1
next
From neoneye at rubyforge.org Tue Feb 15 02:08:20 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Tue Feb 15 02:08:22 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source test_core.rb
Message-ID: <200502150708.j1F78KdS003363@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv3285
Modified Files:
Tag: b04022005
test_core.rb
Log Message:
The propagation occurs because the bottom most lines has been pushed out
of the lru window, and thus gotten deleted. This is because the rendering
order.. rendering lines from top to bottom.. makes the bottom most lines
be the most ranked line in the LRU. This were supposed to be the other
way around.. so that the top-most line were the most ranked.
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.67.2.11
retrieving revision 1.67.2.12
diff -C2 -d -r1.67.2.11 -r1.67.2.12
*** test_core.rb 14 Feb 2005 23:32:47 -0000 1.67.2.11
--- test_core.rb 15 Feb 2005 07:08:18 -0000 1.67.2.12
***************
*** 2046,2049 ****
--- 2046,2050 ----
a_right(0, nil, 1, 2, 3, 4)
a_dirty(false, true, true, false, false, false, true)
+ assert_equal([0, 3, 4, 5], @lexer.lru.pens.keys.sort)
@lexer.colorize(0)
a_color_stats(1, 0)
***************
*** 2052,2055 ****
--- 2053,2057 ----
a_right(0, 1, 1, 2, 3, 4)
a_dirty(false, false, true, false, false, false, true)
+ assert_equal([0, 1, 3, 4, 5], @lexer.lru.pens.keys.sort)
a_color_stats(0, 1)
@lexer.count = 1
***************
*** 2058,2067 ****
a_right(0, 1, 1, 2, 3, 4)
a_dirty(false, false, false, false, false, false, true)
@lexer.colorize(3)
a_right(0, 1, 1, 2, 3, 4)
a_dirty(false, false, false, false, false, false, true)
! a_color_stats(1, 0) # TODO: should be a hits
@lexer.colorize(4)
! a_color_stats(1, 0) # TODO: should be a hits
end
end
--- 2060,2072 ----
a_right(0, 1, 1, 2, 3, 4)
a_dirty(false, false, false, false, false, false, true)
+ assert_equal([0, 1, 2, 4, 5], @lexer.lru.pens.keys.sort)
@lexer.colorize(3)
a_right(0, 1, 1, 2, 3, 4)
a_dirty(false, false, false, false, false, false, true)
! assert_equal([0, 1, 2, 3, 5], @lexer.lru.pens.keys.sort)
! #a_color_stats(1, 0) # TODO: should be a hits
@lexer.colorize(4)
! assert_equal([0, 1, 2, 3, 4], @lexer.lru.pens.keys.sort)
! #a_color_stats(1, 0) # TODO: should be a hits
end
end
From neoneye at rubyforge.org Tue Feb 15 12:24:25 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Tue Feb 15 12:24:26 2005
Subject: [Aeditor-commit] projects/documents/homepage2 weblog.html
Message-ID: <200502151724.j1FHOPdS013125@rubyforge.org>
Update of /var/cvs/aeditor/projects/documents/homepage2
In directory rubyforge.org:/tmp/cvs-serv13121
Modified Files:
weblog.html
Log Message:
status for last week
Index: weblog.html
===================================================================
RCS file: /var/cvs/aeditor/projects/documents/homepage2/weblog.html,v
retrieving revision 1.5
retrieving revision 1.6
diff -C2 -d -r1.5 -r1.6
*** weblog.html 2 Feb 2005 19:20:43 -0000 1.5
--- weblog.html 15 Feb 2005 17:24:23 -0000 1.6
***************
*** 40,43 ****
--- 40,64 ----
I have a small appartment in Copenhagen, the capital of Denmark.
+ A new view on things - 15 feb 2005
+ I recieved the 19" tft display last week, its a Samsung
+ SyncMaster 910T. I must say its wonderful to do my programming on.
+ I went crazy and also ordered a mac mini, lets hope it arrives soon.
+ I have big expectations to this small piece of machinary. My current
+ mechanic beast is big, noisy, slow, stoneage cisc architecture and ready
+ to be thrown out.
+
+ '-NEON-EYE-'.unpack('C*').inject(0){|a,b|a+b} #-> 666
+
+ Last monday I felt sick, pain in my brain and my nose running
+ all the time. I had to goto my job and the next day to the university
+ and wensday to the job again, even though I was sick. Thrusday I was
+ still sick, and had to go on a small ski vacation for 3 days, where I
+ snowboarded the first 2 hours and afterwards switched to alpine ski
+ (because I got beaten up too badly and because I was a little sick).
+ Anyway my sickness disappeared on the ski vacation and im now ready
+ to do some more programming again. Its impossible to serious coding
+ when you are in great pain.
+
+
Things I did today - 01 feb 2005
I have had my first day free from job in long time, so I have
From neoneye at rubyforge.org Tue Feb 15 13:37:30 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Tue Feb 15 13:37:31 2005
Subject: [Aeditor-commit] projects/regexp_engine STORIES
Message-ID: <200502151837.j1FIbUdS016575@rubyforge.org>
Update of /var/cvs/aeditor/projects/regexp_engine
In directory rubyforge.org:/tmp/cvs-serv16562
Modified Files:
STORIES
Log Message:
nullslack asked me on irc, how to match text after foo.
Index: STORIES
===================================================================
RCS file: /var/cvs/aeditor/projects/regexp_engine/STORIES,v
retrieving revision 1.10
retrieving revision 1.11
diff -C2 -d -r1.10 -r1.11
*** STORIES 2 Jan 2005 18:48:01 -0000 1.10
--- STORIES 15 Feb 2005 18:37:28 -0000 1.11
***************
*** 84,85 ****
--- 84,90 ----
p, rest = 'abc'.unpack('aa*')
+
+
+ Q11: How do I extract the text after 'foo' until lineend?
+
+ "sdfsfd foo abc\nlsdjf\nfood".scan(/foo(.*)/).flatten #-> [" abc", "d"]
From neoneye at rubyforge.org Tue Feb 15 14:01:15 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Tue Feb 15 14:01:17 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb
test_core.rb
Message-ID: <200502151901.j1FJ1FdS018640@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv18635
Modified Files:
Tag: b04022005
core.rb test_core.rb
Log Message:
got rid of tailing 'true' element.
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.67.2.12
retrieving revision 1.67.2.13
diff -C2 -d -r1.67.2.12 -r1.67.2.13
*** test_core.rb 15 Feb 2005 07:08:18 -0000 1.67.2.12
--- test_core.rb 15 Feb 2005 19:01:13 -0000 1.67.2.13
***************
*** 1838,1842 ****
def test_accumulate_by_random_access1
lex(2)
! a_dirty(false, false, false, true)
a_stats(0, 2, 0, 1)
a_right(0, 1, 2)
--- 1838,1842 ----
def test_accumulate_by_random_access1
lex(2)
! a_dirty(false, false, false)
a_stats(0, 2, 0, 1)
a_right(0, 1, 2)
***************
*** 1847,1855 ****
a_stats(3, 0, 0, 1)
a_right(0, 1, 2, 6, 4, 5)
! a_dirty(false, false, false, false, true, false, true)
lex(2)
a_stats(2, 0, 1, 0)
a_right(0, 1, 2, 6, 4, 5)
! a_dirty(false, false, false, false, true, false, true)
lex(5)
a_right(0, 1, 2, 6, 7, 8)
--- 1847,1855 ----
a_stats(3, 0, 0, 1)
a_right(0, 1, 2, 6, 4, 5)
! a_dirty(false, false, false, false, true, false)
lex(2)
a_stats(2, 0, 1, 0)
a_right(0, 1, 2, 6, 4, 5)
! a_dirty(false, false, false, false, true, false)
lex(5)
a_right(0, 1, 2, 6, 7, 8)
***************
*** 1871,1875 ****
@model.replace(0, 2, 1, 2, "0")
a_right(0, 1, 2, 3, 4, 5)
! a_dirty(false, false, true, false, false, false, true)
end
def test_modelnotify_same2
--- 1871,1875 ----
@model.replace(0, 2, 1, 2, "0")
a_right(0, 1, 2, 3, 4, 5)
! a_dirty(false, false, true, false, false, false)
end
def test_modelnotify_same2
***************
*** 1877,1881 ****
@model.replace(0, 2, 1, 3, "0\n0")
a_right(0, 1, 2, 3, 4, 5)
! a_dirty(false, false, true, true, false, false, true)
end
def test_modelnotify_remove1
--- 1877,1881 ----
@model.replace(0, 2, 1, 3, "0\n0")
a_right(0, 1, 2, 3, 4, 5)
! a_dirty(false, false, true, true, false, false)
end
def test_modelnotify_remove1
***************
*** 1883,1887 ****
@model.replace(0, 2, 0, 3, "")
a_right(0, 1, 3, 4, 5)
! a_dirty(false, false, true, false, false, true)
end
def test_modelnotify_remove2
--- 1883,1887 ----
@model.replace(0, 2, 0, 3, "")
a_right(0, 1, 3, 4, 5)
! a_dirty(false, false, true, false, false)
end
def test_modelnotify_remove2
***************
*** 1889,1893 ****
@model.replace(0, 1, 0, 4, "")
a_right(0, 4, 5)
! a_dirty(false, true, false, true)
end
def test_modelnotify_insert1
--- 1889,1893 ----
@model.replace(0, 1, 0, 4, "")
a_right(0, 4, 5)
! a_dirty(false, true, false)
end
def test_modelnotify_insert1
***************
*** 1900,1904 ****
@model.line(4)[0, 1])
a_right(0, 1, 2, nil, 3, 4, 5)
! a_dirty(false, false, false, true, true, false, false, true)
end
def test_modelnotify_insert2
--- 1900,1904 ----
@model.line(4)[0, 1])
a_right(0, 1, 2, nil, 3, 4, 5)
! a_dirty(false, false, false, true, true, false, false)
end
def test_modelnotify_insert2
***************
*** 1906,1910 ****
@model.replace(0, 3, 0, 3, "0\n0\n0\n")
a_right(0, 1, 2, nil, nil, nil, 3, 4, 5)
! a_dirty(false, false, false, true, true, true, true, false, false, true)
end
def test_caching_insert1
--- 1906,1910 ----
@model.replace(0, 3, 0, 3, "0\n0\n0\n")
a_right(0, 1, 2, nil, nil, nil, 3, 4, 5)
! a_dirty(false, false, false, true, true, true, true, false, false)
end
def test_caching_insert1
***************
*** 2045,2049 ****
assert_equal([5, 4, 3, 0], @lexer.lru.used)
a_right(0, nil, 1, 2, 3, 4)
! a_dirty(false, true, true, false, false, false, true)
assert_equal([0, 3, 4, 5], @lexer.lru.pens.keys.sort)
@lexer.colorize(0)
--- 2045,2049 ----
assert_equal([5, 4, 3, 0], @lexer.lru.used)
a_right(0, nil, 1, 2, 3, 4)
! a_dirty(false, true, true, false, false, false)
assert_equal([0, 3, 4, 5], @lexer.lru.pens.keys.sort)
@lexer.colorize(0)
***************
*** 2052,2056 ****
@lexer.colorize(1)
a_right(0, 1, 1, 2, 3, 4)
! a_dirty(false, false, true, false, false, false, true)
assert_equal([0, 1, 3, 4, 5], @lexer.lru.pens.keys.sort)
a_color_stats(0, 1)
--- 2052,2056 ----
@lexer.colorize(1)
a_right(0, 1, 1, 2, 3, 4)
! a_dirty(false, false, true, false, false, false)
assert_equal([0, 1, 3, 4, 5], @lexer.lru.pens.keys.sort)
a_color_stats(0, 1)
***************
*** 2059,2067 ****
a_color_stats(0, 1)
a_right(0, 1, 1, 2, 3, 4)
! a_dirty(false, false, false, false, false, false, true)
assert_equal([0, 1, 2, 4, 5], @lexer.lru.pens.keys.sort)
@lexer.colorize(3)
a_right(0, 1, 1, 2, 3, 4)
! a_dirty(false, false, false, false, false, false, true)
assert_equal([0, 1, 2, 3, 5], @lexer.lru.pens.keys.sort)
#a_color_stats(1, 0) # TODO: should be a hits
--- 2059,2067 ----
a_color_stats(0, 1)
a_right(0, 1, 1, 2, 3, 4)
! a_dirty(false, false, false, false, false, false)
assert_equal([0, 1, 2, 4, 5], @lexer.lru.pens.keys.sort)
@lexer.colorize(3)
a_right(0, 1, 1, 2, 3, 4)
! a_dirty(false, false, false, false, false, false)
assert_equal([0, 1, 2, 3, 5], @lexer.lru.pens.keys.sort)
#a_color_stats(1, 0) # TODO: should be a hits
Index: core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v
retrieving revision 1.70.2.13
retrieving revision 1.70.2.14
diff -C2 -d -r1.70.2.13 -r1.70.2.14
*** core.rb 14 Feb 2005 23:32:47 -0000 1.70.2.13
--- core.rb 15 Feb 2005 19:01:13 -0000 1.70.2.14
***************
*** 1066,1072 ****
end
def dirty(y)
! (y - @dirty_lines.size).times { @dirty_lines << true }
! (y - @right_states.size).times { @right_states << nil }
! @dirty_lines[y] = true
@lru.delete(y)
end
--- 1066,1070 ----
end
def dirty(y)
! @dirty_lines[y] = true if y < @dirty_lines.size
@lru.delete(y)
end
***************
*** 1106,1109 ****
--- 1104,1109 ----
end
dirty(y)
+ (1+y-@right_states.size).times { @right_states << nil }
+ (1+y-@dirty_lines.size).times { @dirty_lines << true }
@right_states[y] = state
@dirty_lines[y] = false
From neoneye at rubyforge.org Tue Feb 15 17:25:45 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Tue Feb 15 17:25:47 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES TODO
test_core.rb
Message-ID: <200502152225.j1FMPjdS028354@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv28345
Modified Files:
Tag: b04022005
CHANGES TODO test_core.rb
Log Message:
now #test_typical_insert1 works
Index: TODO
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v
retrieving revision 1.41.2.5
retrieving revision 1.41.2.6
diff -C2 -d -r1.41.2.5 -r1.41.2.6
*** TODO 14 Feb 2005 22:43:01 -0000 1.41.2.5
--- TODO 15 Feb 2005 22:25:43 -0000 1.41.2.6
***************
*** 1,8 ****
render with colors.
- * I must introduce a dirty flag array, I discovered that I had a
- conceptual flaw in my lexercache.
- * Simple#model_notify should not dirtify the last line.
- * for some reasone propagation occurs with my new caching scheme,
- it should NOT happen.
* fix bug in caching.. so it will invalidate the right lines.
I suspects its the model_update when removing lines.
--- 1,3 ----
Index: CHANGES
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v
retrieving revision 1.44.2.5
retrieving revision 1.44.2.6
diff -C2 -d -r1.44.2.5 -r1.44.2.6
*** CHANGES 14 Feb 2005 23:32:47 -0000 1.44.2.5
--- CHANGES 15 Feb 2005 22:25:43 -0000 1.44.2.6
***************
*** 1,3 ****
! 12-02-2005 Neoneye
* after being sick for some days and a short 3 days ski vacation,
im now back again with a fresh mind.
--- 1,7 ----
! 16-02-2005 Neoneye
! * finally got the #test_typical_insert1 testcase working, so that
! I can be sure that insert works relatively ok.
!
! 15-02-2005 Neoneye
* after being sick for some days and a short 3 days ski vacation,
im now back again with a fresh mind.
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.67.2.13
retrieving revision 1.67.2.14
diff -C2 -d -r1.67.2.13 -r1.67.2.14
*** test_core.rb 15 Feb 2005 19:01:13 -0000 1.67.2.13
--- test_core.rb 15 Feb 2005 22:25:43 -0000 1.67.2.14
***************
*** 2037,2041 ****
end
def test_typical_insert1
! @lexer.resize(5)
5.times {|y| @lexer.colorize(y) }
assert_equal([4, 3, 2, 1, 0], @lexer.lru.used)
--- 2037,2046 ----
end
def test_typical_insert1
! # the number of visible lines is only 5, but due to the LRU
! # and the propagation.. when inserting a new line and in case
! # the view is too narrow then full propagation will occur.
! # in order to avoid it the LRU's capacity must be 5 + number of
! # newlines that we want to insert
! @lexer.resize(6) # NOTE: LRU capacity=6, but view height=5.
5.times {|y| @lexer.colorize(y) }
assert_equal([4, 3, 2, 1, 0], @lexer.lru.used)
***************
*** 2046,2050 ****
a_right(0, nil, 1, 2, 3, 4)
a_dirty(false, true, true, false, false, false)
- assert_equal([0, 3, 4, 5], @lexer.lru.pens.keys.sort)
@lexer.colorize(0)
a_color_stats(1, 0)
--- 2051,2054 ----
***************
*** 2053,2057 ****
a_right(0, 1, 1, 2, 3, 4)
a_dirty(false, false, true, false, false, false)
! assert_equal([0, 1, 3, 4, 5], @lexer.lru.pens.keys.sort)
a_color_stats(0, 1)
@lexer.count = 1
--- 2057,2061 ----
a_right(0, 1, 1, 2, 3, 4)
a_dirty(false, false, true, false, false, false)
! assert_equal([1, 0, 5, 4, 3], @lexer.lru.used)
a_color_stats(0, 1)
@lexer.count = 1
***************
*** 2060,2072 ****
a_right(0, 1, 1, 2, 3, 4)
a_dirty(false, false, false, false, false, false)
! assert_equal([0, 1, 2, 4, 5], @lexer.lru.pens.keys.sort)
@lexer.colorize(3)
a_right(0, 1, 1, 2, 3, 4)
a_dirty(false, false, false, false, false, false)
! assert_equal([0, 1, 2, 3, 5], @lexer.lru.pens.keys.sort)
! #a_color_stats(1, 0) # TODO: should be a hits
@lexer.colorize(4)
! assert_equal([0, 1, 2, 3, 4], @lexer.lru.pens.keys.sort)
! #a_color_stats(1, 0) # TODO: should be a hits
end
end
--- 2064,2076 ----
a_right(0, 1, 1, 2, 3, 4)
a_dirty(false, false, false, false, false, false)
! assert_equal([2, 1, 0, 5, 4, 3], @lexer.lru.used)
@lexer.colorize(3)
a_right(0, 1, 1, 2, 3, 4)
a_dirty(false, false, false, false, false, false)
! assert_equal([3, 2, 1, 0, 5, 4], @lexer.lru.used)
! a_color_stats(1, 0)
@lexer.colorize(4)
! assert_equal([4, 3, 2, 1, 0, 5], @lexer.lru.used)
! a_color_stats(1, 0)
end
end
From neoneye at rubyforge.org Tue Feb 15 17:56:10 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Tue Feb 15 17:56:11 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source TODO
test_core.rb
Message-ID: <200502152256.j1FMuAdS029162@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv29137
Modified Files:
Tag: b04022005
TODO test_core.rb
Log Message:
time to goto bed. I layouted a test for notify on remove, which
provokes some issues with caching that needs to be investigated.
Index: TODO
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v
retrieving revision 1.41.2.6
retrieving revision 1.41.2.7
diff -C2 -d -r1.41.2.6 -r1.41.2.7
*** TODO 15 Feb 2005 22:25:43 -0000 1.41.2.6
--- TODO 15 Feb 2005 22:56:08 -0000 1.41.2.7
***************
*** 9,12 ****
--- 9,20 ----
* choose a lexer depending on the file suffix.
+
+ optimize:
+ * when scrolling to the bottom of the buffer, then rendering
+ becomes slower than in the top. I guess primarily it happens
+ because of View#visual that must built its array every time.
+ maybe introduce some caching here.
+
+
misc:
* all operations must write themselves to the logfile.
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.67.2.14
retrieving revision 1.67.2.15
diff -C2 -d -r1.67.2.14 -r1.67.2.15
*** test_core.rb 15 Feb 2005 22:25:43 -0000 1.67.2.14
--- test_core.rb 15 Feb 2005 22:56:08 -0000 1.67.2.15
***************
*** 2074,2077 ****
--- 2074,2090 ----
a_color_stats(1, 0)
end
+ def test_typical_remove1
+ @model.load("aa\nbb\ncc\ndd\nee\nff\ngg\nhh\nii")
+ @lexer.resize(7)
+ 7.times {|y| @lexer.colorize(y) }
+ assert_equal([6, 5, 4, 3, 2, 1, 0], @lexer.lru.used)
+ #a_right(0, 1, 2, 3, 4, 5, 6)
+ a_color_stats(0, 7)
+ @model.replace(1, 1, 1, 3, '')
+ assert_equal("aa\nbd\nee\nff\ngg\nhh\nii", @model.text)
+ #assert_equal([4, 3, 2, 1, 0], @lexer.lru.used)
+ #a_dirty(false, true, false, false, false)
+ #a_right(0, nil, 1, 2, 3, 4)
+ end
end
From neoneye at rubyforge.org Wed Feb 16 02:19:53 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Wed Feb 16 02:19:55 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb
test_core.rb
Message-ID: <200502160719.j1G7JrdS009004@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv8974
Modified Files:
Tag: b04022005
core.rb test_core.rb
Log Message:
figured out why #test_typical_remove1 couldn't start up the way that it
was supposed to.. it was because that the lexer already was attached to
the model.. and thus got a notify when we loaded the model with new
text. I had to add a Lexer#erase method that can wipe the leftovers
from earlier times.
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.67.2.15
retrieving revision 1.67.2.16
diff -C2 -d -r1.67.2.15 -r1.67.2.16
*** test_core.rb 15 Feb 2005 22:56:08 -0000 1.67.2.15
--- test_core.rb 16 Feb 2005 07:19:51 -0000 1.67.2.16
***************
*** 2076,2083 ****
def test_typical_remove1
@model.load("aa\nbb\ncc\ndd\nee\nff\ngg\nhh\nii")
@lexer.resize(7)
7.times {|y| @lexer.colorize(y) }
assert_equal([6, 5, 4, 3, 2, 1, 0], @lexer.lru.used)
! #a_right(0, 1, 2, 3, 4, 5, 6)
a_color_stats(0, 7)
@model.replace(1, 1, 1, 3, '')
--- 2076,2085 ----
def test_typical_remove1
@model.load("aa\nbb\ncc\ndd\nee\nff\ngg\nhh\nii")
+ @lexer.erase
@lexer.resize(7)
7.times {|y| @lexer.colorize(y) }
assert_equal([6, 5, 4, 3, 2, 1, 0], @lexer.lru.used)
! a_dirty(false, false, false, false, false, false, false)
! a_right(0, 1, 2, 3, 4, 5, 6)
a_color_stats(0, 7)
@model.replace(1, 1, 1, 3, '')
Index: core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v
retrieving revision 1.70.2.14
retrieving revision 1.70.2.15
diff -C2 -d -r1.70.2.14 -r1.70.2.15
*** core.rb 15 Feb 2005 19:01:13 -0000 1.70.2.14
--- core.rb 16 Feb 2005 07:19:51 -0000 1.70.2.15
***************
*** 1036,1046 ****
class Simple < Base
def initialize(model)
! reset_counters
! @dirty_lines = []
! @right_states = []
! @left = 0
! @right = 0
! @pens = []
! @lru = LRU.new
super(model)
end
--- 1036,1040 ----
class Simple < Base
def initialize(model)
! erase
super(model)
end
***************
*** 1059,1062 ****
--- 1053,1065 ----
@count_sync_miss + @count_color_miss
end
+ def erase
+ reset_counters
+ @dirty_lines = []
+ @right_states = []
+ @left = 0
+ @right = 0
+ @pens = []
+ @lru = LRU.new
+ end
def status
"#{@count_sync_hit}+#{@count_color_hit}/#{@count_sync_miss}+#{@count_color_miss}"
***************
*** 1104,1109 ****
end
dirty(y)
! (1+y-@right_states.size).times { @right_states << nil }
! (1+y-@dirty_lines.size).times { @dirty_lines << true }
@right_states[y] = state
@dirty_lines[y] = false
--- 1107,1112 ----
end
dirty(y)
! (y-@right_states.size).times { @right_states << nil }
! (y-@dirty_lines.size).times { @dirty_lines << true }
@right_states[y] = state
@dirty_lines[y] = false
From neoneye at rubyforge.org Wed Feb 16 15:50:41 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Wed Feb 16 15:50:42 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb
test_core.rb
Message-ID: <200502162050.j1GKofdS021182@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv21171
Modified Files:
Tag: b04022005
core.rb test_core.rb
Log Message:
improvements to the remove operation
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.67.2.16
retrieving revision 1.67.2.17
diff -C2 -d -r1.67.2.16 -r1.67.2.17
*** test_core.rb 16 Feb 2005 07:19:51 -0000 1.67.2.16
--- test_core.rb 16 Feb 2005 20:50:39 -0000 1.67.2.17
***************
*** 2083,2091 ****
a_right(0, 1, 2, 3, 4, 5, 6)
a_color_stats(0, 7)
@model.replace(1, 1, 1, 3, '')
assert_equal("aa\nbd\nee\nff\ngg\nhh\nii", @model.text)
! #assert_equal([4, 3, 2, 1, 0], @lexer.lru.used)
! #a_dirty(false, true, false, false, false)
! #a_right(0, nil, 1, 2, 3, 4)
end
end
--- 2083,2105 ----
a_right(0, 1, 2, 3, 4, 5, 6)
a_color_stats(0, 7)
+ assert_equal([6, 5, 4, 3, 2, 1, 0], @lexer.lru.used)
+ #p 'begin'
@model.replace(1, 1, 1, 3, '')
+ #p 'end'
assert_equal("aa\nbd\nee\nff\ngg\nhh\nii", @model.text)
! a_dirty(false, true, false, false, false)
! a_right(0, 3, 4, 5, 6)
! # line #1 and merges with #3 into line #1.. which becomes dirty
! # line #4..#6 gets displaced to #2..#4
! assert_equal([4, 3, 2, 0], @lexer.lru.used)
! @lexer.colorize(0)
! a_color_stats(1, 0)
! assert_equal([0, 4, 3, 2], @lexer.lru.used)
! @lexer.colorize(1)
! a_color_stats(0, 1)
! a_dirty(false, false, true, false, false)
! #assert_equal([1, 0, 4, 3, 2], @lexer.lru.used)
! @lexer.colorize(2)
! #a_color_stats(1, 0)
end
end
Index: core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v
retrieving revision 1.70.2.15
retrieving revision 1.70.2.16
diff -C2 -d -r1.70.2.15 -r1.70.2.16
*** core.rb 16 Feb 2005 07:19:51 -0000 1.70.2.15
--- core.rb 16 Feb 2005 20:50:39 -0000 1.70.2.16
***************
*** 1086,1092 ****
@lru.insert(sy, n) # displace all cached pens
else
@right_states.slice!(dy, -n)
@dirty_lines.slice!(dy, -n)
! @lru.remove(dy+n, -n) # displace all cached pens
end
info.y1.upto([sy, dy].min) {|i| dirty(i) }
--- 1086,1093 ----
@lru.insert(sy, n) # displace all cached pens
else
+ #p n, dy
@right_states.slice!(dy, -n)
@dirty_lines.slice!(dy, -n)
! @lru.remove(dy, -n) # displace all cached pens
end
info.y1.upto([sy, dy].min) {|i| dirty(i) }
From neoneye at rubyforge.org Wed Feb 16 16:23:17 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Wed Feb 16 16:23:18 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source core.rb
test_core.rb
Message-ID: <200502162123.j1GLNHdS023596@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv23544
Modified Files:
Tag: b04022005
core.rb test_core.rb
Log Message:
now remove works
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.67.2.17
retrieving revision 1.67.2.18
diff -C2 -d -r1.67.2.17 -r1.67.2.18
*** test_core.rb 16 Feb 2005 20:50:39 -0000 1.67.2.17
--- test_core.rb 16 Feb 2005 21:23:15 -0000 1.67.2.18
***************
*** 2096,2105 ****
a_color_stats(1, 0)
assert_equal([0, 4, 3, 2], @lexer.lru.used)
@lexer.colorize(1)
a_color_stats(0, 1)
! a_dirty(false, false, true, false, false)
! #assert_equal([1, 0, 4, 3, 2], @lexer.lru.used)
! @lexer.colorize(2)
! #a_color_stats(1, 0)
end
end
--- 2096,2107 ----
a_color_stats(1, 0)
assert_equal([0, 4, 3, 2], @lexer.lru.used)
+ @lexer.count = 3
@lexer.colorize(1)
a_color_stats(0, 1)
! a_right(0, 3, 4, 5, 6)
! a_dirty(false, false, false, false, false)
! assert_equal([1, 0, 4, 3, 2], @lexer.lru.used)
! 5.times {|y| @lexer.colorize(2+y) }
! a_color_stats(3, 2)
end
end
Index: core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/core.rb,v
retrieving revision 1.70.2.16
retrieving revision 1.70.2.17
diff -C2 -d -r1.70.2.16 -r1.70.2.17
*** core.rb 16 Feb 2005 20:50:39 -0000 1.70.2.16
--- core.rb 16 Feb 2005 21:23:15 -0000 1.70.2.17
***************
*** 1069,1072 ****
--- 1069,1073 ----
end
def dirty(y)
+ #puts "dirty #{y}" if $dbg
@dirty_lines[y] = true if y < @dirty_lines.size
@lru.delete(y)
***************
*** 1079,1082 ****
--- 1080,1084 ----
n = dy - sy
if n > 0
+ #puts "model_update: insert n=#{n}, dy=#{dy}" if $dbg
dirty(sy) # dirtify the line before splitting
n.times do
***************
*** 1086,1090 ****
@lru.insert(sy, n) # displace all cached pens
else
! #p n, dy
@right_states.slice!(dy, -n)
@dirty_lines.slice!(dy, -n)
--- 1088,1092 ----
@lru.insert(sy, n) # displace all cached pens
else
! #puts "model_update: removing n=#{n}, dy=#{dy}" if $dbg
@right_states.slice!(dy, -n)
@dirty_lines.slice!(dy, -n)
***************
*** 1100,1109 ****
if state != old
propagate = true
! #puts "propagate #{y}->#{y+1}, because #{state.inspect} is " +
! # "distinct from #{old.inspect}"
end
elsif y >= @right_states.size
propagate = true
! #puts "propagate #{y}->#{y+1}, because y >= size"
end
dirty(y)
--- 1102,1113 ----
if state != old
propagate = true
! #if $dbg
! # puts "propagate #{y}->#{y+1}, because #{state.inspect} is " +
! # "distinct from #{old.inspect}"
! #end
end
elsif y >= @right_states.size
propagate = true
! #puts "propagate #{y}->#{y+1}, because y >= size" if $dbg
end
dirty(y)
***************
*** 1112,1118 ****
@right_states[y] = state
@dirty_lines[y] = false
! #p @right_states, propagate
dirty(y+1) if propagate
! #p @right_states
end
def sync_states(number_of_states)
--- 1116,1122 ----
@right_states[y] = state
@dirty_lines[y] = false
! #puts "rs=#{@right_states.inspect} prop=#{propagate}" if $dbg
dirty(y+1) if propagate
! #puts "rs=#{@right_states.inspect}" if $dbg
end
def sync_states(number_of_states)
From neoneye at rubyforge.org Wed Feb 16 17:08:22 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Wed Feb 16 17:08:23 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source main_tui.rb
test_core.rb tui.c
Message-ID: <200502162208.j1GM8MdS026178@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv26173
Modified Files:
Tag: b04022005
main_tui.rb test_core.rb tui.c
Log Message:
added more colors
Index: main_tui.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v
retrieving revision 1.72.2.10
retrieving revision 1.72.2.11
diff -C2 -d -r1.72.2.10 -r1.72.2.11
*** main_tui.rb 7 Feb 2005 17:37:57 -0000 1.72.2.10
--- main_tui.rb 16 Feb 2005 22:08:20 -0000 1.72.2.11
***************
*** 40,47 ****
@pens = []
@colors = {
! :tab => 6,
! :keyword => 2,
! :punct => 2,
! :string => 4
}
@colors.default = 1
--- 40,50 ----
@pens = []
@colors = {
! :keyword => 2, :punct => 2, :number => 2, :symbol => 2,
! :string => 4, :string1 => 3,
! :regexp => 4, :regexp1 => 3,
! :literal => 4, :literal1 => 3,
! :heredoc => 4, :heredoc1 => 3,
! :tab => 6, :comment => 6, :mcomment => 6,
! :gvar => 10
}
@colors.default = 1
Index: test_core.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_core.rb,v
retrieving revision 1.67.2.18
retrieving revision 1.67.2.19
diff -C2 -d -r1.67.2.18 -r1.67.2.19
*** test_core.rb 16 Feb 2005 21:23:15 -0000 1.67.2.18
--- test_core.rb 16 Feb 2005 22:08:20 -0000 1.67.2.19
***************
*** 2084,2090 ****
a_color_stats(0, 7)
assert_equal([6, 5, 4, 3, 2, 1, 0], @lexer.lru.used)
- #p 'begin'
@model.replace(1, 1, 1, 3, '')
- #p 'end'
assert_equal("aa\nbd\nee\nff\ngg\nhh\nii", @model.text)
a_dirty(false, true, false, false, false)
--- 2084,2088 ----
Index: tui.c
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/tui.c,v
retrieving revision 1.3
retrieving revision 1.3.2.1
diff -C2 -d -r1.3 -r1.3.2.1
*** tui.c 2 Feb 2005 22:08:15 -0000 1.3
--- tui.c 16 Feb 2005 22:08:20 -0000 1.3.2.1
***************
*** 48,51 ****
--- 48,52 ----
init_pair(8, COLOR_BLUE, COLOR_BLUE); /* tabs */
init_pair(9, COLOR_BLACK, COLOR_RED); /* error */
+ init_pair(10, COLOR_RED, COLOR_BLUE); /* error */
color_set(1, 0);
From neoneye at rubyforge.org Wed Feb 16 17:18:30 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Wed Feb 16 17:18:31 2005
Subject: [Aeditor-commit] projects/documents/homepage/aeditor_shots 058.png
Message-ID: <200502162218.j1GMIUdS026328@rubyforge.org>
Update of /var/cvs/aeditor/projects/documents/homepage/aeditor_shots
In directory rubyforge.org:/tmp/cvs-serv26322
Added Files:
058.png
Log Message:
shot of today
--- NEW FILE: 058.png ---
(This appears to be a binary file; contents omitted.)
From neoneye at rubyforge.org Wed Feb 16 17:23:19 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Wed Feb 16 17:23:20 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES TODO
Message-ID: <200502162223.j1GMNJdS026423@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv26405
Modified Files:
Tag: b04022005
CHANGES TODO
Log Message:
im ready to merge this branch.
Index: CHANGES
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v
retrieving revision 1.44.2.6
retrieving revision 1.44.2.7
diff -C2 -d -r1.44.2.6 -r1.44.2.7
*** CHANGES 15 Feb 2005 22:25:43 -0000 1.44.2.6
--- CHANGES 16 Feb 2005 22:23:17 -0000 1.44.2.7
***************
*** 2,5 ****
--- 2,7 ----
* finally got the #test_typical_insert1 testcase working, so that
I can be sure that insert works relatively ok.
+ * now #test_typical_remove1 is working.
+ * added nicer colors.
15-02-2005 Neoneye
Index: TODO
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v
retrieving revision 1.41.2.7
retrieving revision 1.41.2.8
diff -C2 -d -r1.41.2.7 -r1.41.2.8
*** TODO 15 Feb 2005 22:56:08 -0000 1.41.2.7
--- TODO 16 Feb 2005 22:23:17 -0000 1.41.2.8
***************
*** 1,8 ****
render with colors.
- * fix bug in caching.. so it will invalidate the right lines.
- I suspects its the model_update when removing lines.
- * propagation occurs.. but is rendered wrong.
- @lexer.set_right_state should compare the state
- of the current line.. rather than the following line.
* delayed rendering looks ugly, please render it immediately.
* rubylexer should deal with unicode glyphs.
--- 1,3 ----
***************
*** 25,28 ****
--- 20,25 ----
* search dialog (ala editpad).
* mouse support.
+ * scrolling to the bottom of core.rb', I can see that the line-number
+ has been rendered wrong (maybe xterm/ncurses issue?).
From neoneye at rubyforge.org Wed Feb 16 17:30:05 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Wed Feb 16 17:30:06 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES README
Message-ID: <200502162230.j1GMU5dS026667@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv26617
Modified Files:
CHANGES README
Log Message:
lets release version 2.4
Index: README
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/README,v
retrieving revision 1.14
retrieving revision 1.15
diff -C2 -d -r1.14 -r1.15
*** README 2 Feb 2005 22:23:37 -0000 1.14
--- README 16 Feb 2005 22:30:02 -0000 1.15
***************
*** 1,11 ****
! AEDITOR 2.3
===========
! This is a new incarnation of AEditor, still barebones,
! slow, still very rough. No syntax coloring, no multibuffer,
! no advanced edit strategies (it has a new datastructure that rocks).
! No undo/redo. If we don't consider the code for wrapping libncursesw,
! then the core of the editor only takes up 1500 lines of ruby code.
! This README is written with this editor.
homepage:
--- 1,10 ----
! AEDITOR 2.4
===========
! This is a new incarnation of AEditor, still barebones, slow, still
! very rough, no multibuffer, no undo/redo, no advanced edit strategies
! (it has a new datastructure that rocks). If we don't consider the
! code for wrapping libncursesw, then the core of the editor only takes
! up 1500 lines of ruby code. This README is written with this editor.
homepage:
***************
*** 14,18 ****
screenshot:
! http://aeditor.rubyforge.org/aeditor_shots/055.png
--- 13,17 ----
screenshot:
! http://aeditor.rubyforge.org/aeditor_shots/058.png
***************
*** 28,31 ****
--- 27,31 ----
selections
unicode glyphs
+ syntax coloring
Index: CHANGES
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v
retrieving revision 1.45
retrieving revision 1.46
diff -C2 -d -r1.45 -r1.46
*** CHANGES 16 Feb 2005 22:26:11 -0000 1.45
--- CHANGES 16 Feb 2005 22:30:02 -0000 1.46
***************
*** 1,3 ****
--- 1,4 ----
16-02-2005 Neoneye
+ * released version 2.4 (turbo release).
* finally got the #test_typical_insert1 testcase working, so that
I can be sure that insert works relatively ok.
From neoneye at rubyforge.org Wed Feb 16 18:16:05 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Wed Feb 16 18:16:07 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source lexer.rb
Message-ID: <200502162316.j1GNG5dS030234@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv30224
Modified Files:
lexer.rb
Log Message:
jpedrosa pointed out that it didn't work at his place.. because of old
require statement.
Index: lexer.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/lexer.rb,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** lexer.rb 16 Feb 2005 22:26:11 -0000 1.2
--- lexer.rb 16 Feb 2005 23:16:03 -0000 1.3
***************
*** 304,309 ****
end # module LexerCplusplus
- require 'aeditor/string'
-
module LexerRuby
--- 304,307 ----
From neoneye at rubyforge.org Wed Feb 16 18:29:16 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Wed Feb 16 18:29:17 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source README
Message-ID: <200502162329.j1GNTGdS030574@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv30546
Modified Files:
README
Log Message:
improved installation procedure
Index: README
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/README,v
retrieving revision 1.15
retrieving revision 1.16
diff -C2 -d -r1.15 -r1.16
*** README 16 Feb 2005 22:30:02 -0000 1.15
--- README 16 Feb 2005 23:29:13 -0000 1.16
***************
*** 105,114 ****
prompt> make
- now you can run aeditor
! prompt> ruby main_tui.rb
--- 105,123 ----
prompt> make
! maybe you need to set the LANG envvar
+ prompt> setenv LANG en_DK.UTF-8
+ maybe you need to install a unicode font too
+ you can find a unicode font here:
+ http://www.cl.cam.ac.uk/~mgk25/ucs-fonts.html
+
+
+ now you can run aeditor
+
+ prompt> ruby main_tui.rb
+
From neoneye at rubyforge.org Sat Feb 19 08:06:11 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Sat Feb 19 08:06:12 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source TODO
Message-ID: <200502191306.j1JD6BdS003587@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv3576
Modified Files:
TODO
Log Message:
rescheduled my todos
Index: TODO
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v
retrieving revision 1.42
retrieving revision 1.43
diff -C2 -d -r1.42 -r1.43
*** TODO 16 Feb 2005 22:26:11 -0000 1.42
--- TODO 19 Feb 2005 13:06:09 -0000 1.43
***************
*** 1,6 ****
render with colors.
* delayed rendering looks ugly, please render it immediately.
! * rubylexer should deal with unicode glyphs.
! * choose a lexer depending on the file suffix.
--- 1,28 ----
+ multibuffer support.
+
+
+ integrate with ruby's debug.rb.
+
+
+ dotfile.
+
+
+ choose a lexer depending on file suffix.
+
+
+ the imported lexer must be adapted to use unicode.
+ right now it only deals with ascii. Lets ensure it outputs the
+ same number of pens as the number of glyps it got as input.
+
+
+ user-interface for search dialog (ala editpad).
+
+
+ user-interface for replace dialog (ala editpad).
+
+
render with colors.
* delayed rendering looks ugly, please render it immediately.
! * lex ahead.. so that scroll up and down goes faster.
***************
*** 17,22 ****
user-interface:
* F1 should provide help.
- * search dialog (ala editpad).
* mouse support.
* scrolling to the bottom of core.rb', I can see that the line-number
--- 39,45 ----
user-interface:
+ * file requester.
+ * pulldown menu.
* F1 should provide help.
* mouse support.
* scrolling to the bottom of core.rb', I can see that the line-number
***************
*** 26,30 ****
more edit-operations:
* smart end (toggles between lineend and endspace).
- * multibuffer.
* search, replace.
* match parenthesis.
--- 49,52 ----
***************
*** 39,42 ****
--- 61,66 ----
* prefix all edit operations with edit_.
* prefix all move operations with move_.
+ * the lexer internally builds pairs of text and pen, this is
+ inefficient, instead it should use an array of integers.
From neoneye at rubyforge.org Sat Feb 19 08:24:47 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Sat Feb 19 08:24:48 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source TODO
main_tui.rb
Message-ID: <200502191324.j1JDOldS003926@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv3913
Modified Files:
TODO main_tui.rb
Log Message:
added placeholder for buffer-cycle.
recalled that there was a problem with selectionmode sync.
Index: main_tui.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v
retrieving revision 1.73
retrieving revision 1.74
diff -C2 -d -r1.73 -r1.74
*** main_tui.rb 16 Feb 2005 22:26:11 -0000 1.73
--- main_tui.rb 19 Feb 2005 13:24:45 -0000 1.74
***************
*** 154,157 ****
--- 154,160 ----
end
end
+ def cycle_buffer
+ $logger.info "cycle buffer"
+ end
def render_cache_clear
@render_info = {}
***************
*** 289,296 ****
when 265
@view.insert([0x301c].pack("U*"))
! when 270
@view.move_to_lineend
! when 271
@view.move_to_linebegin
when 21 # ctrl-u use clipboard as find pattern
@view.search_init(@selection_text)
--- 292,301 ----
when 265
@view.insert([0x301c].pack("U*"))
! when 270 # End
@view.move_to_lineend
! when 271 # Home
@view.move_to_linebegin
+ when 276 # F12
+ cycle_buffer
when 21 # ctrl-u use clipboard as find pattern
@view.search_init(@selection_text)
Index: TODO
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v
retrieving revision 1.43
retrieving revision 1.44
diff -C2 -d -r1.43 -r1.44
*** TODO 19 Feb 2005 13:06:09 -0000 1.43
--- TODO 19 Feb 2005 13:24:45 -0000 1.44
***************
*** 22,25 ****
--- 22,30 ----
+ [bug] sync selection mode between view and main. Some operations
+ causes main's selection mode to get out of sync with View. This
+ behavior is weird.
+
+
render with colors.
* delayed rendering looks ugly, please render it immediately.
From neoneye at rubyforge.org Sat Feb 19 09:10:33 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Sat Feb 19 09:10:34 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source main_tui.rb
Message-ID: <200502191410.j1JEAXdS006595@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv6579
Modified Files:
main_tui.rb
Log Message:
early code for switching buffers
Index: main_tui.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v
retrieving revision 1.74
retrieving revision 1.75
diff -C2 -d -r1.74 -r1.75
*** main_tui.rb 19 Feb 2005 13:24:45 -0000 1.74
--- main_tui.rb 19 Feb 2005 14:10:31 -0000 1.75
***************
*** 60,67 ****
end
! class MainTUI < AEditor::Canvas::Base
! NEONEYE = [0xff2e, 0xff25, 0xff2f,
! 0xff2e, 0xff25, 0xff39, 0xff25].pack("U*")
class RenderInfo
def initialize(
--- 60,125 ----
end
! class Buffer
! def initialize(text, filename)
! @filename = filename
+ @model = AEditor::Model::Caretaker.new
+ @model.load(text)
+
+ @view = AEditor::View::Caretaker.new(@model)
+ #@view.canvas, self.view = self, @view
+ @model.attach(@view)
+
+ lexer = LexRuby.new(@model)
+ @view.lexer = lexer
+ @model.attach(lexer)
+ end
+ attr_reader :view, :model, :filename
+
+ def save_file
+ $logger.info "outputting to file, filename=#{@filename.inspect}"
+ File.open(@filename, "w+") do |f|
+ f.write(@model.text)
+ end
+ end
+ end
+
+ class Buffers
+ def initialize
+ @buffers = []
+ end
+ def open_file(filename)
+ raise TypeError unless filename.kind_of?(String)
+ buf = Buffer.new(IO.read(filename), filename)
+ @buffers << buf
+ buf
+ rescue Errno::EACCES, Errno::ENOENT => e
+ $logger.info "cannot access file, filename=#{filename.inspect}"
+ raise ArgumentError, 'cannot access file'
+ end
+ def open_dummy
+ neoneye = [0xff2e, 0xff25, 0xff2f,
+ 0xff2e, 0xff25, 0xff39, 0xff25].pack("U*")
+ str = "Welcome to AEditor-2.0\n"
+ str += "written by: " + neoneye + "\n"
+ str += "homepage: http://aeditor.rubyforge.org/\n\n\n"
+ str += "features:\n"
+ str += " * unicode (UTF-8 encoding).\n"
+ str += " * renders halfwidth, fullwidth and tabs.\n"
+ str += " * basic editing.\n"
+ str += " * written in less than 1000 lines."
+ buf = Buffer.new(str, 'noname00.txt')
+ @buffers << buf
+ buf
+ end
+ def size
+ @buffers.size
+ end
+ def [](index)
+ @buffers[index]
+ end
+ end
+
+ class MainTUI < AEditor::Canvas::Base
class RenderInfo
def initialize(
***************
*** 94,132 ****
end
end
!
def initialize(canvas, filename)
super()
@dispatch2 = nil
@canvas = canvas
! @model = AEditor::Model::Caretaker.new
! if filename.kind_of?(String)
! begin
! @model.load(IO.read(filename))
! @filename = filename
! rescue Errno::EACCES, Errno::ENOENT => e
! $logger.info "cannot access file, filename=#{filename.inspect}"
! end
! end
! unless @filename
! str = "Welcome to AEditor-2.0\n"
! str += "written by: " + NEONEYE + "\n"
! str += "homepage: http://aeditor.rubyforge.org/\n\n\n"
! str += "features:\n"
! str += " * unicode (UTF-8 encoding).\n"
! str += " * renders halfwidth, fullwidth and tabs.\n"
! str += " * basic editing.\n"
! str += " * written in less than 1000 lines."
! @filename = 'noname00.txt'
! @model.load(str)
end
! @view = AEditor::View::Caretaker.new(@model)
! @view.canvas, self.view = self, @view
! @model.attach(@view)
- @lexer = LexRuby.new(@model)
- @view.lexer = @lexer
- @model.attach(@lexer)
- #@lexer = MockLexer.new
- #@view.lexer = @lexer
@tabsize = 4
@red_column = 70
--- 152,171 ----
end
end
!
def initialize(canvas, filename)
super()
@dispatch2 = nil
@canvas = canvas
!
! @buffers = Buffers.new
! if filename
! @buffers.open_file(filename)
! else
! @buffers.open_dummy
end
! @buffer_index = -1
! @buffer = nil
! switch_to_buffer(0)
@tabsize = 4
@red_column = 70
***************
*** 154,159 ****
--- 193,209 ----
end
end
+ def switch_to_buffer(index)
+ $logger.info "switch to buffer ##{index} from buffer ##{@buffer_index}"
+ return if index == @buffer_index
+ return if index >= @buffers.size
+ @buffer_index = index
+ @buffer = @buffers[index]
+ @view = @buffer.view
+ @model = @buffer.model
+ @view.canvas, self.view = self, @view
+ end
def cycle_buffer
$logger.info "cycle buffer"
+ switch_to_buffer(@buffer_index + 1 % @buffers.size)
end
def render_cache_clear
***************
*** 251,258 ****
case event
when 15
! $logger.info "outputting to file, filename=#{@filename.inspect}"
! File.open(@filename, "w+") do |f|
! f.write(@model.text)
! end
when 6
install(:dispatch_fold)
--- 301,305 ----
case event
when 15
! @buffer.save_file
when 6
install(:dispatch_fold)
From neoneye at rubyforge.org Sat Feb 19 10:01:35 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Sat Feb 19 10:01:36 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source CHANGES TODO
main_tui.rb
Message-ID: <200502191501.j1JF1ZdS009279@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv9272
Modified Files:
CHANGES TODO main_tui.rb
Log Message:
now multibuffer is working
Index: main_tui.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v
retrieving revision 1.75
retrieving revision 1.76
diff -C2 -d -r1.75 -r1.76
*** main_tui.rb 19 Feb 2005 14:10:31 -0000 1.75
--- main_tui.rb 19 Feb 2005 15:01:32 -0000 1.76
***************
*** 153,157 ****
end
! def initialize(canvas, filename)
super()
@dispatch2 = nil
--- 153,157 ----
end
! def initialize(canvas, filenames)
super()
@dispatch2 = nil
***************
*** 159,170 ****
@buffers = Buffers.new
! if filename
! @buffers.open_file(filename)
! else
@buffers.open_dummy
end
@buffer_index = -1
@buffer = nil
- switch_to_buffer(0)
@tabsize = 4
--- 159,171 ----
@buffers = Buffers.new
! if filenames.empty?
@buffers.open_dummy
+ else
+ filenames.each do |filename|
+ @buffers.open_file(filename)
+ end
end
@buffer_index = -1
@buffer = nil
@tabsize = 4
***************
*** 179,191 ****
@render_info = {}
end
! def self.run(filename)
require 'ncursesw'
#dump_memory_info
CursesCanvas.open do |c|
oldtitle = c.get_title || "AEditor has exited"
- name = File.basename(filename || '')
- c.set_title("#{name} - AEditor")
begin
! self.new(c, filename).event_loop
ensure
c.set_title(oldtitle)
--- 180,190 ----
@render_info = {}
end
! def self.run(filenames)
require 'ncursesw'
#dump_memory_info
CursesCanvas.open do |c|
oldtitle = c.get_title || "AEditor has exited"
begin
! self.new(c, filenames).event_loop
ensure
c.set_title(oldtitle)
***************
*** 202,209 ****
@model = @buffer.model
@view.canvas, self.view = self, @view
end
def cycle_buffer
$logger.info "cycle buffer"
! switch_to_buffer(@buffer_index + 1 % @buffers.size)
end
def render_cache_clear
--- 201,215 ----
@model = @buffer.model
@view.canvas, self.view = self, @view
+ name = File.basename(@buffer.filename || '')
+ @canvas.set_title("[#{index}] #{name} - AEditor")
+ @view.resize(width, height)
+ @canvas.clear
+ @render_info = {}
+ #@view.update_cursor
+ @view.update
end
def cycle_buffer
$logger.info "cycle buffer"
! switch_to_buffer((@buffer_index + 1) % @buffers.size)
end
def render_cache_clear
***************
*** 211,217 ****
end
def event_loop
! @view.resize(width, height)
#dump_memory_info("before update")
! @view.update
#dump_memory_info("after update")
#dump_statistics
--- 217,224 ----
end
def event_loop
! switch_to_buffer(0)
! #@view.resize(width, height)
#dump_memory_info("before update")
! #@view.update
#dump_memory_info("after update")
#dump_statistics
***************
*** 595,599 ****
$logger.info "program begin."
#dump_memory_info
! MainTUI.run(ARGV.empty? ? nil : ARGV[0])
rescue Exception => e
bt = e.backtrace.map{|s|
--- 602,606 ----
$logger.info "program begin."
#dump_memory_info
! MainTUI.run(ARGV)
rescue Exception => e
bt = e.backtrace.map{|s|
Index: CHANGES
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v
retrieving revision 1.46
retrieving revision 1.47
diff -C2 -d -r1.46 -r1.47
*** CHANGES 16 Feb 2005 22:30:02 -0000 1.46
--- CHANGES 19 Feb 2005 15:01:32 -0000 1.47
***************
*** 1,2 ****
--- 1,5 ----
+ 19-02-2005 Neoneye
+ * multibuffer is now working.
+
16-02-2005 Neoneye
* released version 2.4 (turbo release).
Index: TODO
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/TODO,v
retrieving revision 1.44
retrieving revision 1.45
diff -C2 -d -r1.44 -r1.45
*** TODO 19 Feb 2005 13:24:45 -0000 1.44
--- TODO 19 Feb 2005 15:01:32 -0000 1.45
***************
*** 1,5 ****
- multibuffer support.
-
-
integrate with ruby's debug.rb.
--- 1,2 ----
From neoneye at rubyforge.org Sat Feb 19 10:04:59 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Sat Feb 19 10:05:01 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source README
Message-ID: <200502191504.j1JF4xdS009365@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv9338
Modified Files:
README
Log Message:
multibuffering now works
Index: README
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/README,v
retrieving revision 1.16
retrieving revision 1.17
diff -C2 -d -r1.16 -r1.17
*** README 16 Feb 2005 23:29:13 -0000 1.16
--- README 19 Feb 2005 15:04:57 -0000 1.17
***************
*** 3,7 ****
This is a new incarnation of AEditor, still barebones, slow, still
! very rough, no multibuffer, no undo/redo, no advanced edit strategies
(it has a new datastructure that rocks). If we don't consider the
code for wrapping libncursesw, then the core of the editor only takes
--- 3,7 ----
This is a new incarnation of AEditor, still barebones, slow, still
! very rough, no undo/redo, no advanced edit strategies
(it has a new datastructure that rocks). If we don't consider the
code for wrapping libncursesw, then the core of the editor only takes
***************
*** 28,31 ****
--- 28,32 ----
unicode glyphs
syntax coloring
+ multibuffer
***************
*** 61,64 ****
--- 62,66 ----
ctrl v ......... toggle selection mode
ctrl p ......... paste from clipboard
+ F12 ............ cycle to next buffer
From neoneye at rubyforge.org Sat Feb 19 13:32:27 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Sat Feb 19 13:32:27 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source main_tui.rb
Message-ID: <200502191832.j1JIWRdS020098@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv20088
Modified Files:
main_tui.rb
Log Message:
preparations for a search dialog
Index: main_tui.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/main_tui.rb,v
retrieving revision 1.76
retrieving revision 1.77
diff -C2 -d -r1.76 -r1.77
*** main_tui.rb 19 Feb 2005 15:01:32 -0000 1.76
--- main_tui.rb 19 Feb 2005 18:32:25 -0000 1.77
***************
*** 192,195 ****
--- 192,198 ----
end
end
+ def render_cache_clear
+ @render_info = {}
+ end
def switch_to_buffer(index)
$logger.info "switch to buffer ##{index} from buffer ##{@buffer_index}"
***************
*** 205,209 ****
@view.resize(width, height)
@canvas.clear
! @render_info = {}
#@view.update_cursor
@view.update
--- 208,212 ----
@view.resize(width, height)
@canvas.clear
! render_cache_clear
#@view.update_cursor
@view.update
***************
*** 213,218 ****
switch_to_buffer((@buffer_index + 1) % @buffers.size)
end
! def render_cache_clear
! @render_info = {}
end
def event_loop
--- 216,257 ----
switch_to_buffer((@buffer_index + 1) % @buffers.size)
end
! def dialog_search
! $logger.info "show search dialog"
!
! ary = []
!
! g = [0x2500]*@canvas.width
! g[5] = 0x2534
! g[6 + @red_column] = 0x2534
! p = [6] * g.size
! ary << [g, p]
!
! g = " search [^\\s*def\\b________________________]".unpack('U*')
! p = [2] * g.size
! 9.times {|i| p[14+i] = 1}
! ary << [g, p]
!
! keys = ["F1 regex", "F2 case", "F3 cursor", "F4 word", "F5 down"]
! g = keys.join(' ').unpack('U*')
! p = []
! keys.each_with_index do |txt, i|
! p += [2] if i != 0
! p += [3] * txt.size
! end
! ary << [[32]*6 + g, [1]*6 + p]
!
! ary.each_with_index do |(glyphs, pens), i|
! while glyphs.size < @canvas.width
! glyphs << 32
! pens << 1
! end
! @canvas.render_row2(
! @canvas.height - ary.size + i,
! glyphs,
! pens,
! 0,
! glyphs.size
! )
! end
end
def event_loop
***************
*** 358,361 ****
--- 397,402 ----
when 277 # Shift-F3
@view.search_up
+ when 268 # F4 search
+ dialog_search
when 266
dump_statistics
From neoneye at rubyforge.org Sat Feb 19 13:43:36 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Sat Feb 19 13:43:37 2005
Subject: [Aeditor-commit] projects/documents/homepage/aeditor_shots 059.png
Message-ID: <200502191843.j1JIhadS020328@rubyforge.org>
Update of /var/cvs/aeditor/projects/documents/homepage/aeditor_shots
In directory rubyforge.org:/tmp/cvs-serv20319
Added Files:
059.png
Log Message:
I have made a prototype of how the UI for the search dialog could be like.
--- NEW FILE: 059.png ---
(This appears to be a binary file; contents omitted.)
From neoneye at rubyforge.org Sun Feb 20 10:33:00 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Sun Feb 20 10:33:01 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source
test_lineedit.rb
Message-ID: <200502201533.j1KFX0dS009303@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv9294
Added Files:
test_lineedit.rb
Log Message:
very primitive lineedit class added... so that I can begin coding some
of the UI.
--- NEW FILE: test_lineedit.rb ---
require 'test/unit'
class LineEdit
def initialize
@text_left = ''
@text_right = ''
end
attr_reader :text_left, :text_right
def text
@text_left + @text_right
end
def insert(text)
raise TypeError unless text.kind_of?(String)
text.unpack('U*') # ensure its valid UTF-8
@text_left += text
end
def erase_left
m = @text_left.match(/.\z/u)
return nil unless m
b1, b2 = m.begin(0), m.end(0)
@text_left.slice!(b1, b2 - b1)
end
def move_left
s = erase_left
@text_right = s + @text_right if s
end
def move_home
@text_right = @text_left + @text_right
@text_left = ''
end
def move_end
@text_left += @text_right
@text_right = ''
end
def erase_right
m = @text_right.match(/\A./u)
return nil unless m
b1, b2 = m.begin(0), m.end(0)
@text_right.slice!(b1, b2 - b1)
end
def move_right
s = erase_right
@text_left += s if s
end
end
class TestLineEdit < Test::Unit::TestCase
def setup
@edit = LineEdit.new
end
def test_insert_typical1
@edit.insert('a')
assert_equal('a', @edit.text)
@edit.insert('b')
assert_equal('ab', @edit.text)
end
def test_insert_error1
assert_raise(TypeError) { @edit.insert(5) }
end
def test_insert_utf8_error1
assert_raise(ArgumentError) { @edit.insert("\xff") }
end
def test_erase_left_typical1
@edit.insert('abc')
assert_equal('c', @edit.erase_left)
assert_equal('ab', @edit.text)
assert_equal('b', @edit.erase_left)
assert_equal('a', @edit.text)
assert_equal('a', @edit.erase_left)
assert_equal('', @edit.text)
assert_equal(nil, @edit.erase_left)
assert_equal('', @edit.text)
end
def test_erase_left_typical2
@edit.insert("\341\210\264\342\215\205")
assert_equal("\342\215\205", @edit.erase_left)
assert_equal("\341\210\264", @edit.text)
assert_equal("\341\210\264", @edit.erase_left)
assert_equal('', @edit.text)
end
def lr
[@edit.text_left, @edit.text_right]
end
def test_move_left_typical1
@edit.insert('abc')
@edit.move_left
assert_equal(%w(ab c), lr)
@edit.move_left
assert_equal(%w(a bc), lr)
@edit.move_left
assert_equal(['', 'abc'], lr)
end
def test_move_home_end1
@edit.insert('abc')
@edit.move_home
assert_equal(['', 'abc'], lr)
@edit.move_end
assert_equal(['abc', ''], lr)
end
def test_move_right_typical1
@edit.insert('abc')
@edit.move_home
@edit.move_right
assert_equal(%w(a bc), lr)
end
end
From neoneye at rubyforge.org Sun Feb 20 10:42:48 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Sun Feb 20 10:42:49 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source lineedit.rb
CHANGES test_lineedit.rb
Message-ID: <200502201542.j1KFgmdS009423@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv9417
Modified Files:
CHANGES test_lineedit.rb
Added Files:
lineedit.rb
Log Message:
splitted lineedit class out from testfile
Index: test_lineedit.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/test_lineedit.rb,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** test_lineedit.rb 20 Feb 2005 15:32:58 -0000 1.1
--- test_lineedit.rb 20 Feb 2005 15:42:46 -0000 1.2
***************
*** 1,47 ****
require 'test/unit'
!
! class LineEdit
! def initialize
! @text_left = ''
! @text_right = ''
! end
! attr_reader :text_left, :text_right
! def text
! @text_left + @text_right
! end
! def insert(text)
! raise TypeError unless text.kind_of?(String)
! text.unpack('U*') # ensure its valid UTF-8
! @text_left += text
! end
! def erase_left
! m = @text_left.match(/.\z/u)
! return nil unless m
! b1, b2 = m.begin(0), m.end(0)
! @text_left.slice!(b1, b2 - b1)
! end
! def move_left
! s = erase_left
! @text_right = s + @text_right if s
! end
! def move_home
! @text_right = @text_left + @text_right
! @text_left = ''
! end
! def move_end
! @text_left += @text_right
! @text_right = ''
! end
! def erase_right
! m = @text_right.match(/\A./u)
! return nil unless m
! b1, b2 = m.begin(0), m.end(0)
! @text_right.slice!(b1, b2 - b1)
! end
! def move_right
! s = erase_right
! @text_left += s if s
! end
! end
class TestLineEdit < Test::Unit::TestCase
--- 1,4 ----
require 'test/unit'
! require 'lineedit'
class TestLineEdit < Test::Unit::TestCase
Index: CHANGES
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/CHANGES,v
retrieving revision 1.47
retrieving revision 1.48
diff -C2 -d -r1.47 -r1.48
*** CHANGES 19 Feb 2005 15:01:32 -0000 1.47
--- CHANGES 20 Feb 2005 15:42:46 -0000 1.48
***************
*** 1,2 ****
--- 1,5 ----
+ 20-02-2005 Neoneye
+ * LineEdit class added.
+
19-02-2005 Neoneye
* multibuffer is now working.
--- NEW FILE: lineedit.rb ---
class LineEdit
def initialize
@text_left = ''
@text_right = ''
end
attr_reader :text_left, :text_right
def text
@text_left + @text_right
end
def insert(text)
raise TypeError unless text.kind_of?(String)
text.unpack('U*') # ensure its valid UTF-8
@text_left += text
end
def erase_left
m = @text_left.match(/.\z/u)
return nil unless m
b1, b2 = m.begin(0), m.end(0)
@text_left.slice!(b1, b2 - b1)
end
def move_left
s = erase_left
@text_right = s + @text_right if s
end
def move_home
@text_right = @text_left + @text_right
@text_left = ''
end
def move_end
@text_left += @text_right
@text_right = ''
end
def erase_right
m = @text_right.match(/\A./u)
return nil unless m
b1, b2 = m.begin(0), m.end(0)
@text_right.slice!(b1, b2 - b1)
end
def move_right
s = erase_right
@text_left += s if s
end
end
From neoneye at rubyforge.org Fri Feb 25 13:21:45 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Fri Feb 25 13:21:46 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source ncursesw.rb
Message-ID: <200502251821.j1PILjdS024137@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv24102
Modified Files:
ncursesw.rb
Log Message:
I have just gotten a Mac Mini, and I wanted to try out aeditor.
I realized that the LANG environmentvariable wasn't set, so that I got
a nil exception. This prevents accessing the nil value.
Index: ncursesw.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/ncursesw.rb,v
retrieving revision 1.24
retrieving revision 1.25
diff -C2 -d -r1.24 -r1.25
*** ncursesw.rb 2 Feb 2005 18:24:41 -0000 1.24
--- ncursesw.rb 25 Feb 2005 18:21:43 -0000 1.25
***************
*** 1,5 ****
lang = ENV['LANG']
! unless lang.match(/[a-z]{2}_[A-Z]{2}\.UTF-8/)
! puts "the LANG environment variable is not correct"
exit
end
--- 1,5 ----
lang = ENV['LANG']
! if lang == nil or lang.match(/[a-z]{2}_[A-Z]{2}\.UTF-8/) == nil
! $logger.error "the LANG environment variable is not correct"
exit
end
***************
*** 174,176 ****
c.getch
end
! end
\ No newline at end of file
--- 174,176 ----
c.getch
end
! end
From neoneye at rubyforge.org Sat Feb 26 12:39:21 2005
From: neoneye at rubyforge.org (neoneye@rubyforge.org)
Date: Sat Feb 26 12:39:22 2005
Subject: [Aeditor-commit] projects/experimental/buffer2/source ncursesw.rb
README
Message-ID: <200502261739.j1QHdLdS013536@rubyforge.org>
Update of /var/cvs/aeditor/projects/experimental/buffer2/source
In directory rubyforge.org:/tmp/cvs-serv13523
Modified Files:
ncursesw.rb README
Log Message:
added check for if the TERM variable is set. Otherwise the Tui constructor
returns false, and the log contains a message saying.. could not init.
Its better to tell what the real problem is.
Index: README
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/README,v
retrieving revision 1.17
retrieving revision 1.18
diff -C2 -d -r1.17 -r1.18
*** README 19 Feb 2005 15:04:57 -0000 1.17
--- README 26 Feb 2005 17:39:19 -0000 1.18
***************
*** 109,115 ****
maybe you need to set the LANG envvar
-
prompt> setenv LANG en_DK.UTF-8
maybe you need to install a unicode font too
--- 109,116 ----
maybe you need to set the LANG envvar
prompt> setenv LANG en_DK.UTF-8
+ maybe you need to set the TERM envvar
+ prompt> setenv TERM xterm-color
maybe you need to install a unicode font too
***************
*** 124,126 ****
! // END
\ No newline at end of file
--- 125,127 ----
! // END
Index: ncursesw.rb
===================================================================
RCS file: /var/cvs/aeditor/projects/experimental/buffer2/source/ncursesw.rb,v
retrieving revision 1.25
retrieving revision 1.26
diff -C2 -d -r1.25 -r1.26
*** ncursesw.rb 25 Feb 2005 18:21:43 -0000 1.25
--- ncursesw.rb 26 Feb 2005 17:39:19 -0000 1.26
***************
*** 5,8 ****
--- 5,14 ----
end
+ term = ENV['TERM']
+ if term == nil or term.match(/xterm-color/) == nil
+ $logger.error "the TERM environment variable is not correct"
+ exit
+ end
+
require 'Tui.so'