]> granicus.if.org Git - vim/commitdiff
updated for version 7.1-185 v7.1.185
authorBram Moolenaar <Bram@vim.org>
Wed, 2 Jan 2008 16:49:36 +0000 (16:49 +0000)
committerBram Moolenaar <Bram@vim.org>
Wed, 2 Jan 2008 16:49:36 +0000 (16:49 +0000)
src/edit.c
src/misc1.c
src/proto/edit.pro
src/version.c

index d906d788bc3dce9473c4cbe713ce2a2f5bf6ef6c..f528b9649bc7e1fafb8fad8ad808207be99db3ce 100644 (file)
@@ -6939,6 +6939,25 @@ replace_push(c)
     ++replace_stack_nr;
 }
 
+#if defined(FEAT_MBYTE) || defined(PROTO)
+/*
+ * Push a character onto the replace stack.  Handles a multi-byte character in
+ * reverse byte order, so that the first byte is popped off first.
+ * Return the number of bytes done (includes composing characters).
+ */
+    int
+replace_push_mb(p)
+    char_u *p;
+{
+    int l = (*mb_ptr2len)(p);
+    int j;
+
+    for (j = l - 1; j >= 0; --j)
+       replace_push(p[j]);
+    return l;
+}
+#endif
+
 #if 0
 /*
  * call replace_push(c) with replace_offset set to the first NUL.
index b67405fb40edff767aeb21babdfa91c9d38e9e22..99c90f76bc0d1bfb39b48939c7bf51034a4e8b67 100644 (file)
@@ -591,7 +591,14 @@ open_line(dir, flags, old_indent)
        replace_push(NUL);
        p = saved_line + curwin->w_cursor.col;
        while (*p != NUL)
-           replace_push(*p++);
+       {
+#ifdef FEAT_MBYTE
+           if (has_mbyte)
+               p += replace_push_mb(p);
+           else
+#endif
+               replace_push(*p++);
+       }
        saved_line[curwin->w_cursor.col] = NUL;
     }
 #endif
@@ -1914,7 +1921,6 @@ ins_char_bytes(buf, charlen)
     int                charlen;
 {
     int                c = buf[0];
-    int                l, j;
 #endif
     int                newlen;         /* nr of bytes inserted */
     int                oldlen;         /* nr of bytes deleted (0 when not replacing) */
@@ -2016,13 +2022,11 @@ ins_char_bytes(buf, charlen)
        for (i = 0; i < oldlen; ++i)
        {
 #ifdef FEAT_MBYTE
-           l = (*mb_ptr2len)(oldp + col + i) - 1;
-           for (j = l; j >= 0; --j)
-               replace_push(oldp[col + i + j]);
-           i += l;
-#else
-           replace_push(oldp[col + i]);
+           if (has_mbyte)
+               i += replace_push_mb(oldp + col + i) - 1;
+           else
 #endif
+               replace_push(oldp[col + i]);
        }
     }
 
index a967037cb75bb720c909c704defbe1421f561d6c..710a76e6fcd039a8951b2a0a6ef1bb46061dd6da 100644 (file)
@@ -32,6 +32,7 @@ int stuff_inserted __ARGS((int c, long count, int no_esc));
 char_u *get_last_insert __ARGS((void));
 char_u *get_last_insert_save __ARGS((void));
 void replace_push __ARGS((int c));
+int replace_push_mb __ARGS((char_u *p));
 void fixthisline __ARGS((int (*get_the_indent)(void)));
 void fix_indent __ARGS((void));
 int in_cinkeys __ARGS((int keytyped, int when, int line_is_empty));
index d4c093a8bb5203cb28bb780a6a814cb3af36e184..cb266270c41b6f1ccb3309c8cb5c7044cc1a6ae2 100644 (file)
@@ -666,6 +666,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    185,
 /**/
     184,
 /**/