diff src/charset.c @ 10724:ae1c6bf22e5f v8.0.0252

patch 8.0.0252: not properly recognizing word characters between 128 and 255 commit https://github.com/vim/vim/commit/4019cf90b8657d4ab1c39744db63550f44f405a2 Author: Bram Moolenaar <Bram@vim.org> Date: Sat Jan 28 16:39:34 2017 +0100 patch 8.0.0252: not properly recognizing word characters between 128 and 255 Problem: Characters below 256 that are not one byte are not always recognized as word characters. Solution: Make vim_iswordc() and vim_iswordp() work the same way. Add a test for this. (Ozaki Kiichi)
author Christian Brabandt <cb@256bit.org>
date Sat, 28 Jan 2017 16:45:04 +0100
parents 44a1661f4cfa
children c9da7f9137af
line wrap: on
line diff
--- a/src/charset.c
+++ b/src/charset.c
@@ -899,16 +899,17 @@ vim_iswordc(int c)
     int
 vim_iswordc_buf(int c, buf_T *buf)
 {
-#ifdef FEAT_MBYTE
     if (c >= 0x100)
     {
+#ifdef FEAT_MBYTE
 	if (enc_dbcs != 0)
 	    return dbcs_class((unsigned)c >> 8, (unsigned)(c & 0xff)) >= 2;
 	if (enc_utf8)
-	    return utf_class(c) >= 2;
+	    return utf_class_buf(c, buf) >= 2;
+#endif
+	return FALSE;
     }
-#endif
-    return (c > 0 && c < 0x100 && GET_CHARTAB(buf, c) != 0);
+    return (c > 0 && GET_CHARTAB(buf, c) != 0);
 }
 
 /*
@@ -917,21 +918,19 @@ vim_iswordc_buf(int c, buf_T *buf)
     int
 vim_iswordp(char_u *p)
 {
-#ifdef FEAT_MBYTE
-    if (has_mbyte && MB_BYTE2LEN(*p) > 1)
-	return mb_get_class(p) >= 2;
-#endif
-    return GET_CHARTAB(curbuf, *p) != 0;
+    return vim_iswordp_buf(p, curbuf);
 }
 
     int
 vim_iswordp_buf(char_u *p, buf_T *buf)
 {
+    int	c = *p;
+
 #ifdef FEAT_MBYTE
-    if (has_mbyte && MB_BYTE2LEN(*p) > 1)
-	return mb_get_class(p) >= 2;
+    if (has_mbyte && MB_BYTE2LEN(c) > 1)
+	c = (*mb_ptr2char)(p);
 #endif
-    return (GET_CHARTAB(buf, *p) != 0);
+    return vim_iswordc_buf(c, buf);
 }
 
 /*