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