updated for version 7.0f05
diff --git a/src/edit.c b/src/edit.c
index 296e915..90b3b69 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -925,6 +925,15 @@
 	    if (echeck_abbr(Ctrl_O + ABBR_OFF))
 		break;
 	    ins_ctrl_o();
+
+#ifdef FEAT_VIRTUALEDIT
+	    /* don't move the cursor left when 'virtualedit' has "onemore". */
+	    if (ve_flags & VE_ONEMORE)
+	    {
+		ins_at_eol = FALSE;
+		nomove = TRUE;
+	    }
+#endif
 	    count = 0;
 	    goto doESCkey;
 
diff --git a/src/misc2.c b/src/misc2.c
index a9f8fef..6346e3f 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -1085,7 +1085,8 @@
     reset_last_sourcing();
 
 #ifdef FEAT_WINDOWS
-    vim_free(first_tabpage);
+    free_tabpage(first_tabpage);
+    first_tabpage = NULL;
 #endif
 
 # ifdef UNIX
diff --git a/src/proto/getchar.pro b/src/proto/getchar.pro
index e504a95..7183eaf 100644
--- a/src/proto/getchar.pro
+++ b/src/proto/getchar.pro
@@ -21,6 +21,7 @@
 int start_redo_ins __ARGS((void));
 void stop_redo_ins __ARGS((void));
 int ins_typebuf __ARGS((char_u *str, int noremap, int offset, int nottyped, int silent));
+void ins_char_typebuf __ARGS((int c));
 int typebuf_changed __ARGS((int tb_change_cnt));
 int typebuf_typed __ARGS((void));
 int typebuf_maplen __ARGS((void));
diff --git a/src/proto/window.pro b/src/proto/window.pro
index 5c00fbb..45a90b8 100644
--- a/src/proto/window.pro
+++ b/src/proto/window.pro
@@ -1,61 +1,62 @@
 /* window.c */
-extern void do_window __ARGS((int nchar, long Prenum, int xchar));
-extern int win_split __ARGS((int size, int flags));
-extern int win_valid __ARGS((win_T *win));
-extern int win_count __ARGS((void));
-extern int make_windows __ARGS((int count, int vertical));
-extern void win_move_after __ARGS((win_T *win1, win_T *win2));
-extern void win_equal __ARGS((win_T *next_curwin, int current, int dir));
-extern void close_windows __ARGS((buf_T *buf, int keep_curwin));
-extern void win_close __ARGS((win_T *win, int free_buf));
-extern void win_close_othertab __ARGS((win_T *win, int free_buf, tabpage_T *tp));
-extern void win_free_all __ARGS((void));
-extern void close_others __ARGS((int message, int forceit));
-extern void curwin_init __ARGS((void));
-extern int win_alloc_first __ARGS((void));
-extern void win_init_size __ARGS((void));
-extern int win_new_tabpage __ARGS((int after));
-extern int may_open_tabpage __ARGS((void));
-extern int make_tabpages __ARGS((int maxcount));
-extern int valid_tabpage __ARGS((tabpage_T *tpc));
-extern tabpage_T *find_tabpage __ARGS((int n));
-extern int tabpage_index __ARGS((tabpage_T *ftp));
-extern void goto_tabpage __ARGS((int n));
-extern void goto_tabpage_tp __ARGS((tabpage_T *tp));
-extern void goto_tabpage_win __ARGS((tabpage_T *tp, win_T *wp));
-extern void tabpage_move __ARGS((int nr));
-extern void win_goto __ARGS((win_T *wp));
-extern win_T *win_find_nr __ARGS((int winnr));
-extern void win_enter __ARGS((win_T *wp, int undo_sync));
-extern win_T *buf_jump_open_win __ARGS((buf_T *buf));
-extern win_T *buf_jump_open_tab __ARGS((buf_T *buf));
-extern int win_alloc_lines __ARGS((win_T *wp));
-extern void win_free_lsize __ARGS((win_T *wp));
-extern void shell_new_rows __ARGS((void));
-extern void shell_new_columns __ARGS((void));
-extern void win_size_save __ARGS((garray_T *gap));
-extern void win_size_restore __ARGS((garray_T *gap));
-extern int win_comp_pos __ARGS((void));
-extern void win_setheight __ARGS((int height));
-extern void win_setheight_win __ARGS((int height, win_T *win));
-extern void win_setwidth __ARGS((int width));
-extern void win_setwidth_win __ARGS((int width, win_T *wp));
-extern void win_setminheight __ARGS((void));
-extern void win_drag_status_line __ARGS((win_T *dragwin, int offset));
-extern void win_drag_vsep_line __ARGS((win_T *dragwin, int offset));
-extern void win_comp_scroll __ARGS((win_T *wp));
-extern void command_height __ARGS((void));
-extern void last_status __ARGS((int morewin));
-extern int tabline_height __ARGS((void));
-extern char_u *grab_file_name __ARGS((long count, linenr_T *file_lnum));
-extern char_u *file_name_at_cursor __ARGS((int options, long count, linenr_T *file_lnum));
-extern char_u *file_name_in_line __ARGS((char_u *line, int col, int options, long count, char_u *rel_fname, linenr_T *file_lnum));
-extern char_u *find_file_name_in_path __ARGS((char_u *ptr, int len, int options, long count, char_u *rel_fname));
-extern int path_with_url __ARGS((char_u *fname));
-extern int vim_isAbsName __ARGS((char_u *name));
-extern int vim_FullName __ARGS((char_u *fname, char_u *buf, int len, int force));
-extern int min_rows __ARGS((void));
-extern int only_one_window __ARGS((void));
-extern void check_lnums __ARGS((int do_curwin));
-extern int win_hasvertsplit __ARGS((void));
+void do_window __ARGS((int nchar, long Prenum, int xchar));
+int win_split __ARGS((int size, int flags));
+int win_valid __ARGS((win_T *win));
+int win_count __ARGS((void));
+int make_windows __ARGS((int count, int vertical));
+void win_move_after __ARGS((win_T *win1, win_T *win2));
+void win_equal __ARGS((win_T *next_curwin, int current, int dir));
+void close_windows __ARGS((buf_T *buf, int keep_curwin));
+void win_close __ARGS((win_T *win, int free_buf));
+void win_close_othertab __ARGS((win_T *win, int free_buf, tabpage_T *tp));
+void win_free_all __ARGS((void));
+void close_others __ARGS((int message, int forceit));
+void curwin_init __ARGS((void));
+int win_alloc_first __ARGS((void));
+void win_init_size __ARGS((void));
+void free_tabpage __ARGS((tabpage_T *tp));
+int win_new_tabpage __ARGS((int after));
+int may_open_tabpage __ARGS((void));
+int make_tabpages __ARGS((int maxcount));
+int valid_tabpage __ARGS((tabpage_T *tpc));
+tabpage_T *find_tabpage __ARGS((int n));
+int tabpage_index __ARGS((tabpage_T *ftp));
+void goto_tabpage __ARGS((int n));
+void goto_tabpage_tp __ARGS((tabpage_T *tp));
+void goto_tabpage_win __ARGS((tabpage_T *tp, win_T *wp));
+void tabpage_move __ARGS((int nr));
+void win_goto __ARGS((win_T *wp));
+win_T *win_find_nr __ARGS((int winnr));
+void win_enter __ARGS((win_T *wp, int undo_sync));
+win_T *buf_jump_open_win __ARGS((buf_T *buf));
+win_T *buf_jump_open_tab __ARGS((buf_T *buf));
+int win_alloc_lines __ARGS((win_T *wp));
+void win_free_lsize __ARGS((win_T *wp));
+void shell_new_rows __ARGS((void));
+void shell_new_columns __ARGS((void));
+void win_size_save __ARGS((garray_T *gap));
+void win_size_restore __ARGS((garray_T *gap));
+int win_comp_pos __ARGS((void));
+void win_setheight __ARGS((int height));
+void win_setheight_win __ARGS((int height, win_T *win));
+void win_setwidth __ARGS((int width));
+void win_setwidth_win __ARGS((int width, win_T *wp));
+void win_setminheight __ARGS((void));
+void win_drag_status_line __ARGS((win_T *dragwin, int offset));
+void win_drag_vsep_line __ARGS((win_T *dragwin, int offset));
+void win_comp_scroll __ARGS((win_T *wp));
+void command_height __ARGS((void));
+void last_status __ARGS((int morewin));
+int tabline_height __ARGS((void));
+char_u *grab_file_name __ARGS((long count, linenr_T *file_lnum));
+char_u *file_name_at_cursor __ARGS((int options, long count, linenr_T *file_lnum));
+char_u *file_name_in_line __ARGS((char_u *line, int col, int options, long count, char_u *rel_fname, linenr_T *file_lnum));
+char_u *find_file_name_in_path __ARGS((char_u *ptr, int len, int options, long count, char_u *rel_fname));
+int path_with_url __ARGS((char_u *fname));
+int vim_isAbsName __ARGS((char_u *name));
+int vim_FullName __ARGS((char_u *fname, char_u *buf, int len, int force));
+int min_rows __ARGS((void));
+int only_one_window __ARGS((void));
+void check_lnums __ARGS((int do_curwin));
+int win_hasvertsplit __ARGS((void));
 /* vim: set ft=c : */
diff --git a/src/testdir/test53.in b/src/testdir/test53.in
index 29f7a70..c2023e9 100644
--- a/src/testdir/test53.in
+++ b/src/testdir/test53.in
@@ -1,4 +1,4 @@
-Tests for string text objects. vim: set ft=vim :
+Tests for string and html text objects. vim: set ft=vim :
 
 Note that the end-of-line moves the cursor to the next test line.
 
@@ -15,7 +15,14 @@
 :set quoteescape=+*-
 di`
 $F"va"oha"i"rz
-k:put =matchstr(\"abcd\", \".\", 0, 2) " b
+:"
+/^<begin
+jfXdit
+0fXdit
+fXdat
+0fXdat
+:"
+:put =matchstr(\"abcd\", \".\", 0, 2) " b
 :put =matchstr(\"abcd\", \"..\", 0, 2) " bc
 :put =matchstr(\"abcd\", \".\", 2, 0) " c (zero and negative -> first match)
 :put =matchstr(\"abcd\", \".\", 0, -1) " a
@@ -31,4 +38,11 @@
 "'" 'blah' rep 'buh'
 bla `s*`d-`+++`l**` b`la
 voo "nah" sdf " asdf" sdf " sdf" sd
+
+<begin>
+-<b>asdf<i>Xasdf</i>asdf</b>-
+-<b>asdX<i>a<i />sdf</i>asdf</b>-
+-<b>asdf<i>Xasdf</i>asdf</b>-
+-<b>asdX<i>as<b />df</i>asdf</b>-
+</begin>
 end:
diff --git a/src/testdir/test53.ok b/src/testdir/test53.ok
index 7cbd6e7..c371c6a 100644
--- a/src/testdir/test53.ok
+++ b/src/testdir/test53.ok
@@ -5,6 +5,13 @@
 "'" 'blah'yyyyy'buh'
 bla `` b`la
 voo "zzzzzzzzzzzzzzzzzzzzzzzzzzzzsd
+
+<begin>
+-<b>asdf<i></i>asdf</b>-
+-<b></b>-
+-<b>asdfasdf</b>-
+--
+</begin>
 b
 bc
 c
diff --git a/src/version.h b/src/version.h
index af0ef0e..939a118 100644
--- a/src/version.h
+++ b/src/version.h
@@ -35,6 +35,6 @@
  */
 #define VIM_VERSION_NODOT	"vim70f"
 #define VIM_VERSION_SHORT	"7.0f"
-#define VIM_VERSION_MEDIUM	"7.0f04 BETA"
-#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0f04 BETA (2006 Apr 28)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0f04 BETA (2006 Apr 28, compiled "
+#define VIM_VERSION_MEDIUM	"7.0f05 BETA"
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0f05 BETA (2006 Apr 29)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0f05 BETA (2006 Apr 29, compiled "