summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.0809
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.0809')
-rw-r--r--data/vim/patches/8.1.08095622
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(&regparse);
- if (endc == 0)
- {
-- #ifdef FEAT_MBYTE
- if (has_mbyte)
- endc = mb_ptr2char_adv(&regparse);
- 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 ///