diff options
Diffstat (limited to 'data/vim/patches/8.1.0809')
-rw-r--r-- | data/vim/patches/8.1.0809 | 5622 |
1 files changed, 0 insertions, 5622 deletions
diff --git a/data/vim/patches/8.1.0809 b/data/vim/patches/8.1.0809 deleted file mode 100644 index f637051d0..000000000 --- a/data/vim/patches/8.1.0809 +++ /dev/null @@ -1,5622 +0,0 @@ -To: vim_dev@googlegroups.com -Subject: Patch 8.1.0809 -Fcc: outbox -From: Bram Moolenaar <Bram@moolenaar.net> -Mime-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit ------------- - -Patch 8.1.0809 -Problem: Too many #ifdefs. -Solution: Graduate FEAT_MBYTE, part 3. -Files: src/os_amiga.c, src/os_mswin.c, src/os_unix.c, src/os_w32exe.c, - src/os_win32.c, src/quickfix.c, src/regexp.c, src/regexp_nfa.c, - src/screen.c - - -*** ../vim-8.1.0808/src/os_amiga.c 2019-01-19 17:43:03.421449119 +0100 ---- src/os_amiga.c 2019-01-24 15:59:24.928700732 +0100 -*************** -*** 165,182 **** - - for (;;) /* repeat until we got a character */ - { -- # ifdef FEAT_MBYTE - len = Read(raw_in, (char *)buf, (long)maxlen / input_conv.vc_factor); -- # else -- len = Read(raw_in, (char *)buf, (long)maxlen); -- # endif - if (len > 0) - { -- #ifdef FEAT_MBYTE - /* Convert from 'termencoding' to 'encoding'. */ - if (input_conv.vc_type != CONV_NONE) - len = convert_input(buf, len, maxlen); -- #endif - return len; - } - } ---- 165,176 ---- -*** ../vim-8.1.0808/src/os_mswin.c 2019-01-13 23:38:33.403773217 +0100 ---- src/os_mswin.c 2019-01-24 16:01:16.035931440 +0100 -*************** -*** 282,288 **** - # else - if (title != NULL) - { -- # ifdef FEAT_MBYTE - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - { - /* Convert the title from 'encoding' to the active codepage. */ ---- 282,287 ---- -*************** -*** 295,301 **** - return; - } - } -- # endif - SetConsoleTitle((LPCSTR)title); - } - # endif ---- 294,299 ---- -*************** -*** 361,367 **** - else - #endif - { -- #ifdef FEAT_MBYTE - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - { - WCHAR *wname; ---- 359,364 ---- -*************** -*** 387,393 **** - vim_free(cname); - } - if (nResult == FAIL) /* fall back to non-wide function */ -- #endif - { - if (_fullpath((char *)buf, (const char *)fname, len - 1) == NULL) - { ---- 384,389 ---- -*************** -*** 415,428 **** - int - mch_isFullName(char_u *fname) - { -- #ifdef FEAT_MBYTE - /* WinNT and later can use _MAX_PATH wide characters for a pathname, which - * means that the maximum pathname is _MAX_PATH * 3 bytes when 'enc' is - * UTF-8. */ - char szName[_MAX_PATH * 3 + 1]; -- #else -- char szName[_MAX_PATH + 1]; -- #endif - - /* A name like "d:/foo" and "//server/share" is absolute */ - if ((fname[0] && fname[1] == ':' && (fname[2] == '/' || fname[2] == '\\')) ---- 411,420 ---- -*************** -*** 538,548 **** - return stat(name, stp); - } - -- #ifdef FEAT_MBYTE - static int - wstat_symlink_aware(const WCHAR *name, stat_T *stp) - { -! # if (defined(_MSC_VER) && (_MSC_VER < 1900)) || defined(__MINGW32__) - /* Work around for VC12 or earlier (and MinGW). _wstat() can't handle - * symlinks properly. - * VC9 or earlier: _wstat() doesn't support a symlink at all. It retrieves ---- 530,539 ---- - return stat(name, stp); - } - - static int - wstat_symlink_aware(const WCHAR *name, stat_T *stp) - { -! #if (defined(_MSC_VER) && (_MSC_VER < 1900)) || defined(__MINGW32__) - /* Work around for VC12 or earlier (and MinGW). _wstat() can't handle - * symlinks properly. - * VC9 or earlier: _wstat() doesn't support a symlink at all. It retrieves -*************** -*** 587,596 **** - return n; - } - } -! # endif - return _wstat(name, (struct _stat *)stp); - } -- #endif - - /* - * stat() can't handle a trailing '/' or '\', remove it first. ---- 578,586 ---- - return n; - } - } -! #endif - return _wstat(name, (struct _stat *)stp); - } - - /* - * stat() can't handle a trailing '/' or '\', remove it first. -*************** -*** 598,611 **** - int - vim_stat(const char *name, stat_T *stp) - { -- #ifdef FEAT_MBYTE - /* WinNT and later can use _MAX_PATH wide characters for a pathname, which - * means that the maximum pathname is _MAX_PATH * 3 bytes when 'enc' is - * UTF-8. */ - char_u buf[_MAX_PATH * 3 + 1]; -- #else -- char_u buf[_MAX_PATH + 1]; -- #endif - char_u *p; - - vim_strncpy((char_u *)buf, (char_u *)name, sizeof(buf) - 1); ---- 588,597 ---- -*************** -*** 628,634 **** - STRCAT(buf, "\\"); - } - } -- #ifdef FEAT_MBYTE - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - { - WCHAR *wp = enc_to_utf16(buf, NULL); ---- 614,619 ---- -*************** -*** 641,647 **** - return n; - } - } -- #endif - return stat_symlink_aware((char *)buf, stp); - } - ---- 626,631 ---- -*************** -*** 791,797 **** - if (*path == NUL) /* drive name only */ - return 0; - -- #ifdef FEAT_MBYTE - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - { - WCHAR *p = enc_to_utf16((char_u *)path, NULL); ---- 775,780 ---- -*************** -*** 804,810 **** - return n; - } - } -- #endif - - return chdir(path); /* let the normal chdir() do the rest */ - } ---- 787,792 ---- -*************** -*** 1145,1153 **** - #define IDC_PRINTTEXT2 402 - #define IDC_PROGRESS 403 - -- #if !defined(FEAT_MBYTE) -- # define vimSetDlgItemText(h, i, s) SetDlgItemText(h, i, s) -- #else - static BOOL - vimSetDlgItemText(HWND hDlg, int nIDDlgItem, char_u *s) - { ---- 1127,1132 ---- -*************** -*** 1166,1172 **** - } - return SetDlgItemText(hDlg, nIDDlgItem, (LPCSTR)s); - } -- #endif - - /* - * Convert BGR to RGB for Windows GDI calls ---- 1145,1150 ---- -*************** -*** 1563,1569 **** - char_u *printer_name = (char_u *)devname + devname->wDeviceOffset; - char_u *port_name = (char_u *)devname +devname->wOutputOffset; - char_u *text = (char_u *)_("to %s on %s"); -- #ifdef FEAT_MBYTE - char_u *printer_name_orig = printer_name; - char_u *port_name_orig = port_name; - ---- 1541,1546 ---- -*************** -*** 1580,1597 **** - if (to_free != NULL) - port_name = to_free; - } -- #endif - prt_name = alloc((unsigned)(STRLEN(printer_name) + STRLEN(port_name) - + STRLEN(text))); - if (prt_name != NULL) - wsprintf((char *)prt_name, (const char *)text, - printer_name, port_name); -- #ifdef FEAT_MBYTE - if (printer_name != printer_name_orig) - vim_free(printer_name); - if (port_name != port_name_orig) - vim_free(port_name); -- #endif - } - GlobalUnlock(prt_dlg.hDevNames); - ---- 1557,1571 ---- -*************** -*** 1680,1688 **** - { - int ret; - char szBuffer[300]; -- #if defined(FEAT_MBYTE) - WCHAR *wp = NULL; -- #endif - - hDlgPrint = CreateDialog(GetModuleHandle(NULL), TEXT("PrintDlgBox"), - prt_dlg.hwndOwner, PrintDlgProc); ---- 1654,1660 ---- -*************** -*** 1690,1696 **** - wsprintf(szBuffer, _("Printing '%s'"), gettail(psettings->jobname)); - vimSetDlgItemText(hDlgPrint, IDC_PRINTTEXT1, (char_u *)szBuffer); - -- #if defined(FEAT_MBYTE) - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - wp = enc_to_utf16(psettings->jobname, NULL); - if (wp != NULL) ---- 1662,1667 ---- -*************** -*** 1704,1710 **** - vim_free(wp); - } - else -- #endif - { - DOCINFO di; - ---- 1675,1680 ---- -*************** -*** 1767,1776 **** - int - mch_print_text_out(char_u *p, int len) - { -- #if defined(FEAT_PROPORTIONAL_FONTS) || defined(FEAT_MBYTE) - SIZE sz; -- #endif -- #if defined(FEAT_MBYTE) - WCHAR *wp = NULL; - int wlen = len; - ---- 1737,1743 ---- -*************** -*** 1801,1807 **** - } - return ret; - } -- #endif - TextOut(prt_dlg.hDC, prt_pos_x + prt_left_margin, - prt_pos_y + prt_top_margin, - (LPCSTR)p, len); ---- 1768,1773 ---- -*************** -*** 1873,1882 **** - CHAR buf[MAX_PATH]; // could have simply reused 'wsz'... - char_u *rfname = NULL; - int len; -- # ifdef FEAT_MBYTE - IShellLinkW *pslw = NULL; - WIN32_FIND_DATAW ffdw; // we get those free of charge -- # endif - - /* Check if the file name ends in ".lnk". Avoid calling - * CoCreateInstance(), it's quite slow. */ ---- 1839,1846 ---- -*************** -*** 1888,1894 **** - - CoInitialize(NULL); - -- # ifdef FEAT_MBYTE - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - { - // create a link manager object and request its interface ---- 1852,1857 ---- -*************** -*** 1930,1936 **** - } - goto shortcut_end; - } -- # endif - // create a link manager object and request its interface - hr = CoCreateInstance( - &CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, ---- 1893,1898 ---- -*************** -*** 1969,1978 **** - ppf->lpVtbl->Release(ppf); - if (psl != NULL) - psl->lpVtbl->Release(psl); -- # ifdef FEAT_MBYTE - if (pslw != NULL) - pslw->lpVtbl->Release(pslw); -- # endif - - CoUninitialize(); - return rfname; ---- 1931,1938 ---- -*************** -*** 2042,2054 **** - COPYDATASTRUCT data; - - data.dwData = COPYDATA_ENCODING; -- #ifdef FEAT_MBYTE - data.cbData = (DWORD)STRLEN(p_enc) + 1; - data.lpData = p_enc; -- #else -- data.cbData = (DWORD)STRLEN("latin1") + 1; -- data.lpData = "latin1"; -- #endif - (void)SendMessage(target, WM_COPYDATA, (WPARAM)message_window, - (LPARAM)(&data)); - } ---- 2002,2009 ---- -*************** -*** 2118,2128 **** - switch (data->dwData) - { - case COPYDATA_ENCODING: -- # ifdef FEAT_MBYTE - /* Remember the encoding that the client uses. */ - vim_free(client_enc); - client_enc = enc_canonize((char_u *)data->lpData); -- # endif - return 1; - - case COPYDATA_KEYS: ---- 2073,2081 ---- -*************** -*** 2954,2968 **** - int i; - int ret = FAIL; - static LOGFONT *lastlf = NULL; -- #ifdef FEAT_MBYTE - char_u *acpname = NULL; -- #endif - - *lf = s_lfDefault; - if (name == NULL) - return OK; - -- #ifdef FEAT_MBYTE - /* Convert 'name' from 'encoding' to the current codepage, because - * lf->lfFaceName uses the current codepage. - * TODO: Use Wide APIs instead of ANSI APIs. */ ---- 2907,2918 ---- -*************** -*** 2972,2978 **** - enc_to_acp(name, (int)STRLEN(name), &acpname, &len); - name = acpname; - } -- #endif - if (STRCMP(name, "*") == 0) - { - #if defined(FEAT_GUI_W32) ---- 2922,2927 ---- -*************** -*** 3112,3120 **** - if (lastlf != NULL) - mch_memmove(lastlf, lf, sizeof(LOGFONT)); - } -- #ifdef FEAT_MBYTE - vim_free(acpname); -- #endif - - return ret; - } ---- 3061,3067 ---- -*** ../vim-8.1.0808/src/os_unix.c 2019-01-22 21:45:36.553678901 +0100 ---- src/os_unix.c 2019-01-24 16:02:08.167571433 +0100 -*************** -*** 2054,2072 **** - retval = TRUE; - if (!test_only) - { -! #if defined(FEAT_XFONTSET) || defined(FEAT_MBYTE) -! if (text_prop.encoding == XA_STRING -! # ifdef FEAT_MBYTE -! && !has_mbyte -! # endif -! ) - { -- #endif - if (get_title) - oldtitle = vim_strsave((char_u *)text_prop.value); - else - oldicon = vim_strsave((char_u *)text_prop.value); -- #if defined(FEAT_XFONTSET) || defined(FEAT_MBYTE) - } - else - { ---- 2054,2065 ---- - retval = TRUE; - if (!test_only) - { -! if (text_prop.encoding == XA_STRING && !has_mbyte) - { - if (get_title) - oldtitle = vim_strsave((char_u *)text_prop.value); - else - oldicon = vim_strsave((char_u *)text_prop.value); - } - else - { -*************** -*** 2093,2099 **** - oldicon = vim_strsave((char_u *)text_prop.value); - } - } -- #endif - } - XFree((void *)text_prop.value); - } ---- 2086,2091 ---- -*************** -*** 2105,2111 **** - * systems X_HAVE_UTF8_STRING may be defined in a header file but - * Xutf8SetWMProperties() is not in the X11 library. Configure checks for - * that and defines HAVE_XUTF8SETWMPROPERTIES. */ -! #if defined(X_HAVE_UTF8_STRING) && defined(FEAT_MBYTE) - # if X_HAVE_UTF8_STRING && HAVE_XUTF8SETWMPROPERTIES - # define USE_UTF8_STRING - # endif ---- 2097,2103 ---- - * systems X_HAVE_UTF8_STRING may be defined in a header file but - * Xutf8SetWMProperties() is not in the X11 library. Configure checks for - * that and defines HAVE_XUTF8SETWMPROPERTIES. */ -! #if defined(X_HAVE_UTF8_STRING) - # if X_HAVE_UTF8_STRING && HAVE_XUTF8SETWMPROPERTIES - # define USE_UTF8_STRING - # endif -*************** -*** 4823,4831 **** - { - # define BUFLEN 100 /* length for buffer, pseudo tty limit is 128 */ - char_u buffer[BUFLEN + 1]; -- # ifdef FEAT_MBYTE - int buffer_off = 0; /* valid bytes in buffer[] */ -- # endif - char_u ta_buf[BUFLEN + 1]; /* TypeAHead */ - int ta_len = 0; /* valid bytes in ta_buf[] */ - int len; ---- 4815,4821 ---- -*************** -*** 5031,5041 **** - } - else if (ta_buf[i] == '\r') - ta_buf[i] = '\n'; -- # ifdef FEAT_MBYTE - if (has_mbyte) - i += (*mb_ptr2len_len)(ta_buf + i, - ta_len + len - i) - 1; -- # endif - } - - /* ---- 5021,5029 ---- -*************** -*** 5048,5054 **** - { - if (ta_buf[i] == '\n' || ta_buf[i] == '\b') - msg_putchar(ta_buf[i]); -- # ifdef FEAT_MBYTE - else if (has_mbyte) - { - int l = (*mb_ptr2len)(ta_buf + i); ---- 5036,5041 ---- -*************** -*** 5056,5062 **** - msg_outtrans_len(ta_buf + i, l); - i += l - 1; - } -- # endif - else - msg_outtrans_len(ta_buf + i, 1); - } ---- 5043,5048 ---- -*************** -*** 5114,5124 **** - while (RealWaitForChar(fromshell_fd, 10L, NULL, NULL)) - { - len = read_eintr(fromshell_fd, buffer -- # ifdef FEAT_MBYTE - + buffer_off, (size_t)(BUFLEN - buffer_off) -- # else -- , (size_t)BUFLEN -- # endif - ); - if (len <= 0) /* end of file or error */ - goto finished; ---- 5100,5106 ---- -*************** -*** 5138,5144 **** - ga_append(&ga, buffer[i]); - } - } -- # ifdef FEAT_MBYTE - else if (has_mbyte) - { - int l; ---- 5120,5125 ---- -*************** -*** 5181,5187 **** - } - buffer_off = 0; - } -- # endif /* FEAT_MBYTE */ - else - { - buffer[len] = NUL; ---- 5162,5167 ---- -*** ../vim-8.1.0808/src/os_w32exe.c 2017-02-01 13:42:23.000000000 +0100 ---- src/os_w32exe.c 2019-01-24 16:02:23.907462844 +0100 -*************** -*** 130,138 **** - free(argv); - if (tofree != NULL) - free(tofree); -- #ifdef FEAT_MBYTE - free_cmd_argsW(); -- #endif - - return 0; - } ---- 130,136 ---- -*** ../vim-8.1.0808/src/os_win32.c 2019-01-19 21:12:21.561634437 +0100 ---- src/os_win32.c 2019-01-24 16:05:55.678005815 +0100 -*************** -*** 452,462 **** - { - if (*p == '^' && vim_strchr(escaped, p[1]) != NULL) - mch_memmove(p, p + 1, l--); -- #ifdef FEAT_MBYTE - n = (*mb_ptr2len)(p); -- #else -- n = 1; -- #endif - p += n; - l -= n; - } ---- 452,458 ---- -*************** -*** 1890,1896 **** - { - int n = 1; - -- #ifdef FEAT_MBYTE - if (ch2 == NUL) - { - int i; ---- 1886,1891 ---- -*************** -*** 1912,1918 **** - } - } - else -- #endif - typeahead[typeaheadlen] = c; - if (ch2 != NUL) - { ---- 1907,1912 ---- -*************** -*** 1950,1966 **** - if ((modifiers & MOD_MASK_ALT) - && n == 1 - && (typeahead[typeaheadlen] & 0x80) == 0 -- #ifdef FEAT_MBYTE - && !enc_dbcs -- #endif - ) - { -- #ifdef FEAT_MBYTE - n = (*mb_char2bytes)(typeahead[typeaheadlen] | 0x80, - typeahead + typeaheadlen); -- #else -- typeahead[typeaheadlen] |= 0x80; -- #endif - modifiers &= ~MOD_MASK_ALT; - } - ---- 1944,1954 ---- -*************** -*** 2044,2050 **** - return FALSE; - } - -- #ifdef FEAT_MBYTE - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - { - WCHAR *p = enc_to_utf16((char_u *)name, NULL); ---- 2032,2037 ---- -*************** -*** 2073,2079 **** - return TRUE; - } - } -- #endif - - curpath = getenv("PATH"); - newpath = (char*)alloc((unsigned)(STRLEN(curpath) + 3)); ---- 2060,2065 ---- -*************** -*** 2768,2774 **** - } - - -- #ifdef FEAT_MBYTE - /* - * fname_casew(): Wide version of fname_case(). Set the case of the file name, - * if it already exists. When "len" is > 0, also expand short to long ---- 2754,2759 ---- -*************** -*** 2878,2884 **** - wcscpy(name, szTrueName); - return OK; - } -- #endif - - /* - * fname_case(): Set the case of the file name, if it already exists. ---- 2863,2868 ---- -*************** -*** 2906,2912 **** - - slash_adjust(name); - -- #ifdef FEAT_MBYTE - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - { - WCHAR *p = enc_to_utf16(name, NULL); ---- 2890,2895 ---- -*************** -*** 2933,2939 **** - } - return; - } -- #endif - - /* If 'enc' is utf-8, flen can be larger than _MAX_PATH. - * So we should check this after calling wide function. */ ---- 2916,2921 ---- -*************** -*** 2962,2968 **** - porigPrev = porig; - while (*porig != NUL && *porig != psepc) - { -- #ifdef FEAT_MBYTE - int l; - - if (enc_dbcs) ---- 2944,2949 ---- -*************** -*** 2972,2978 **** - *ptrue++ = *porig++; - } - else -- #endif - *ptrue++ = *porig++; - } - *ptrue = NUL; ---- 2953,2958 ---- -*************** -*** 3044,3050 **** - char szUserName[256 + 1]; /* UNLEN is 256 */ - DWORD cch = sizeof szUserName; - -- #ifdef FEAT_MBYTE - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - { - WCHAR wszUserName[256 + 1]; /* UNLEN is 256 */ ---- 3024,3029 ---- -*************** -*** 3062,3068 **** - } - } - } -- #endif - if (GetUserName(szUserName, &cch)) - { - vim_strncpy(s, (char_u *)szUserName, len - 1); ---- 3041,3046 ---- -*************** -*** 3083,3089 **** - { - DWORD cch = len; - -- #ifdef FEAT_MBYTE - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - { - WCHAR wszHostName[256 + 1]; ---- 3061,3066 ---- -*************** -*** 3101,3107 **** - } - } - } -- #endif - if (!GetComputerName((LPSTR)s, &cch)) - vim_strncpy(s, (char_u *)"PC (Win32 Vim)", len - 1); - } ---- 3078,3083 ---- -*************** -*** 3135,3141 **** - * But the Win32s known bug list says that getcwd() doesn't work - * so use the Win32 system call instead. <Negri> - */ -- #ifdef FEAT_MBYTE - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - { - WCHAR wbuf[_MAX_PATH + 1]; ---- 3111,3116 ---- -*************** -*** 3167,3173 **** - } - return FAIL; - } -- #endif - if (GetCurrentDirectory(len, (LPSTR)buf) == 0) - return FAIL; - lfnlen = GetLongPathNameA((LPCSTR)buf, (LPSTR)abuf, _MAX_PATH); ---- 3142,3147 ---- -*************** -*** 3205,3211 **** - { - long n = -1; - -- #ifdef FEAT_MBYTE - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - { - WCHAR *p = enc_to_utf16(name, NULL); ---- 3179,3184 ---- -*************** -*** 3219,3225 **** - } - } - if (n == -1) -- #endif - n = _chmod((const char *)name, perm); - if (n == -1) - return FAIL; ---- 3192,3197 ---- -*************** -*** 3290,3296 **** - int - mch_mkdir(char_u *name) - { -- #ifdef FEAT_MBYTE - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - { - WCHAR *p; ---- 3262,3267 ---- -*************** -*** 3303,3309 **** - vim_free(p); - return retval; - } -- #endif - return _mkdir((const char *)name); - } - ---- 3274,3279 ---- -*************** -*** 3314,3320 **** - int - mch_rmdir(char_u *name) - { -- #ifdef FEAT_MBYTE - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - { - WCHAR *p; ---- 3284,3289 ---- -*************** -*** 3327,3333 **** - vim_free(p); - return retval; - } -- #endif - return _rmdir((const char *)name); - } - ---- 3296,3301 ---- -*************** -*** 3353,3359 **** - int res = FALSE; - WIN32_FIND_DATAA findDataA; - DWORD fileFlags = 0, reparseTag = 0; -- #ifdef FEAT_MBYTE - WCHAR *wn = NULL; - WIN32_FIND_DATAW findDataW; - ---- 3321,3326 ---- -*************** -*** 3370,3376 **** - } - } - else -- #endif - { - hFind = FindFirstFile((LPCSTR)name, &findDataA); - if (hFind != INVALID_HANDLE_VALUE) ---- 3337,3342 ---- -*************** -*** 3415,3421 **** - { - HANDLE hFile; - int res = FILEINFO_READ_FAIL; -- #ifdef FEAT_MBYTE - WCHAR *wn = NULL; - - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) ---- 3381,3386 ---- -*************** -*** 3436,3442 **** - vim_free(wn); - } - else -- #endif - hFile = CreateFile((LPCSTR)fname, /* file name */ - GENERIC_READ, /* access mode */ - FILE_SHARE_READ | FILE_SHARE_WRITE, /* share mode */ ---- 3401,3406 ---- -*************** -*** 3466,3472 **** - win32_getattrs(char_u *name) - { - int attr; -- #ifdef FEAT_MBYTE - WCHAR *p = NULL; - - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) ---- 3430,3435 ---- -*************** -*** 3478,3484 **** - vim_free(p); - } - else -- #endif - attr = GetFileAttributes((char *)name); - - return attr; ---- 3441,3446 ---- -*************** -*** 3493,3499 **** - win32_setattrs(char_u *name, int attrs) - { - int res; -- #ifdef FEAT_MBYTE - WCHAR *p = NULL; - - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) ---- 3455,3460 ---- -*************** -*** 3505,3511 **** - vim_free(p); - } - else -- #endif - res = SetFileAttributes((char *)name, attrs); - - return res ? 0 : -1; ---- 3466,3471 ---- -*************** -*** 3621,3629 **** - { - HANDLE hFile; - int type; -- #ifdef FEAT_MBYTE - WCHAR *wn = NULL; -- #endif - - /* We can't open a file with a name "\\.\con" or "\\.\prn" and trying to - * read from it later will cause Vim to hang. Thus return NODE_WRITABLE ---- 3581,3587 ---- -*************** -*** 3631,3637 **** - if (STRNCMP(name, "\\\\.\\", 4) == 0) - return NODE_WRITABLE; - -- #ifdef FEAT_MBYTE - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - wn = enc_to_utf16(name, NULL); - ---- 3589,3594 ---- -*************** -*** 3647,3653 **** - vim_free(wn); - } - else -- #endif - hFile = CreateFile((LPCSTR)name, /* file name */ - GENERIC_WRITE, /* access mode */ - 0, /* share mode */ ---- 3604,3609 ---- -*************** -*** 3695,3701 **** - p = (struct my_acl *)alloc_clear((unsigned)sizeof(struct my_acl)); - if (p != NULL) - { -- # ifdef FEAT_MBYTE - WCHAR *wn = NULL; - - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) ---- 3651,3656 ---- -*************** -*** 3737,3743 **** - vim_free(wn); - } - else -- # endif - { - /* Try to retrieve the entire security descriptor. */ - err = GetNamedSecurityInfo( ---- 3692,3697 ---- -*************** -*** 3815,3823 **** - - if (p != NULL) - { -- # ifdef FEAT_MBYTE - WCHAR *wn = NULL; -- # endif - - /* Set security flags */ - if (p->pSidOwner) ---- 3769,3775 ---- -*************** -*** 3836,3842 **** - if (p->pSacl) - sec_info |= SACL_SECURITY_INFORMATION; - -- # ifdef FEAT_MBYTE - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - wn = enc_to_utf16(fname, NULL); - if (wn != NULL) ---- 3788,3793 ---- -*************** -*** 3853,3859 **** - vim_free(wn); - } - else -- # endif - { - (void)SetNamedSecurityInfo( - (LPSTR)fname, // Abstract filename ---- 3804,3809 ---- -*************** -*** 4211,4217 **** - LPVOID *env, - char *cwd) - { -- #ifdef FEAT_MBYTE - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - { - BOOL ret; ---- 4161,4166 ---- -*************** -*** 4247,4253 **** - return ret; - } - fallback: -- #endif - return CreateProcess( - NULL, /* Executable name */ - cmd, /* Command to execute */ ---- 4196,4201 ---- -*************** -*** 4267,4273 **** - char *cmd, - INT n_show_cmd) - { -- #ifdef FEAT_MBYTE - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - { - WCHAR *wcmd = enc_to_utf16((char_u *)cmd, NULL); ---- 4215,4220 ---- -*************** -*** 4279,4285 **** - return ret; - } - } -- #endif - return ShellExecute(NULL, NULL, cmd, NULL, NULL, n_show_cmd); - } - ---- 4226,4231 ---- -*************** -*** 4466,4485 **** - while (ret != 0 && availableBytes > 0) - { - repeatCount++; -! toRead = -! # ifdef FEAT_MBYTE -! (DWORD)(BUFLEN - *buffer_off); -! # else -! (DWORD)BUFLEN; -! # endif - toRead = availableBytes < toRead ? availableBytes : toRead; -! ReadFile(g_hChildStd_OUT_Rd, buffer -! # ifdef FEAT_MBYTE -! + *buffer_off, toRead -! # else -! , toRead -! # endif -! , &len, NULL); - - /* If we haven't read anything, there is a problem */ - if (len == 0) ---- 4412,4420 ---- - while (ret != 0 && availableBytes > 0) - { - repeatCount++; -! toRead = (DWORD)(BUFLEN - *buffer_off); - toRead = availableBytes < toRead ? availableBytes : toRead; -! ReadFile(g_hChildStd_OUT_Rd, buffer + *buffer_off, toRead , &len, NULL); - - /* If we haven't read anything, there is a problem */ - if (len == 0) -*************** -*** 4501,4507 **** - ga_append(ga, buffer[i]); - } - } -- # ifdef FEAT_MBYTE - else if (has_mbyte) - { - int l; ---- 4436,4441 ---- -*************** -*** 4545,4551 **** - } - *buffer_off = 0; - } -- # endif /* FEAT_MBYTE */ - else - { - buffer[len] = NUL; ---- 4479,4484 ---- -*************** -*** 4740,4750 **** - } - else if (ta_buf[i] == '\r') - ta_buf[i] = '\n'; -- # ifdef FEAT_MBYTE - if (has_mbyte) - i += (*mb_ptr2len_len)(ta_buf + i, - ta_len + len - i) - 1; -- # endif - } - - /* ---- 4673,4681 ---- -*************** -*** 4755,4761 **** - { - if (ta_buf[i] == '\n' || ta_buf[i] == '\b') - msg_putchar(ta_buf[i]); -- # ifdef FEAT_MBYTE - else if (has_mbyte) - { - int l = (*mb_ptr2len)(ta_buf + i); ---- 4686,4691 ---- -*************** -*** 4763,4769 **** - msg_outtrans_len(ta_buf + i, l); - i += l - 1; - } -- # endif - else - msg_outtrans_len(ta_buf + i, 1); - } ---- 4693,4698 ---- -*************** -*** 4857,4863 **** - } - #else - -- # ifdef FEAT_MBYTE - static int - mch_system(char *cmd, int options) - { ---- 4786,4791 ---- -*************** -*** 4873,4881 **** - } - return system(cmd); - } -- # else -- # define mch_system(c, o) system(c) -- # endif - - #endif - ---- 4801,4806 ---- -*************** -*** 4972,4978 **** - int tmode = cur_tmode; - #ifdef FEAT_TITLE - char szShellTitle[512]; -- # ifdef FEAT_MBYTE - int did_set_title = FALSE; - - /* Change the title to reflect that we are in a subshell. */ ---- 4897,4902 ---- -*************** -*** 5003,5009 **** - } - } - if (!did_set_title) -- # endif - /* Change the title to reflect that we are in a subshell. */ - if (GetConsoleTitle(szShellTitle, sizeof(szShellTitle) - 4) > 0) - { ---- 4927,4932 ---- -*************** -*** 5217,5223 **** - "External commands will not pause after completion.\n" - "See :help win32-vimrun for more information."); - char *title = _("Vim Warning"); -- # ifdef FEAT_MBYTE - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - { - WCHAR *wmsg = enc_to_utf16((char_u *)msg, NULL); ---- 5140,5145 ---- -*************** -*** 5229,5235 **** - vim_free(wtitle); - } - else -- # endif - MessageBox(NULL, msg, title, MB_ICONWARNING); - need_vimrun_warning = FALSE; - } ---- 5151,5156 ---- -*************** -*** 5294,5301 **** - DWORD dwFlagsAndAttributes) - { - HANDLE h; -- # ifdef FEAT_MBYTE - WCHAR *wn = NULL; - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - { - wn = enc_to_utf16(fname, NULL); ---- 5215,5222 ---- - DWORD dwFlagsAndAttributes) - { - HANDLE h; - WCHAR *wn = NULL; -+ - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - { - wn = enc_to_utf16(fname, NULL); -*************** -*** 5308,5314 **** - } - } - if (wn == NULL) -- # endif - h = CreateFile((LPCSTR)fname, dwDesiredAccess, dwShareMode, - lpSecurityAttributes, dwCreationDisposition, - dwFlagsAndAttributes, NULL); ---- 5229,5234 ---- -*************** -*** 6339,6345 **** - COORD coord = g_coord; - DWORD written; - -- #ifdef FEAT_MBYTE - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - { - static WCHAR *unicodebuf = NULL; ---- 6259,6264 ---- -*************** -*** 6392,6398 **** - } - } - else -- #endif - { - if (!USE_VTP) - { ---- 6311,6316 ---- -*************** -*** 6763,6772 **** - int - mch_remove(char_u *name) - { -- #ifdef FEAT_MBYTE - WCHAR *wn = NULL; - int n; -- #endif - - /* - * On Windows, deleting a directory's symbolic link is done by ---- 6681,6688 ---- -*************** -*** 6777,6783 **** - - win32_setattrs(name, FILE_ATTRIBUTE_NORMAL); - -- #ifdef FEAT_MBYTE - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - { - wn = enc_to_utf16(name, NULL); ---- 6693,6698 ---- -*************** -*** 6788,6794 **** - return n; - } - } -- #endif - return DeleteFile((LPCSTR)name) ? 0 : -1; - } - ---- 6703,6708 ---- -*************** -*** 6839,6845 **** - return (long_u)((ms.ullTotalPhys - WINNT_RESERVE_BYTES) / 1024); - } - -- #ifdef FEAT_MBYTE - /* - * Same code as below, but with wide functions and no comments. - * Return 0 for success, non-zero for failure. ---- 6753,6758 ---- -*************** -*** 6893,6899 **** - - return 0; - } -- #endif - - - /* ---- 6806,6811 ---- -*************** -*** 6924,6930 **** - char szNewPath[_MAX_PATH+1]; - char *pszFilePart; - HANDLE hf; -- #ifdef FEAT_MBYTE - WCHAR *wold = NULL; - WCHAR *wnew = NULL; - int retval = -1; ---- 6836,6841 ---- -*************** -*** 6939,6945 **** - vim_free(wnew); - return retval; - } -- #endif - - /* - * No need to play tricks unless the file name contains a "~" as the ---- 6850,6855 ---- -*************** -*** 7024,7048 **** - { - HANDLE hFile; - int retval = -1; /* default: fail */ -- #ifdef FEAT_MBYTE - WCHAR *wn = NULL; - - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - wn = enc_to_utf16((char_u *)n, NULL); -- #endif - - if (mch_isdir((char_u *)n)) - { - char TempName[_MAX_PATH + 16] = ""; -- #ifdef FEAT_MBYTE - WCHAR TempNameW[_MAX_PATH + 16] = L""; -- #endif - - if (p & R_OK) - { - /* Read check is performed by seeing if we can do a find file on - * the directory for any file. */ -- #ifdef FEAT_MBYTE - if (wn != NULL) - { - int i; ---- 6934,6953 ---- -*************** -*** 7062,7068 **** - (void)FindClose(hFile); - } - else -- #endif - { - char *pch; - WIN32_FIND_DATA d; ---- 6967,6972 ---- -*************** -*** 7087,7093 **** - * directories on read-only network shares. However, in - * directories whose ACL allows writes but denies deletes will end - * up keeping the temporary file :-(. */ -- #ifdef FEAT_MBYTE - if (wn != NULL) - { - if (!GetTempFileNameW(wn, L"VIM", 0, TempNameW)) ---- 6991,6996 ---- -*************** -*** 7096,7102 **** - DeleteFileW(TempNameW); - } - else -- #endif - { - if (!GetTempFileName(n, "VIM", 0, TempName)) - goto getout; ---- 6999,7004 ---- -*************** -*** 7114,7125 **** - DWORD access_mode = ((p & W_OK) ? GENERIC_WRITE : 0) - | ((p & R_OK) ? GENERIC_READ : 0); - -- #ifdef FEAT_MBYTE - if (wn != NULL) - hFile = CreateFileW(wn, access_mode, share_mode, - NULL, OPEN_EXISTING, 0, NULL); - else -- #endif - hFile = CreateFile(n, access_mode, share_mode, - NULL, OPEN_EXISTING, 0, NULL); - if (hFile == INVALID_HANDLE_VALUE) ---- 7016,7025 ---- -*************** -*** 7129,7141 **** - - retval = 0; /* success */ - getout: -- #ifdef FEAT_MBYTE - vim_free(wn); -- #endif - return retval; - } - -- #if defined(FEAT_MBYTE) || defined(PROTO) - /* - * Version of open() that may use UTF-16 file name. - */ ---- 7029,7038 ---- -*************** -*** 7143,7149 **** - mch_open(const char *name, int flags, int mode) - { - /* _wopen() does not work with Borland C 5.5: creates a read-only file. */ -! # ifndef __BORLANDC__ - WCHAR *wn; - int f; - ---- 7040,7046 ---- - mch_open(const char *name, int flags, int mode) - { - /* _wopen() does not work with Borland C 5.5: creates a read-only file. */ -! #ifndef __BORLANDC__ - WCHAR *wn; - int f; - -*************** -*** 7157,7163 **** - return f; - } - } -! # endif - - /* open() can open a file which name is longer than _MAX_PATH bytes - * and shorter than _MAX_PATH characters successfully, but sometimes it ---- 7054,7060 ---- - return f; - } - } -! #endif - - /* open() can open a file which name is longer than _MAX_PATH bytes - * and shorter than _MAX_PATH characters successfully, but sometimes it -*************** -*** 7180,7186 **** - - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - { -! # if defined(DEBUG) && _MSC_VER >= 1400 - /* Work around an annoying assertion in the Microsoft debug CRT - * when mode's text/binary setting doesn't match _get_fmode(). */ - char newMode = mode[strlen(mode) - 1]; ---- 7077,7083 ---- - - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - { -! #if defined(DEBUG) && _MSC_VER >= 1400 - /* Work around an annoying assertion in the Microsoft debug CRT - * when mode's text/binary setting doesn't match _get_fmode(). */ - char newMode = mode[strlen(mode) - 1]; -*************** -*** 7191,7197 **** - _set_fmode(_O_TEXT); - else if (newMode == 'b') - _set_fmode(_O_BINARY); -! # endif - wn = enc_to_utf16((char_u *)name, NULL); - wm = enc_to_utf16((char_u *)mode, NULL); - if (wn != NULL && wm != NULL) ---- 7088,7094 ---- - _set_fmode(_O_TEXT); - else if (newMode == 'b') - _set_fmode(_O_BINARY); -! #endif - wn = enc_to_utf16((char_u *)name, NULL); - wm = enc_to_utf16((char_u *)mode, NULL); - if (wn != NULL && wm != NULL) -*************** -*** 7199,7207 **** - vim_free(wn); - vim_free(wm); - -! # if defined(DEBUG) && _MSC_VER >= 1400 - _set_fmode(oldMode); -! # endif - return f; - } - ---- 7096,7104 ---- - vim_free(wn); - vim_free(wm); - -! #if defined(DEBUG) && _MSC_VER >= 1400 - _set_fmode(oldMode); -! #endif - return f; - } - -*************** -*** 7214,7222 **** - - return fopen(name, mode); - } -- #endif - -- #ifdef FEAT_MBYTE - /* - * SUB STREAM (aka info stream) handling: - * ---- 7111,7117 ---- -*************** -*** 7360,7366 **** - vim_free(fromw); - vim_free(tow); - } -- #endif - - /* - * Copy file attributes from file "from" to file "to". ---- 7255,7260 ---- -*************** -*** 7370,7380 **** - int - mch_copy_file_attribute(char_u *from, char_u *to) - { -- #ifdef FEAT_MBYTE - /* File streams only work on Windows NT and later. */ - PlatformId(); - copy_infostreams(from, to); -- #endif - return 0; - } - ---- 7264,7272 ---- -*************** -*** 7464,7470 **** - #endif - - -- #if defined(FEAT_MBYTE) || defined(PROTO) - /* - * The command line arguments in UCS2 - */ ---- 7356,7361 ---- -*************** -*** 7691,7697 **** - - set_alist_count(); - } -- #endif - - int - mch_setenv(char *var, char *value, int x) ---- 7582,7587 ---- -*************** -*** 7704,7710 **** - - sprintf((char *)envbuf, "%s=%s", var, value); - -- #ifdef FEAT_MBYTE - if (enc_codepage >= 0 && (int)GetACP() != enc_codepage) - { - WCHAR *p = enc_to_utf16(envbuf, NULL); ---- 7594,7599 ---- -*************** -*** 7713,7726 **** - if (p == NULL) - return -1; - _wputenv(p); -! # ifdef libintl_wputenv - libintl_wputenv(p); -! # endif - /* Unlike Un*x systems, we can free the string for _wputenv(). */ - vim_free(p); - } - else -- #endif - { - _putenv((char *)envbuf); - #ifdef libintl_putenv ---- 7602,7614 ---- - if (p == NULL) - return -1; - _wputenv(p); -! #ifdef libintl_wputenv - libintl_wputenv(p); -! #endif - /* Unlike Un*x systems, we can free the string for _wputenv(). */ - vim_free(p); - } - else - { - _putenv((char *)envbuf); - #ifdef libintl_putenv -*** ../vim-8.1.0808/src/quickfix.c 2019-01-19 17:43:03.425449092 +0100 ---- src/quickfix.c 2019-01-24 16:07:06.165522202 +0100 -*************** -*** 804,810 **** - else - state->linebuf = IObuff; - -- #ifdef FEAT_MBYTE - // Convert a line if it contains a non-ASCII character. - if (state->vc.vc_type != CONV_NONE && has_non_ascii(state->linebuf)) - { ---- 804,809 ---- -*************** -*** 827,833 **** - } - } - } -- #endif - - return QF_OK; - } ---- 826,831 ---- -*************** -*** 872,880 **** - #endif - } - -- #ifdef FEAT_MBYTE - remove_bom(state->linebuf); -- #endif - - return QF_OK; - } ---- 870,876 ---- -*************** -*** 1538,1548 **** - linenr_T lnumfirst, - linenr_T lnumlast) - { -- #ifdef FEAT_MBYTE - pstate->vc.vc_type = CONV_NONE; - if (enc != NULL && *enc != NUL) - convert_setup(&pstate->vc, enc, p_enc); -- #endif - - if (efile != NULL && (pstate->fd = mch_fopen((char *)efile, "r")) == NULL) - { ---- 1534,1542 ---- -*************** -*** 1576,1585 **** - fclose(pstate->fd); - - vim_free(pstate->growbuf); -- #ifdef FEAT_MBYTE - if (pstate->vc.vc_type != CONV_NONE) - convert_setup(&pstate->vc, NULL, NULL); -- #endif - } - - /* ---- 1570,1577 ---- -*************** -*** 4690,4698 **** - return; - #endif - } -- #ifdef FEAT_MBYTE - enc = (*curbuf->b_p_menc != NUL) ? curbuf->b_p_menc : p_menc; -- #endif - - if (is_loclist_cmd(eap->cmdidx)) - wp = curwin; ---- 4682,4688 ---- -*************** -*** 5032,5040 **** - } - if (au_name != NULL) - apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name, NULL, FALSE, curbuf); -- #ifdef FEAT_MBYTE - enc = (*curbuf->b_p_menc != NUL) ? curbuf->b_p_menc : p_menc; -- #endif - #ifdef FEAT_BROWSE - if (cmdmod.browse) - { ---- 5022,5028 ---- -*************** -*** 7035,7043 **** - hgr_search_file( - qf_info_T *qi, - char_u *fname, -- #ifdef FEAT_MBYTE - vimconv_T *p_vc, -- #endif - regmatch_T *p_regmatch) - { - FILE *fd; ---- 7023,7029 ---- -*************** -*** 7051,7057 **** - while (!vim_fgets(IObuff, IOSIZE, fd) && !got_int) - { - char_u *line = IObuff; -! #ifdef FEAT_MBYTE - // Convert a line if 'encoding' is not utf-8 and - // the line contains a non-ASCII character. - if (p_vc->vc_type != CONV_NONE ---- 7037,7043 ---- - while (!vim_fgets(IObuff, IOSIZE, fd) && !got_int) - { - char_u *line = IObuff; -! - // Convert a line if 'encoding' is not utf-8 and - // the line contains a non-ASCII character. - if (p_vc->vc_type != CONV_NONE -*************** -*** 7061,7067 **** - if (line == NULL) - line = IObuff; - } -- #endif - - if (vim_regexec(p_regmatch, line, (colnr_T)0)) - { ---- 7047,7052 ---- -*************** -*** 7089,7105 **** - ) == FAIL) - { - got_int = TRUE; -- #ifdef FEAT_MBYTE - if (line != IObuff) - vim_free(line); -- #endif - break; - } - } -- #ifdef FEAT_MBYTE - if (line != IObuff) - vim_free(line); -- #endif - ++lnum; - line_breakcheck(); - } ---- 7074,7086 ---- -*************** -*** 7114,7123 **** - hgr_search_files_in_dir( - qf_info_T *qi, - char_u *dirname, -! regmatch_T *p_regmatch -! #ifdef FEAT_MBYTE -! , vimconv_T *p_vc -! #endif - #ifdef FEAT_MULTI_LANG - , char_u *lang - #endif ---- 7095,7102 ---- - hgr_search_files_in_dir( - qf_info_T *qi, - char_u *dirname, -! regmatch_T *p_regmatch, -! vimconv_T *p_vc - #ifdef FEAT_MULTI_LANG - , char_u *lang - #endif -*************** -*** 7147,7157 **** - continue; - #endif - -! hgr_search_file(qi, fnames[fi], -! #ifdef FEAT_MBYTE -! p_vc, -! #endif -! p_regmatch); - } - FreeWild(fcount, fnames); - } ---- 7126,7132 ---- - continue; - #endif - -! hgr_search_file(qi, fnames[fi], p_vc, p_regmatch); - } - FreeWild(fcount, fnames); - } -*************** -*** 7168,7174 **** - { - char_u *p; - -- #ifdef FEAT_MBYTE - vimconv_T vc; - - // Help files are in utf-8 or latin1, convert lines when 'encoding' ---- 7143,7148 ---- -*************** -*** 7176,7182 **** - vc.vc_type = CONV_NONE; - if (!enc_utf8) - convert_setup(&vc, (char_u *)"utf-8", p_enc); -- #endif - - // Go through all the directories in 'runtimepath' - p = p_rtp; ---- 7150,7155 ---- -*************** -*** 7184,7203 **** - { - copy_option_part(&p, NameBuff, MAXPATHL, ","); - -! hgr_search_files_in_dir(qi, NameBuff, p_regmatch -! #ifdef FEAT_MBYTE -! , &vc -! #endif - #ifdef FEAT_MULTI_LANG - , lang - #endif - ); - } - -- #ifdef FEAT_MBYTE - if (vc.vc_type != CONV_NONE) - convert_setup(&vc, NULL, NULL); -- #endif - } - - /* ---- 7157,7171 ---- - { - copy_option_part(&p, NameBuff, MAXPATHL, ","); - -! hgr_search_files_in_dir(qi, NameBuff, p_regmatch, &vc - #ifdef FEAT_MULTI_LANG - , lang - #endif - ); - } - - if (vc.vc_type != CONV_NONE) - convert_setup(&vc, NULL, NULL); - } - - /* -*** ../vim-8.1.0808/src/regexp.c 2019-01-20 15:30:36.893328693 +0100 ---- src/regexp.c 2019-01-24 16:11:49.839580685 +0100 -*************** -*** 359,367 **** - - static char_u e_missingbracket[] = N_("E769: Missing ] after %s["); - static char_u e_reverse_range[] = N_("E944: Reverse range in character class"); -- #ifdef FEAT_MBYTE - static char_u e_large_class[] = N_("E945: Range too large in character class"); -- #endif - static char_u e_unmatchedpp[] = N_("E53: Unmatched %s%%("); - static char_u e_unmatchedp[] = N_("E54: Unmatched %s("); - static char_u e_unmatchedpar[] = N_("E55: Unmatched %s)"); ---- 359,365 ---- -*************** -*** 561,587 **** - done = TRUE; - } - -! #ifdef FEAT_MBYTE -! # define ri_digit(c) (c < 0x100 && (class_tab[c] & RI_DIGIT)) -! # define ri_hex(c) (c < 0x100 && (class_tab[c] & RI_HEX)) -! # define ri_octal(c) (c < 0x100 && (class_tab[c] & RI_OCTAL)) -! # define ri_word(c) (c < 0x100 && (class_tab[c] & RI_WORD)) -! # define ri_head(c) (c < 0x100 && (class_tab[c] & RI_HEAD)) -! # define ri_alpha(c) (c < 0x100 && (class_tab[c] & RI_ALPHA)) -! # define ri_lower(c) (c < 0x100 && (class_tab[c] & RI_LOWER)) -! # define ri_upper(c) (c < 0x100 && (class_tab[c] & RI_UPPER)) -! # define ri_white(c) (c < 0x100 && (class_tab[c] & RI_WHITE)) -! #else -! # define ri_digit(c) (class_tab[c] & RI_DIGIT) -! # define ri_hex(c) (class_tab[c] & RI_HEX) -! # define ri_octal(c) (class_tab[c] & RI_OCTAL) -! # define ri_word(c) (class_tab[c] & RI_WORD) -! # define ri_head(c) (class_tab[c] & RI_HEAD) -! # define ri_alpha(c) (class_tab[c] & RI_ALPHA) -! # define ri_lower(c) (class_tab[c] & RI_LOWER) -! # define ri_upper(c) (class_tab[c] & RI_UPPER) -! # define ri_white(c) (class_tab[c] & RI_WHITE) -! #endif - - /* flags for regflags */ - #define RF_ICASE 1 /* ignore case */ ---- 559,573 ---- - done = TRUE; - } - -! #define ri_digit(c) (c < 0x100 && (class_tab[c] & RI_DIGIT)) -! #define ri_hex(c) (c < 0x100 && (class_tab[c] & RI_HEX)) -! #define ri_octal(c) (c < 0x100 && (class_tab[c] & RI_OCTAL)) -! #define ri_word(c) (c < 0x100 && (class_tab[c] & RI_WORD)) -! #define ri_head(c) (c < 0x100 && (class_tab[c] & RI_HEAD)) -! #define ri_alpha(c) (c < 0x100 && (class_tab[c] & RI_ALPHA)) -! #define ri_lower(c) (c < 0x100 && (class_tab[c] & RI_LOWER)) -! #define ri_upper(c) (c < 0x100 && (class_tab[c] & RI_UPPER)) -! #define ri_white(c) (c < 0x100 && (class_tab[c] & RI_WHITE)) - - /* flags for regflags */ - #define RF_ICASE 1 /* ignore case */ -*************** -*** 698,718 **** - static char_u *regpiece(int *); - static char_u *regatom(int *); - static char_u *regnode(int); -- #ifdef FEAT_MBYTE - static int use_multibytecode(int c); -- #endif - static int prog_magic_wrong(void); - static char_u *regnext(char_u *); - static void regc(int b); -- #ifdef FEAT_MBYTE - static void regmbc(int c); -! # define REGMBC(x) regmbc(x); -! # define CASEMBC(x) case x: -! #else -! # define regmbc(c) regc(c) -! # define REGMBC(x) -! # define CASEMBC(x) -! #endif - static void reginsert(int, char_u *); - static void reginsert_nr(int op, long val, char_u *opnd); - static void reginsert_limits(int, long, long, char_u *); ---- 684,696 ---- - static char_u *regpiece(int *); - static char_u *regatom(int *); - static char_u *regnode(int); - static int use_multibytecode(int c); - static int prog_magic_wrong(void); - static char_u *regnext(char_u *); - static void regc(int b); - static void regmbc(int c); -! #define REGMBC(x) regmbc(x); -! #define CASEMBC(x) case x: - static void reginsert(int, char_u *); - static void reginsert_nr(int op, long val, char_u *opnd); - static void reginsert_limits(int, long, long, char_u *); -*************** -*** 747,763 **** - - if (p[1] == '=') - { -- #ifdef FEAT_MBYTE - if (has_mbyte) - l = (*mb_ptr2len)(p + 2); -- #endif - if (p[l + 2] == '=' && p[l + 3] == ']') - { -- #ifdef FEAT_MBYTE - if (has_mbyte) - c = mb_ptr2char(p + 2); - else -- #endif - c = p[2]; - *pp += l + 4; - return c; ---- 725,737 ---- -*************** -*** 798,807 **** - static void - reg_equi_class(int c) - { -- #ifdef FEAT_MBYTE - if (enc_utf8 || STRCMP(p_enc, "latin1") == 0 - || STRCMP(p_enc, "iso-8859-15") == 0) -- #endif - { - #ifdef EBCDIC - int i; ---- 772,779 ---- -*************** -*** 1134,1150 **** - - if (p[0] != NUL && p[1] == '.') - { -- #ifdef FEAT_MBYTE - if (has_mbyte) - l = (*mb_ptr2len)(p + 2); -- #endif - if (p[l + 2] == '.' && p[l + 3] == ']') - { -- #ifdef FEAT_MBYTE - if (has_mbyte) - c = mb_ptr2char(p + 2); - else -- #endif - c = p[2]; - *pp += l + 4; - return c; ---- 1106,1118 ---- -*************** -*** 1171,1179 **** - static char_u * - skip_anyof(char_u *p) - { -- #ifdef FEAT_MBYTE - int l; -- #endif - - if (*p == '^') /* Complement of range. */ - ++p; ---- 1139,1145 ---- -*************** -*** 1181,1191 **** - ++p; - while (*p != NUL && *p != ']') - { -- #ifdef FEAT_MBYTE - if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1) - p += l; - else -- #endif - if (*p == '-') - { - ++p; ---- 1147,1155 ---- -*************** -*** 1395,1405 **** - - if (OP(scan) == EXACTLY) - { -- #ifdef FEAT_MBYTE - if (has_mbyte) - r->regstart = (*mb_ptr2char)(OPERAND(scan)); - else -- #endif - r->regstart = *OPERAND(scan); - } - else if ((OP(scan) == BOW ---- 1359,1367 ---- -*************** -*** 1409,1419 **** - || OP(scan) == MCLOSE + 0 || OP(scan) == NCLOSE) - && OP(regnext(scan)) == EXACTLY) - { -- #ifdef FEAT_MBYTE - if (has_mbyte) - r->regstart = (*mb_ptr2char)(OPERAND(regnext(scan))); - else -- #endif - r->regstart = *OPERAND(regnext(scan)); - } - ---- 1371,1379 ---- -*************** -*** 1696,1704 **** - cont = FALSE; - break; - case Magic('Z'): -- #ifdef FEAT_MBYTE - regflags |= RF_ICOMBINE; -- #endif - skipchr_keepstart(); - break; - case Magic('c'): ---- 1656,1662 ---- -*************** -*** 2008,2014 **** - p = vim_strchr(classchars, no_Magic(c)); - if (p == NULL) - EMSG_RET_NULL(_("E63: invalid use of \\_")); -! #ifdef FEAT_MBYTE - /* When '.' is followed by a composing char ignore the dot, so that - * the composing char is matched here. */ - if (enc_utf8 && c == Magic('.') && utf_iscomposing(peekchr())) ---- 1966,1972 ---- - p = vim_strchr(classchars, no_Magic(c)); - if (p == NULL) - EMSG_RET_NULL(_("E63: invalid use of \\_")); -! - /* When '.' is followed by a composing char ignore the dot, so that - * the composing char is matched here. */ - if (enc_utf8 && c == Magic('.') && utf_iscomposing(peekchr())) -*************** -*** 2016,2022 **** - c = getchr(); - goto do_multibyte; - } -- #endif - ret = regnode(classcodes[p - classchars] + extra); - *flagp |= HASWIDTH | SIMPLE; - break; ---- 1974,1979 ---- -*************** -*** 2268,2287 **** - EMSG2_RET_NULL( - _("E678: Invalid character after %s%%[dxouU]"), - reg_magic == MAGIC_ALL); -- #ifdef FEAT_MBYTE - if (use_multibytecode(i)) - ret = regnode(MULTIBYTECODE); - else -- #endif - ret = regnode(EXACTLY); - if (i == 0) - regc(0x0a); - else -- #ifdef FEAT_MBYTE - regmbc(i); -- #else -- regc(i); -- #endif - regc(NUL); - *flagp |= HASWIDTH; - break; ---- 2225,2238 ---- -*************** -*** 2403,2413 **** - endc = get_coll_element(®parse); - if (endc == 0) - { -- #ifdef FEAT_MBYTE - if (has_mbyte) - endc = mb_ptr2char_adv(®parse); - else -- #endif - endc = *regparse++; - } - ---- 2354,2362 ---- -*************** -*** 2417,2423 **** - - if (startc > endc) - EMSG_RET_NULL(_(e_reverse_range)); -- #ifdef FEAT_MBYTE - if (has_mbyte && ((*mb_char2len)(startc) > 1 - || (*mb_char2len)(endc) > 1)) - { ---- 2366,2371 ---- -*************** -*** 2428,2434 **** - regmbc(startc); - } - else -- #endif - { - #ifdef EBCDIC - int alpha_only = FALSE; ---- 2376,2381 ---- -*************** -*** 2488,2498 **** - if (startc == 0) - regc(0x0a); - else -- #ifdef FEAT_MBYTE - regmbc(startc); -- #else -- regc(startc); -- #endif - } - else - { ---- 2435,2441 ---- -*************** -*** 2606,2612 **** - } - else - { -- #ifdef FEAT_MBYTE - if (has_mbyte) - { - int len; ---- 2549,2554 ---- -*************** -*** 2621,2627 **** - regc(*regparse++); - } - else -- #endif - { - startc = *regparse++; - regc(startc); ---- 2563,2568 ---- -*************** -*** 2645,2651 **** - { - int len; - -- #ifdef FEAT_MBYTE - /* A multi-byte character is handled as a separate atom if it's - * before a multi and when it's a composing char. */ - if (use_multibytecode(c)) ---- 2586,2591 ---- -*************** -*** 2656,2662 **** - *flagp |= HASWIDTH | SIMPLE; - break; - } -- #endif - - ret = regnode(EXACTLY); - ---- 2596,2601 ---- -*************** -*** 2675,2681 **** - && !is_Magic(c))); ++len) - { - c = no_Magic(c); -- #ifdef FEAT_MBYTE - if (has_mbyte) - { - regmbc(c); ---- 2614,2619 ---- -*************** -*** 2695,2701 **** - } - } - else -- #endif - regc(c); - c = getchr(); - } ---- 2633,2638 ---- -*************** -*** 2712,2718 **** - return ret; - } - -- #ifdef FEAT_MBYTE - /* - * Return TRUE if MULTIBYTECODE should be used instead of EXACTLY for - * character "c". ---- 2649,2654 ---- -*************** -*** 2724,2730 **** - && (re_multi_type(peekchr()) != NOT_MULTI - || (enc_utf8 && utf_iscomposing(c))); - } -- #endif - - /* - * Emit a node. ---- 2660,2665 ---- -*************** -*** 2759,2765 **** - *regcode++ = b; - } - -- #ifdef FEAT_MBYTE - /* - * Emit (if appropriate) a multi-byte character of code - */ ---- 2694,2699 ---- -*************** -*** 2773,2779 **** - else - regcode += (*mb_char2bytes)(c, regcode); - } -- #endif - - /* - * Insert an operator in front of already-emitted operand ---- 2707,2712 ---- -*************** -*** 3139,3159 **** - * Next character can never be (made) magic? - * Then backslashing it won't do anything. - */ -- #ifdef FEAT_MBYTE - if (has_mbyte) - curchr = (*mb_ptr2char)(regparse + 1); - else -- #endif - curchr = c; - } - break; - } - -- #ifdef FEAT_MBYTE - default: - if (has_mbyte) - curchr = (*mb_ptr2char)(regparse); -- #endif - } - } - ---- 3072,3088 ---- -*************** -*** 3173,3186 **** - prevchr_len = 0; - if (regparse[prevchr_len] != NUL) - { -- #ifdef FEAT_MBYTE - if (enc_utf8) - /* exclude composing chars that mb_ptr2len does include */ - prevchr_len += utf_ptr2len(regparse + prevchr_len); - else if (has_mbyte) - prevchr_len += (*mb_ptr2len)(regparse + prevchr_len); - else -- #endif - ++prevchr_len; - } - regparse += prevchr_len; ---- 3102,3113 ---- -*************** -*** 3538,3548 **** - * contains '\c' or '\C' the value is overruled. */ - int reg_ic; - -- #ifdef FEAT_MBYTE - /* Similar to "reg_ic", but only for 'combining' characters. Set with \Z - * flag in the regexp. Defaults to false, always. */ - int reg_icombine; -- #endif - - /* Copy of "rmm_maxcol": maximum column to search for a match. Zero when - * there is no maximum. */ ---- 3465,3473 ---- -*************** -*** 3714,3722 **** - rex.reg_buf = curbuf; - rex.reg_win = NULL; - rex.reg_ic = rmp->rm_ic; -- #ifdef FEAT_MBYTE - rex.reg_icombine = FALSE; -- #endif - rex.reg_maxcol = 0; - - return bt_regexec_both(line, col, NULL, NULL); ---- 3639,3645 ---- -*************** -*** 3748,3756 **** - rex.reg_maxline = rex.reg_buf->b_ml.ml_line_count - lnum; - rex.reg_line_lbr = FALSE; - rex.reg_ic = rmp->rmm_ic; -- #ifdef FEAT_MBYTE - rex.reg_icombine = FALSE; -- #endif - rex.reg_maxcol = rmp->rmm_maxcol; - - return bt_regexec_both(NULL, col, tm, timed_out); ---- 3671,3677 ---- -*************** -*** 3827,3848 **** - else if (prog->regflags & RF_NOICASE) - rex.reg_ic = FALSE; - -- #ifdef FEAT_MBYTE - /* If pattern contains "\Z" overrule value of rex.reg_icombine */ - if (prog->regflags & RF_ICOMBINE) - rex.reg_icombine = TRUE; -- #endif - - /* If there is a "must appear" string, look for it. */ - if (prog->regmust != NULL) - { - int c; - -- #ifdef FEAT_MBYTE - if (has_mbyte) - c = (*mb_ptr2char)(prog->regmust); - else -- #endif - c = *prog->regmust; - s = line + col; - ---- 3748,3765 ---- -*************** -*** 3850,3867 **** - * This is used very often, esp. for ":global". Use three versions of - * the loop to avoid overhead of conditions. - */ -! if (!rex.reg_ic -! #ifdef FEAT_MBYTE -! && !has_mbyte -! #endif -! ) - while ((s = vim_strbyte(s, c)) != NULL) - { - if (cstrncmp(s, prog->regmust, &prog->regmlen) == 0) - break; /* Found it. */ - ++s; - } -- #ifdef FEAT_MBYTE - else if (!rex.reg_ic || (!enc_utf8 && mb_char2len(c) > 1)) - while ((s = vim_strchr(s, c)) != NULL) - { ---- 3767,3779 ---- - * This is used very often, esp. for ":global". Use three versions of - * the loop to avoid overhead of conditions. - */ -! if (!rex.reg_ic && !has_mbyte) - while ((s = vim_strbyte(s, c)) != NULL) - { - if (cstrncmp(s, prog->regmust, &prog->regmlen) == 0) - break; /* Found it. */ - ++s; - } - else if (!rex.reg_ic || (!enc_utf8 && mb_char2len(c) > 1)) - while ((s = vim_strchr(s, c)) != NULL) - { -*************** -*** 3869,3875 **** - break; /* Found it. */ - MB_PTR_ADV(s); - } -- #endif - else - while ((s = cstrchr(s, c)) != NULL) - { ---- 3781,3786 ---- -*************** -*** 3890,3908 **** - { - int c; - -- #ifdef FEAT_MBYTE - if (has_mbyte) - c = (*mb_ptr2char)(rex.line + col); - else -- #endif - c = rex.line[col]; - if (prog->regstart == NUL - || prog->regstart == c -! || (rex.reg_ic && (( -! #ifdef FEAT_MBYTE -! (enc_utf8 && utf_fold(prog->regstart) == utf_fold(c))) - || (c < 255 && prog->regstart < 255 && -- #endif - MB_TOLOWER(prog->regstart) == MB_TOLOWER(c))))) - retval = regtry(prog, col, tm, timed_out); - else ---- 3801,3815 ---- - { - int c; - - if (has_mbyte) - c = (*mb_ptr2char)(rex.line + col); - else - c = rex.line[col]; - if (prog->regstart == NUL - || prog->regstart == c -! || (rex.reg_ic -! && (((enc_utf8 && utf_fold(prog->regstart) == utf_fold(c))) - || (c < 255 && prog->regstart < 255 && - MB_TOLOWER(prog->regstart) == MB_TOLOWER(c))))) - retval = regtry(prog, col, tm, timed_out); - else -*************** -*** 3920,3930 **** - { - /* Skip until the char we know it must start with. - * Used often, do some work to avoid call overhead. */ -! if (!rex.reg_ic -! #ifdef FEAT_MBYTE -! && !has_mbyte -! #endif -! ) - s = vim_strbyte(rex.line + col, prog->regstart); - else - s = cstrchr(rex.line + col, prog->regstart); ---- 3827,3833 ---- - { - /* Skip until the char we know it must start with. - * Used often, do some work to avoid call overhead. */ -! if (!rex.reg_ic && !has_mbyte) - s = vim_strbyte(rex.line + col, prog->regstart); - else - s = cstrchr(rex.line + col, prog->regstart); -*************** -*** 3955,3965 **** - } - if (rex.line[col] == NUL) - break; -- #ifdef FEAT_MBYTE - if (has_mbyte) - col += (*mb_ptr2len)(rex.line + col); - else -- #endif - ++col; - #ifdef FEAT_RELTIME - /* Check for timeout once in a twenty times to avoid overhead. */ ---- 3858,3866 ---- -*************** -*** 4116,4122 **** - return 1 + rex.lnum; - } - -- #ifdef FEAT_MBYTE - /* - * Get class of previous character. - */ ---- 4017,4022 ---- -*************** -*** 4125,4134 **** - { - if (rex.input > rex.line) - return mb_get_class_buf(rex.input - 1 -! - (*mb_head_off)(rex.line, rex.input - 1), rex.reg_buf); - return -1; - } -- #endif - - /* - * Return TRUE if the current rex.input position matches the Visual area. ---- 4025,4033 ---- - { - if (rex.input > rex.line) - return mb_get_class_buf(rex.input - 1 -! - (*mb_head_off)(rex.line, rex.input - 1), rex.reg_buf); - return -1; - } - - /* - * Return TRUE if the current rex.input position matches the Visual area. -*************** -*** 4339,4349 **** - { - if (WITH_NL(op)) - op -= ADD_NL; -- #ifdef FEAT_MBYTE - if (has_mbyte) - c = (*mb_ptr2char)(rex.input); - else -- #endif - c = *rex.input; - switch (op) - { ---- 4238,4246 ---- -*************** -*** 4431,4437 **** - case BOW: /* \<word; rex.input points to w */ - if (c == NUL) /* Can't match at end of line */ - status = RA_NOMATCH; -- #ifdef FEAT_MBYTE - else if (has_mbyte) - { - int this_class; ---- 4328,4333 ---- -*************** -*** 4443,4449 **** - else if (reg_prev_class() == this_class) - status = RA_NOMATCH; /* previous char is in same word */ - } -- #endif - else - { - if (!vim_iswordc_buf(c, rex.reg_buf) || (rex.input > rex.line ---- 4339,4344 ---- -*************** -*** 4455,4461 **** - case EOW: /* word\>; rex.input points after d */ - if (rex.input == rex.line) /* Can't match at start of line */ - status = RA_NOMATCH; -- #ifdef FEAT_MBYTE - else if (has_mbyte) - { - int this_class, prev_class; ---- 4350,4355 ---- -*************** -*** 4467,4473 **** - || prev_class == 0 || prev_class == 1) - status = RA_NOMATCH; - } -- #endif - else - { - if (!vim_iswordc_buf(rex.input[-1], rex.reg_buf) ---- 4361,4366 ---- -*************** -*** 4676,4686 **** - opnd = OPERAND(scan); - /* Inline the first byte, for speed. */ - if (*opnd != *rex.input -! && (!rex.reg_ic || ( -! #ifdef FEAT_MBYTE -! !enc_utf8 && -! #endif -! MB_TOLOWER(*opnd) != MB_TOLOWER(*rex.input)))) - status = RA_NOMATCH; - else if (*opnd == NUL) - { ---- 4569,4577 ---- - opnd = OPERAND(scan); - /* Inline the first byte, for speed. */ - if (*opnd != *rex.input -! && (!rex.reg_ic -! || (!enc_utf8 -! && MB_TOLOWER(*opnd) != MB_TOLOWER(*rex.input)))) - status = RA_NOMATCH; - else if (*opnd == NUL) - { -*************** -*** 4689,4699 **** - } - else - { -! if (opnd[1] == NUL -! #ifdef FEAT_MBYTE -! && !(enc_utf8 && rex.reg_ic) -! #endif -! ) - { - len = 1; /* matched a single byte above */ - } ---- 4580,4586 ---- - } - else - { -! if (opnd[1] == NUL && !(enc_utf8 && rex.reg_ic)) - { - len = 1; /* matched a single byte above */ - } -*************** -*** 4704,4710 **** - if (cstrncmp(opnd, rex.input, &len) != 0) - status = RA_NOMATCH; - } -- #ifdef FEAT_MBYTE - /* Check for following composing character, unless %C - * follows (skips over all composing chars). */ - if (status != RA_NOMATCH ---- 4591,4596 ---- -*************** -*** 4718,4724 **** - * for voweled Hebrew texts. */ - status = RA_NOMATCH; - } -- #endif - if (status != RA_NOMATCH) - rex.input += len; - } ---- 4604,4609 ---- -*************** -*** 4735,4741 **** - ADVANCE_REGINPUT(); - break; - -- #ifdef FEAT_MBYTE - case MULTIBYTECODE: - if (has_mbyte) - { ---- 4620,4625 ---- -*************** -*** 4788,4803 **** - else - status = RA_NOMATCH; - break; -- #endif - case RE_COMPOSING: -- #ifdef FEAT_MBYTE - if (enc_utf8) - { - /* Skip composing characters. */ - while (utf_iscomposing(utf_ptr2char(rex.input))) - MB_CPTR_ADV(rex.input); - } -- #endif - break; - - case NOTHING: ---- 4672,4684 ---- -*************** -*** 5561,5567 **** - } - else - { -- #ifdef FEAT_MBYTE - if (has_mbyte) - { - char_u *line = ---- 5442,5447 ---- -*************** -*** 5572,5578 **** - + rp->rs_un.regsave.rs_u.pos.col - 1) + 1; - } - else -- #endif - --rp->rs_un.regsave.rs_u.pos.col; - } - } ---- 5452,5457 ---- -*************** -*** 5952,5960 **** - do_class: - while (count < maxcount) - { -- #ifdef FEAT_MBYTE - int l; -! #endif - if (*scan == NUL) - { - if (!REG_MULTI || !WITH_NL(OP(p)) || rex.lnum > rex.reg_maxline ---- 5831,5838 ---- - do_class: - while (count < maxcount) - { - int l; -! - if (*scan == NUL) - { - if (!REG_MULTI || !WITH_NL(OP(p)) || rex.lnum > rex.reg_maxline -*************** -*** 5965,5978 **** - if (got_int) - break; - } -- #ifdef FEAT_MBYTE - else if (has_mbyte && (l = (*mb_ptr2len)(scan)) > 1) - { - if (testval != 0) - break; - scan += l; - } -- #endif - else if ((class_tab[*scan] & mask) == testval) - ++scan; - else if (rex.reg_line_lbr && *scan == '\n' && WITH_NL(OP(p))) ---- 5843,5854 ---- -*************** -*** 6081,6087 **** - break; - } - -- #ifdef FEAT_MBYTE - case MULTIBYTECODE: - { - int i, len, cf = 0; ---- 5957,5962 ---- -*************** -*** 6106,6112 **** - } - } - break; -- #endif - - case ANYOF: - case ANYOF + ADD_NL: ---- 5981,5986 ---- -*************** -*** 6117,6125 **** - case ANYBUT + ADD_NL: - while (count < maxcount) - { -- #ifdef FEAT_MBYTE - int len; -! #endif - if (*scan == NUL) - { - if (!REG_MULTI || !WITH_NL(OP(p)) || rex.lnum > rex.reg_maxline ---- 5991,5998 ---- - case ANYBUT + ADD_NL: - while (count < maxcount) - { - int len; -! - if (*scan == NUL) - { - if (!REG_MULTI || !WITH_NL(OP(p)) || rex.lnum > rex.reg_maxline -*************** -*** 6132,6145 **** - } - else if (rex.reg_line_lbr && *scan == '\n' && WITH_NL(OP(p))) - ++scan; -- #ifdef FEAT_MBYTE - else if (has_mbyte && (len = (*mb_ptr2len)(scan)) > 1) - { - if ((cstrchr(opnd, (*mb_ptr2char)(scan)) == NULL) == testval) - break; - scan += len; - } -- #endif - else - { - if ((cstrchr(opnd, *scan) == NULL) == testval) ---- 6005,6016 ---- -*************** -*** 6955,6965 **** - sprintf(buf + STRLEN(buf), "BRACE_COMPLEX%d", OP(op) - BRACE_COMPLEX); - p = NULL; - break; -- #ifdef FEAT_MBYTE - case MULTIBYTECODE: - p = "MULTIBYTECODE"; - break; -- #endif - case NEWL: - p = "NEWL"; - break; ---- 6826,6834 ---- -*************** -*** 6989,6995 **** - return OK; - } - -- #ifdef FEAT_MBYTE - typedef struct - { - int a, b, c; ---- 6858,6863 ---- -*************** -*** 7067,7073 **** - *c2 = *c3 = 0; - } - } -- #endif - - /* - * Compare two strings, ignore case if rex.reg_ic set. ---- 6935,6940 ---- -*************** -*** 7084,7090 **** - else - result = MB_STRNICMP(s1, s2, *n); - -- #ifdef FEAT_MBYTE - /* if it failed and it's utf8 and we want to combineignore: */ - if (result != 0 && enc_utf8 && rex.reg_icombine) - { ---- 6951,6956 ---- -*************** -*** 7121,7127 **** - if (result == 0) - *n = (int)(str2 - s2); - } -- #endif - - return result; - } ---- 6987,6992 ---- -*************** -*** 7135,7155 **** - char_u *p; - int cc; - -! if (!rex.reg_ic -! #ifdef FEAT_MBYTE -! || (!enc_utf8 && mb_char2len(c) > 1) -! #endif -! ) - return vim_strchr(s, c); - - /* tolower() and toupper() can be slow, comparing twice should be a lot - * faster (esp. when using MS Visual C++!). - * For UTF-8 need to use folded case. */ -- #ifdef FEAT_MBYTE - if (enc_utf8 && c > 0x80) - cc = utf_fold(c); - else -- #endif - if (MB_ISUPPER(c)) - cc = MB_TOLOWER(c); - else if (MB_ISLOWER(c)) ---- 7000,7014 ---- - char_u *p; - int cc; - -! if (!rex.reg_ic || (!enc_utf8 && mb_char2len(c) > 1)) - return vim_strchr(s, c); - - /* tolower() and toupper() can be slow, comparing twice should be a lot - * faster (esp. when using MS Visual C++!). - * For UTF-8 need to use folded case. */ - if (enc_utf8 && c > 0x80) - cc = utf_fold(c); - else - if (MB_ISUPPER(c)) - cc = MB_TOLOWER(c); - else if (MB_ISLOWER(c)) -*************** -*** 7157,7163 **** - else - return vim_strchr(s, c); - -- #ifdef FEAT_MBYTE - if (has_mbyte) - { - for (p = s; *p != NUL; p += (*mb_ptr2len)(p)) ---- 7016,7021 ---- -*************** -*** 7172,7178 **** - } - } - else -- #endif - /* Faster version for when there are no multi-byte characters. */ - for (p = s; *p != NUL; ++p) - if (*p == c || *p == cc) ---- 7030,7035 ---- -*************** -*** 7285,7294 **** - { - if (*p == '\\' && p[1]) /* skip escaped characters */ - ++p; -- #ifdef FEAT_MBYTE - if (has_mbyte) - p += (*mb_ptr2len)(p) - 1; -- #endif - } - } - ---- 7142,7149 ---- -*************** -*** 7682,7691 **** - c = *src++; - } - } -- #ifdef FEAT_MBYTE - else if (has_mbyte) - c = mb_ptr2char(src - 1); -- #endif - - /* Write to buffer, if copy is set. */ - if (func_one != (fptr_T)NULL) ---- 7537,7544 ---- -*************** -*** 7697,7703 **** - else /* just copy */ - cc = c; - -- #ifdef FEAT_MBYTE - if (has_mbyte) - { - int totlen = mb_ptr2len(src - 1); ---- 7550,7555 ---- -*************** -*** 7721,7729 **** - } - src += totlen - 1; - } -! else -! #endif -! if (copy) - *dst = cc; - dst++; - } ---- 7573,7579 ---- - } - src += totlen - 1; - } -! else if (copy) - *dst = cc; - dst++; - } -*************** -*** 7799,7809 **** - } - else - { -- #ifdef FEAT_MBYTE - if (has_mbyte) - c = mb_ptr2char(s); - else -- #endif - c = *s; - - if (func_one != (fptr_T)NULL) ---- 7649,7657 ---- -*************** -*** 7815,7821 **** - else /* just copy */ - cc = c; - -- #ifdef FEAT_MBYTE - if (has_mbyte) - { - int l; ---- 7663,7668 ---- -*************** -*** 7833,7841 **** - mb_char2bytes(cc, dst); - dst += mb_char2len(cc) - 1; - } -! else -! #endif -! if (copy) - *dst = cc; - dst++; - } ---- 7680,7686 ---- - mb_char2bytes(cc, dst); - dst += mb_char2len(cc) - 1; - } -! else if (copy) - *dst = cc; - dst++; - } -*** ../vim-8.1.0808/src/regexp_nfa.c 2019-01-15 20:19:36.747904404 +0100 ---- src/regexp_nfa.c 2019-01-24 16:14:10.790618054 +0100 -*************** -*** 487,497 **** - s = ret; - while (p->c > 0) - { -- #ifdef FEAT_MBYTE - if (has_mbyte) - s += (*mb_char2bytes)(p->c, s); - else -- #endif - *s++ = p->c; - p = p->out; - } ---- 487,495 ---- -*************** -*** 687,702 **** - nfa_emit_equi_class(int c) - { - #define EMIT2(c) EMIT(c); EMIT(NFA_CONCAT); -! #ifdef FEAT_MBYTE -! # define EMITMBC(c) EMIT(c); EMIT(NFA_CONCAT); -! #else -! # define EMITMBC(c) -! #endif - -- #ifdef FEAT_MBYTE - if (enc_utf8 || STRCMP(p_enc, "latin1") == 0 - || STRCMP(p_enc, "iso-8859-15") == 0) -- #endif - { - #ifdef EBCDIC - # define A_circumflex 0x62 ---- 685,694 ---- - nfa_emit_equi_class(int c) - { - #define EMIT2(c) EMIT(c); EMIT(NFA_CONCAT); -! #define EMITMBC(c) EMIT(c); EMIT(NFA_CONCAT); - - if (enc_utf8 || STRCMP(p_enc, "latin1") == 0 - || STRCMP(p_enc, "iso-8859-15") == 0) - { - #ifdef EBCDIC - # define A_circumflex 0x62 -*************** -*** 1203,1211 **** - int got_coll_char; - char_u *p; - char_u *endp; -- #ifdef FEAT_MBYTE - char_u *old_regparse = regparse; -- #endif - int extra = 0; - int emit_range; - int negated; ---- 1195,1201 ---- -*************** -*** 1310,1316 **** - siemsg("INTERNAL: Unknown character class char: %d", c); - return FAIL; - } -! #ifdef FEAT_MBYTE - /* When '.' is followed by a composing char ignore the dot, so that - * the composing char is matched here. */ - if (enc_utf8 && c == Magic('.') && utf_iscomposing(peekchr())) ---- 1300,1306 ---- - siemsg("INTERNAL: Unknown character class char: %d", c); - return FAIL; - } -! - /* When '.' is followed by a composing char ignore the dot, so that - * the composing char is matched here. */ - if (enc_utf8 && c == Magic('.') && utf_iscomposing(peekchr())) -*************** -*** 1319,1325 **** - c = getchr(); - goto nfa_do_multibyte; - } -- #endif - EMIT(nfa_classcodes[p - classchars]); - if (extra == NFA_ADD_NL) - { ---- 1309,1314 ---- -*************** -*** 1827,1835 **** - EMIT(NFA_RANGE); - EMIT(NFA_CONCAT); - } -! else -! #ifdef FEAT_MBYTE -! if (has_mbyte && ((*mb_char2len)(startc) > 1 - || (*mb_char2len)(endc) > 1)) - { - /* Emit the characters in the range. ---- 1816,1822 ---- - EMIT(NFA_RANGE); - EMIT(NFA_CONCAT); - } -! else if (has_mbyte && ((*mb_char2len)(startc) > 1 - || (*mb_char2len)(endc) > 1)) - { - /* Emit the characters in the range. -*************** -*** 1842,1848 **** - } - } - else -- #endif - { - #ifdef EBCDIC - int alpha_only = FALSE; ---- 1829,1834 ---- -*************** -*** 1929,1935 **** - - default: - { -- #ifdef FEAT_MBYTE - int plen; - - nfa_do_multibyte: ---- 1915,1920 ---- -*************** -*** 1961,1967 **** - regparse = old_regparse + plen; - } - else -- #endif - { - c = no_Magic(c); - EMIT(c); ---- 1946,1951 ---- -*************** -*** 2211,2219 **** - break; - - case Magic('Z'): -- #ifdef FEAT_MBYTE - regflags |= RF_ICOMBINE; -- #endif - skipchr_keepstart(); - break; - case Magic('c'): ---- 2195,2201 ---- -*************** -*** 2996,3008 **** - case NFA_START_COLL: - case NFA_START_NEG_COLL: - /* matches some character, including composing chars */ -- #ifdef FEAT_MBYTE - if (enc_utf8) - len += MB_MAXBYTES; - else if (has_mbyte) - len += 2; - else -- #endif - ++len; - if (state->c != NFA_ANY) - { ---- 2978,2988 ---- -*************** -*** 3048,3058 **** - case NFA_NUPPER_IC: - case NFA_ANY_COMPOSING: - /* possibly non-ascii */ -- #ifdef FEAT_MBYTE - if (has_mbyte) - len += 3; - else -- #endif - ++len; - break; - ---- 3028,3036 ---- -*************** -*** 3501,3507 **** - break; - } - -- #ifdef FEAT_MBYTE - case NFA_COMPOSING: /* char with composing char */ - #if 0 - /* TODO */ ---- 3479,3484 ---- -*************** -*** 3511,3517 **** - } - #endif - /* FALLTHROUGH */ -- #endif - - case NFA_MOPEN: /* \( \) Submatch */ - case NFA_MOPEN1: ---- 3488,3493 ---- -*************** -*** 3558,3566 **** - case NFA_ZOPEN8: mclose = NFA_ZCLOSE8; break; - case NFA_ZOPEN9: mclose = NFA_ZCLOSE9; break; - #endif -- #ifdef FEAT_MBYTE - case NFA_COMPOSING: mclose = NFA_END_COMPOSING; break; -- #endif - default: - /* NFA_MOPEN, NFA_MOPEN1 .. NFA_MOPEN9 */ - mclose = *p + NSUBEXP; ---- 3534,3540 ---- -*************** -*** 3596,3606 **** - goto theend; - patch(e.out, s1); - -- #ifdef FEAT_MBYTE - if (mopen == NFA_COMPOSING) - /* COMPOSING->out1 = END_COMPOSING */ - patch(list1(&s->out1), s1); -- #endif - - PUSH(frag(s, list1(&s1->out))); - break; ---- 3570,3578 ---- -*************** -*** 5119,5128 **** - if ((int)(rex.input - rex.line) >= state->val) - { - rex.input -= state->val; -- #ifdef FEAT_MBYTE - if (has_mbyte) - rex.input -= mb_head_off(rex.line, rex.input); -- #endif - } - else - rex.input = rex.line; ---- 5091,5098 ---- -*************** -*** 5381,5391 **** - char_u *s; - - /* Used often, do some work to avoid call overhead. */ -! if (!rex.reg_ic -! #ifdef FEAT_MBYTE -! && !has_mbyte -! #endif -! ) - s = vim_strbyte(rex.line + *colp, c); - else - s = cstrchr(rex.line + *colp, c); ---- 5351,5357 ---- - char_u *s; - - /* Used often, do some work to avoid call overhead. */ -! if (!rex.reg_ic && !has_mbyte) - s = vim_strbyte(rex.line + *colp, c); - else - s = cstrchr(rex.line + *colp, c); -*************** -*** 5424,5435 **** - len2 += MB_CHAR2LEN(c2); - } - if (match -- #ifdef FEAT_MBYTE - /* check that no composing char follows */ - && !(enc_utf8 -! && utf_iscomposing(PTR2CHAR(rex.line + col + len2))) -! #endif -! ) - { - cleanup_subexpr(); - if (REG_MULTI) ---- 5390,5398 ---- - len2 += MB_CHAR2LEN(c2); - } - if (match - /* check that no composing char follows */ - && !(enc_utf8 -! && utf_iscomposing(PTR2CHAR(rex.line + col + len2)))) - { - cleanup_subexpr(); - if (REG_MULTI) -*************** -*** 5596,5609 **** - int curc; - int clen; - -- #ifdef FEAT_MBYTE - if (has_mbyte) - { - curc = (*mb_ptr2char)(rex.input); - clen = (*mb_ptr2len)(rex.input); - } - else -- #endif - { - curc = *rex.input; - clen = 1; ---- 5559,5570 ---- -*************** -*** 5708,5719 **** - { - case NFA_MATCH: - { -- #ifdef FEAT_MBYTE - /* If the match ends before a composing characters and - * rex.reg_icombine is not set, that is not really a match. */ - if (enc_utf8 && !rex.reg_icombine && utf_iscomposing(curc)) - break; -! #endif - nfa_match = TRUE; - copy_sub(&submatch->norm, &t->subs.norm); - #ifdef FEAT_SYN_HL ---- 5669,5679 ---- - { - case NFA_MATCH: - { - /* If the match ends before a composing characters and - * rex.reg_icombine is not set, that is not really a match. */ - if (enc_utf8 && !rex.reg_icombine && utf_iscomposing(curc)) - break; -! - nfa_match = TRUE; - copy_sub(&submatch->norm, &t->subs.norm); - #ifdef FEAT_SYN_HL -*************** -*** 6024,6030 **** - - if (curc == NUL) - result = FALSE; -- #ifdef FEAT_MBYTE - else if (has_mbyte) - { - int this_class; ---- 5984,5989 ---- -*************** -*** 6036,6042 **** - else if (reg_prev_class() == this_class) - result = FALSE; - } -- #endif - else if (!vim_iswordc_buf(curc, rex.reg_buf) - || (rex.input > rex.line - && vim_iswordc_buf(rex.input[-1], rex.reg_buf))) ---- 5995,6000 ---- -*************** -*** 6052,6058 **** - result = TRUE; - if (rex.input == rex.line) - result = FALSE; -- #ifdef FEAT_MBYTE - else if (has_mbyte) - { - int this_class, prev_class; ---- 6010,6015 ---- -*************** -*** 6064,6070 **** - || prev_class == 0 || prev_class == 1) - result = FALSE; - } -- #endif - else if (!vim_iswordc_buf(rex.input[-1], rex.reg_buf) - || (rex.input[0] != NUL - && vim_iswordc_buf(curc, rex.reg_buf))) ---- 6021,6026 ---- -*************** -*** 6093,6099 **** - } - break; - -- #ifdef FEAT_MBYTE - case NFA_COMPOSING: - { - int mc = curc; ---- 6049,6054 ---- -*************** -*** 6169,6175 **** - ADD_STATE_IF_MATCH(end); - break; - } -- #endif - - case NFA_NEWL: - if (curc == NUL && !rex.reg_line_lbr && REG_MULTI ---- 6124,6129 ---- -*************** -*** 6274,6286 **** - case NFA_ANY_COMPOSING: - /* On a composing character skip over it. Otherwise do - * nothing. Always matches. */ -- #ifdef FEAT_MBYTE - if (enc_utf8 && utf_iscomposing(curc)) - { - add_off = clen; - } - else -- #endif - { - add_here = TRUE; - add_off = 0; ---- 6228,6238 ---- -*************** -*** 6562,6571 **** - /* Bail out quickly when there can't be a match, avoid the - * overhead of win_linetabsize() on long lines. */ - if (op != 1 && col > t->state->val -! #ifdef FEAT_MBYTE -! * (has_mbyte ? MB_MAXBYTES : 1) -! #endif -! ) - break; - result = FALSE; - if (op == 1 && col - 1 > t->state->val && col > 100) ---- 6514,6520 ---- - /* Bail out quickly when there can't be a match, avoid the - * overhead of win_linetabsize() on long lines. */ - if (op != 1 && col > t->state->val -! * (has_mbyte ? MB_MAXBYTES : 1)) - break; - result = FALSE; - if (op == 1 && col - 1 > t->state->val && col > 100) -*************** -*** 6676,6687 **** - - if (!result && rex.reg_ic) - result = MB_TOLOWER(c) == MB_TOLOWER(curc); -- #ifdef FEAT_MBYTE - /* If rex.reg_icombine is not set only skip over the character - * itself. When it is set skip over composing characters. */ - if (result && enc_utf8 && !rex.reg_icombine) - clen = utf_ptr2len(rex.input); -- #endif - ADD_STATE_IF_MATCH(t->state); - break; - } ---- 6625,6634 ---- -*************** -*** 7104,7114 **** - else if (prog->regflags & RF_NOICASE) - rex.reg_ic = FALSE; - -- #ifdef FEAT_MBYTE - /* If pattern contains "\Z" overrule value of rex.reg_icombine */ - if (prog->regflags & RF_ICOMBINE) - rex.reg_icombine = TRUE; -- #endif - - rex.line = line; - rex.lnum = 0; /* relative to line */ ---- 7051,7059 ---- -*************** -*** 7149,7159 **** - - /* If match_text is set it contains the full text that must match. - * Nothing else to try. Doesn't handle combining chars well. */ -! if (prog->match_text != NULL -! #ifdef FEAT_MBYTE -! && !rex.reg_icombine -! #endif -! ) - return find_match_text(col, prog->regstart, prog->match_text); - } - ---- 7094,7100 ---- - - /* If match_text is set it contains the full text that must match. - * Nothing else to try. Doesn't handle combining chars well. */ -! if (prog->match_text != NULL && !rex.reg_icombine) - return find_match_text(col, prog->regstart, prog->match_text); - } - -*************** -*** 7334,7342 **** - rex.reg_buf = curbuf; - rex.reg_win = NULL; - rex.reg_ic = rmp->rm_ic; -- #ifdef FEAT_MBYTE - rex.reg_icombine = FALSE; -- #endif - rex.reg_maxcol = 0; - return nfa_regexec_both(line, col, NULL, NULL); - } ---- 7275,7281 ---- -*************** -*** 7385,7393 **** - rex.reg_maxline = rex.reg_buf->b_ml.ml_line_count - lnum; - rex.reg_line_lbr = FALSE; - rex.reg_ic = rmp->rmm_ic; -- #ifdef FEAT_MBYTE - rex.reg_icombine = FALSE; -- #endif - rex.reg_maxcol = rmp->rmm_maxcol; - - return nfa_regexec_both(NULL, col, tm, timed_out); ---- 7324,7330 ---- -*** ../vim-8.1.0808/src/screen.c 2019-01-20 15:30:36.893328693 +0100 ---- src/screen.c 2019-01-24 16:22:53.839166984 +0100 -*************** -*** 144,152 **** - static int next_search_hl_pos(match_T *shl, linenr_T lnum, posmatch_T *pos, colnr_T mincol); - #endif - static void screen_char(unsigned off, int row, int col); -- #ifdef FEAT_MBYTE - static void screen_char_2(unsigned off, int row, int col); -- #endif - static void screenclear2(void); - static void lineclear(unsigned off, int width, int attr); - static void lineinvalid(unsigned off, int width); ---- 144,150 ---- -*************** -*** 314,325 **** - int ret = 0; - schar_T *screenline; /* copy from ScreenLines[] */ - sattr_T *screenattr; /* copy from ScreenAttrs[] */ -- #ifdef FEAT_MBYTE - int i; - u8char_T *screenlineUC = NULL; /* copy from ScreenLinesUC[] */ - u8char_T *screenlineC[MAX_MCO]; /* copy from ScreenLinesC[][] */ - schar_T *screenline2 = NULL; /* copy from ScreenLines2[] */ -- #endif - - redraw_later(type); - if (msg_scrolled || (State != NORMAL && State != NORMAL_BUSY) || exiting) ---- 312,321 ---- -*************** -*** 333,339 **** - (long_u)(rows * cols * sizeof(sattr_T)), FALSE); - if (screenline == NULL || screenattr == NULL) - ret = 2; -- #ifdef FEAT_MBYTE - if (enc_utf8) - { - screenlineUC = (u8char_T *)lalloc( ---- 329,334 ---- -*************** -*** 355,361 **** - if (screenline2 == NULL) - ret = 2; - } -- #endif - - if (ret != 2) - { ---- 350,355 ---- -*************** -*** 368,374 **** - mch_memmove(screenattr + r * cols, - ScreenAttrs + LineOffset[cmdline_row + r], - (size_t)cols * sizeof(sattr_T)); -- #ifdef FEAT_MBYTE - if (enc_utf8) - { - mch_memmove(screenlineUC + r * cols, ---- 362,367 ---- -*************** -*** 383,389 **** - mch_memmove(screenline2 + r * cols, - ScreenLines2 + LineOffset[cmdline_row + r], - (size_t)cols * sizeof(schar_T)); -- #endif - } - - update_screen(0); ---- 376,381 ---- -*************** -*** 402,408 **** - mch_memmove(ScreenAttrs + off, - screenattr + r * cols, - (size_t)cols * sizeof(sattr_T)); -- #ifdef FEAT_MBYTE - if (enc_utf8) - { - mch_memmove(ScreenLinesUC + off, ---- 394,399 ---- -*************** -*** 417,423 **** - mch_memmove(ScreenLines2 + off, - screenline2 + r * cols, - (size_t)cols * sizeof(schar_T)); -- #endif - screen_line(cmdline_row + r, 0, cols, cols, FALSE); - } - ret = 4; ---- 408,413 ---- -*************** -*** 426,432 **** - - vim_free(screenline); - vim_free(screenattr); -- #ifdef FEAT_MBYTE - if (enc_utf8) - { - vim_free(screenlineUC); ---- 416,421 ---- -*************** -*** 435,441 **** - } - if (enc_dbcs == DBCS_JPNU) - vim_free(screenline2); -- #endif - - /* Show the intro message when appropriate. */ - maybe_intro_message(); ---- 424,429 ---- -*************** -*** 830,838 **** - * uses that. */ - gui.col = gui_cursor_col; - gui.row = gui_cursor_row; -- # ifdef FEAT_MBYTE - gui.col = mb_fix_col(gui.col, gui.row); -- # endif - gui_update_cursor(FALSE, FALSE); - gui_may_flush(); - screen_cur_col = gui.col; ---- 818,824 ---- -*************** -*** 2154,2160 **** - int i; - - for (i = 0; i < Rows; ++i) -- # ifdef FEAT_MBYTE - if (enc_utf8) - if ((*mb_off2cells)(LineOffset[i] + Columns - 2, - LineOffset[i] + screen_Columns) > 1) ---- 2140,2145 ---- -*************** -*** 2162,2168 **** - else - screen_draw_rectangle(i, Columns - 1, 1, 1, FALSE); - else -- # endif - screen_char(LineOffset[i] + Columns - 1, i, Columns - 1); - } - #endif ---- 2147,2152 ---- -*************** -*** 2454,2460 **** - { - int off = (int)(current_ScreenLine - ScreenLines); - -- #ifdef FEAT_MBYTE - if (has_mbyte) - { - int cells; ---- 2438,2443 ---- -*************** -*** 2560,2566 **** - } - } - else -- #endif - { - int len = (int)STRLEN(text); - ---- 2543,2548 ---- -*************** -*** 2639,2648 **** - { - ScreenLines[off] = cmdwin_type; - ScreenAttrs[off] = HL_ATTR(HLF_AT); -- #ifdef FEAT_MBYTE - if (enc_utf8) - ScreenLinesUC[off] = 0; -- #endif - ++col; - } - #endif ---- 2621,2628 ---- -*************** -*** 2785,2791 **** - #endif - ) - { -- #ifdef FEAT_MBYTE - if (enc_utf8) - { - if (fill_fold >= 0x80) ---- 2765,2770 ---- -*************** -*** 2802,2808 **** - col++; - } - else -- #endif - ScreenLines[off + col++] = fill_fold; - } - ---- 2781,2786 ---- -*************** -*** 2929,2938 **** - int i; - - mch_memmove(ScreenLines + off, buf, (size_t)len); -- # ifdef FEAT_MBYTE - if (enc_utf8) - vim_memset(ScreenLinesUC + off, 0, sizeof(u8char_T) * (size_t)len); -- # endif - for (i = 0; i < len; ++i) - ScreenAttrs[off + i] = attr; - } ---- 2907,2914 ---- -*************** -*** 3126,3138 **** - int cur_checked_col = 0; /* checked column for current line */ - #endif - int extra_check = 0; // has extra highlighting -- #ifdef FEAT_MBYTE - int multi_attr = 0; /* attributes desired by multibyte */ - int mb_l = 1; /* multi-byte byte length */ - int mb_c = 0; /* decoded multi-byte character */ - int mb_utf8 = FALSE; /* screen char is UTF-8 char */ - int u8cc[MAX_MCO]; /* composing UTF-8 chars */ -- #endif - #ifdef FEAT_DIFF - int filler_lines; /* nr of filler lines to be drawn */ - int filler_todo; /* nr of filler lines still to do + 1 */ ---- 3102,3112 ---- -*************** -*** 3555,3570 **** - v = wp->w_leftcol; - if (v > 0 && !number_only) - { -- #ifdef FEAT_MBYTE - char_u *prev_ptr = ptr; -! #endif - while (vcol < v && *ptr != NUL) - { - c = win_lbr_chartabsize(wp, line, ptr, (colnr_T)vcol, NULL); - vcol += c; -- #ifdef FEAT_MBYTE - prev_ptr = ptr; -- #endif - MB_PTR_ADV(ptr); - } - ---- 3529,3541 ---- - v = wp->w_leftcol; - if (v > 0 && !number_only) - { - char_u *prev_ptr = ptr; -! - while (vcol < v && *ptr != NUL) - { - c = win_lbr_chartabsize(wp, line, ptr, (colnr_T)vcol, NULL); - vcol += c; - prev_ptr = ptr; - MB_PTR_ADV(ptr); - } - -*************** -*** 3592,3609 **** - if (vcol > v) - { - vcol -= c; -- #ifdef FEAT_MBYTE - ptr = prev_ptr; -- #else -- --ptr; -- #endif - /* If the character fits on the screen, don't need to skip it. - * Except for a TAB. */ -! if (( -! #ifdef FEAT_MBYTE -! (*mb_ptr2cells)(ptr) >= c || -! #endif -! *ptr == TAB) && col == 0) - n_skip = v - vcol; - } - ---- 3563,3572 ---- - if (vcol > v) - { - vcol -= c; - ptr = prev_ptr; - /* If the character fits on the screen, don't need to skip it. - * Except for a TAB. */ -! if (( (*mb_ptr2cells)(ptr) >= c || *ptr == TAB) && col == 0) - n_skip = v - vcol; - } - -*************** -*** 3734,3744 **** - /* Highlight one character for an empty match. */ - if (shl->startcol == shl->endcol) - { -- #ifdef FEAT_MBYTE - if (has_mbyte && line[shl->endcol] != NUL) - shl->endcol += (*mb_ptr2len)(line + shl->endcol); - else -- #endif - ++shl->endcol; - } - if ((long)shl->startcol < v) /* match at leftcol */ ---- 3697,3705 ---- -*************** -*** 4133,4142 **** - { - /* handle Visual or match highlighting in this line */ - if (vcol == fromcol -- #ifdef FEAT_MBYTE - || (has_mbyte && vcol + 1 == fromcol && n_extra == 0 - && (*mb_ptr2cells)(ptr) > 1) -- #endif - || ((int)vcol_prev == fromcol_prev - && vcol_prev < vcol /* not at margin */ - && vcol < tocol)) ---- 4094,4101 ---- -*************** -*** 4182,4193 **** - && v >= (long)shl->startcol - && v < (long)shl->endcol) - { -- #ifdef FEAT_MBYTE - int tmp_col = v + MB_PTR2LEN(ptr); - - if (shl->endcol < tmp_col) - shl->endcol = tmp_col; -- #endif - shl->attr_cur = shl->attr; - #ifdef FEAT_CONCEAL - if (cur != NULL && syn_name2id((char_u *)"Conceal") ---- 4141,4150 ---- -*************** -*** 4226,4237 **** - { - /* highlight empty match, try again after - * it */ -- #ifdef FEAT_MBYTE - if (has_mbyte) - shl->endcol += (*mb_ptr2len)(line - + shl->endcol); - else -- #endif - ++shl->endcol; - } - ---- 4183,4192 ---- -*************** -*** 4402,4408 **** - if (c_extra != NUL || (n_extra == 1 && c_final != NUL)) - { - c = (n_extra == 1 && c_final != NUL) ? c_final : c_extra; -- #ifdef FEAT_MBYTE - mb_c = c; /* doesn't handle non-utf-8 multi-byte! */ - if (enc_utf8 && utf_char2len(c) > 1) - { ---- 4357,4362 ---- -*************** -*** 4412,4423 **** - } - else - mb_utf8 = FALSE; -- #endif - } - else - { - c = *p_extra; -- #ifdef FEAT_MBYTE - if (has_mbyte) - { - mb_c = c; ---- 4366,4375 ---- -*************** -*** 4473,4479 **** - p_extra += mb_l - 1; - } - } -- #endif - ++p_extra; - } - --n_extra; ---- 4425,4430 ---- -*************** -*** 4493,4499 **** - #ifdef FEAT_LINEBREAK - c0 = *ptr; - #endif -- #ifdef FEAT_MBYTE - if (has_mbyte) - { - mb_c = c; ---- 4444,4449 ---- -*************** -*** 4511,4519 **** - if (mb_c < 0x80) - { - c = mb_c; -! # ifdef FEAT_LINEBREAK - c0 = mb_c; -! # endif - } - mb_utf8 = TRUE; - ---- 4461,4469 ---- - if (mb_c < 0x80) - { - c = mb_c; -! #ifdef FEAT_LINEBREAK - c0 = mb_c; -! #endif - } - mb_utf8 = TRUE; - -*************** -*** 4690,4696 **** - } - - } -- #endif - ++ptr; - - if (extra_check) ---- 4640,4645 ---- -*************** -*** 4783,4796 **** - char_u *prev_ptr, *p; - int len; - hlf_T spell_hlf = HLF_COUNT; -- # ifdef FEAT_MBYTE - if (has_mbyte) - { - prev_ptr = ptr - mb_l; - v -= mb_l - 1; - } - else -- # endif - prev_ptr = ptr - 1; - - /* Use nextline[] if possible, it has the start of the ---- 4732,4743 ---- -*************** -*** 4862,4875 **** - if (wp->w_p_lbr && c0 == c - && VIM_ISBREAK(c) && !VIM_ISBREAK((int)*ptr)) - { -- # ifdef FEAT_MBYTE - int mb_off = has_mbyte ? (*mb_head_off)(line, ptr - 1) : 0; -! # endif -! char_u *p = ptr - ( -! # ifdef FEAT_MBYTE -! mb_off + -! # endif -! 1); - - /* TODO: is passing p for start of the line OK? */ - n_extra = win_lbr_chartabsize(wp, line, p, (colnr_T)vcol, ---- 4809,4816 ---- - if (wp->w_p_lbr && c0 == c - && VIM_ISBREAK(c) && !VIM_ISBREAK((int)*ptr)) - { - int mb_off = has_mbyte ? (*mb_head_off)(line, ptr - 1) : 0; -! char_u *p = ptr - (mb_off + 1); - - /* TODO: is passing p for start of the line OK? */ - n_extra = win_lbr_chartabsize(wp, line, p, (colnr_T)vcol, -*************** -*** 4883,4893 **** - - vcol % (int)wp->w_buffer->b_p_ts - 1; - # endif - -- # ifdef FEAT_MBYTE - c_extra = mb_off > 0 ? MB_FILLER_CHAR : ' '; -- # else -- c_extra = ' '; -- # endif - c_final = NUL; - if (VIM_ISWHITE(c)) - { ---- 4824,4830 ---- -*************** -*** 4906,4915 **** - */ - if (wp->w_p_list - && (((c == 160 -! #ifdef FEAT_MBYTE -! || (mb_utf8 && (mb_c == 160 || mb_c == 0x202f)) -! #endif -! ) && lcs_nbsp) - || (c == ' ' && lcs_space && ptr - line <= trailcol))) - { - c = (c == ' ') ? lcs_space : lcs_nbsp; ---- 4843,4850 ---- - */ - if (wp->w_p_list - && (((c == 160 -! || (mb_utf8 && (mb_c == 160 || mb_c == 0x202f))) -! && lcs_nbsp) - || (c == ' ' && lcs_space && ptr - line <= trailcol))) - { - c = (c == ' ') ? lcs_space : lcs_nbsp; -*************** -*** 4919,4925 **** - extra_attr = HL_ATTR(HLF_8); - saved_attr2 = char_attr; /* save current attr */ - } -- #ifdef FEAT_MBYTE - mb_c = c; - if (enc_utf8 && utf_char2len(c) > 1) - { ---- 4854,4859 ---- -*************** -*** 4929,4935 **** - } - else - mb_utf8 = FALSE; -- #endif - } - - if (trailcol != MAXCOL && ptr > line + trailcol && c == ' ') ---- 4863,4868 ---- -*************** -*** 4941,4947 **** - extra_attr = HL_ATTR(HLF_8); - saved_attr2 = char_attr; /* save current attr */ - } -- #ifdef FEAT_MBYTE - mb_c = c; - if (enc_utf8 && utf_char2len(c) > 1) - { ---- 4874,4879 ---- -*************** -*** 4951,4957 **** - } - else - mb_utf8 = FALSE; -- #endif - } - } - ---- 4883,4888 ---- -*************** -*** 5012,5022 **** - /* if n_extra > 0, it gives the number of chars, to - * use for a tab, else we need to calculate the width - * for a tab */ -- #ifdef FEAT_MBYTE - len = (tab_len * mb_char2len(lcs_tab2)); - if (n_extra > 0) - len += n_extra - tab_len; -- #endif - c = lcs_tab1; - p = alloc((unsigned)(len + 1)); - vim_memset(p, ' ', len); ---- 4943,4951 ---- -*************** -*** 5030,5043 **** - tab_len = i; - break; - } -- #ifdef FEAT_MBYTE - mb_char2bytes(lcs_tab2, p); - p += mb_char2len(lcs_tab2); - n_extra += mb_char2len(lcs_tab2) - - (saved_nextra > 0 ? 1 : 0); -- #else -- p[i] = lcs_tab2; -- #endif - } - p_extra = p_extra_free; - #ifdef FEAT_CONCEAL ---- 4959,4968 ---- -*************** -*** 5068,5076 **** - tab_len += vc_saved; - } - #endif -- #ifdef FEAT_MBYTE - mb_utf8 = FALSE; /* don't draw as UTF-8 */ -- #endif - if (wp->w_p_list) - { - c = (n_extra == 0 && lcs_tab3) ? lcs_tab3 : lcs_tab1; ---- 4993,4999 ---- -*************** -*** 5084,5090 **** - n_attr = tab_len + 1; - extra_attr = HL_ATTR(HLF_8); - saved_attr2 = char_attr; /* save current attr */ -- #ifdef FEAT_MBYTE - mb_c = c; - if (enc_utf8 && utf_char2len(c) > 1) - { ---- 5007,5012 ---- -*************** -*** 5092,5098 **** - u8cc[0] = 0; - c = 0xc0; - } -- #endif - } - else - { ---- 5014,5019 ---- -*************** -*** 5160,5166 **** - extra_attr = HL_ATTR(HLF_AT); - n_attr = 1; - } -- #ifdef FEAT_MBYTE - mb_c = c; - if (enc_utf8 && utf_char2len(c) > 1) - { ---- 5081,5086 ---- -*************** -*** 5170,5176 **** - } - else - mb_utf8 = FALSE; /* don't draw as UTF-8 */ -- #endif - } - else if (c != NUL) - { ---- 5090,5095 ---- -*************** -*** 5208,5216 **** - extra_attr = HL_ATTR(HLF_8); - saved_attr2 = char_attr; /* save current attr */ - } -- #ifdef FEAT_MBYTE - mb_utf8 = FALSE; /* don't draw as UTF-8 */ -- #endif - } - #ifdef FEAT_VIRTUALEDIT - else if (VIsual_active ---- 5127,5133 ---- -*************** -*** 5339,5345 **** - is_concealing = TRUE; - n_skip = 1; - } -- # ifdef FEAT_MBYTE - mb_c = c; - if (enc_utf8 && utf_char2len(c) > 1) - { ---- 5256,5261 ---- -*************** -*** 5349,5355 **** - } - else - mb_utf8 = FALSE; /* don't draw as UTF-8 */ -- # endif - } - else - { ---- 5265,5270 ---- -*************** -*** 5438,5444 **** - { - c = lcs_prec; - lcs_prec_todo = NUL; -- #ifdef FEAT_MBYTE - if (has_mbyte && (*mb_char2cells)(mb_c) > 1) - { - /* Double-width character being overwritten by the "precedes" ---- 5353,5358 ---- -*************** -*** 5458,5464 **** - } - else - mb_utf8 = FALSE; /* don't draw as UTF-8 */ -- #endif - if (!attr_pri) - { - saved_attr3 = char_attr; /* save current attr */ ---- 5372,5377 ---- -*************** -*** 5554,5563 **** - { - /* Add a blank character to highlight. */ - ScreenLines[off] = ' '; -- #ifdef FEAT_MBYTE - if (enc_utf8) - ScreenLinesUC[off] = 0; -- #endif - } - #ifdef FEAT_SEARCH_EXTRA - if (area_attr == 0) ---- 5467,5474 ---- -*************** -*** 5657,5666 **** - while (col < wp->w_width) - { - ScreenLines[off] = ' '; -- #ifdef FEAT_MBYTE - if (enc_utf8) - ScreenLinesUC[off] = 0; -- #endif - ++col; - if (draw_color_col) - draw_color_col = advance_color_col(VCOL_HLC, ---- 5568,5575 ---- -*************** -*** 5719,5725 **** - { - c = lcs_ext; - char_attr = HL_ATTR(HLF_AT); -- #ifdef FEAT_MBYTE - mb_c = c; - if (enc_utf8 && utf_char2len(c) > 1) - { ---- 5628,5633 ---- -*************** -*** 5729,5735 **** - } - else - mb_utf8 = FALSE; -- #endif - } - - #ifdef FEAT_SYN_HL ---- 5637,5642 ---- -*************** -*** 5769,5775 **** - /* - * Store the character. - */ -! #if defined(FEAT_RIGHTLEFT) && defined(FEAT_MBYTE) - if (has_mbyte && wp->w_p_rl && (*mb_char2cells)(mb_c) > 1) - { - /* A double-wide character is: put first halve in left cell. */ ---- 5676,5682 ---- - /* - * Store the character. - */ -! #if defined(FEAT_RIGHTLEFT) - if (has_mbyte && wp->w_p_rl && (*mb_char2cells)(mb_c) > 1) - { - /* A double-wide character is: put first halve in left cell. */ -*************** -*** 5778,5784 **** - } - #endif - ScreenLines[off] = c; -- #ifdef FEAT_MBYTE - if (enc_dbcs == DBCS_JPNU) - { - if ((mb_c & 0xff00) == 0x8e00) ---- 5685,5690 ---- -*************** -*** 5810,5819 **** - multi_attr = 0; - } - else -- #endif - ScreenAttrs[off] = char_attr; - -- #ifdef FEAT_MBYTE - if (has_mbyte && (*mb_char2cells)(mb_c) > 1) - { - /* Need to fill two screen columns. */ ---- 5716,5723 ---- -*************** -*** 5844,5850 **** - } - #endif - } -- #endif - #ifdef FEAT_RIGHTLEFT - if (wp->w_p_rl) - { ---- 5748,5753 ---- -*************** -*** 5900,5923 **** - } - - -- # ifdef FEAT_MBYTE - if (has_mbyte && (*mb_char2cells)(mb_c) > 1) - { - /* Need to fill two screen columns. */ -! # ifdef FEAT_RIGHTLEFT - if (wp->w_p_rl) - { - --boguscols; - --col; - } - else -! # endif - { - ++boguscols; - ++col; - } - } -- # endif - - # ifdef FEAT_RIGHTLEFT - if (wp->w_p_rl) ---- 5803,5824 ---- - } - - - if (has_mbyte && (*mb_char2cells)(mb_c) > 1) - { - /* Need to fill two screen columns. */ -! # ifdef FEAT_RIGHTLEFT - if (wp->w_p_rl) - { - --boguscols; - --col; - } - else -! # endif - { - ++boguscols; - ++col; - } - } - - # ifdef FEAT_RIGHTLEFT - if (wp->w_p_rl) -*************** -*** 6050,6056 **** - #ifdef FEAT_GUI - && !gui.in_use - #endif -- #ifdef FEAT_MBYTE - && !(has_mbyte - && ((*mb_off2cells)(LineOffset[screen_row], - LineOffset[screen_row] + screen_Columns) ---- 5951,5956 ---- -*************** -*** 6058,6066 **** - || (*mb_off2cells)(LineOffset[screen_row - 1] - + (int)Columns - 2, - LineOffset[screen_row] + screen_Columns) -! == 2)) -! #endif -! ) - { - /* First make sure we are at the end of the screen line, - * then output the same character again to let the ---- 5958,5964 ---- - || (*mb_off2cells)(LineOffset[screen_row - 1] - + (int)Columns - 2, - LineOffset[screen_row] + screen_Columns) -! == 2))) - { - /* First make sure we are at the end of the screen line, - * then output the same character again to let the -*************** -*** 6071,6084 **** - + (unsigned)Columns - 1, - screen_row - 1, (int)(Columns - 1)); - -- #ifdef FEAT_MBYTE - /* When there is a multi-byte character, just output a - * space to keep it simple. */ - if (has_mbyte && MB_BYTE2LEN(ScreenLines[LineOffset[ - screen_row - 1] + (Columns - 1)]) > 1) - out_char(' '); - else -- #endif - out_char(ScreenLines[LineOffset[screen_row - 1] - + (Columns - 1)]); - /* force a redraw of the first char on the next line */ ---- 5969,5980 ---- -*************** -*** 6140,6146 **** - return row; - } - -- #ifdef FEAT_MBYTE - /* - * Return if the composing characters at "off_from" and "off_to" differ. - * Only to be used when ScreenLinesUC[off_from] != 0. ---- 6036,6041 ---- -*************** -*** 6159,6165 **** - } - return FALSE; - } -- #endif - - /* - * Check whether the given character needs redrawing: ---- 6054,6059 ---- -*************** -*** 6174,6181 **** - if (cols > 0 - && ((ScreenLines[off_from] != ScreenLines[off_to] - || ScreenAttrs[off_from] != ScreenAttrs[off_to]) -- -- #ifdef FEAT_MBYTE - || (enc_dbcs != 0 - && MB_BYTE2LEN(ScreenLines[off_from]) > 1 - && (enc_dbcs == DBCS_JPNU && ScreenLines[off_from] == 0x8e ---- 6068,6073 ---- -*************** -*** 6188,6196 **** - && comp_char_differs(off_from, off_to)) - || ((*mb_off2cells)(off_from, off_from + cols) > 1 - && ScreenLines[off_from + 1] -! != ScreenLines[off_to + 1]))) -! #endif -! )) - return TRUE; - return FALSE; - } ---- 6080,6086 ---- - && comp_char_differs(off_from, off_to)) - || ((*mb_off2cells)(off_from, off_from + cols) > 1 - && ScreenLines[off_from + 1] -! != ScreenLines[off_to + 1]))))) - return TRUE; - return FALSE; - } -*************** -*** 6227,6236 **** - { - unsigned off_from; - unsigned off_to; -- #ifdef FEAT_MBYTE - unsigned max_off_from; - unsigned max_off_to; -- #endif - int col = 0; - int hl; - int force = FALSE; /* force update rest of the line */ ---- 6117,6124 ---- -*************** -*** 6240,6253 **** - #endif - ; - int redraw_next; /* redraw_this for next character */ -- #ifdef FEAT_MBYTE - int clear_next = FALSE; - int char_cells; /* 1: normal char */ - /* 2: occupies two display cells */ - # define CHAR_CELLS char_cells -- #else -- # define CHAR_CELLS 1 -- #endif - - /* Check for illegal row and col, just in case. */ - if (row >= Rows) ---- 6128,6137 ---- -*************** -*** 6261,6270 **** - - off_from = (unsigned)(current_ScreenLine - ScreenLines); - off_to = LineOffset[row] + coloff; -- #ifdef FEAT_MBYTE - max_off_from = off_from + screen_Columns; - max_off_to = LineOffset[row] + screen_Columns; -- #endif - - #ifdef FEAT_RIGHTLEFT - if (rlflag) ---- 6145,6152 ---- -*************** -*** 6274,6283 **** - { - while (col <= endcol && ScreenLines[off_to] == ' ' - && ScreenAttrs[off_to] == 0 -! # ifdef FEAT_MBYTE -! && (!enc_utf8 || ScreenLinesUC[off_to] == 0) -! # endif -! ) - { - ++off_to; - ++col; ---- 6156,6162 ---- - { - while (col <= endcol && ScreenLines[off_to] == ' ' - && ScreenAttrs[off_to] == 0 -! && (!enc_utf8 || ScreenLinesUC[off_to] == 0)) - { - ++off_to; - ++col; -*************** -*** 6297,6308 **** - - while (col < endcol) - { -- #ifdef FEAT_MBYTE - if (has_mbyte && (col + 1 < endcol)) - char_cells = (*mb_off2cells)(off_from, max_off_from); - else - char_cells = 1; -- #endif - - redraw_this = redraw_next; - redraw_next = force || char_needs_redraw(off_from + CHAR_CELLS, ---- 6176,6185 ---- -*************** -*** 6367,6373 **** - else - screen_attr = 0; /* highlighting has stopped */ - } -- #ifdef FEAT_MBYTE - if (enc_dbcs != 0) - { - /* Check if overwriting a double-byte with a single-byte or ---- 6244,6249 ---- -*************** -*** 6410,6419 **** - && (*mb_off2cells)(off_to, max_off_to) == 1 - && (*mb_off2cells)(off_to + 1, max_off_to) > 1))) - clear_next = TRUE; -- #endif - - ScreenLines[off_to] = ScreenLines[off_from]; -- #ifdef FEAT_MBYTE - if (enc_utf8) - { - ScreenLinesUC[off_to] = ScreenLinesUC[off_from]; ---- 6286,6293 ---- -*************** -*** 6427,6433 **** - } - if (char_cells == 2) - ScreenLines[off_to + 1] = ScreenLines[off_from + 1]; -- #endif - - #if defined(FEAT_GUI) || defined(UNIX) - /* The bold trick makes a single column of pixels appear in the ---- 6301,6306 ---- -*************** -*** 6454,6460 **** - } - #endif - ScreenAttrs[off_to] = ScreenAttrs[off_from]; -! #ifdef FEAT_MBYTE - /* For simplicity set the attributes of second half of a - * double-wide character equal to the first half. */ - if (char_cells == 2) ---- 6327,6333 ---- - } - #endif - ScreenAttrs[off_to] = ScreenAttrs[off_from]; -! - /* For simplicity set the attributes of second half of a - * double-wide character equal to the first half. */ - if (char_cells == 2) -*************** -*** 6463,6469 **** - if (enc_dbcs != 0 && char_cells == 2) - screen_char_2(off_to, row, col + coloff); - else -- #endif - screen_char(off_to, row, col + coloff); - } - else if ( p_wiv ---- 6336,6341 ---- -*************** -*** 6489,6495 **** - col += CHAR_CELLS; - } - -- #ifdef FEAT_MBYTE - if (clear_next) - { - /* Clear the second half of a double-wide character of which the left ---- 6361,6366 ---- -*************** -*** 6499,6505 **** - ScreenLinesUC[off_to] = 0; - screen_char(off_to, row, col + coloff); - } -- #endif - - if (clear_width > 0 - #ifdef FEAT_RIGHTLEFT ---- 6370,6375 ---- -*************** -*** 6514,6523 **** - /* blank out the rest of the line */ - while (col < clear_width && ScreenLines[off_to] == ' ' - && ScreenAttrs[off_to] == 0 -! #ifdef FEAT_MBYTE -! && (!enc_utf8 || ScreenLinesUC[off_to] == 0) -! #endif -! ) - { - ++off_to; - ++col; ---- 6384,6390 ---- - /* blank out the rest of the line */ - while (col < clear_width && ScreenLines[off_to] == ' ' - && ScreenAttrs[off_to] == 0 -! && (!enc_utf8 || ScreenLinesUC[off_to] == 0)) - { - ++off_to; - ++col; -*************** -*** 6538,6544 **** - if (hl > HL_ALL || (hl & HL_BOLD)) - { - int prev_cells = 1; -! # ifdef FEAT_MBYTE - if (enc_utf8) - /* for utf-8, ScreenLines[char_offset + 1] == 0 means - * that its width is 2. */ ---- 6405,6411 ---- - if (hl > HL_ALL || (hl & HL_BOLD)) - { - int prev_cells = 1; -! - if (enc_utf8) - /* for utf-8, ScreenLines[char_offset + 1] == 0 means - * that its width is 2. */ -*************** -*** 6561,6567 **** - screen_char_2(off_to - prev_cells, row, - col + coloff - prev_cells); - else -- # endif - screen_char(off_to - prev_cells, row, - col + coloff - prev_cells); - } ---- 6428,6433 ---- -*************** -*** 6583,6597 **** - - c = fillchar_vsep(&hl); - if (ScreenLines[off_to] != (schar_T)c -- #ifdef FEAT_MBYTE - || (enc_utf8 && (int)ScreenLinesUC[off_to] - != (c >= 0x80 ? c : 0)) -- #endif - || ScreenAttrs[off_to] != hl) - { - ScreenLines[off_to] = c; - ScreenAttrs[off_to] = hl; -- #ifdef FEAT_MBYTE - if (enc_utf8) - { - if (c >= 0x80) ---- 6449,6460 ---- -*************** -*** 6602,6608 **** - else - ScreenLinesUC[off_to] = 0; - } -- #endif - screen_char(off_to, row, col + coloff); - } - } ---- 6465,6470 ---- -*************** -*** 6808,6825 **** - #ifdef FEAT_MENU - int emenu; - #endif -- #if defined(FEAT_MBYTE) || defined(FEAT_MENU) - int l; -- #endif - - if (matches == NULL) /* interrupted completion? */ - return; - -- #ifdef FEAT_MBYTE - if (has_mbyte) - buf = alloc((unsigned)Columns * MB_MAXBYTES + 1); - else -- #endif - buf = alloc((unsigned)Columns + 1); - if (buf == NULL) - return; ---- 6670,6683 ---- -*************** -*** 6912,6918 **** - { - s += skip_status_match_char(xp, s); - clen += ptr2cells(s); -- #ifdef FEAT_MBYTE - if (has_mbyte && (l = (*mb_ptr2len)(s)) > 1) - { - STRNCPY(buf + len, s, l); ---- 6770,6775 ---- -*************** -*** 6920,6926 **** - len += l; - } - else -- #endif - { - STRCPY(buf + len, transchar_byte(*s)); - len += (int)STRLEN(buf + len); ---- 6777,6782 ---- -*************** -*** 7095,7132 **** - p = (char_u *)"<"; /* No room for file name! */ - len = 1; - } -! else -! #ifdef FEAT_MBYTE -! if (has_mbyte) -! { -! int clen = 0, i; -! -! /* Count total number of display cells. */ -! clen = mb_string2cells(p, -1); - -! /* Find first character that will fit. -! * Going from start to end is much faster for DBCS. */ -! for (i = 0; p[i] != NUL && clen >= this_ru_col - 1; -! i += (*mb_ptr2len)(p + i)) -! clen -= (*mb_ptr2cells)(p + i); -! len = clen; -! if (i > 0) -! { -! p = p + i - 1; -! *p = '<'; -! ++len; -! } - -! } -! else -! #endif -! if (len > this_ru_col - 1) - { -! p += len - (this_ru_col - 1); - *p = '<'; -! len = this_ru_col - 1; - } - - row = W_WINROW(wp) + wp->w_height; - screen_puts(p, row, wp->w_wincol, attr); - screen_fill(row, row + 1, len + wp->w_wincol, ---- 6951,6984 ---- - p = (char_u *)"<"; /* No room for file name! */ - len = 1; - } -! else if (has_mbyte) -! { -! int clen = 0, i; - -! /* Count total number of display cells. */ -! clen = mb_string2cells(p, -1); - -! /* Find first character that will fit. -! * Going from start to end is much faster for DBCS. */ -! for (i = 0; p[i] != NUL && clen >= this_ru_col - 1; -! i += (*mb_ptr2len)(p + i)) -! clen -= (*mb_ptr2cells)(p + i); -! len = clen; -! if (i > 0) - { -! p = p + i - 1; - *p = '<'; -! ++len; - } - -+ } -+ else if (len > this_ru_col - 1) -+ { -+ p += len - (this_ru_col - 1); -+ *p = '<'; -+ len = this_ru_col - 1; -+ } -+ - row = W_WINROW(wp) + wp->w_height; - screen_puts(p, row, wp->w_wincol, attr); - screen_fill(row, row + 1, len + wp->w_wincol, -*************** -*** 7397,7407 **** - len = (int)STRLEN(buf); - while (width < maxwidth && len < (int)sizeof(buf) - 1) - { -- #ifdef FEAT_MBYTE - len += (*mb_char2bytes)(fillchar, buf + len); -- #else -- buf[len++] = fillchar; -- #endif - ++width; - } - buf[len] = NUL; ---- 7249,7255 ---- -*************** -*** 7470,7480 **** - { - char_u buf[MB_MAXBYTES + 1]; - -- #ifdef FEAT_MBYTE - if (has_mbyte) - buf[(*mb_char2bytes)(c, buf)] = NUL; - else -- #endif - { - buf[0] = c; - buf[1] = NUL; ---- 7318,7326 ---- -*************** -*** 7499,7505 **** - bytes[0] = ScreenLines[off]; - bytes[1] = NUL; - -- #ifdef FEAT_MBYTE - if (enc_utf8 && ScreenLinesUC[off] != 0) - bytes[utfc_char2bytes(off, bytes)] = NUL; - else if (enc_dbcs == DBCS_JPNU && ScreenLines[off] == 0x8e) ---- 7345,7350 ---- -*************** -*** 7513,7523 **** - bytes[1] = ScreenLines[off + 1]; - bytes[2] = NUL; - } -- #endif - } - } - -- #ifdef FEAT_MBYTE - /* - * Return TRUE if composing characters for screen posn "off" differs from - * composing characters in "u8cc". ---- 7358,7366 ---- -*************** -*** 7537,7543 **** - } - return FALSE; - } -- #endif - - /* - * Put string '*text' on the screen at position 'row' and 'col', with ---- 7380,7385 ---- -*************** -*** 7571,7606 **** - char_u *ptr = text; - int len = textlen; - int c; -- #ifdef FEAT_MBYTE - unsigned max_off; - int mbyte_blen = 1; - int mbyte_cells = 1; - int u8c = 0; - int u8cc[MAX_MCO]; - int clear_next_cell = FALSE; -! # ifdef FEAT_ARABIC - int prev_c = 0; /* previous Arabic character */ - int pc, nc, nc1; - int pcc[MAX_MCO]; -- # endif - #endif -- #if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX) - int force_redraw_this; - int force_redraw_next = FALSE; -- #endif - int need_redraw; - - if (ScreenLines == NULL || row >= screen_Rows) /* safety check */ - return; - off = LineOffset[row] + col; - -- #ifdef FEAT_MBYTE - /* When drawing over the right halve of a double-wide char clear out the - * left halve. Only needed in a terminal. */ - if (has_mbyte && col > 0 && col < screen_Columns -! # ifdef FEAT_GUI - && !gui.in_use -! # endif - && mb_fix_col(col, row) != col) - { - ScreenLines[off - 1] = ' '; ---- 7413,7443 ---- - char_u *ptr = text; - int len = textlen; - int c; - unsigned max_off; - int mbyte_blen = 1; - int mbyte_cells = 1; - int u8c = 0; - int u8cc[MAX_MCO]; - int clear_next_cell = FALSE; -! #ifdef FEAT_ARABIC - int prev_c = 0; /* previous Arabic character */ - int pc, nc, nc1; - int pcc[MAX_MCO]; - #endif - int force_redraw_this; - int force_redraw_next = FALSE; - int need_redraw; - - if (ScreenLines == NULL || row >= screen_Rows) /* safety check */ - return; - off = LineOffset[row] + col; - - /* When drawing over the right halve of a double-wide char clear out the - * left halve. Only needed in a terminal. */ - if (has_mbyte && col > 0 && col < screen_Columns -! #ifdef FEAT_GUI - && !gui.in_use -! #endif - && mb_fix_col(col, row) != col) - { - ScreenLines[off - 1] = ' '; -*************** -*** 7615,7631 **** - /* force the cell at "col" to be redrawn */ - force_redraw_next = TRUE; - } -- #endif - -- #ifdef FEAT_MBYTE - max_off = LineOffset[row] + screen_Columns; -- #endif - while (col < screen_Columns - && (len < 0 || (int)(ptr - text) < len) - && *ptr != NUL) - { - c = *ptr; -- #ifdef FEAT_MBYTE - /* check if this is the first byte of a multibyte */ - if (has_mbyte) - { ---- 7452,7464 ---- -*************** -*** 7645,7651 **** - else - u8c = utfc_ptr2char(ptr, u8cc); - mbyte_cells = utf_char2cells(u8c); -! # ifdef UNICODE16 - /* Non-BMP character: display as ? or fullwidth ?. */ - if (u8c >= 0x10000) - { ---- 7478,7484 ---- - else - u8c = utfc_ptr2char(ptr, u8cc); - mbyte_cells = utf_char2cells(u8c); -! #ifdef UNICODE16 - /* Non-BMP character: display as ? or fullwidth ?. */ - if (u8c >= 0x10000) - { -*************** -*** 7653,7660 **** - if (attr == 0) - attr = HL_ATTR(HLF_8); - } -! # endif -! # ifdef FEAT_ARABIC - if (p_arshape && !p_tbidi && ARABIC_CHAR(u8c)) - { - /* Do Arabic shaping. */ ---- 7486,7493 ---- - if (attr == 0) - attr = HL_ATTR(HLF_8); - } -! #endif -! #ifdef FEAT_ARABIC - if (p_arshape && !p_tbidi && ARABIC_CHAR(u8c)) - { - /* Do Arabic shaping. */ -*************** -*** 7676,7682 **** - } - else - prev_c = u8c; -! # endif - if (col + mbyte_cells > screen_Columns) - { - /* Only 1 cell left, but character requires 2 cells: ---- 7509,7515 ---- - } - else - prev_c = u8c; -! #endif - if (col + mbyte_cells > screen_Columns) - { - /* Only 1 cell left, but character requires 2 cells: -*************** -*** 7686,7700 **** - } - } - } -- #endif - -- #if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX) - force_redraw_this = force_redraw_next; - force_redraw_next = FALSE; -- #endif - - need_redraw = ScreenLines[off] != c -- #ifdef FEAT_MBYTE - || (mbyte_cells == 2 - && ScreenLines[off + 1] != (enc_dbcs ? ptr[1] : 0)) - || (enc_dbcs == DBCS_JPNU ---- 7519,7529 ---- -*************** -*** 7705,7719 **** - (u8char_T)(c < 0x80 && u8cc[0] == 0 ? 0 : u8c) - || (ScreenLinesUC[off] != 0 - && screen_comp_differs(off, u8cc)))) -- #endif - || ScreenAttrs[off] != attr - || exmode_active; - -! if (need_redraw -! #if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX) -! || force_redraw_this -! #endif -! ) - { - #if defined(FEAT_GUI) || defined(UNIX) - /* The bold trick makes a single row of pixels appear in the next ---- 7534,7543 ---- - (u8char_T)(c < 0x80 && u8cc[0] == 0 ? 0 : u8c) - || (ScreenLinesUC[off] != 0 - && screen_comp_differs(off, u8cc)))) - || ScreenAttrs[off] != attr - || exmode_active; - -! if (need_redraw || force_redraw_this) - { - #if defined(FEAT_GUI) || defined(UNIX) - /* The bold trick makes a single row of pixels appear in the next -*************** -*** 7740,7746 **** - force_redraw_next = TRUE; - } - #endif -- #ifdef FEAT_MBYTE - /* When at the end of the text and overwriting a two-cell - * character with a one-cell character, need to clear the next - * cell. Also when overwriting the left halve of a two-cell char ---- 7564,7569 ---- -*************** -*** 7765,7774 **** - && (*mb_off2cells)(off, max_off) == 1 - && (*mb_off2cells)(off + 1, max_off) > 1))) - ScreenLines[off + mbyte_blen] = 0; -- #endif - ScreenLines[off] = c; - ScreenAttrs[off] = attr; -- #ifdef FEAT_MBYTE - if (enc_utf8) - { - if (c < 0x80 && u8cc[0] == 0) ---- 7588,7595 ---- -*************** -*** 7804,7813 **** - screen_char(off, row, col); - } - else -- #endif - screen_char(off, row, col); - } -- #ifdef FEAT_MBYTE - if (has_mbyte) - { - off += mbyte_cells; ---- 7625,7632 ---- -*************** -*** 7821,7827 **** - } - } - else -- #endif - { - ++off; - ++col; ---- 7640,7645 ---- -*************** -*** 7829,7847 **** - } - } - -- #if defined(FEAT_MBYTE) || defined(FEAT_GUI) || defined(UNIX) - /* If we detected the next character needs to be redrawn, but the text - * doesn't extend up to there, update the character here. */ - if (force_redraw_next && col < screen_Columns) - { -- # ifdef FEAT_MBYTE - if (enc_dbcs != 0 && dbcs_off2cells(off, max_off) > 1) - screen_char_2(off, row, col); - else -- # endif - screen_char(off, row, col); - } -- #endif - } - - #ifdef FEAT_SEARCH_EXTRA ---- 7647,7661 ---- -*************** -*** 8063,8073 **** - shl->lnum = 0; - break; - } -- #ifdef FEAT_MBYTE - if (has_mbyte) - matchcol += mb_ptr2len(ml); - else -- #endif - ++matchcol; - } - else ---- 7877,7885 ---- -*************** -*** 8515,8521 **** - if (screen_attr != attr) - screen_start_highlight(attr); - -- #ifdef FEAT_MBYTE - if (enc_utf8 && ScreenLinesUC[off] != 0) - { - char_u buf[MB_MAXBYTES + 1]; ---- 8327,8332 ---- -*************** -*** 8523,8531 **** - if (utf_ambiguous_width(ScreenLinesUC[off])) - { - if (*p_ambw == 'd' -! # ifdef FEAT_GUI - && !gui.in_use -! # endif - ) - { - /* Clear the two screen cells. If the character is actually ---- 8334,8342 ---- - if (utf_ambiguous_width(ScreenLinesUC[off])) - { - if (*p_ambw == 'd' -! #ifdef FEAT_GUI - && !gui.in_use -! #endif - ) - { - /* Clear the two screen cells. If the character is actually -*************** -*** 8545,8568 **** - out_str(buf); - } - else -- #endif - { -- #ifdef FEAT_MBYTE - out_flush_check(); -- #endif - out_char(ScreenLines[off]); -- #ifdef FEAT_MBYTE - /* double-byte character in single-width cell */ - if (enc_dbcs == DBCS_JPNU && ScreenLines[off] == 0x8e) - out_char(ScreenLines2[off]); -- #endif - } - - screen_cur_col++; - } - -- #ifdef FEAT_MBYTE -- - /* - * Used for enc_dbcs only: Put one double-wide character at ScreenLines["off"] - * on the screen at position 'row' and 'col'. ---- 8356,8372 ---- -*************** -*** 8590,8596 **** - out_char(ScreenLines[off + 1]); - ++screen_cur_col; - } -- #endif - - /* - * Draw a rectangle of the screen, inverted when "invert" is TRUE. ---- 8394,8399 ---- -*************** -*** 8606,8614 **** - { - int r, c; - int off; -- #ifdef FEAT_MBYTE - int max_off; -- #endif - - /* Can't use ScreenLines unless initialized */ - if (ScreenLines == NULL) ---- 8409,8415 ---- -*************** -*** 8619,8643 **** - for (r = row; r < row + height; ++r) - { - off = LineOffset[r]; -- #ifdef FEAT_MBYTE - max_off = off + screen_Columns; -- #endif - for (c = col; c < col + width; ++c) - { -- #ifdef FEAT_MBYTE - if (enc_dbcs != 0 && dbcs_off2cells(off + c, max_off) > 1) - { - screen_char_2(off + c, r, c); - ++c; - } - else -- #endif - { - screen_char(off + c, r, c); -- #ifdef FEAT_MBYTE - if (utf_off2cells(off + c, max_off) > 1) - ++c; -- #endif - } - } - } ---- 8420,8438 ---- -*************** -*** 8675,8684 **** - { - ScreenLines[off] = ' '; - ScreenAttrs[off] = attr; -- # ifdef FEAT_MBYTE - if (enc_utf8) - ScreenLinesUC[off] = 0; -- # endif - } - - /* ---- 8470,8477 ---- -*************** -*** 8724,8734 **** - !IS_CTERM); - for (row = start_row; row < end_row; ++row) - { -- #ifdef FEAT_MBYTE - if (has_mbyte -! # ifdef FEAT_GUI - && !gui.in_use -! # endif - ) - { - /* When drawing over the right halve of a double-wide char clear ---- 8517,8526 ---- - !IS_CTERM); - for (row = start_row; row < end_row; ++row) - { - if (has_mbyte -! #ifdef FEAT_GUI - && !gui.in_use -! #endif - ) - { - /* When drawing over the right halve of a double-wide char clear -*************** -*** 8740,8746 **** - if (end_col < screen_Columns && mb_fix_col(end_col, row) != end_col) - screen_puts_len((char_u *)" ", 1, row, end_col, 0); - } -- #endif - /* - * Try to use delete-line termcap code, when no attributes or in a - * "normal" terminal, where a bold/italic space is just a ---- 8532,8537 ---- -*************** -*** 8766,8778 **** - end_off = LineOffset[row] + end_col; - - /* skip blanks (used often, keep it fast!) */ -- #ifdef FEAT_MBYTE - if (enc_utf8) - while (off < end_off && ScreenLines[off] == ' ' - && ScreenAttrs[off] == 0 && ScreenLinesUC[off] == 0) - ++off; - else -- #endif - while (off < end_off && ScreenLines[off] == ' ' - && ScreenAttrs[off] == 0) - ++off; ---- 8557,8567 ---- -*************** -*** 8798,8807 **** - for (col = start_col; col < end_col; ++col) - { - if (ScreenLines[off] != c -- #ifdef FEAT_MBYTE - || (enc_utf8 && (int)ScreenLinesUC[off] - != (c >= 0x80 ? c : 0)) -- #endif - || ScreenAttrs[off] != attr - #if defined(FEAT_GUI) || defined(UNIX) - || force_next ---- 8587,8594 ---- -*************** -*** 8834,8840 **** - } - #endif - ScreenLines[off] = c; -- #ifdef FEAT_MBYTE - if (enc_utf8) - { - if (c >= 0x80) ---- 8621,8626 ---- -*************** -*** 8845,8851 **** - else - ScreenLinesUC[off] = 0; - } -- #endif - ScreenAttrs[off] = attr; - if (!did_delete || c != ' ') - screen_char(off, row, col); ---- 8631,8636 ---- -*************** -*** 8925,8936 **** - int outofmem = FALSE; - int len; - schar_T *new_ScreenLines; -- #ifdef FEAT_MBYTE - u8char_T *new_ScreenLinesUC = NULL; - u8char_T *new_ScreenLinesC[MAX_MCO]; - schar_T *new_ScreenLines2 = NULL; - int i; -- #endif - sattr_T *new_ScreenAttrs; - unsigned *new_LineOffset; - char_u *new_LineWraps; ---- 8710,8719 ---- -*************** -*** 8949,8960 **** - if ((ScreenLines != NULL - && Rows == screen_Rows - && Columns == screen_Columns -- #ifdef FEAT_MBYTE - && enc_utf8 == (ScreenLinesUC != NULL) - && (enc_dbcs == DBCS_JPNU) == (ScreenLines2 != NULL) -! && p_mco == Screen_mco -! #endif -! ) - || Rows == 0 - || Columns == 0 - || (!full_screen && ScreenLines == NULL)) ---- 8732,8740 ---- - if ((ScreenLines != NULL - && Rows == screen_Rows - && Columns == screen_Columns - && enc_utf8 == (ScreenLinesUC != NULL) - && (enc_dbcs == DBCS_JPNU) == (ScreenLines2 != NULL) -! && p_mco == Screen_mco) - || Rows == 0 - || Columns == 0 - || (!full_screen && ScreenLines == NULL)) -*************** -*** 8997,9003 **** - - new_ScreenLines = (schar_T *)lalloc((long_u)( - (Rows + 1) * Columns * sizeof(schar_T)), FALSE); -- #ifdef FEAT_MBYTE - vim_memset(new_ScreenLinesC, 0, sizeof(u8char_T *) * MAX_MCO); - if (enc_utf8) - { ---- 8777,8782 ---- -*************** -*** 9010,9016 **** - if (enc_dbcs == DBCS_JPNU) - new_ScreenLines2 = (schar_T *)lalloc((long_u)( - (Rows + 1) * Columns * sizeof(schar_T)), FALSE); -- #endif - new_ScreenAttrs = (sattr_T *)lalloc((long_u)( - (Rows + 1) * Columns * sizeof(sattr_T)), FALSE); - new_LineOffset = (unsigned *)lalloc((long_u)( ---- 8789,8794 ---- -*************** -*** 9031,9046 **** - outofmem = TRUE; - give_up: - -- #ifdef FEAT_MBYTE - for (i = 0; i < p_mco; ++i) - if (new_ScreenLinesC[i] == NULL) - break; -- #endif - if (new_ScreenLines == NULL -- #ifdef FEAT_MBYTE - || (enc_utf8 && (new_ScreenLinesUC == NULL || i != p_mco)) - || (enc_dbcs == DBCS_JPNU && new_ScreenLines2 == NULL) -- #endif - || new_ScreenAttrs == NULL - || new_LineOffset == NULL - || new_LineWraps == NULL ---- 8809,8820 ---- -*************** -*** 9057,9068 **** - done_outofmem_msg = TRUE; - } - VIM_CLEAR(new_ScreenLines); -- #ifdef FEAT_MBYTE - VIM_CLEAR(new_ScreenLinesUC); - for (i = 0; i < p_mco; ++i) - VIM_CLEAR(new_ScreenLinesC[i]); - VIM_CLEAR(new_ScreenLines2); -- #endif - VIM_CLEAR(new_ScreenAttrs); - VIM_CLEAR(new_LineOffset); - VIM_CLEAR(new_LineWraps); ---- 8831,8840 ---- -*************** -*** 9087,9093 **** - { - (void)vim_memset(new_ScreenLines + new_row * Columns, - ' ', (size_t)Columns * sizeof(schar_T)); -- #ifdef FEAT_MBYTE - if (enc_utf8) - { - (void)vim_memset(new_ScreenLinesUC + new_row * Columns, ---- 8859,8864 ---- -*************** -*** 9100,9106 **** - if (enc_dbcs == DBCS_JPNU) - (void)vim_memset(new_ScreenLines2 + new_row * Columns, - 0, (size_t)Columns * sizeof(schar_T)); -- #endif - (void)vim_memset(new_ScreenAttrs + new_row * Columns, - 0, (size_t)Columns * sizeof(sattr_T)); - old_row = new_row + (screen_Rows - Rows); ---- 8871,8876 ---- -*************** -*** 9110,9125 **** - len = screen_Columns; - else - len = Columns; -- #ifdef FEAT_MBYTE - /* When switching to utf-8 don't copy characters, they - * may be invalid now. Also when p_mco changes. */ - if (!(enc_utf8 && ScreenLinesUC == NULL) - && p_mco == Screen_mco) -- #endif - mch_memmove(new_ScreenLines + new_LineOffset[new_row], - ScreenLines + LineOffset[old_row], - (size_t)len * sizeof(schar_T)); -- #ifdef FEAT_MBYTE - if (enc_utf8 && ScreenLinesUC != NULL - && p_mco == Screen_mco) - { ---- 8880,8892 ---- -*************** -*** 9136,9142 **** - mch_memmove(new_ScreenLines2 + new_LineOffset[new_row], - ScreenLines2 + LineOffset[old_row], - (size_t)len * sizeof(schar_T)); -- #endif - mch_memmove(new_ScreenAttrs + new_LineOffset[new_row], - ScreenAttrs + LineOffset[old_row], - (size_t)len * sizeof(sattr_T)); ---- 8903,8908 ---- -*************** -*** 9150,9162 **** - free_screenlines(); - - ScreenLines = new_ScreenLines; -- #ifdef FEAT_MBYTE - ScreenLinesUC = new_ScreenLinesUC; - for (i = 0; i < p_mco; ++i) - ScreenLinesC[i] = new_ScreenLinesC[i]; - Screen_mco = p_mco; - ScreenLines2 = new_ScreenLines2; -- #endif - ScreenAttrs = new_ScreenAttrs; - LineOffset = new_LineOffset; - LineWraps = new_LineWraps; ---- 8916,8926 ---- -*************** -*** 9213,9226 **** - void - free_screenlines(void) - { -- #ifdef FEAT_MBYTE - int i; - - vim_free(ScreenLinesUC); - for (i = 0; i < Screen_mco; ++i) - vim_free(ScreenLinesC[i]); - vim_free(ScreenLines2); -- #endif - vim_free(ScreenLines); - vim_free(ScreenAttrs); - vim_free(LineOffset); ---- 8977,8988 ---- -*************** -*** 9303,9313 **** - lineclear(unsigned off, int width, int attr) - { - (void)vim_memset(ScreenLines + off, ' ', (size_t)width * sizeof(schar_T)); -- #ifdef FEAT_MBYTE - if (enc_utf8) - (void)vim_memset(ScreenLinesUC + off, 0, - (size_t)width * sizeof(u8char_T)); -- #endif - (void)vim_memset(ScreenAttrs + off, attr, (size_t)width * sizeof(sattr_T)); - } - ---- 9065,9073 ---- -*************** -*** 9332,9338 **** - - mch_memmove(ScreenLines + off_to, ScreenLines + off_from, - wp->w_width * sizeof(schar_T)); -- #ifdef FEAT_MBYTE - if (enc_utf8) - { - int i; ---- 9092,9097 ---- -*************** -*** 9346,9352 **** - if (enc_dbcs == DBCS_JPNU) - mch_memmove(ScreenLines2 + off_to, ScreenLines2 + off_from, - wp->w_width * sizeof(schar_T)); -- #endif - mch_memmove(ScreenAttrs + off_to, ScreenAttrs + off_from, - wp->w_width * sizeof(sattr_T)); - } ---- 9105,9110 ---- -*************** -*** 9533,9539 **** - if (i != 0) - cost = 999; /* different attributes, don't do it */ - } -- #ifdef FEAT_MBYTE - if (enc_utf8) - { - /* Don't use an UTF-8 char for positioning, it's slow. */ ---- 9291,9296 ---- -*************** -*** 9544,9550 **** - break; - } - } -- #endif - } - - /* ---- 9301,9306 ---- -*************** -*** 9603,9617 **** - { - if (ScreenAttrs[off] != screen_attr) - screen_stop_highlight(); -- #ifdef FEAT_MBYTE - out_flush_check(); -- #endif - out_char(ScreenLines[off]); -- #ifdef FEAT_MBYTE - if (enc_dbcs == DBCS_JPNU - && ScreenLines[off] == 0x8e) - out_char(ScreenLines2[off]); -- #endif - ++off; - } - } ---- 9359,9369 ---- -*************** -*** 9660,9672 **** - #ifdef FEAT_RIGHTLEFT - /* With 'rightleft' set and the cursor on a double-wide - * character, position it on the leftmost column. */ -! curwin->w_p_rl ? ((int)curwin->w_width - curwin->w_wcol - ( -! # ifdef FEAT_MBYTE -! (has_mbyte - && (*mb_ptr2cells)(ml_get_cursor()) == 2 -! && vim_isprintc(gchar_cursor())) ? 2 : -! # endif -! 1)) : - #endif - curwin->w_wcol)); - } ---- 9412,9421 ---- - #ifdef FEAT_RIGHTLEFT - /* With 'rightleft' set and the cursor on a double-wide - * character, position it on the leftmost column. */ -! curwin->w_p_rl ? ((int)curwin->w_width - curwin->w_wcol -! - ((has_mbyte - && (*mb_ptr2cells)(ml_get_cursor()) == 2 -! && vim_isprintc(gchar_cursor())) ? 2 : 1)) : - #endif - curwin->w_wcol)); - } -*************** -*** 10808,10823 **** - shorten_dir(NameBuff); - len = vim_strsize(NameBuff); - p = NameBuff; -- #ifdef FEAT_MBYTE - if (has_mbyte) - while (len > room) - { - len -= ptr2cells(p); - MB_PTR_ADV(p); - } -! else -! #endif -! if (len > room) - { - p += len - room; - len = room; ---- 10557,10569 ---- - shorten_dir(NameBuff); - len = vim_strsize(NameBuff); - p = NameBuff; - if (has_mbyte) - while (len > room) - { - len -= ptr2cells(p); - MB_PTR_ADV(p); - } -! else if (len > room) - { - p += len - room; - len = room; -*************** -*** 11210,11227 **** - /* need at least 3 chars left for get_rel_pos() + NUL */ - while (this_ru_col + o < width && RULER_BUF_LEN > i + 4) - { -- #ifdef FEAT_MBYTE - if (has_mbyte) - i += (*mb_char2bytes)(fillchar, buffer + i); - else -- #endif - buffer[i++] = fillchar; - ++o; - } - get_rel_pos(wp, buffer + i, RULER_BUF_LEN - i); - } - /* Truncate at window boundary. */ -- #ifdef FEAT_MBYTE - if (has_mbyte) - { - o = 0; ---- 10956,10970 ---- -*************** -*** 11235,11243 **** - } - } - } -! else -! #endif -! if (this_ru_col + (int)STRLEN(buffer) > width) - buffer[width - this_ru_col] = NUL; - - screen_puts(buffer, row, this_ru_col + off, attr); ---- 10978,10984 ---- - } - } - } -! else if (this_ru_col + (int)STRLEN(buffer) > width) - buffer[width - this_ru_col] = NUL; - - screen_puts(buffer, row, this_ru_col + off, attr); -*** ../vim-8.1.0808/src/version.c 2019-01-24 16:27:41.693254193 +0100 ---- src/version.c 2019-01-24 16:38:47.536784802 +0100 -*************** -*** 793,794 **** ---- 793,796 ---- - { /* Add new patch number below this line */ -+ /**/ -+ 809, - /**/ - --- -FATHER: One day, lad, all this will be yours ... -PRINCE: What - the curtains? - "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD - - /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ -/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ -\\\ an exciting new programming language -- http://www.Zimbu.org /// - \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |