Mercurial > vim
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); } /*