summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2005-08-10 21:07:57 +0000
committerBram Moolenaar <Bram@vim.org>2005-08-10 21:07:57 +0000
commit0fa313a71870ccc2ba63da25a7abea850f5b3d02 (patch)
treefc949b566e1d78f6eea570aab55c52b7d6a6b052
parentc388fbf9d99a8950c8c9a01466cfb8baa104ee8c (diff)
updated for version 7.0127v7.0127
-rw-r--r--runtime/doc/todo.txt14
-rw-r--r--runtime/spell/main.aap2
-rw-r--r--runtime/spell/yi/main.aap33
-rw-r--r--src/buffer.c8
-rw-r--r--src/charset.c10
-rw-r--r--src/diff.c4
-rw-r--r--src/edit.c20
-rw-r--r--src/eval.c22
-rw-r--r--src/ex_cmds.c10
-rw-r--r--src/ex_docmd.c6
-rw-r--r--src/ex_getln.c26
-rw-r--r--src/fileio.c18
-rw-r--r--src/fold.c2
-rw-r--r--src/getchar.c20
-rw-r--r--src/globals.h5
-rw-r--r--src/gui.c12
-rw-r--r--src/gui_beval.c4
-rw-r--r--src/gui_gtk_x11.c8
-rw-r--r--src/gui_kde_wid.cc2
-rw-r--r--src/gui_w32.c4
-rw-r--r--src/gui_x11.c4
-rw-r--r--src/hardcopy.c4
-rw-r--r--src/macros.h14
-rw-r--r--src/mbyte.c92
-rw-r--r--src/message.c50
-rw-r--r--src/misc1.c22
-rw-r--r--src/misc2.c16
-rw-r--r--src/normal.c16
-rw-r--r--src/ops.c12
-rw-r--r--src/option.c2
-rw-r--r--src/os_mac.c2
-rw-r--r--src/os_mac_conv.c2
-rw-r--r--src/os_mswin.c2
-rw-r--r--src/os_unix.c9
-rw-r--r--src/os_win32.c2
-rw-r--r--src/proto/mbyte.pro11
-rw-r--r--src/proto/screen.pro1
-rw-r--r--src/regexp.c30
-rw-r--r--src/screen.c33
-rw-r--r--src/search.c22
-rw-r--r--src/spell.c509
-rw-r--r--src/syntax.c4
-rw-r--r--src/term.c2
-rw-r--r--src/ui.c2
-rw-r--r--src/version.c2
-rw-r--r--src/version.h4
-rw-r--r--src/window.c2
47 files changed, 637 insertions, 464 deletions
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index 1ae2ded975..68c220a023 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt* For Vim version 7.0aa. Last change: 2005 Aug 09
+*todo.txt* For Vim version 7.0aa. Last change: 2005 Aug 10
VIM REFERENCE MANUAL by Bram Moolenaar
@@ -30,18 +30,8 @@ be worked on, but only if you sponsor Vim development. See |sponsor|.
*known-bugs*
-------------------- Known bugs and current work -----------------------
-Spell checking: code for pre-compressing tree. (Olaf Seibert)
-Any problems with the reference counting?
-
-spell checking for Yiddish: (Raphael Finkel)
-- use ~/tmp/yiddish.uspell.dat
-- suggestions are not displayed with 'rightleft'
-- suggestions don't have composing characters
-- out-of-mem error when using suggestion?
-
-Spell suggestion for "WOrd" should be "Word" instead of "word".
-
Spell checking: default value for 'spellcapcheck' in spell file?
+For Hebrew and Yiddish it should be empty.
When 'insertmode' is set, CTRL-L no longer moves the cursor left. What
compatibility problems does this cause?
diff --git a/runtime/spell/main.aap b/runtime/spell/main.aap
index 34768b6607..44d19906bc 100644
--- a/runtime/spell/main.aap
+++ b/runtime/spell/main.aap
@@ -1,7 +1,7 @@
# "aap": generate all the .spl files
# "aap diff" create all the diff files
-LANG = de en fr he it nl pl
+LANG = de en fr he it nl pl yi
diff: $*LANG/diff
:print done
diff --git a/runtime/spell/yi/main.aap b/runtime/spell/yi/main.aap
new file mode 100644
index 0000000000..a426684d4e
--- /dev/null
+++ b/runtime/spell/yi/main.aap
@@ -0,0 +1,33 @@
+# Aap recipe for Hebrew Vim spell files.
+
+# Use a freshly compiled Vim if it exists.
+@if os.path.exists('../../../src/vim'):
+ VIM = ../../../src/vim
+@else:
+ :progsearch VIM vim
+
+SPELLDIR = ..
+FILE = wordlist.utf8.txt
+
+all: $SPELLDIR/yi.utf-8.spl ../README_yi.txt
+
+$SPELLDIR/yi.utf-8.spl : $VIM $FILE
+ :sys $VIM -u NONE -e -c "set enc=utf-8"
+ -c "mkspell! $(SPELLDIR)/yi $FILE" -c q
+
+../README_yi.txt : README.txt
+ :copy $source $target
+
+#
+# Fetch the word list when needed.
+#
+URLDIR = http://www.cs.uky.edu/~raphael/yiddish
+:attr {fetch = $URLDIR/%file%} $FILE
+
+
+# There is no diff file, the word list is used as-is
+diff:
+ :print No diff file.
+
+
+# vim: set sts=4 sw=4 :
diff --git a/src/buffer.c b/src/buffer.c
index 09ca27db82..1fb95fdd74 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -3346,7 +3346,7 @@ build_stl_str_hl(wp, out, outlen, fmt, fillchar, maxwidth, hl)
while (l >= item[groupitem[groupdepth]].maxwid)
{
l -= ptr2cells(t + n);
- n += (*mb_ptr2len_check)(t + n);
+ n += (*mb_ptr2len)(t + n);
}
}
else
@@ -3708,7 +3708,7 @@ build_stl_str_hl(wp, out, outlen, fmt, fillchar, maxwidth, hl)
if (has_mbyte)
{
l -= ptr2cells(t);
- t += (*mb_ptr2len_check)(t);
+ t += (*mb_ptr2len)(t);
}
else
#endif
@@ -3836,7 +3836,7 @@ build_stl_str_hl(wp, out, outlen, fmt, fillchar, maxwidth, hl)
width += ptr2cells(s);
if (width >= maxwidth)
break;
- s += (*mb_ptr2len_check)(s);
+ s += (*mb_ptr2len)(s);
}
/* Fill up for half a double-wide character. */
while (++width < maxwidth)
@@ -3861,7 +3861,7 @@ build_stl_str_hl(wp, out, outlen, fmt, fillchar, maxwidth, hl)
while (width >= maxwidth)
{
width -= ptr2cells(s + n);
- n += (*mb_ptr2len_check)(s + n);
+ n += (*mb_ptr2len)(s + n);
}
}
else
diff --git a/src/charset.c b/src/charset.c
index 7ea9bbb8f6..c14bef03e1 100644
--- a/src/charset.c
+++ b/src/charset.c
@@ -296,7 +296,7 @@ trans_characters(buf, bufsize)
{
# ifdef FEAT_MBYTE
/* Assume a multi-byte character doesn't need translation. */
- if (has_mbyte && (trs_len = (*mb_ptr2len_check)(buf)) > 1)
+ if (has_mbyte && (trs_len = (*mb_ptr2len)(buf)) > 1)
len -= trs_len;
else
# endif
@@ -342,7 +342,7 @@ transstr(s)
p = s;
while (*p != NUL)
{
- if ((l = (*mb_ptr2len_check)(p)) > 1)
+ if ((l = (*mb_ptr2len)(p)) > 1)
{
c = (*mb_ptr2char)(p);
p += l;
@@ -375,7 +375,7 @@ transstr(s)
while (*p != NUL)
{
#ifdef FEAT_MBYTE
- if (has_mbyte && (l = (*mb_ptr2len_check)(p)) > 1)
+ if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
{
c = (*mb_ptr2char)(p);
if (vim_isprintc(c))
@@ -488,7 +488,7 @@ str_foldcase(str, orglen, buf, buflen)
}
}
/* skip to next multi-byte char */
- i += (*mb_ptr2len_check)(STR_PTR(i));
+ i += (*mb_ptr2len)(STR_PTR(i));
}
else
#endif
@@ -772,7 +772,7 @@ vim_strnsize(s, len)
#ifdef FEAT_MBYTE
if (has_mbyte)
{
- int l = (*mb_ptr2len_check)(s);
+ int l = (*mb_ptr2len)(s);
size += ptr2cells(s);
s += l;
diff --git a/src/diff.c b/src/diff.c
index 3265986951..f2af8e2744 100644
--- a/src/diff.c
+++ b/src/diff.c
@@ -1513,8 +1513,8 @@ diff_cmp(s1, s2)
else
{
#ifdef FEAT_MBYTE
- l = (*mb_ptr2len_check)(p1);
- if (l != (*mb_ptr2len_check)(p2))
+ l = (*mb_ptr2len)(p1);
+ if (l != (*mb_ptr2len)(p2))
break;
if (l > 1)
{
diff --git a/src/edit.c b/src/edit.c
index 1396c10d7b..41214b837b 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -444,7 +444,7 @@ edit(cmdchar, startln, count)
#ifdef FEAT_MBYTE
else if (has_mbyte)
{
- i = (*mb_ptr2len_check)(ptr);
+ i = (*mb_ptr2len)(ptr);
if (ptr[i] == NUL)
curwin->w_cursor.col += i;
}
@@ -1561,7 +1561,7 @@ change_indent(type, amount, round, replaced)
last_vcol = vcol;
#ifdef FEAT_MBYTE
if (has_mbyte && new_cursor_col >= 0)
- new_cursor_col += (*mb_ptr2len_check)(ptr + new_cursor_col);
+ new_cursor_col += (*mb_ptr2len)(ptr + new_cursor_col);
else
#endif
++new_cursor_col;
@@ -2153,7 +2153,7 @@ ins_compl_dictionaries(dict, pat, dir, flags, thesaurus)
* with single-byte non-word characters. */
while (*ptr != NUL)
{
- int l = (*mb_ptr2len_check)(ptr);
+ int l = (*mb_ptr2len)(ptr);
if (l < 2 && !vim_iswordc(*ptr))
break;
@@ -2203,7 +2203,7 @@ find_word_start(ptr)
#ifdef FEAT_MBYTE
if (has_mbyte)
while (*ptr != NUL && *ptr != '\n' && mb_get_class(ptr) <= 1)
- ptr += (*mb_ptr2len_check)(ptr);
+ ptr += (*mb_ptr2len)(ptr);
else
#endif
while (*ptr != NUL && *ptr != '\n' && !vim_iswordc(*ptr))
@@ -2228,7 +2228,7 @@ find_word_end(ptr)
if (start_class > 1)
while (*ptr != NUL)
{
- ptr += (*mb_ptr2len_check)(ptr);
+ ptr += (*mb_ptr2len)(ptr);
if (mb_get_class(ptr) != start_class)
break;
}
@@ -3756,7 +3756,7 @@ quote_meta(dest, src, len)
{
int i, mb_len;
- mb_len = (*mb_ptr2len_check)(src) - 1;
+ mb_len = (*mb_ptr2len)(src) - 1;
if (mb_len > 0 && len >= mb_len)
for (i = 0; i < mb_len; ++i)
{
@@ -4166,7 +4166,7 @@ insertchar(c, flags, second_indent)
#ifdef FEAT_MBYTE
if (has_mbyte)
foundcol = curwin->w_cursor.col
- + (*mb_ptr2len_check)(ml_get_cursor());
+ + (*mb_ptr2len)(ml_get_cursor());
else
#endif
foundcol = curwin->w_cursor.col + 1;
@@ -5053,7 +5053,7 @@ oneright()
ptr = ml_get_cursor();
#ifdef FEAT_MBYTE
- if (has_mbyte && (l = (*mb_ptr2len_check)(ptr)) > 1)
+ if (has_mbyte && (l = (*mb_ptr2len)(ptr)) > 1)
{
/* The character under the cursor is a multi-byte character, move
* several bytes right, but don't end up on the NUL. */
@@ -5633,7 +5633,7 @@ replace_do_bs()
{
vcol += chartabsize(p + i, vcol);
#ifdef FEAT_MBYTE
- i += (*mb_ptr2len_check)(p) - 1;
+ i += (*mb_ptr2len)(p) - 1;
#endif
}
vcol -= start_vcol;
@@ -7288,7 +7288,7 @@ ins_right()
{
#ifdef FEAT_MBYTE
if (has_mbyte)
- curwin->w_cursor.col += (*mb_ptr2len_check)(ml_get_cursor());
+ curwin->w_cursor.col += (*mb_ptr2len)(ml_get_cursor());
else
#endif
++curwin->w_cursor.col;
diff --git a/src/eval.c b/src/eval.c
index 6919bf1ff1..80d46a95b6 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -7712,7 +7712,7 @@ f_byteidx(argvars, rettv)
{
if (*t == NUL) /* EOL reached */
return;
- t += mb_ptr2len_check(t);
+ t += (*mb_ptr2len)(t);
}
rettv->vval.v_number = t - str;
#else
@@ -7865,7 +7865,7 @@ f_col(argvars, rettv)
# ifdef FEAT_MBYTE
int l;
- if (*p != NUL && p[(l = (*mb_ptr2len_check)(p))] == NUL)
+ if (*p != NUL && p[(l = (*mb_ptr2len)(p))] == NUL)
col += l;
# else
if (*p != NUL && p[1] == NUL)
@@ -11582,7 +11582,7 @@ find_some_match(argvars, rettv, type)
else
{
#ifdef FEAT_MBYTE
- str = regmatch.startp[0] + mb_ptr2len_check(regmatch.startp[0]);
+ str = regmatch.startp[0] + (*mb_ptr2len)(regmatch.startp[0]);
#else
str = regmatch.startp[0] + 1;
#endif
@@ -13892,7 +13892,7 @@ f_split(argvars, rettv)
{
/* Don't get stuck at the same match. */
#ifdef FEAT_MBYTE
- col = mb_ptr2len_check(regmatch.endp[0]);
+ col = (*mb_ptr2len)(regmatch.endp[0]);
#else
col = 1;
#endif
@@ -14509,13 +14509,13 @@ f_tolower(argvars, rettv)
c = utf_ptr2char(p);
lc = utf_tolower(c);
- l = utf_ptr2len_check(p);
+ l = utf_ptr2len(p);
/* TODO: reallocate string when byte count changes. */
if (utf_char2len(lc) == l)
utf_char2bytes(lc, p);
p += l;
}
- else if (has_mbyte && (l = (*mb_ptr2len_check)(p)) > 1)
+ else if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1)
p += l; /* skip multi-byte character */
else
#endif
@@ -14594,18 +14594,18 @@ error:
#ifdef FEAT_MBYTE
if (has_mbyte)
{
- inlen = mb_ptr2len_check(instr);
+ inlen = (*mb_ptr2len)(instr);
cpstr = instr;
cplen = inlen;
idx = 0;
for (p = fromstr; *p != NUL; p += fromlen)
{
- fromlen = mb_ptr2len_check(p);
+ fromlen = (*mb_ptr2len)(p);
if (fromlen == inlen && STRNCMP(instr, p, inlen) == 0)
{
for (p = tostr; *p != NUL; p += tolen)
{
- tolen = mb_ptr2len_check(p);
+ tolen = (*mb_ptr2len)(p);
if (idx-- == 0)
{
cplen = tolen;
@@ -14628,7 +14628,7 @@ error:
first = FALSE;
for (p = tostr; *p != NUL; p += tolen)
{
- tolen = mb_ptr2len_check(p);
+ tolen = (*mb_ptr2len)(p);
--idx;
}
if (idx != 0)
@@ -16539,7 +16539,7 @@ ex_echo(eap)
#ifdef FEAT_MBYTE
if (has_mbyte)
{
- int i = (*mb_ptr2len_check)(p);
+ int i = (*mb_ptr2len)(p);
(void)msg_outtrans_len_attr(p, i, echo_attr);
p += i - 1;
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index a58f91a6df..4b7d6fd46a 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -596,7 +596,7 @@ ex_retab(eap)
vcol += chartabsize(ptr + col, (colnr_T)vcol);
#ifdef FEAT_MBYTE
if (has_mbyte)
- col += (*mb_ptr2len_check)(ptr + col);
+ col += (*mb_ptr2len)(ptr + col);
else
#endif
++col;
@@ -4643,7 +4643,7 @@ do_sub(eap)
}
#ifdef FEAT_MBYTE
else if (has_mbyte)
- p1 += (*mb_ptr2len_check)(p1) - 1;
+ p1 += (*mb_ptr2len)(p1) - 1;
#endif
}
@@ -5715,7 +5715,7 @@ fix_help_buffer()
int l;
this_utf = TRUE;
- l = utf_ptr2len_check(s);
+ l = utf_ptr2len(s);
if (l == 1)
this_utf = FALSE;
s += l - 1;
@@ -6010,7 +6010,7 @@ helptags_one(dir, ext, tagfname)
int l;
this_utf8 = TRUE;
- l = utf_ptr2len_check(s);
+ l = utf_ptr2len(s);
if (l == 1)
{
/* Illegal UTF-8 byte sequence. */
@@ -6333,7 +6333,7 @@ ex_sign(eap)
if (has_mbyte)
{
cells = 0;
- for (s = arg; s < p; s += (*mb_ptr2len_check)(s))
+ for (s = arg; s < p; s += (*mb_ptr2len)(s))
{
if (!vim_isprintc((*mb_ptr2char)(s)))
break;
diff --git a/src/ex_docmd.c b/src/ex_docmd.c
index bb0758224d..fa777b3c85 100644
--- a/src/ex_docmd.c
+++ b/src/ex_docmd.c
@@ -8324,7 +8324,7 @@ ex_normal(eap)
if (*p == CSI) /* leadbyte CSI */
len += 2;
# endif
- for (l = (*mb_ptr2len_check)(p) - 1; l > 0; --l)
+ for (l = (*mb_ptr2len)(p) - 1; l > 0; --l)
if (*++p == K_SPECIAL /* trailbyte K_SPECIAL or CSI */
# ifdef FEAT_GUI
|| *p == CSI
@@ -8348,7 +8348,7 @@ ex_normal(eap)
arg[len++] = (int)KE_CSI;
}
# endif
- for (l = (*mb_ptr2len_check)(p) - 1; l > 0; --l)
+ for (l = (*mb_ptr2len)(p) - 1; l > 0; --l)
{
arg[len++] = *++p;
if (*p == K_SPECIAL)
@@ -9772,7 +9772,7 @@ ses_put_fname(fd, name, flagp)
{
int l;
- if (has_mbyte && (l = (*mb_ptr2len_check)(name)) > 1)
+ if (has_mbyte && (l = (*mb_ptr2len)(name)) > 1)
{
/* copy a multibyte char */
while (--l >= 0)
diff --git a/src/ex_getln.c b/src/ex_getln.c
index a876508c0b..3c5ad94c1d 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -881,7 +881,7 @@ getcmdline(firstc, count, indent)
while (p > ccline.cmdbuff && mb_get_class(p) == i)
p = mb_prevptr(ccline.cmdbuff, p);
if (mb_get_class(p) != i)
- p += (*mb_ptr2len_check)(p);
+ p += (*mb_ptr2len)(p);
}
}
else
@@ -1115,7 +1115,7 @@ getcmdline(firstc, count, indent)
ccline.cmdspos += i;
#ifdef FEAT_MBYTE
if (has_mbyte)
- ccline.cmdpos += (*mb_ptr2len_check)(ccline.cmdbuff
+ ccline.cmdpos += (*mb_ptr2len)(ccline.cmdbuff
+ ccline.cmdpos);
else
#endif
@@ -1241,7 +1241,7 @@ getcmdline(firstc, count, indent)
{
/* Count ">" for double-wide char that doesn't fit. */
correct_cmdspos(ccline.cmdpos, i);
- ccline.cmdpos += (*mb_ptr2len_check)(ccline.cmdbuff
+ ccline.cmdpos += (*mb_ptr2len)(ccline.cmdbuff
+ ccline.cmdpos) - 1;
}
#endif
@@ -1861,7 +1861,7 @@ set_cmdspos_cursor()
}
#ifdef FEAT_MBYTE
if (has_mbyte)
- i += (*mb_ptr2len_check)(ccline.cmdbuff + i) - 1;
+ i += (*mb_ptr2len)(ccline.cmdbuff + i) - 1;
#endif
}
}
@@ -1876,7 +1876,7 @@ correct_cmdspos(idx, cells)
int idx;
int cells;
{
- if ((*mb_ptr2len_check)(ccline.cmdbuff + idx) > 1
+ if ((*mb_ptr2len)(ccline.cmdbuff + idx) > 1
&& (*mb_ptr2cells)(ccline.cmdbuff + idx) > 1
&& ccline.cmdspos % Columns + cells > Columns)
ccline.cmdspos++;
@@ -2184,7 +2184,7 @@ cmdline_getvcol_cursor()
int i = 0;
for (col = 0; i < ccline.cmdpos; ++col)
- i += (*mb_ptr2len_check)(ccline.cmdbuff + i);
+ i += (*mb_ptr2len)(ccline.cmdbuff + i);
return col;
}
@@ -2225,7 +2225,7 @@ redrawcmd_preedit()
&& cmdpos < ccline.cmdlen; ++col)
{
cmdspos += (*mb_ptr2cells)(ccline.cmdbuff + cmdpos);
- cmdpos += (*mb_ptr2len_check)(ccline.cmdbuff + cmdpos);
+ cmdpos += (*mb_ptr2len)(ccline.cmdbuff + cmdpos);
}
}
else
@@ -2251,7 +2251,7 @@ redrawcmd_preedit()
# ifdef FEAT_MBYTE
if (has_mbyte)
- char_len = (*mb_ptr2len_check)(ccline.cmdbuff + cmdpos);
+ char_len = (*mb_ptr2len)(ccline.cmdbuff + cmdpos);
else
# endif
char_len = 1;
@@ -2339,7 +2339,7 @@ draw_cmdline(start, len)
msg_putchar('*');
# ifdef FEAT_MBYTE
if (has_mbyte)
- i += (*mb_ptr2len_check)(ccline.cmdbuff + start + i) - 1;
+ i += (*mb_ptr2len)(ccline.cmdbuff + start + i) - 1;
# endif
}
else
@@ -2378,7 +2378,7 @@ draw_cmdline(start, len)
{
p = ccline.cmdbuff + j;
u8c = utfc_ptr2char_len(p, &u8c_c1, &u8c_c2, start + len - j);
- mb_l = utfc_ptr2len_check_len(p, start + len - j);
+ mb_l = utfc_ptr2len_len(p, start + len - j);
if (ARABIC_CHAR(u8c))
{
/* Do Arabic shaping. */
@@ -2511,12 +2511,12 @@ put_on_cmdline(str, len, redraw)
{
/* Count nr of characters in the new string. */
m = 0;
- for (i = 0; i < len; i += (*mb_ptr2len_check)(str + i))
+ for (i = 0; i < len; i += (*mb_ptr2len)(str + i))
++m;
/* Count nr of bytes in cmdline that are overwritten by these
* characters. */
for (i = ccline.cmdpos; i < ccline.cmdlen && m > 0;
- i += (*mb_ptr2len_check)(ccline.cmdbuff + i))
+ i += (*mb_ptr2len)(ccline.cmdbuff + i))
--m;
if (i < ccline.cmdlen)
{
@@ -2619,7 +2619,7 @@ put_on_cmdline(str, len, redraw)
#ifdef FEAT_MBYTE
if (has_mbyte)
{
- c = (*mb_ptr2len_check)(ccline.cmdbuff + ccline.cmdpos) - 1;
+ c = (*mb_ptr2len)(ccline.cmdbuff + ccline.cmdpos) - 1;
if (c > len - i - 1)
c = len - i - 1;
ccline.cmdpos += c;
diff --git a/src/fileio.c b/src/fileio.c
index 7c4c9ac17c..bb25ce7da4 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -1402,7 +1402,7 @@ retry:
p = ptr;
for (flen = from_size; flen > 0; flen -= l)
{
- l = utf_ptr2len_check_len(p, flen);
+ l = utf_ptr2len_len(p, flen);
if (l > flen) /* incomplete char */
{
if (l > CONV_RESTLEN)
@@ -1467,7 +1467,7 @@ retry:
p = ptr;
for (flen = from_size; flen > 0; flen -= l)
{
- l = utf_ptr2len_check_len(p, flen);
+ l = utf_ptr2len_len(p, flen);
u8c = utf_ptr2char(p);
ucsp[needed * 2] = (u8c & 0xff);
ucsp[needed * 2 + 1] = (u8c >> 8);
@@ -1726,7 +1726,7 @@ retry:
{
if (*p >= 0x80)
{
- len = utf_ptr2len_check(p);
+ len = utf_ptr2len(p);
/* A length of 1 means it's an illegal byte. Accept
* an incomplete character at the end though, the next
* read() will get the next bytes, we'll check it
@@ -4614,7 +4614,7 @@ buf_write_bytes(ip)
if (l > len)
l = len;
mch_memmove(ip->bw_rest + ip->bw_restlen, buf, (size_t)l);
- n = utf_ptr2len_check_len(ip->bw_rest, ip->bw_restlen + l);
+ n = utf_ptr2len_len(ip->bw_rest, ip->bw_restlen + l);
if (n > ip->bw_restlen + len)
{
/* We have an incomplete byte sequence at the end to
@@ -4644,7 +4644,7 @@ buf_write_bytes(ip)
}
else
{
- n = utf_ptr2len_check_len(buf + wlen, len - wlen);
+ n = utf_ptr2len_len(buf + wlen, len - wlen);
if (n > len - wlen)
{
/* We have an incomplete byte sequence at the end to
@@ -4711,7 +4711,7 @@ buf_write_bytes(ip)
* The buffer has been allocated to be big enough. */
while (fromlen > 0)
{
- n = utf_ptr2len_check_len(from, fromlen);
+ n = utf_ptr2len_len(from, fromlen);
if (n > (int)fromlen) /* incomplete byte sequence */
break;
u8c = utf_ptr2char(from);
@@ -6599,7 +6599,7 @@ forward_slash(fname)
for (p = fname; *p != NUL; ++p)
# ifdef FEAT_MBYTE
/* The Big5 encoding can have '\' in the trail byte. */
- if (enc_dbcs != 0 && (*mb_ptr2len_check)(p) > 1)
+ if (enc_dbcs != 0 && (*mb_ptr2len)(p) > 1)
++p;
else
# endif
@@ -8908,7 +8908,7 @@ file_pat_to_reg_pat(pat, pat_end, allow_dirs, no_bslash)
default:
size++;
# ifdef FEAT_MBYTE
- if (enc_dbcs != 0 && (*mb_ptr2len_check)(p) > 1)
+ if (enc_dbcs != 0 && (*mb_ptr2len)(p) > 1)
{
++p;
++size;
@@ -9045,7 +9045,7 @@ file_pat_to_reg_pat(pat, pat_end, allow_dirs, no_bslash)
break;
default:
# ifdef FEAT_MBYTE
- if (enc_dbcs != 0 && (*mb_ptr2len_check)(p) > 1)
+ if (enc_dbcs != 0 && (*mb_ptr2len)(p) > 1)
reg_pat[i++] = *p++;
else
# endif
diff --git a/src/fold.c b/src/fold.c
index cccc17e562..6731e6386a 100644
--- a/src/fold.c
+++ b/src/fold.c
@@ -1954,7 +1954,7 @@ get_foldtext(wp, lnum, lnume, foldinfo, buf)
# ifdef FEAT_MBYTE
int len;
- if (has_mbyte && (len = (*mb_ptr2len_check)(p)) > 1)
+ if (has_mbyte && (len = (*mb_ptr2len)(p)) > 1)
{
if (!vim_isprintc((*mb_ptr2char)(p)))
break;
diff --git a/src/getchar.c b/src/getchar.c
index 8f2df02dc7..085fc4dc68 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -562,14 +562,8 @@ AppendToRedobuffLit(s)
/* Handle a special or multibyte character. */
#ifdef FEAT_MBYTE
if (has_mbyte)
- {
- c = (*mb_ptr2char)(s);
- if (enc_utf8)
- /* Handle composing chars as well. */
- s += utf_ptr2len_check(s);
- else
- s += (*mb_ptr2len_check)(s);
- }
+ /* Handle composing chars separately. */
+ c = mb_cptr2char_adv(&s);
else
#endif
c = *s++;
@@ -2025,7 +2019,7 @@ vgetorpeek(advance)
* multi-byte char. Happens when mapping
* <M-a> and then changing 'encoding'. */
if (has_mbyte && MB_BYTE2LEN(c1)
- > (*mb_ptr2len_check)(mp->m_keys))
+ > (*mb_ptr2len)(mp->m_keys))
mlen = 0;
#endif
/*
@@ -2413,7 +2407,7 @@ vgetorpeek(advance)
(colnr_T)vcol);
#ifdef FEAT_MBYTE
if (has_mbyte)
- col += (*mb_ptr2len_check)(ptr + col);
+ col += (*mb_ptr2len)(ptr + col);
else
#endif
++col;
@@ -3105,7 +3099,7 @@ do_map(maptype, arg, mode, abbrev)
first = vim_iswordp(keys);
last = first;
- p = keys + mb_ptr2len_check(keys);
+ p = keys + (*mb_ptr2len)(keys);
n = 1;
while (p < keys + len)
{
@@ -3113,7 +3107,7 @@ do_map(maptype, arg, mode, abbrev)
last = vim_iswordp(p); /* type of last char */
if (same == -1 && last != first)
same = n - 1; /* count of same char type */
- p += mb_ptr2len_check(p);
+ p += (*mb_ptr2len)(p);
}
if (last && n > 2 && same >= 0 && same < n - 1)
{
@@ -4045,7 +4039,7 @@ check_abbr(c, ptr, col, mincol)
p = mb_prevptr(ptr, p);
if (vim_isspace(*p) || (!vim_abbr && is_id != vim_iswordp(p)))
{
- p += (*mb_ptr2len_check)(p);
+ p += (*mb_ptr2len)(p);
break;
}
++clen;
diff --git a/src/globals.h b/src/globals.h
index 971e3bd51a..60eff1f3c6 100644
--- a/src/globals.h
+++ b/src/globals.h
@@ -717,8 +717,11 @@ EXTERN vimconv_T output_conv; /* type of output conversion */
* (DBCS).
* The value is set in mb_init();
*/
-EXTERN int (*mb_ptr2len_check) __ARGS((char_u *p)) INIT(= latin_ptr2len_check);
+/* length of char in bytes, including following composing chars */
+EXTERN int (*mb_ptr2len) __ARGS((char_u *p)) INIT(= latin_ptr2len);
+/* byte length of char */
EXTERN int (*mb_char2len) __ARGS((int c)) INIT(= latin_char2len);
+/* convert char to bytes, return the length */
EXTERN int (*mb_char2b