summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorvimboss <devnull@localhost>2008-01-02 16:49:36 +0000
committervimboss <devnull@localhost>2008-01-02 16:49:36 +0000
commit9fe790b99532202022fd2d0ceb55f47adda8f4bd (patch)
treeabc79935e33bb7b4d5862d51b8911da181f543eb
parent37e50165d3771f728d63275a7fc3004691e378c4 (diff)
downloadvim-9fe790b99532202022fd2d0ceb55f47adda8f4bd.tar.gz
updated for version 7.1-185v7.1.185v7-1-185
-rw-r--r--src/edit.c19
-rw-r--r--src/misc1.c20
-rw-r--r--src/proto/edit.pro1
-rw-r--r--src/version.c2
4 files changed, 34 insertions, 8 deletions
diff --git a/src/edit.c b/src/edit.c
index d906d788..f528b964 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -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.
diff --git a/src/misc1.c b/src/misc1.c
index b67405fb..99c90f76 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -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]);
}
}
diff --git a/src/proto/edit.pro b/src/proto/edit.pro
index a967037c..710a76e6 100644
--- a/src/proto/edit.pro
+++ b/src/proto/edit.pro
@@ -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));
diff --git a/src/version.c b/src/version.c
index d4c093a8..cb266270 100644
--- a/src/version.c
+++ b/src/version.c
@@ -667,6 +667,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 185,
+/**/
184,
/**/
183,