diff options
Diffstat (limited to 'data/vim/patches/8.1.0805')
-rw-r--r-- | data/vim/patches/8.1.0805 | 7316 |
1 files changed, 7316 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0805 b/data/vim/patches/8.1.0805 new file mode 100644 index 000000000..d4b3b4f07 --- /dev/null +++ b/data/vim/patches/8.1.0805 @@ -0,0 +1,7316 @@ +To: vim_dev@googlegroups.com +Subject: Patch 8.1.0805 +Fcc: outbox +From: Bram Moolenaar <Bram@moolenaar.net> +Mime-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit +------------ + +Patch 8.1.0805 +Problem: Too many #ifdefs. +Solution: Graduate FEAT_MBYTE, part 1. +Files: src/buffer.c, src/charset.c, src/diff.c, src/digraph.c, + src/edit.c, src/eval.c, src/evalfunc.c, src/ex_cmds.c, + src/ex_cmds2.c, src/ex_docmd.c, src/ex_getln.c, src/fileio.c, + src/fold.c, src/gui.c, src/gui_mac.c, src/gui_photon.c, + src/gui_w32.c + + +*** ../vim-8.1.0804/src/buffer.c 2019-01-20 18:25:50.313911236 +0100 +--- src/buffer.c 2019-01-24 14:03:05.483739052 +0100 +*************** +*** 704,713 **** + buf->b_shortname = FALSE; + buf->b_p_eol = TRUE; + buf->b_start_eol = TRUE; +- #ifdef FEAT_MBYTE + buf->b_p_bomb = FALSE; + buf->b_start_bomb = FALSE; +- #endif + buf->b_ml.ml_mfp = NULL; + buf->b_ml.ml_flags = ML_EMPTY; /* empty buffer */ + #ifdef FEAT_NETBEANS_INTG +--- 704,711 ---- +*************** +*** 940,948 **** + map_clear_int(buf, MAP_ALL_MODES, TRUE, FALSE); /* clear local mappings */ + map_clear_int(buf, MAP_ALL_MODES, TRUE, TRUE); /* clear local abbrevs */ + #endif +- #ifdef FEAT_MBYTE + VIM_CLEAR(buf->b_start_fenc); +- #endif + } + + /* +--- 938,944 ---- +*************** +*** 2133,2141 **** + { + if (free_p_ff) + { +- #ifdef FEAT_MBYTE + clear_string_option(&buf->b_p_fenc); +- #endif + clear_string_option(&buf->b_p_ff); + clear_string_option(&buf->b_p_bh); + clear_string_option(&buf->b_p_bt); +--- 2129,2135 ---- +*************** +*** 2245,2253 **** + clear_string_option(&buf->b_p_lw); + #endif + clear_string_option(&buf->b_p_bkc); +- #ifdef FEAT_MBYTE + clear_string_option(&buf->b_p_menc); +- #endif + } + + /* +--- 2239,2245 ---- +*************** +*** 3778,3787 **** + if (len > 100) + { + len -= 100; +- #ifdef FEAT_MBYTE + if (has_mbyte) + len += (*mb_tail_off)(p, p + len) + 1; +- #endif + p += len; + } + STRCPY(icon_str, p); +--- 3770,3777 ---- +*************** +*** 3939,3949 **** + + if (fillchar == 0) + fillchar = ' '; +- #ifdef FEAT_MBYTE + /* Can't handle a multi-byte fill character yet. */ + else if (mb_char2len(fillchar) > 1) + fillchar = '-'; +- #endif + + // The cursor in windows other than the current one isn't always + // up-to-date, esp. because of autocommands and timers. +--- 3929,3937 ---- +*************** +*** 3973,3983 **** + byteval = 0; + } + else +- #ifdef FEAT_MBYTE + byteval = (*mb_ptr2char)(p + wp->w_cursor.col); +- #else +- byteval = p[wp->w_cursor.col]; +- #endif + + groupdepth = 0; + p = out; +--- 3961,3967 ---- +*************** +*** 4079,4085 **** + if (l > item[groupitem[groupdepth]].maxwid) + { + /* truncate, remove n bytes of text at the start */ +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + /* Find the first character that should be included. */ +--- 4063,4068 ---- +*************** +*** 4091,4107 **** + } + } + else +- #endif + n = (long)(p - t) - item[groupitem[groupdepth]].maxwid + 1; + + *t = '<'; + mch_memmove(t + 1, t + n, (size_t)(p - (t + n))); + p = p - n + 1; +! #ifdef FEAT_MBYTE +! /* Fill up space left over by half a double-wide char. */ + while (++l < item[groupitem[groupdepth]].minwid) + *p++ = fillchar; +- #endif + + /* correct the start of the items for the truncation */ + for (l = groupitem[groupdepth] + 1; l < curitem; l++) +--- 4074,4088 ---- + } + } + else + n = (long)(p - t) - item[groupitem[groupdepth]].maxwid + 1; + + *t = '<'; + mch_memmove(t + 1, t + n, (size_t)(p - (t + n))); + p = p - n + 1; +! +! // Fill up space left over by half a double-wide char. + while (++l < item[groupitem[groupdepth]].minwid) + *p++ = fillchar; + + /* correct the start of the items for the truncation */ + for (l = groupitem[groupdepth] + 1; l < curitem; l++) +*************** +*** 4483,4496 **** + if (l > maxwid) + { + while (l >= maxwid) +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + l -= ptr2cells(t); + t += (*mb_ptr2len)(t); + } + else +- #endif + l -= byte2cells(*t++); + if (p + 1 >= out + outlen) + break; +--- 4464,4475 ---- +*************** +*** 4610,4616 **** + if (width - vim_strsize(s) >= maxwidth) + { + /* Truncation mark is beyond max length */ +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + s = out; +--- 4589,4594 ---- +*************** +*** 4627,4633 **** + *s++ = fillchar; + } + else +- #endif + s = out + maxwidth - 1; + for (l = 0; l < itemcnt; l++) + if (item[l].start > s) +--- 4605,4610 ---- +*************** +*** 4638,4644 **** + } + else + { +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + n = 0; +--- 4615,4620 ---- +*************** +*** 4649,4655 **** + } + } + else +- #endif + n = width - maxwidth + 1; + p = s + n; + STRMOVE(s + 1, p); +--- 4625,4630 ---- +*** ../vim-8.1.0804/src/charset.c 2018-09-30 21:43:17.179693404 +0200 +--- src/charset.c 2019-01-24 14:08:03.845910116 +0100 +*************** +*** 9,20 **** + + #include "vim.h" + +! #ifdef FEAT_MBYTE +! # if defined(HAVE_WCHAR_H) +! # include <wchar.h> /* for towupper() and towlower() */ +! # endif +! static int win_nolbr_chartabsize(win_T *wp, char_u *s, colnr_T col, int *headp); + #endif + + static unsigned nr2hex(unsigned c); + +--- 9,18 ---- + + #include "vim.h" + +! #if defined(HAVE_WCHAR_H) +! # include <wchar.h> /* for towupper() and towlower() */ + #endif ++ static int win_nolbr_chartabsize(win_T *wp, char_u *s, colnr_T col, int *headp); + + static unsigned nr2hex(unsigned c); + +*************** +*** 109,115 **** + #endif + while (c < 256) + { +- #ifdef FEAT_MBYTE + /* UTF-8: bytes 0xa0 - 0xff are printable (latin1) */ + if (enc_utf8 && c >= 0xa0) + g_chartab[c++] = CT_PRINT_CHAR + 1; +--- 107,112 ---- +*************** +*** 120,145 **** + else if (enc_dbcs != 0 && MB_BYTE2LEN(c) == 2) + g_chartab[c++] = CT_PRINT_CHAR + 2; + else +- #endif + /* the rest is unprintable by default */ + g_chartab[c++] = (dy_flags & DY_UHEX) ? 4 : 2; + } + +- #ifdef FEAT_MBYTE + /* Assume that every multi-byte char is a filename character. */ + for (c = 1; c < 256; ++c) + if ((enc_dbcs != 0 && MB_BYTE2LEN(c) > 1) + || (enc_dbcs == DBCS_JPNU && c == 0x8e) + || (enc_utf8 && c >= 0xa0)) + g_chartab[c] |= CT_FNAME_CHAR; +- #endif + } + + /* + * Init word char flags all to FALSE + */ + vim_memset(buf->b_chartab, 0, (size_t)32); +- #ifdef FEAT_MBYTE + if (enc_dbcs != 0) + for (c = 0; c < 256; ++c) + { +--- 117,138 ---- +*************** +*** 147,153 **** + if (MB_BYTE2LEN(c) == 2) + SET_CHARTAB(buf, c); + } +- #endif + + #ifdef FEAT_LISP + /* +--- 140,145 ---- +*************** +*** 184,194 **** + if (VIM_ISDIGIT(*p)) + c = getdigits(&p); + else +- #ifdef FEAT_MBYTE + if (has_mbyte) + c = mb_ptr2char_adv(&p); + else +- #endif + c = *p++; + c2 = -1; + if (*p == '-' && p[1] != NUL) +--- 176,184 ---- +*************** +*** 197,207 **** + if (VIM_ISDIGIT(*p)) + c2 = getdigits(&p); + else +- #ifdef FEAT_MBYTE + if (has_mbyte) + c2 = mb_ptr2char_adv(&p); + else +- #endif + c2 = *p++; + } + if (c <= 0 || c >= 256 || (c2 < c && c2 != -1) || c2 >= 256 +--- 187,195 ---- +*************** +*** 253,265 **** + || (p_altkeymap + && (F_isalpha(c) || F_isdigit(c))) + #endif +! ) +! #ifdef FEAT_MBYTE +! /* For double-byte we keep the cell width, so +! * that we can detect it from the first byte. */ +! && !(enc_dbcs && MB_BYTE2LEN(c) == 2) +! #endif +! ) + { + if (tilde) + { +--- 241,249 ---- + || (p_altkeymap + && (F_isalpha(c) || F_isdigit(c))) + #endif +! // For double-byte we keep the cell width, so +! // that we can detect it from the first byte. +! ) && !(enc_dbcs && MB_BYTE2LEN(c) == 2)) + { + if (tilde) + { +*************** +*** 322,333 **** + room = bufsize - len; + while (*buf != 0) + { +- # ifdef FEAT_MBYTE + /* Assume a multi-byte character doesn't need translation. */ + if (has_mbyte && (trs_len = (*mb_ptr2len)(buf)) > 1) + len -= trs_len; + else +- # endif + { + trs = transchar_byte(*buf); + trs_len = (int)STRLEN(trs); +--- 306,315 ---- +*************** +*** 356,367 **** + { + char_u *res; + char_u *p; +- #ifdef FEAT_MBYTE + int l, len, c; + char_u hexbuf[11]; +- #endif + +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + /* Compute the length of the result, taking account of unprintable +--- 338,346 ---- +*************** +*** 394,400 **** + res = alloc((unsigned)(len + 1)); + } + else +- #endif + res = alloc((unsigned)(vim_strsize(s) + 1)); + if (res != NULL) + { +--- 373,378 ---- +*************** +*** 402,408 **** + p = s; + while (*p != NUL) + { +- #ifdef FEAT_MBYTE + if (has_mbyte && (l = (*mb_ptr2len)(p)) > 1) + { + c = (*mb_ptr2char)(p); +--- 380,385 ---- +*************** +*** 413,419 **** + p += l; + } + else +- #endif + STRCAT(res, transchar_byte(*p++)); + } + } +--- 390,395 ---- +*************** +*** 468,474 **** + i = 0; + while (STR_CHAR(i) != NUL) + { +- #ifdef FEAT_MBYTE + if (enc_utf8 || (has_mbyte && MB_BYTE2LEN(STR_CHAR(i)) > 1)) + { + if (enc_utf8) +--- 444,449 ---- +*************** +*** 520,526 **** + i += (*mb_ptr2len)(STR_PTR(i)); + } + else +- #endif + { + if (buf == NULL) + GA_CHAR(i) = TOLOWER_LOC(GA_CHAR(i)); +--- 495,500 ---- +*************** +*** 580,586 **** + return transchar_buf; + } + +- #if defined(FEAT_MBYTE) || defined(PROTO) + /* + * Like transchar(), but called with a byte instead of a character. Checks + * for an illegal UTF-8 byte. +--- 554,559 ---- +*************** +*** 595,601 **** + } + return transchar(c); + } +- #endif + + /* + * Convert non-printable character to two or more printable characters in +--- 568,573 ---- +*************** +*** 632,643 **** + + buf[2] = NUL; + } +- #ifdef FEAT_MBYTE + else if (enc_utf8 && c >= 0x80) + { + transchar_hex(buf, c); + } +- #endif + #ifndef EBCDIC + else if (c >= ' ' + 0x80 && c <= '~' + 0x80) /* 0xa0 - 0xfe */ + { +--- 604,613 ---- +*************** +*** 675,687 **** + int i = 0; + + buf[0] = '<'; +- #ifdef FEAT_MBYTE + if (c > 255) + { + buf[++i] = nr2hex((unsigned)c >> 12); + buf[++i] = nr2hex((unsigned)c >> 8); + } +- #endif + buf[++i] = nr2hex((unsigned)c >> 4); + buf[++i] = nr2hex((unsigned)c); + buf[++i] = '>'; +--- 645,655 ---- +*************** +*** 712,721 **** + int + byte2cells(int b) + { +- #ifdef FEAT_MBYTE + if (enc_utf8 && b >= 0x80) + return 0; +- #endif + return (g_chartab[b] & CT_CELL_MASK); + } + +--- 680,687 ---- +*************** +*** 729,735 **** + { + if (IS_SPECIAL(c)) + return char2cells(K_SECOND(c)) + 2; +- #ifdef FEAT_MBYTE + if (c >= 0x80) + { + /* UTF-8: above 0x80 need to check the value */ +--- 695,700 ---- +*************** +*** 744,750 **** + return 2; + } + } +- #endif + return (g_chartab[c & 0xff] & CT_CELL_MASK); + } + +--- 709,714 ---- +*************** +*** 755,766 **** + int + ptr2cells(char_u *p) + { +- #ifdef FEAT_MBYTE + /* For UTF-8 we need to look at more bytes if the first byte is >= 0x80. */ + if (enc_utf8 && *p >= 0x80) + return utf_ptr2cells(p); + /* For DBCS we can tell the cell count from the first byte. */ +- #endif + return (g_chartab[*p] & CT_CELL_MASK); + } + +--- 719,728 ---- +*************** +*** 784,791 **** + int size = 0; + + while (*s != NUL && --len >= 0) +- { +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + int l = (*mb_ptr2len)(s); +--- 746,751 ---- +*************** +*** 795,803 **** + len -= l - 1; + } + else +- #endif + size += byte2cells(*s++); +! } + return size; + } + +--- 755,762 ---- + len -= l - 1; + } + else + size += byte2cells(*s++); +! + return size; + } + +*************** +*** 907,918 **** + { + if (c >= 0x100) + { +- #ifdef FEAT_MBYTE + if (enc_dbcs != 0) + return dbcs_class((unsigned)c >> 8, (unsigned)(c & 0xff)) >= 2; + if (enc_utf8) + return utf_class_buf(c, buf) >= 2; +- #endif + return FALSE; + } + return (c > 0 && GET_CHARTAB(buf, c) != 0); +--- 866,875 ---- +*************** +*** 932,941 **** + { + int c = *p; + +- #ifdef FEAT_MBYTE + if (has_mbyte && MB_BYTE2LEN(c) > 1) + c = (*mb_ptr2char)(p); +- #endif + return vim_iswordc_buf(c, buf); + } + +--- 889,896 ---- +*************** +*** 973,982 **** + int + vim_isprintc(int c) + { +- #ifdef FEAT_MBYTE + if (enc_utf8 && c >= 0x100) + return utf_printable(c); +- #endif + return (c >= 0x100 || (c > 0 && (g_chartab[c] & CT_PRINT_CHAR))); + } + +--- 928,935 ---- +*************** +*** 987,998 **** + int + vim_isprintc_strict(int c) + { +- #ifdef FEAT_MBYTE + if (enc_dbcs != 0 && c < 0x100 && MB_BYTE2LEN(c) > 1) + return FALSE; + if (enc_utf8 && c >= 0x100) + return utf_printable(c); +- #endif + return (c >= 0x100 || (c > 0 && (g_chartab[c] & CT_PRINT_CHAR))); + } + +--- 940,949 ---- +*************** +*** 1009,1018 **** + if (!curwin->w_p_lbr && *p_sbr == NUL && !curwin->w_p_bri) + { + #endif +- #ifdef FEAT_MBYTE + if (curwin->w_p_wrap) + return win_nolbr_chartabsize(curwin, s, col, NULL); +- #endif + RET_WIN_BUF_CHARTABSIZE(curwin, curbuf, s, col) + #ifdef FEAT_LINEBREAK + } +--- 960,967 ---- +*************** +*** 1058,1068 **** + colnr_T col_adj = 0; /* col + screen size of tab */ + colnr_T colmax; + int added; +- # ifdef FEAT_MBYTE + int mb_added = 0; +- # else +- # define mb_added 0 +- # endif + int numberextra; + char_u *ps; + int tab_corr = (*s == TAB); +--- 1007,1013 ---- +*************** +*** 1074,1083 **** + if (!wp->w_p_lbr && !wp->w_p_bri && *p_sbr == NUL) + #endif + { +- #ifdef FEAT_MBYTE + if (wp->w_p_wrap) + return win_nolbr_chartabsize(wp, s, col, headp); +- #endif + RET_WIN_BUF_CHARTABSIZE(wp, wp->w_buffer, s, col) + } + +--- 1019,1026 ---- +*************** +*** 1135,1148 **** + } + } + } +- # ifdef FEAT_MBYTE + else if (has_mbyte && size == 2 && MB_BYTE2LEN(*s) > 1 + && wp->w_p_wrap && in_win_border(wp, col)) + { + ++size; /* Count the ">" in the last column. */ + mb_added = 1; + } +- # endif + + /* + * May have to add something for 'breakindent' and/or 'showbreak' +--- 1078,1089 ---- +*************** +*** 1210,1216 **** + #endif + } + +- #if defined(FEAT_MBYTE) || defined(PROTO) + /* + * Like win_lbr_chartabsize(), except that we know 'linebreak' is off and + * 'wrap' is on. This means we need to check for a double-byte character that +--- 1151,1156 ---- +*************** +*** 1269,1275 **** + return FALSE; + return ((vcol - width1) % width2 == width2 - 1); + } +- #endif /* FEAT_MBYTE */ + + /* + * Get virtual column number of pos. +--- 1209,1214 ---- +*************** +*** 1310,1320 **** + if (*ptr == NUL) + pos->col = 0; + posptr = ptr + pos->col; +- #ifdef FEAT_MBYTE + if (has_mbyte) + /* always start on the first byte */ + posptr -= (*mb_head_off)(line, posptr); +- #endif + } + + /* +--- 1249,1257 ---- +*************** +*** 1329,1342 **** + #endif + ) + { +- #ifndef FEAT_MBYTE + head = 0; +- #endif + for (;;) + { +- #ifdef FEAT_MBYTE + head = 0; +- #endif + c = *ptr; + /* make sure we don't go past the end of the line */ + if (c == NUL) +--- 1266,1275 ---- +*************** +*** 1353,1359 **** + #endif + else + { +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + /* For utf-8, if the byte is >= 0x80, need to look at +--- 1286,1291 ---- +*************** +*** 1374,1380 **** + } + } + else +- #endif + incr = g_chartab[c] & CT_CELL_MASK; + } + +--- 1306,1311 ---- +*************** +*** 1460,1468 **** + colnr_T col; + colnr_T coladd; + colnr_T endadd; +- # ifdef FEAT_MBYTE + char_u *ptr; +- # endif + + if (virtual_active()) + { +--- 1391,1397 ---- +*************** +*** 1471,1477 **** + + coladd = pos->coladd; + endadd = 0; +- # ifdef FEAT_MBYTE + /* Cannot put the cursor on part of a wide character. */ + ptr = ml_get_buf(wp->w_buffer, pos->lnum, FALSE); + if (pos->col < (colnr_T)STRLEN(ptr)) +--- 1400,1405 ---- +*************** +*** 1487,1493 **** + coladd = 0; + } + } +- # endif + col += coladd; + if (start != NULL) + *start = col; +--- 1415,1420 ---- +*************** +*** 1684,1690 **** + return (c == '0' || c == '1'); + } + +- #if defined(FEAT_MBYTE) || defined(PROTO) + /* + * Vim's own character class functions. These exist because many library + * islower()/toupper() etc. do not work properly: they crash when used with +--- 1611,1616 ---- +*************** +*** 1797,1803 **** + return TOLOWER_ASC(c); + return TOLOWER_LOC(c); + } +- #endif + + /* + * skiptowhite: skip over text until ' ' or '\t' or NUL. +--- 1723,1728 ---- +*************** +*** 2077,2085 **** + { + #ifdef BACKSLASH_IN_FILENAME + return (str[0] == '\\' +- # ifdef FEAT_MBYTE + && str[1] < 0x80 +- # endif + && (str[1] == ' ' + || (str[1] != NUL + && str[1] != '*' +--- 2002,2008 ---- +*** ../vim-8.1.0804/src/diff.c 2019-01-15 20:19:36.739904461 +0100 +--- src/diff.c 2019-01-24 14:09:08.117504177 +0100 +*************** +*** 741,752 **** + if (diff_flags & DIFF_ICASE) + { + int c; +- +- // xdiff doesn't support ignoring case, fold-case the text. +- #ifdef FEAT_MBYTE + int orig_len; + char_u cbuf[MB_MAXBYTES + 1]; + + c = PTR2CHAR(s); + c = enc_utf8 ? utf_fold(c) : MB_TOLOWER(c); + orig_len = MB_PTR2LEN(s); +--- 741,750 ---- + if (diff_flags & DIFF_ICASE) + { + int c; + int orig_len; + char_u cbuf[MB_MAXBYTES + 1]; + ++ // xdiff doesn't support ignoring case, fold-case the text. + c = PTR2CHAR(s); + c = enc_utf8 ? utf_fold(c) : MB_TOLOWER(c); + orig_len = MB_PTR2LEN(s); +*************** +*** 758,767 **** + + s += orig_len; + len += orig_len; +- #else +- c = *s++; +- ptr[len++] = TOLOWER_LOC(c); +- #endif + } + else + ptr[len++] = *s++; +--- 756,761 ---- +*************** +*** 1946,1952 **** + static int + diff_equal_char(char_u *p1, char_u *p2, int *len) + { +- #ifdef FEAT_MBYTE + int l = (*mb_ptr2len)(p1); + + if (l != (*mb_ptr2len)(p2)) +--- 1940,1945 ---- +*************** +*** 1962,1968 **** + *len = l; + } + else +- #endif + { + if ((*p1 != *p2) + && (!(diff_flags & DIFF_ICASE) +--- 1955,1960 ---- +*************** +*** 2400,2406 **** + si_new += l; + } + } +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + /* Move back to first byte of character in both lines (may +--- 2392,2397 ---- +*************** +*** 2408,2414 **** + si_org -= (*mb_head_off)(line_org, line_org + si_org); + si_new -= (*mb_head_off)(line_new, line_new + si_new); + } +- #endif + if (*startp > si_org) + *startp = si_org; + +--- 2399,2404 ---- +*************** +*** 2438,2447 **** + { + p1 = line_org + ei_org; + p2 = line_new + ei_new; +- #ifdef FEAT_MBYTE + p1 -= (*mb_head_off)(line_org, p1); + p2 -= (*mb_head_off)(line_new, p2); +- #endif + if (!diff_equal_char(p1, p2, &l)) + break; + ei_org -= l; +--- 2428,2435 ---- +*** ../vim-8.1.0804/src/digraph.c 2019-01-13 23:38:33.379773390 +0100 +--- src/digraph.c 2019-01-24 14:11:43.248512005 +0100 +*************** +*** 15,25 **** + + #if defined(FEAT_DIGRAPHS) || defined(PROTO) + +- #ifdef FEAT_MBYTE + typedef int result_T; +- #else +- typedef char_u result_T; +- #endif + + typedef struct digraph + { +--- 15,21 ---- +*************** +*** 38,45 **** + * compilers cannot handle them (Amiga SAS/C is the most picky one). + */ + static digr_T digraphdefault[] = +- #ifdef __MINT__ + + /* + * ATARI digraphs + */ +--- 34,41 ---- + * compilers cannot handle them (Amiga SAS/C is the most picky one). + */ + static digr_T digraphdefault[] = + ++ #ifdef __MINT__ + /* + * ATARI digraphs + */ +*************** +*** 320,456 **** + }; + + # else +! # if defined(MACOS_X) && !defined(FEAT_MBYTE) +! +! /* +! * Macintosh digraphs +! */ +! {{'a', 't', 64}, /* @ */ +! {'A', '"', 128}, /* ~@ XX */ +! {'A', 'o', 129}, /* Å */ +! {'C', ',', 130}, /* Ç */ +! {'E', '\'', 131}, /* É */ +! {'N', '~', 132}, /* Ñ */ +! {'O', '"', 133}, /* Ö */ +! {'U', '"', 134}, /* Ü */ +! {'a', '\'', 135}, /* ~G XX */ +! {'a', '`', 136}, /* ~H XX */ +! {'a', '^', 137}, /* â */ +! {'a', '"', 138}, /* ä */ +! {'a', '~', 139}, /* ã */ +! {'a', 'o', 140}, /* å */ +! {'c', ',', 141}, /* ç */ +! {'e', '\'', 142}, /* é */ +! {'e', '`', 143}, /* è */ +! {'e', '^', 144}, /* ê */ +! {'e', '"', 145}, /* ë */ +! {'i', '\'', 146}, /* í */ +! {'i', '`', 147}, /* ì */ +! {'i', '^', 148}, /* î */ +! {'i', '"', 149}, /* ï */ +! {'n', '~', 150}, /* ñ */ +! {'o', '\'', 151}, /* ó */ +! {'o', '`', 152}, /* ò */ +! {'o', '^', 153}, /* ô */ +! {'o', '"', 154}, /* ö */ +! {'o', '~', 155}, /* o */ +! {'u', '\'', 156}, /* ú */ +! {'u', '`', 157}, /* ~] XX */ +! {'u', '^', 158}, /* û */ +! {'u', '"', 159}, /* ü */ +! {'+', '_', 160}, /* Ý */ +! {'~', 'o', 161}, /* ° */ +! {'c', '|', 162}, /* ¢ */ +! {'$', '$', 163}, /* £ */ +! {'p', 'a', 164}, /* § */ +! {'.', '.', 165}, /* * */ +! {'P', 'P', 166}, /* ¶ */ +! {'s', 's', 167}, /* ß */ +! {'r', 'O', 168}, /* ® */ +! {'c', 'O', 169}, /* © */ +! {'T', 'M', 170}, /* */ +! {'=', '/', 173}, /* */ +! {'A', 'E', 174}, /* Æ */ +! {'O', '/', 175}, /* Ø */ +! {'0', '0', 176}, /* */ +! {'+', '-', 177}, /* ± */ +! {'<', '=', 178}, /* ¾ */ +! {'>', '=', 179}, /* */ +! {'Y', '-', 180}, /* ¥ */ +! {'j', 'u', 181}, /* µ */ +! {'m', 'u', 181}, /* µ */ +! {'d', 'd', 182}, /* */ +! {'S', 'S', 183}, /*
*/ +! {'S', 'I', 183}, /*
*/ +! {'P', 'I', 184}, /* ½ */ +! {'p', 'i', 185}, /* ¼ */ +! {'I', 'I', 186}, /* */ +! {'a', '-', 187}, /* » */ +! {'o', '-', 188}, /* º */ +! {'O', 'M', 189}, /* ½ */ +! {'a', 'e', 190}, /* æ */ +! {'o', '/', 191}, /* ø */ +! {'~', '?', 192}, /* ¿ */ +! {'~', '!', 193}, /* ¡ */ +! {'-', ',', 194}, /* ¬ */ +! {'v', '-', 195}, /* ~H XX */ +! {'f', '-', 196}, /* */ +! {'~', '~', 197}, /* */ +! {'D', 'E', 198}, /* */ +! {'<', '<', 199}, /* « */ +! {'>', '>', 200}, /* » */ +! {'.', ':', 201}, /* */ +! {'A', '`', 203}, /* À */ +! {'A', '~', 204}, /* Ã */ +! {'O', '~', 205}, /* Õ */ +! {'O', 'E', 206}, /* */ +! {'o', 'e', 207}, /* ¦ */ +! {'-', '.', 208}, /* - */ +! {'-', '-', 209}, /* - */ +! {'`', '`', 210}, /* " */ +! {'\'', '\'', 211}, /* " */ +! {'`', ' ', 212}, /* ' */ +! {'\'', ' ', 213}, /* ' */ +! {'-', ':', 214}, /* ÷ */ +! {'D', 'I', 215}, /* × */ +! {'y', ':', 216}, /* ÿ */ +! {'Y', ':', 217}, /* */ +! {'/', '/', 218}, /* */ +! {'E', '=', 219}, /* ¤ Euro System >=8.5 */ +! {'o', 'x', 219}, /* ¤ Currency System <=8.1*/ +! {'<', ' ', 220}, /* Ð */ +! {'>', ' ', 221}, /* ð */ +! {'f', 'i', 222}, /* Þ */ +! {'f', 'l', 223}, /* þ */ +! {'+', '+', 224}, /* ý */ +! {'~', '.', 225}, /* · */ +! {',', ' ', 226}, /* */ +! {',', ',', 227}, /* */ +! {'%', '.', 228}, /* */ +! {'%', '0', 228}, /* */ +! {'A', '^', 229}, /* Â */ +! {'E', '^', 230}, /* Ê */ +! {'A', '\'', 231}, /* Á */ +! {'E', '"', 232}, /* Ë */ +! {'E', '`', 233}, /* È */ +! {'I', '\'', 234}, /* Í */ +! {'I', '^', 235}, /* Î */ +! {'I', '"', 236}, /* Ï */ +! {'I', '`', 237}, /* Ì */ +! {'O', '\'', 238}, /* Ó */ +! {'O', '^', 239}, /* Ô */ +! {'A', 'P', 240}, /* */ +! {'O', '`', 241}, /* Ò */ +! {'U', '\'', 242}, /* Ú */ +! {'U', '^', 243}, /* Û */ +! {'U', '`', 244}, /* Ù */ +! {'i', '.', 245}, /* */ +! {NUL, NUL, NUL} +! }; +! +! # else /* !MACOS_X */ +! +! # ifdef OLD_DIGRAPHS + + /* + * digraphs compatible with Vim 5.x +--- 316,322 ---- + }; + + # else +! # ifdef OLD_DIGRAPHS + + /* + * digraphs compatible with Vim 5.x +*************** +*** 557,563 **** + {'y', '"', 255}, /* x XX */ + {NUL, NUL, NUL} + }; +! # else /* OLD_DIGRAPHS */ + + /* + * digraphs for Unicode from RFC1345 +--- 423,429 ---- + {'y', '"', 255}, /* x XX */ + {NUL, NUL, NUL} + }; +! # else /* OLD_DIGRAPHS */ + + /* + * digraphs for Unicode from RFC1345 +*************** +*** 792,798 **** + {'y', ':', 0xff}, + {'y', '"', 0xff}, // x XX Vim 5.x compatible + +- # ifdef FEAT_MBYTE + # define USE_UNICODE_DIGRAPHS + + {'A', '-', 0x0100}, +--- 658,663 ---- +*************** +*** 1957,1970 **** + {'f', 'l', 0xfb02}, + {'f', 't', 0xfb05}, + {'s', 't', 0xfb06}, +- # endif /* FEAT_MBYTE */ + + {NUL, NUL, NUL} + }; + +! # endif /* OLD_DIGRAPHS */ +! +! # endif /* Macintosh */ + # endif /* EBCDIC */ + # endif /* !HPUX_DIGRAPHS */ + #endif /* !__MINT__ */ +--- 1822,1832 ---- + {'f', 'l', 0xfb02}, + {'f', 't', 0xfb05}, + {'s', 't', 0xfb06}, + + {NUL, NUL, NUL} + }; + +! # endif /* OLD_DIGRAPHS */ + # endif /* EBCDIC */ + # endif /* !HPUX_DIGRAPHS */ + #endif /* !__MINT__ */ +*************** +*** 2141,2148 **** + ++dp; + } + } +! #ifdef FEAT_MBYTE +! # ifdef USE_UNICODE_DIGRAPHS + if (retval != 0 && !enc_utf8) + { + char_u buf[6], *to; +--- 2003,2009 ---- + ++dp; + } + } +! #ifdef USE_UNICODE_DIGRAPHS + if (retval != 0 && !enc_utf8) + { + char_u buf[6], *to; +*************** +*** 2166,2177 **** + (void)convert_setup(&vc, NULL, NULL); + } + } +! # endif + + /* Ignore multi-byte characters when not in multi-byte mode. */ + if (!has_mbyte && retval > 0xff) + retval = 0; +- #endif + + if (retval == 0) /* digraph deleted or not found */ + { +--- 2027,2037 ---- + (void)convert_setup(&vc, NULL, NULL); + } + } +! #endif + + /* Ignore multi-byte characters when not in multi-byte mode. */ + if (!has_mbyte && retval > 0xff) + retval = 0; + + if (retval == 0) /* digraph deleted or not found */ + { +*************** +*** 2297,2306 **** + #else + + if (getexactdigraph(dp->char1, dp->char2, FALSE) == dp->result +! # ifdef FEAT_MBYTE +! && (has_mbyte || dp->result <= 255) +! # endif +! ) + printdigraph(dp, use_headers ? &previous : NULL); + #endif + ++dp; +--- 2157,2163 ---- + #else + + if (getexactdigraph(dp->char1, dp->char2, FALSE) == dp->result +! && (has_mbyte || dp->result <= 255)) + printdigraph(dp, use_headers ? &previous : NULL); + #endif + ++dp; +*************** +*** 2364,2374 **** + + int list_width; + +! if ((dy_flags & DY_UHEX) +! #ifdef FEAT_MBYTE +! || has_mbyte +! #endif +! ) + list_width = 13; + else + list_width = 11; +--- 2221,2227 ---- + + int list_width; + +! if ((dy_flags & DY_UHEX) || has_mbyte) + list_width = 13; + else + list_width = 11; +*************** +*** 2404,2410 **** + *p = NUL; + msg_outtrans(buf); + p = buf; +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + /* add a space to draw a composing char on */ +--- 2257,2262 ---- +*************** +*** 2413,2419 **** + p += (*mb_char2bytes)(dp->result, p); + } + else +- #endif + *p++ = (char_u)dp->result; + *p = NUL; + msg_outtrans_attr(buf, HL_ATTR(HLF_8)); +--- 2265,2270 ---- +*************** +*** 2465,2485 **** + + /* Source the keymap file. It will contain a ":loadkeymap" command + * which will call ex_loadkeymap() below. */ +! buflen = STRLEN(curbuf->b_p_keymap) +! # ifdef FEAT_MBYTE +! + STRLEN(p_enc) +! # endif +! + 14; + buf = alloc((unsigned)buflen); + if (buf == NULL) + return e_outofmem; + +- # ifdef FEAT_MBYTE + /* try finding "keymap/'keymap'_'encoding'.vim" in 'runtimepath' */ + vim_snprintf((char *)buf, buflen, "keymap/%s_%s.vim", + curbuf->b_p_keymap, p_enc); + if (source_runtime(buf, 0) == FAIL) +- # endif + { + /* try finding "keymap/'keymap'.vim" in 'runtimepath' */ + vim_snprintf((char *)buf, buflen, "keymap/%s.vim", +--- 2316,2330 ---- + + /* Source the keymap file. It will contain a ":loadkeymap" command + * which will call ex_loadkeymap() below. */ +! buflen = STRLEN(curbuf->b_p_keymap) + STRLEN(p_enc) + 14; + buf = alloc((unsigned)buflen); + if (buf == NULL) + return e_outofmem; + + /* try finding "keymap/'keymap'_'encoding'.vim" in 'runtimepath' */ + vim_snprintf((char *)buf, buflen, "keymap/%s_%s.vim", + curbuf->b_p_keymap, p_enc); + if (source_runtime(buf, 0) == FAIL) + { + /* try finding "keymap/'keymap'.vim" in 'runtimepath' */ + vim_snprintf((char *)buf, buflen, "keymap/%s.vim", +*** ../vim-8.1.0804/src/edit.c 2019-01-22 22:08:05.227676880 +0100 +--- src/edit.c 2019-01-24 14:29:03.005638715 +0100 +*************** +*** 212,220 **** + static void stop_insert(pos_T *end_insert_pos, int esc, int nomove); + static int echeck_abbr(int); + static void replace_join(int off); +- #ifdef FEAT_MBYTE + static void mb_replace_pop_ins(int cc); +- #endif + static void replace_flush(void); + static void replace_do_bs(int limit_col); + static int del_char_after_col(int limit_col); +--- 212,218 ---- +*************** +*** 567,580 **** + { + if (ptr[1] == NUL) + ++curwin->w_cursor.col; +- #ifdef FEAT_MBYTE + else if (has_mbyte) + { + i = (*mb_ptr2len)(ptr); + if (ptr[i] == NUL) + curwin->w_cursor.col += i; + } +- #endif + } + ins_at_eol = FALSE; + } +--- 565,576 ---- +*************** +*** 1580,1591 **** + * special character. Let CTRL-] expand abbreviations without + * inserting it. */ + if (vim_iswordc(c) || (!echeck_abbr( +! #ifdef FEAT_MBYTE +! /* Add ABBR_OFF for characters above 0x100, this is +! * what check_abbr() expects. */ +! (has_mbyte && c >= 0x100) ? (c + ABBR_OFF) : +! #endif +! c) && c != Ctrl_RSB)) + { + insert_special(c, FALSE, FALSE); + #ifdef FEAT_RIGHTLEFT +--- 1576,1585 ---- + * special character. Let CTRL-] expand abbreviations without + * inserting it. */ + if (vim_iswordc(c) || (!echeck_abbr( +! // Add ABBR_OFF for characters above 0x100, this is +! // what check_abbr() expects. +! (has_mbyte && c >= 0x100) ? (c + ABBR_OFF) : c) +! && c != Ctrl_RSB)) + { + insert_special(c, FALSE, FALSE); + #ifdef FEAT_RIGHTLEFT +*************** +*** 1835,1848 **** + attr = 0; + pc_row = W_WINROW(curwin) + curwin->w_wrow; + pc_col = curwin->w_wincol; +- #if defined(FEAT_RIGHTLEFT) || defined(FEAT_MBYTE) + pc_status = PC_STATUS_UNSET; +- #endif + #ifdef FEAT_RIGHTLEFT + if (curwin->w_p_rl) + { + pc_col += curwin->w_width - 1 - curwin->w_wcol; +- # ifdef FEAT_MBYTE + if (has_mbyte) + { + int fix_col = mb_fix_col(pc_col, pc_row); +--- 1829,1839 ---- +*************** +*** 1854,1875 **** + pc_status = PC_STATUS_RIGHT; + } + } +- # endif + } + else + #endif + { + pc_col += curwin->w_wcol; +- #ifdef FEAT_MBYTE + if (mb_lefthalve(pc_row, pc_col)) + pc_status = PC_STATUS_LEFT; +- #endif + } + + /* save the character to be able to put it back */ +- #if defined(FEAT_RIGHTLEFT) || defined(FEAT_MBYTE) + if (pc_status == PC_STATUS_UNSET) +- #endif + { + screen_getbytes(pc_row, pc_col, pc_bytes, &pc_attr); + pc_status = PC_STATUS_SET; +--- 1845,1861 ---- +*************** +*** 1953,1965 **** + { + if (pc_status != PC_STATUS_UNSET && pc_row >= msg_scrolled) + { +- #if defined(FEAT_MBYTE) + if (pc_status == PC_STATUS_RIGHT) + ++curwin->w_wcol; + if (pc_status == PC_STATUS_RIGHT || pc_status == PC_STATUS_LEFT) + redrawWinline(curwin, curwin->w_cursor.lnum); + else +- #endif + screen_puts(pc_bytes, pc_row - msg_scrolled, pc_col, pc_attr); + } + } +--- 1939,1949 ---- +*************** +*** 1979,1985 **** + cursor_off(); + save_col = curwin->w_cursor.col; + curwin->w_cursor.col = col; +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + char_u *p; +--- 1963,1968 ---- +*************** +*** 1988,1994 **** + p = ml_get_curline(); + curwin->w_cursor.col -= (*mb_head_off)(p, p + col); + } +- #endif + curs_columns(FALSE); /* recompute w_wrow and w_wcol */ + if (curwin->w_wcol < curwin->w_width) + { +--- 1971,1976 ---- +*************** +*** 2132,2142 **** + while (vcol <= (int)curwin->w_virtcol) + { + last_vcol = vcol; +- #ifdef FEAT_MBYTE + if (has_mbyte && new_cursor_col >= 0) + new_cursor_col += (*mb_ptr2len)(ptr + new_cursor_col); + else +- #endif + ++new_cursor_col; + vcol += lbr_chartabsize(ptr, ptr + new_cursor_col, (colnr_T)vcol); + } +--- 2114,2122 ---- +*************** +*** 2302,2308 **** + static int + del_char_after_col(int limit_col UNUSED) + { +- #ifdef FEAT_MBYTE + if (enc_utf8 && limit_col >= 0) + { + colnr_T ecol = curwin->w_cursor.col + 1; +--- 2282,2287 ---- +*************** +*** 2324,2330 **** + del_bytes((long)((int)ecol - curwin->w_cursor.col), FALSE, TRUE); + } + else +- #endif + (void)del_char(FALSE); + return TRUE; + } +--- 2303,2308 ---- +*************** +*** 2529,2535 **** + /* Infer case of completed part. */ + + /* Find actual length of completion. */ +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + p = str; +--- 2507,2512 ---- +*************** +*** 2541,2551 **** + } + } + else +- #endif + actual_len = len; + + /* Find actual length of original text. */ +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + p = compl_orig_text; +--- 2518,2526 ---- +*************** +*** 2557,2563 **** + } + } + else +- #endif + actual_compl_length = compl_length; + + /* "actual_len" may be smaller than "actual_compl_length" when using +--- 2532,2537 ---- +*************** +*** 2571,2592 **** + { + p = str; + for (i = 0; i < actual_len; ++i) +- #ifdef FEAT_MBYTE + if (has_mbyte) + wca[i] = mb_ptr2char_adv(&p); + else +- #endif + wca[i] = *(p++); + + /* Rule 1: Were any chars converted to lower? */ + p = compl_orig_text; + for (i = 0; i < min_len; ++i) + { +- #ifdef FEAT_MBYTE + if (has_mbyte) + c = mb_ptr2char_adv(&p); + else +- #endif + c = *(p++); + if (MB_ISLOWER(c)) + { +--- 2545,2562 ---- +*************** +*** 2610,2620 **** + p = compl_orig_text; + for (i = 0; i < min_len; ++i) + { +- #ifdef FEAT_MBYTE + if (has_mbyte) + c = mb_ptr2char_adv(&p); + else +- #endif + c = *(p++); + if (was_letter && MB_ISUPPER(c) && MB_ISLOWER(wca[i])) + { +--- 2580,2588 ---- +*************** +*** 2631,2641 **** + p = compl_orig_text; + for (i = 0; i < min_len; ++i) + { +- #ifdef FEAT_MBYTE + if (has_mbyte) + c = mb_ptr2char_adv(&p); + else +- #endif + c = *(p++); + if (MB_ISLOWER(c)) + wca[i] = MB_TOLOWER(wca[i]); +--- 2599,2607 ---- +*************** +*** 2652,2662 **** + p = IObuff; + i = 0; + while (i < actual_len && (p - IObuff + 6) < IOSIZE) +- #ifdef FEAT_MBYTE + if (has_mbyte) + p += (*mb_char2bytes)(wca[i++], p); + else +- #endif + *(p++) = wca[i++]; + *p = NUL; + +--- 2618,2626 ---- +*************** +*** 2837,2850 **** + s = match->cp_str; + while (*p != NUL) + { +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + c1 = mb_ptr2char(p); + c2 = mb_ptr2char(s); + } + else +- #endif + { + c1 = *p; + c2 = *s; +--- 2801,2812 ---- +*************** +*** 2852,2865 **** + if (match->cp_icase ? (MB_TOLOWER(c1) != MB_TOLOWER(c2)) + : (c1 != c2)) + break; +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + MB_PTR_ADV(p); + MB_PTR_ADV(s); + } + else +- #endif + { + ++p; + ++s; +--- 2814,2825 ---- +*************** +*** 3426,3432 **** + wstart = ptr; + + /* Find end of the word. */ +- #ifdef FEAT_MBYTE + if (has_mbyte) + /* Japanese words may have characters in + * different classes, only separate words +--- 3386,3391 ---- +*************** +*** 3440,3446 **** + ptr += l; + } + else +- #endif + ptr = find_word_end(ptr); + + /* Add the word. Skip the regexp match. */ +--- 3399,3404 ---- +*************** +*** 3475,3486 **** + char_u * + find_word_start(char_u *ptr) + { +- #ifdef FEAT_MBYTE + if (has_mbyte) + while (*ptr != NUL && *ptr != '\n' && mb_get_class(ptr) <= 1) + ptr += (*mb_ptr2len)(ptr); + else +- #endif + while (*ptr != NUL && *ptr != '\n' && !vim_iswordc(*ptr)) + ++ptr; + return ptr; +--- 3433,3442 ---- +*************** +*** 3493,3499 **** + char_u * + find_word_end(char_u *ptr) + { +- #ifdef FEAT_MBYTE + int start_class; + + if (has_mbyte) +--- 3449,3454 ---- +*************** +*** 3508,3514 **** + } + } + else +- #endif + while (vim_iswordc(*ptr)) + ++ptr; + return ptr; +--- 3463,3468 ---- +*************** +*** 3719,3731 **** + static void + ins_compl_addleader(int c) + { +- #ifdef FEAT_MBYTE + int cc; +- #endif + + if (stop_arrow() == FAIL) + return; +- #ifdef FEAT_MBYTE + if (has_mbyte && (cc = (*mb_char2len)(c)) > 1) + { + char_u buf[MB_MAXBYTES + 1]; +--- 3673,3682 ---- +*************** +*** 3737,3743 **** + AppendToRedobuff(buf); + } + else +- #endif + { + ins_char(c); + if (compl_opt_refresh_always) +--- 3688,3693 ---- +*************** +*** 4155,4164 **** + p = compl_orig_text; + for (len = 0; p[len] != NUL && p[len] == ptr[len]; ++len) + ; +- #ifdef FEAT_MBYTE + if (len > 0) + len -= (*mb_head_off)(p, p + len); +- #endif + for (p += len; *p != NUL; MB_PTR_ADV(p)) + AppendCharToRedobuff(K_BS); + } +--- 4105,4112 ---- +*************** +*** 5416,5440 **** + return FAIL; + if (!vim_iswordp(line + compl_col) + || (compl_col > 0 +! && ( +! #ifdef FEAT_MBYTE +! vim_iswordp(mb_prevptr(line, line + compl_col)) +! #else +! vim_iswordc(line[compl_col - 1]) +! #endif +! ))) + prefix = (char_u *)""; + STRCPY((char *)compl_pattern, prefix); + (void)quote_meta(compl_pattern + STRLEN(prefix), + line + compl_col, compl_length); + } +! else if (--startcol < 0 || +! #ifdef FEAT_MBYTE +! !vim_iswordp(mb_prevptr(line, line + startcol + 1)) +! #else +! !vim_iswordc(line[startcol]) +! #endif +! ) + { + /* Match any word of at least two chars */ + compl_pattern = vim_strsave((char_u *)"\\<\\k\\k"); +--- 5364,5377 ---- + return FAIL; + if (!vim_iswordp(line + compl_col) + || (compl_col > 0 +! && (vim_iswordp(mb_prevptr(line, line + compl_col))))) + prefix = (char_u *)""; + STRCPY((char *)compl_pattern, prefix); + (void)quote_meta(compl_pattern + STRLEN(prefix), + line + compl_col, compl_length); + } +! else if (--startcol < 0 +! || !vim_iswordp(mb_prevptr(line, line + startcol + 1))) + { + /* Match any word of at least two chars */ + compl_pattern = vim_strsave((char_u *)"\\<\\k\\k"); +*************** +*** 5445,5451 **** + } + else + { +- #ifdef FEAT_MBYTE + /* Search the point of change class of multibyte character + * or not a word single byte character backward. */ + if (has_mbyte) +--- 5382,5387 ---- +*************** +*** 5465,5471 **** + } + } + else +- #endif + while (--startcol >= 0 && vim_iswordc(line[startcol])) + ; + compl_col += ++startcol; +--- 5401,5406 ---- +*************** +*** 5956,5962 **** + } + if (dest != NULL) + *dest++ = *src; +- # ifdef FEAT_MBYTE + /* Copy remaining bytes of a multibyte character. */ + if (has_mbyte) + { +--- 5891,5896 ---- +*************** +*** 5972,5978 **** + *dest++ = *src; + } + } +- # endif + } + if (dest != NULL) + *dest = NUL; +--- 5906,5911 ---- +*************** +*** 5995,6003 **** + int i; + int hex = FALSE; + int octal = FALSE; +- #ifdef FEAT_MBYTE + int unicode = 0; +- #endif + + if (got_int) + return Ctrl_C; +--- 5928,5934 ---- +*************** +*** 6022,6049 **** + { + nc = plain_vgetc(); + #ifdef FEAT_CMDL_INFO +! if (!(State & CMDLINE) +! # ifdef FEAT_MBYTE +! && MB_BYTE2LEN_CHECK(nc) == 1 +! # endif +! ) + add_to_showcmd(nc); + #endif + if (nc == 'x' || nc == 'X') + hex = TRUE; + else if (nc == 'o' || nc == 'O') + octal = TRUE; +- #ifdef FEAT_MBYTE + else if (nc == 'u' || nc == 'U') + unicode = nc; +- #endif + else + { +! if (hex +! #ifdef FEAT_MBYTE +! || unicode != 0 +! #endif +! ) + { + if (!vim_isxdigit(nc)) + break; +--- 5953,5970 ---- + { + nc = plain_vgetc(); + #ifdef FEAT_CMDL_INFO +! if (!(State & CMDLINE) && MB_BYTE2LEN_CHECK(nc) == 1) + add_to_showcmd(nc); + #endif + if (nc == 'x' || nc == 'X') + hex = TRUE; + else if (nc == 'o' || nc == 'O') + octal = TRUE; + else if (nc == 'u' || nc == 'U') + unicode = nc; + else + { +! if (hex || unicode != 0) + { + if (!vim_isxdigit(nc)) + break; +*************** +*** 6065,6075 **** + ++i; + } + +! if (cc > 255 +! #ifdef FEAT_MBYTE +! && unicode == 0 +! #endif +! ) + cc = 255; /* limit range to 0-255 */ + nc = 0; + +--- 5986,5992 ---- + ++i; + } + +! if (cc > 255 && unicode == 0) + cc = 255; /* limit range to 0-255 */ + nc = 0; + +*************** +*** 6078,6090 **** + if (i >= 2) + break; + } +- #ifdef FEAT_MBYTE + else if (unicode) /* Unicode: up to four or eight chars */ + { + if ((unicode == 'u' && i >= 4) || (unicode == 'U' && i >= 8)) + break; + } +- #endif + else if (i >= 3) /* decimal or octal: up to three chars */ + break; + } +--- 5995,6005 ---- +*************** +*** 6104,6114 **** + + if (cc == 0) /* NUL is stored as NL */ + cc = '\n'; +- #ifdef FEAT_MBYTE + if (enc_dbcs && (cc & 0xff) == 0) + cc = '?'; /* don't accept an illegal DBCS char, the NUL in the + second byte will cause trouble! */ +- #endif + + --no_mapping; + #ifdef FEAT_GUI +--- 6019,6027 ---- +*************** +*** 6179,6189 **** + # define ISSPECIAL(c) ((c) < ' ' || (c) >= DEL || (c) == '0' || (c) == '^') + #endif + +! #ifdef FEAT_MBYTE +! # define WHITECHAR(cc) (VIM_ISWHITE(cc) && (!enc_utf8 || !utf_iscomposing(utf_ptr2char(ml_get_cursor() + 1)))) +! #else +! # define WHITECHAR(cc) VIM_ISWHITE(cc) +! #endif + + /* + * "flags": INSCHAR_FORMAT - force formatting +--- 6092,6098 ---- + # define ISSPECIAL(c) ((c) < ' ' || (c) >= DEL || (c) == '0' || (c) == '^') + #endif + +! #define WHITECHAR(cc) (VIM_ISWHITE(cc) && (!enc_utf8 || !utf_iscomposing(utf_ptr2char(ml_get_cursor() + 1)))) + + /* + * "flags": INSCHAR_FORMAT - force formatting +*************** +*** 6340,6348 **** + #endif + + if ( !ISSPECIAL(c) +- #ifdef FEAT_MBYTE + && (!has_mbyte || (*mb_char2len)(c) == 1) +- #endif + && !has_insertcharpre() + && vpeekc() != NUL + && !(State & REPLACE_FLAG) +--- 6249,6255 ---- +*************** +*** 6373,6381 **** + */ + while ( (c = vpeekc()) != NUL + && !ISSPECIAL(c) +- #ifdef FEAT_MBYTE + && (!has_mbyte || MB_BYTE2LEN_CHECK(c) == 1) +- #endif + && i < INPUT_BUFLEN + # ifdef FEAT_FKMAP + && !(p_fkmap && KeyTyped) /* Farsi mode mapping moves cursor */ +--- 6280,6286 ---- +*************** +*** 6412,6418 **** + } + else + { +- #ifdef FEAT_MBYTE + int cc; + + if (has_mbyte && (cc = (*mb_char2len)(c)) > 1) +--- 6317,6322 ---- +*************** +*** 6425,6431 **** + AppendCharToRedobuff(c); + } + else +- #endif + { + ins_char(c); + if (flags & INSCHAR_CTRLV) +--- 6329,6334 ---- +*************** +*** 6454,6462 **** + int save_char = NUL; + int haveto_redraw = FALSE; + int fo_ins_blank = has_format_option(FO_INS_BLANK); +- #ifdef FEAT_MBYTE + int fo_multibyte = has_format_option(FO_MBYTE_BREAK); +- #endif + int fo_white_par = has_format_option(FO_WHITE_PAR); + int first_line = TRUE; + #ifdef FEAT_COMMENTS +--- 6357,6363 ---- +*************** +*** 6613,6619 **** + if (curwin->w_cursor.col <= (colnr_T)wantcol) + break; + } +- #ifdef FEAT_MBYTE + else if (cc >= 0x100 && fo_multibyte) + { + /* Break after or before a multi-byte character. */ +--- 6514,6519 ---- +*************** +*** 6660,6666 **** + if (curwin->w_cursor.col <= (colnr_T)wantcol) + break; + } +- #endif + if (curwin->w_cursor.col == 0) + break; + dec_cursor(); +--- 6560,6565 ---- +*************** +*** 7350,7356 **** + char_u * + add_char2buf(int c, char_u *s) + { +- #ifdef FEAT_MBYTE + char_u temp[MB_MAXBYTES + 1]; + int i; + int len; +--- 7249,7254 ---- +*************** +*** 7359,7365 **** + for (i = 0; i < len; ++i) + { + c = temp[i]; +- #endif + /* Need to escape K_SPECIAL and CSI like in the typeahead buffer. */ + if (c == K_SPECIAL) + { +--- 7257,7262 ---- +*************** +*** 7377,7385 **** + #endif + else + *s++ = c; +- #ifdef FEAT_MBYTE + } +- #endif + return s; + } + +--- 7274,7280 ---- +*************** +*** 7435,7447 **** + + /* Adjust for multi-wide char (excluding TAB) */ + ptr = ml_get_cursor(); +! coladvance(getviscol() + ((*ptr != TAB && vim_isprintc( +! # ifdef FEAT_MBYTE +! (*mb_ptr2char)(ptr) +! # else +! *ptr +! # endif +! )) + ? ptr2cells(ptr) : 1)); + curwin->w_set_curswant = TRUE; + /* Return OK if the cursor moved, FAIL otherwise (at window edge). */ +--- 7330,7337 ---- + + /* Adjust for multi-wide char (excluding TAB) */ + ptr = ml_get_cursor(); +! coladvance(getviscol() + ((*ptr != TAB +! && vim_isprintc((*mb_ptr2char)(ptr))) + ? ptr2cells(ptr) : 1)); + curwin->w_set_curswant = TRUE; + /* Return OK if the cursor moved, FAIL otherwise (at window edge). */ +*************** +*** 7454,7464 **** + if (*ptr == NUL) + return FAIL; /* already at the very end */ + +- #ifdef FEAT_MBYTE + if (has_mbyte) + l = (*mb_ptr2len)(ptr); + else +- #endif + l = 1; + + /* move "l" bytes right, but don't end up on the NUL, unless 'virtualedit' +--- 7344,7352 ---- +*************** +*** 7499,7508 **** + * 'breakindent' is not set and there are no multi-byte + * characters */ + if ((*p_sbr == NUL && !curwin->w_p_bri +! # ifdef FEAT_MBYTE +! && !has_mbyte +! # endif +! ) || getviscol() < v) + break; + ++width; + } +--- 7387,7393 ---- + * 'breakindent' is not set and there are no multi-byte + * characters */ + if ((*p_sbr == NUL && !curwin->w_p_bri +! && !has_mbyte) || getviscol() < v) + break; + ++width; + } +*************** +*** 7516,7528 **** + + /* Adjust for multi-wide char (not a TAB) */ + ptr = ml_get_cursor(); +! if (*ptr != TAB && vim_isprintc( +! # ifdef FEAT_MBYTE +! (*mb_ptr2char)(ptr) +! # else +! *ptr +! # endif +! ) && ptr2cells(ptr) > 1) + curwin->w_cursor.coladd = 0; + } + +--- 7401,7408 ---- + + /* Adjust for multi-wide char (not a TAB) */ + ptr = ml_get_cursor(); +! if (*ptr != TAB && vim_isprintc((*mb_ptr2char)(ptr)) +! && ptr2cells(ptr) > 1) + curwin->w_cursor.coladd = 0; + } + +*************** +*** 7537,7548 **** + curwin->w_set_curswant = TRUE; + --curwin->w_cursor.col; + +- #ifdef FEAT_MBYTE + /* if the character on the left of the current cursor is a multi-byte + * character, move to its first byte */ + if (has_mbyte) + mb_adjust_cursor(); +- #endif + return OK; + } + +--- 7417,7426 ---- +*************** +*** 7829,7835 **** + ++replace_stack_nr; + } + +- #if defined(FEAT_MBYTE) || defined(PROTO) + /* + * Push a character onto the replace stack. Handles a multi-byte character in + * reverse byte order, so that the first byte is popped off first. +--- 7707,7712 ---- +*************** +*** 7845,7851 **** + replace_push(p[j]); + return l; + } +- #endif + + /* + * Pop one item from the replace stack. +--- 7722,7727 ---- +*************** +*** 7893,7909 **** + State = NORMAL; /* don't want REPLACE here */ + while ((cc = replace_pop()) > 0) + { +- #ifdef FEAT_MBYTE + mb_replace_pop_ins(cc); +- #else +- ins_char(cc); +- #endif + dec_cursor(); + } + State = oldState; + } + +- #ifdef FEAT_MBYTE + /* + * Insert bytes popped from the replace stack. "cc" is the first byte. If it + * indicates a multi-byte char, pop the other bytes too. +--- 7769,7780 ---- +*************** +*** 7956,7962 **** + } + } + } +- #endif + + /* + * make the replace stack empty +--- 7827,7832 ---- +*************** +*** 8012,8018 **** + getvcol(curwin, &curwin->w_cursor, NULL, &start_vcol, NULL); + orig_vcols = chartabsize(ml_get_cursor(), start_vcol); + } +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + (void)del_char_after_col(limit_col); +--- 7882,7887 ---- +*************** +*** 8021,8027 **** + replace_push(cc); + } + else +- #endif + { + pchar_cursor(cc); + if (State & VREPLACE_FLAG) +--- 7890,7895 ---- +*************** +*** 8038,8046 **** + for (i = 0; i < ins_len; ++i) + { + vcol += chartabsize(p + i, vcol); +- #ifdef FEAT_MBYTE + i += (*mb_ptr2len)(p) - 1; +- #endif + } + vcol -= start_vcol; + +--- 7906,7912 ---- +*************** +*** 8329,8335 **** + /* Just completed a word, check if it starts with "look". + * search back for the start of a word. */ + line = ml_get_curline(); +- # ifdef FEAT_MBYTE + if (has_mbyte) + { + char_u *n; +--- 8195,8200 ---- +*************** +*** 8342,8348 **** + } + } + else +- # endif + for (s = line + curwin->w_cursor.col; s > line; --s) + if (!vim_iswordc(s[-1])) + break; +--- 8207,8212 ---- +*************** +*** 8823,8833 **** + #endif + { + --curwin->w_cursor.col; +- #ifdef FEAT_MBYTE + /* Correct cursor for multi-byte character. */ + if (has_mbyte) + mb_adjust_cursor(); +- #endif + } + } + +--- 8687,8695 ---- +*************** +*** 9137,9145 **** + int did_backspace = FALSE; + int in_indent; + int oldState; +- #ifdef FEAT_MBYTE + int cpc[MAX_MCO]; /* composing characters */ +- #endif + + /* + * can't delete anything in an empty file +--- 8999,9005 ---- +*************** +*** 9287,9297 **** + while (cc > 0) + { + save_col = curwin->w_cursor.col; +- #ifdef FEAT_MBYTE + mb_replace_pop_ins(cc); +- #else +- ins_char(cc); +- #endif + curwin->w_cursor.col = save_col; + cc = replace_pop(); + } +--- 9147,9153 ---- +*************** +*** 9413,9424 **** + */ + else + { +- #ifdef FEAT_MBYTE + int cclass = 0, prev_cclass = 0; + + if (has_mbyte) + cclass = mb_get_class(ml_get_cursor()); +- #endif + do + { + #ifdef FEAT_RIGHTLEFT +--- 9269,9278 ---- +*************** +*** 9427,9440 **** + dec_cursor(); + + cc = gchar_cursor(); +- #ifdef FEAT_MBYTE + /* look multi-byte character class */ + if (has_mbyte) + { + prev_cclass = cclass; + cclass = mb_get_class(ml_get_cursor()); + } +- #endif + + /* start of word? */ + if (mode == BACKSPACE_WORD && !vim_isspace(cc)) +--- 9281,9292 ---- +*************** +*** 9445,9454 **** + /* end of word? */ + else if (mode == BACKSPACE_WORD_NOT_SPACE + && ((vim_isspace(cc) || vim_iswordc(cc) != temp) +! #ifdef FEAT_MBYTE +! || prev_cclass != cclass +! #endif +! )) + { + #ifdef FEAT_RIGHTLEFT + if (!revins_on) +--- 9297,9303 ---- + /* end of word? */ + else if (mode == BACKSPACE_WORD_NOT_SPACE + && ((vim_isspace(cc) || vim_iswordc(cc) != temp) +! || prev_cclass != cclass)) + { + #ifdef FEAT_RIGHTLEFT + if (!revins_on) +*************** +*** 9464,9475 **** + replace_do_bs(-1); + else + { +- #ifdef FEAT_MBYTE + if (enc_utf8 && p_deco) + (void)utfc_ptr2char(ml_get_cursor(), cpc); +- #endif + (void)del_char(FALSE); +- #ifdef FEAT_MBYTE + /* + * If there are combining characters and 'delcombine' is set + * move the cursor back. Don't back up before the base +--- 9313,9321 ---- +*************** +*** 9477,9483 **** + */ + if (enc_utf8 && p_deco && cpc[0] != NUL) + inc_cursor(); +- #endif + #ifdef FEAT_RIGHTLEFT + if (revins_chars) + { +--- 9323,9328 ---- +*************** +*** 9713,9723 **** + // won't get the end sequence. + break; + +- #ifdef FEAT_MBYTE + if (has_mbyte) + idx += (*mb_char2bytes)(c, buf + idx); + else +- #endif + buf[idx++] = c; + buf[idx] = NUL; + if (end != NULL && STRNCMP(buf, end, idx) == 0) +--- 9558,9566 ---- +*************** +*** 9760,9770 **** + case PASTE_ONE_CHAR: + if (ret_char == -1) + { +- #ifdef FEAT_MBYTE + if (has_mbyte) + ret_char = (*mb_ptr2char)(buf); + else +- #endif + ret_char = buf[0]; + } + break; +--- 9603,9611 ---- +*************** +*** 9972,9982 **** + else + #endif + { +- #ifdef FEAT_MBYTE + if (has_mbyte) + curwin->w_cursor.col += (*mb_ptr2len)(ml_get_cursor()); + else +- #endif + ++curwin->w_cursor.col; + } + +--- 9813,9821 ---- +*************** +*** 10590,10600 **** + if ((colnr_T)temp > curwin->w_virtcol) + ptr = prev_ptr; + +- #ifdef FEAT_MBYTE + c = (*mb_ptr2char)(ptr); +- #else +- c = *ptr; +- #endif + if (c == NUL) + vim_beep(BO_COPY); + return c; +--- 10429,10435 ---- +*************** +*** 10773,10783 **** + if (!has_insertcharpre()) + return NULL; + +- # ifdef FEAT_MBYTE + if (has_mbyte) + buf[(*mb_char2bytes)(c, buf)] = NUL; + else +- # endif + { + buf[0] = c; + buf[1] = NUL; +--- 10608,10616 ---- +*** ../vim-8.1.0804/src/eval.c 2019-01-24 13:58:05.817568979 +0100 +--- src/eval.c 2019-01-24 14:29:53.237302251 +0100 +*************** +*** 577,583 **** + VIM_CLEAR(redir_varname); + } + +- # if defined(FEAT_MBYTE) || defined(PROTO) + int + eval_charconvert( + char_u *enc_from, +--- 577,582 ---- +*************** +*** 602,608 **** + return FAIL; + return OK; + } +- # endif + + # if defined(FEAT_POSTSCRIPT) || defined(PROTO) + int +--- 601,606 ---- +*************** +*** 4998,5010 **** + nr = (nr << 4) + hex2nr(*p); + } + ++p; +- #ifdef FEAT_MBYTE + /* For "\u" store the number according to + * 'encoding'. */ + if (c != 'X') + name += (*mb_char2bytes)(nr, name); + else +- #endif + *name++ = nr; + } + break; +--- 4996,5006 ---- +*************** +*** 6704,6714 **** + { + 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; +--- 6700,6708 ---- +*************** +*** 6885,6896 **** + + if (eap->force_ff != 0) + len += 10; /* " ++ff=unix" */ +- # ifdef FEAT_MBYTE + if (eap->force_enc != 0) + len += (unsigned)STRLEN(eap->cmd + eap->force_enc) + 7; + if (eap->bad_char != 0) + len += 7 + 4; /* " ++bad=" + "keep" or "drop" */ +- # endif + + newval = alloc(len + 1); + if (newval == NULL) +--- 6879,6888 ---- +*************** +*** 6911,6917 **** + eap->force_ff == 'u' ? "unix" + : eap->force_ff == 'd' ? "dos" + : "mac"); +- #ifdef FEAT_MBYTE + if (eap->force_enc != 0) + sprintf((char *)newval + STRLEN(newval), " ++enc=%s", + eap->cmd + eap->force_enc); +--- 6903,6908 ---- +*************** +*** 6921,6927 **** + STRCPY(newval + STRLEN(newval), " ++bad=drop"); + else if (eap->bad_char != 0) + sprintf((char *)newval + STRLEN(newval), " ++bad=%c", eap->bad_char); +- #endif + vimvars[VV_CMDARG].vv_str = newval; + return oldval; + } +--- 6912,6917 ---- +*************** +*** 8432,8438 **** + } + else + { +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + int i = (*mb_ptr2len)(p); +--- 8422,8427 ---- +*************** +*** 8441,8447 **** + p += i - 1; + } + else +- #endif + (void)msg_outtrans_len_attr(p, 1, echo_attr); + } + } +--- 8430,8435 ---- +*************** +*** 10082,10091 **** + /* Count the paths backward to find the beginning of the desired string. */ + for (p = tfname + len - 1; p >= tfname; --p) + { +- #ifdef FEAT_MBYTE + if (has_mbyte) + p -= mb_head_off(tfname, p); +- #endif + if (vim_ispathsep(*p)) + { + if (sepcount == 0 || (hasTilde && sepcount == 1)) +--- 10070,10077 ---- +*** ../vim-8.1.0804/src/evalfunc.c 2019-01-23 21:14:59.161314629 +0100 +--- src/evalfunc.c 2019-01-24 14:33:04.500019700 +0100 +*************** +*** 2071,2079 **** + static void + byteidx(typval_T *argvars, typval_T *rettv, int comp UNUSED) + { +- #ifdef FEAT_MBYTE + char_u *t; +- #endif + char_u *str; + varnumber_T idx; + +--- 2071,2077 ---- +*************** +*** 2083,2089 **** + if (str == NULL || idx < 0) + return; + +- #ifdef FEAT_MBYTE + t = str; + for ( ; idx > 0; idx--) + { +--- 2081,2086 ---- +*************** +*** 2095,2104 **** + t += (*mb_ptr2len)(t); + } + rettv->vval.v_number = (varnumber_T)(t - str); +- #else +- if ((size_t)idx <= STRLEN(str)) +- rettv->vval.v_number = idx; +- #endif + } + + /* +--- 2092,2097 ---- +*************** +*** 2450,2456 **** + static void + f_char2nr(typval_T *argvars, typval_T *rettv) + { +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + int utf8 = 0; +--- 2443,2448 ---- +*************** +*** 2464,2471 **** + rettv->vval.v_number = (*mb_ptr2char)(tv_get_string(&argvars[0])); + } + else +! #endif +! rettv->vval.v_number = tv_get_string(&argvars[0])[0]; + } + + /* +--- 2456,2462 ---- + rettv->vval.v_number = (*mb_ptr2char)(tv_get_string(&argvars[0])); + } + else +! rettv->vval.v_number = tv_get_string(&argvars[0])[0]; + } + + /* +*************** +*** 2536,2550 **** + if (curwin->w_cursor.coladd >= (colnr_T)chartabsize(p, + curwin->w_virtcol - curwin->w_cursor.coladd)) + { +- # ifdef FEAT_MBYTE + int l; + + if (*p != NUL && p[(l = (*mb_ptr2len)(p))] == NUL) + col += l; +- # else +- if (*p != NUL && p[1] == NUL) +- ++col; +- # endif + } + } + #endif +--- 2527,2536 ---- +*************** +*** 2904,2914 **** + + /* Make sure the cursor is in a valid position. */ + check_cursor(); +- #ifdef FEAT_MBYTE + /* Correct cursor for multi-byte character. */ + if (has_mbyte) + mb_adjust_cursor(); +- #endif + + curwin->w_set_curswant = set_curswant; + rettv->vval.v_number = 0; +--- 2890,2898 ---- +*************** +*** 4888,4897 **** + temp[i++] = K_SECOND(n); + temp[i++] = K_THIRD(n); + } +- #ifdef FEAT_MBYTE + else if (has_mbyte) + i += (*mb_char2bytes)(n, temp + i); +- #endif + else + temp[i++] = n; + temp[i++] = NUL; +--- 4872,4879 ---- +*************** +*** 5439,5445 **** + dict_add_string(dict, "group", syn_id2name(cur->hlg_id)); + dict_add_number(dict, "priority", (long)cur->priority); + dict_add_number(dict, "id", (long)cur->id); +! # if defined(FEAT_CONCEAL) && defined(FEAT_MBYTE) + if (cur->conceal_char) + { + char_u buf[MB_MAXBYTES + 1]; +--- 5421,5427 ---- + dict_add_string(dict, "group", syn_id2name(cur->hlg_id)); + dict_add_number(dict, "priority", (long)cur->priority); + dict_add_number(dict, "id", (long)cur->id); +! # if defined(FEAT_CONCEAL) + if (cur->conceal_char) + { + char_u buf[MB_MAXBYTES + 1]; +*************** +*** 6423,6431 **** + "mouse_xterm", + # endif + #endif +- #ifdef FEAT_MBYTE + "multi_byte", +- #endif + #ifdef FEAT_MBYTE_IME + "multi_byte_ime", + #endif +--- 6405,6411 ---- +*************** +*** 6674,6683 **** + n = mch_input_isatty(); + else if (STRICMP(name, "ttyout") == 0) + n = stdout_isatty; +- #ifdef FEAT_MBYTE + else if (STRICMP(name, "multi_byte_encoding") == 0) + n = has_mbyte; +- #endif + #if defined(FEAT_BEVAL) && defined(FEAT_GUI_W32) + else if (STRICMP(name, "balloon_multiline") == 0) + n = multiline_balloon_available(); +--- 6654,6661 ---- +*************** +*** 6965,6981 **** + static void + f_iconv(typval_T *argvars UNUSED, typval_T *rettv) + { +- #ifdef FEAT_MBYTE + char_u buf1[NUMBUFLEN]; + char_u buf2[NUMBUFLEN]; + char_u *from, *to, *str; + vimconv_T vimconv; +- #endif + + rettv->v_type = VAR_STRING; + rettv->vval.v_string = NULL; + +- #ifdef FEAT_MBYTE + str = tv_get_string(&argvars[0]); + from = enc_canonize(enc_skip(tv_get_string_buf(&argvars[1], buf1))); + to = enc_canonize(enc_skip(tv_get_string_buf(&argvars[2], buf2))); +--- 6943,6956 ---- +*************** +*** 6991,6997 **** + convert_setup(&vimconv, NULL, NULL); + vim_free(from); + vim_free(to); +- #endif + } + + /* +--- 6966,6971 ---- +*************** +*** 8097,8108 **** + } + else + { +- #ifdef FEAT_MBYTE + startcol = (colnr_T)(regmatch.startp[0] + + (*mb_ptr2len)(regmatch.startp[0]) - str); +- #else +- startcol = (colnr_T)(regmatch.startp[0] + 1 - str); +- #endif + if (startcol > (colnr_T)len + || str + startcol <= regmatch.startp[0]) + { +--- 8071,8078 ---- +*************** +*** 8712,8718 **** + { + char_u buf[NUMBUFLEN]; + +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + int utf8 = 0; +--- 8682,8687 ---- +*************** +*** 8725,8731 **** + buf[(*mb_char2bytes)((int)tv_get_number(&argvars[0]), buf)] = NUL; + } + else +- #endif + { + buf[0] = (char_u)tv_get_number(&argvars[0]); + buf[1] = NUL; +--- 8694,8699 ---- +*************** +*** 9175,9181 **** + } + else if (*p == NUL) + *p = '\n'; +- #ifdef FEAT_MBYTE + /* Check for utf8 "bom"; U+FEFF is encoded as EF BB BF. Do this + * when finding the BF and check the previous two bytes. */ + else if (*p == 0xbf && enc_utf8 && !binary) +--- 9143,9148 ---- +*************** +*** 9215,9221 **** + } + } + } +- #endif + } /* for */ + + if (failed || (cnt >= maxline && maxline >= 0) || readlen <= 0) +--- 9182,9187 ---- +*************** +*** 10386,10396 **** + else + { + off = LineOffset[row] + col; +- #ifdef FEAT_MBYTE + if (enc_utf8 && ScreenLinesUC[off] != 0) + c = ScreenLinesUC[off]; + else +- #endif + c = ScreenLines[off]; + } + rettv->vval.v_number = c; +--- 10352,10360 ---- +*************** +*** 10910,10916 **** + csearch = dict_get_string(d, (char_u *)"char", FALSE); + if (csearch != NULL) + { +- #ifdef FEAT_MBYTE + if (enc_utf8) + { + int pcc[MAX_MCO]; +--- 10874,10879 ---- +*************** +*** 10919,10925 **** + set_last_csearch(c, csearch, utfc_ptr2len(csearch)); + } + else +- #endif + set_last_csearch(PTR2CHAR(csearch), + csearch, MB_PTR2LEN(csearch)); + } +--- 10882,10887 ---- +*************** +*** 12511,12528 **** + } + if (!match) + break; +! /* Advance to just after the match. */ + if (regmatch.endp[0] > str) + col = 0; + else +! { +! /* Don't get stuck at the same match. */ +! #ifdef FEAT_MBYTE + col = (*mb_ptr2len)(regmatch.endp[0]); +- #else +- col = 1; +- #endif +- } + str = regmatch.endp[0]; + } + +--- 12473,12484 ---- + } + if (!match) + break; +! // Advance to just after the match. + if (regmatch.endp[0] > str) + col = 0; + else +! // Don't get stuck at the same match. + col = (*mb_ptr2len)(regmatch.endp[0]); + str = regmatch.endp[0]; + } + +*************** +*** 12632,12638 **** + rettv->vval.v_string = vim_strsave((char_u *)_("(Invalid)")); + else + { +- # ifdef FEAT_MBYTE + vimconv_T conv; + char_u *enc; + +--- 12588,12593 ---- +*************** +*** 12641,12668 **** + convert_setup(&conv, p_enc, enc); + if (conv.vc_type != CONV_NONE) + p = string_convert(&conv, p, NULL); +- # endif + if (p != NULL) + (void)strftime((char *)result_buf, sizeof(result_buf), + (char *)p, curtime); + else + result_buf[0] = NUL; + +- # ifdef FEAT_MBYTE + if (conv.vc_type != CONV_NONE) + vim_free(p); + convert_setup(&conv, enc, p_enc); + if (conv.vc_type != CONV_NONE) + rettv->vval.v_string = string_convert(&conv, result_buf, NULL); + else +- # endif + rettv->vval.v_string = vim_strsave(result_buf); + +- # ifdef FEAT_MBYTE + /* Release conversion descriptors */ + convert_setup(&conv, NULL, NULL); + vim_free(enc); +- # endif + } + } + #endif +--- 12596,12618 ---- +*************** +*** 12677,12682 **** +--- 12627,12633 ---- + int len; + int error = FALSE; + int charidx; ++ int byteidx = 0; + + rettv->vval.v_number = -1; + str = tv_get_string_chk(&argvars[0]); +*************** +*** 12686,12710 **** + charidx = (int)tv_get_number_chk(&argvars[1], &error); + if (error) + return; +- #ifdef FEAT_MBYTE +- { +- int byteidx = 0; + +! while (charidx >= 0 && byteidx < len) + { +! if (charidx == 0) +! { +! rettv->vval.v_number = mb_ptr2char(str + byteidx); +! break; +! } +! --charidx; +! byteidx += MB_CPTR2LEN(str + byteidx); + } + } +- #else +- if (charidx < len) +- rettv->vval.v_number = str[charidx]; +- #endif + } + + /* +--- 12637,12653 ---- + charidx = (int)tv_get_number_chk(&argvars[1], &error); + if (error) + return; + +! while (charidx >= 0 && byteidx < len) +! { +! if (charidx == 0) + { +! rettv->vval.v_number = mb_ptr2char(str + byteidx); +! break; + } ++ --charidx; ++ byteidx += MB_CPTR2LEN(str + byteidx); + } + } + + /* +*************** +*** 12777,12786 **** + { + char_u *s = tv_get_string(&argvars[0]); + int skipcc = 0; +- #ifdef FEAT_MBYTE + varnumber_T len = 0; + int (*func_mb_ptr2char_adv)(char_u **pp); +- #endif + + if (argvars[1].v_type != VAR_UNKNOWN) + skipcc = (int)tv_get_number_chk(&argvars[1], NULL); +--- 12720,12727 ---- +*************** +*** 12788,12794 **** + emsg(_(e_invarg)); + else + { +- #ifdef FEAT_MBYTE + func_mb_ptr2char_adv = skipcc ? mb_ptr2char_adv : mb_cptr2char_adv; + while (*s != NUL) + { +--- 12729,12734 ---- +*************** +*** 12796,12804 **** + ++len; + } + rettv->vval.v_number = len; +- #else +- rettv->vval.v_number = (varnumber_T)(STRLEN(s)); +- #endif + } + } + +--- 12736,12741 ---- +*************** +*** 12825,12837 **** + { + char_u *s = tv_get_string(&argvars[0]); + +! rettv->vval.v_number = (varnumber_T)( +! #ifdef FEAT_MBYTE +! mb_string2cells(s, -1) +! #else +! STRLEN(s) +! #endif +! ); + } + + /* +--- 12762,12768 ---- + { + char_u *s = tv_get_string(&argvars[0]); + +! rettv->vval.v_number = (varnumber_T)(mb_string2cells(s, -1)); + } + + /* +*************** +*** 12840,12846 **** + static void + f_strcharpart(typval_T *argvars, typval_T *rettv) + { +- #ifdef FEAT_MBYTE + char_u *p; + int nchar; + int nbyte = 0; +--- 12771,12776 ---- +*************** +*** 12899,12907 **** + + rettv->v_type = VAR_STRING; + rettv->vval.v_string = vim_strnsave(p + nbyte, len); +- #else +- f_strpart(argvars, rettv); +- #endif + } + + /* +--- 12829,12834 ---- +*************** +*** 13278,13288 **** + cchar = (lcs_conceal == NUL) ? ' ' : lcs_conceal; + if (cchar != NUL) + { +- # ifdef FEAT_MBYTE + if (has_mbyte) + (*mb_char2bytes)(cchar, str); + else +- # endif + str[0] = cchar; + } + } +--- 13205,13213 ---- +*************** +*** 14208,14214 **** + char_u *fromstr; + char_u *tostr; + char_u *p; +- #ifdef FEAT_MBYTE + int inlen; + int fromlen; + int tolen; +--- 14133,14138 ---- +*************** +*** 14216,14222 **** + char_u *cpstr; + int cplen; + int first = TRUE; +- #endif + char_u buf[NUMBUFLEN]; + char_u buf2[NUMBUFLEN]; + garray_T ga; +--- 14140,14145 ---- +*************** +*** 14232,14246 **** + return; /* type error; errmsg already given */ + ga_init2(&ga, (int)sizeof(char), 80); + +- #ifdef FEAT_MBYTE + if (!has_mbyte) +- #endif + /* not multi-byte: fromstr and tostr must be the same length */ + if (STRLEN(fromstr) != STRLEN(tostr)) + { +- #ifdef FEAT_MBYTE + error: +- #endif + semsg(_(e_invarg2), fromstr); + ga_clear(&ga); + return; +--- 14155,14165 ---- +*************** +*** 14249,14255 **** + /* fromstr and tostr have to contain the same number of chars */ + while (*in_str != NUL) + { +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + inlen = (*mb_ptr2len)(in_str); +--- 14168,14173 ---- +*************** +*** 14300,14306 **** + in_str += inlen; + } + else +- #endif + { + /* When not using multi-byte chars we can do it faster. */ + p = vim_strchr(fromstr, *in_str); +--- 14218,14223 ---- +*** ../vim-8.1.0804/src/ex_cmds.c 2019-01-19 17:43:03.405449224 +0100 +--- src/ex_cmds.c 2019-01-24 14:35:27.375010277 +0100 +*************** +*** 50,56 **** + #ifdef FEAT_DIGRAPHS + char_u *dig; + #endif +- #ifdef FEAT_MBYTE + int cc[MAX_MCO]; + int ci = 0; + int len; +--- 50,55 ---- +*************** +*** 58,64 **** + if (enc_utf8) + c = utfc_ptr2char(ml_get_cursor(), cc); + else +- #endif + c = gchar_cursor(); + if (c == NUL) + { +--- 57,62 ---- +*************** +*** 66,75 **** + return; + } + +- #ifdef FEAT_MBYTE + IObuff[0] = NUL; + if (!has_mbyte || (enc_dbcs != 0 && c < 0x100) || c < 0x80) +- #endif + { + if (c == NL) /* NUL is stored as NL */ + c = NUL; +--- 64,71 ---- +*************** +*** 106,120 **** + vim_snprintf((char *)IObuff, IOSIZE, + _("<%s>%s%s %d, Hex %02x, Octal %03o"), + transchar(c), buf1, buf2, cval, cval, cval); +- #ifdef FEAT_MBYTE + if (enc_utf8) + c = cc[ci++]; + else + c = 0; +- #endif + } + +- #ifdef FEAT_MBYTE + /* Repeat for combining characters. */ + while (has_mbyte && (c >= 0x100 || (enc_utf8 && c >= 0x80))) + { +--- 102,113 ---- +*************** +*** 150,156 **** + else + c = 0; + } +- #endif + + msg((char *)IObuff); + } +--- 143,148 ---- +*************** +*** 823,833 **** + if (ptr[col] == NUL) + break; + vcol += chartabsize(ptr + col, (colnr_T)vcol); +- #ifdef FEAT_MBYTE + if (has_mbyte) + col += (*mb_ptr2len)(ptr + col); + else +- #endif + ++col; + } + if (new_line == NULL) /* out of memory */ +--- 815,823 ---- +*************** +*** 2282,2290 **** + if ((vir.vir_line = alloc(LSIZE)) == NULL) + return; + vir.vir_fd = fp_in; +- #ifdef FEAT_MBYTE + vir.vir_conv.vc_type = CONV_NONE; +- #endif + ga_init2(&vir.vir_barlines, (int)sizeof(char_u *), 100); + vir.vir_version = -1; + +--- 2272,2278 ---- +*************** +*** 2321,2330 **** + VIM_VERSION_MEDIUM); + fputs(_("# You may edit it if you're careful!\n\n"), fp_out); + write_viminfo_version(fp_out); +- #ifdef FEAT_MBYTE + fputs(_("# Value of 'encoding' when this file was written\n"), fp_out); + fprintf(fp_out, "*encoding=%s\n\n", p_enc); +- #endif + write_viminfo_search_pattern(fp_out); + write_viminfo_sub_string(fp_out); + #ifdef FEAT_CMDHIST +--- 2309,2316 ---- +*************** +*** 2353,2362 **** + } + + vim_free(vir.vir_line); +- #ifdef FEAT_MBYTE + if (vir.vir_conv.vc_type != CONV_NONE) + convert_setup(&vir.vir_conv, NULL, NULL); +- #endif + ga_clear_strings(&vir.vir_barlines); + } + +--- 2339,2346 ---- +*************** +*** 2484,2490 **** + static int + viminfo_encoding(vir_T *virp) + { +- #ifdef FEAT_MBYTE + char_u *p; + int i; + +--- 2468,2473 ---- +*************** +*** 2502,2508 **** + convert_setup(&virp->vir_conv, p, p_enc); + } + } +- #endif + return viminfo_readline(virp); + } + +--- 2485,2490 ---- +*************** +*** 2574,2580 **** + } + *d = NUL; + +- #ifdef FEAT_MBYTE + if (convert && virp->vir_conv.vc_type != CONV_NONE && *retval != NUL) + { + d = string_convert(&virp->vir_conv, retval, NULL); +--- 2556,2561 ---- +*************** +*** 2584,2590 **** + retval = d; + } + } +- #endif + + return retval; + } +--- 2565,2570 ---- +*************** +*** 2708,2717 **** + int i; + int allocated = FALSE; + int eof; +- #ifdef FEAT_MBYTE + char_u *sconv; + int converted; +- #endif + + while (*p == ',') + { +--- 2688,2695 ---- +*************** +*** 2835,2841 **** + ++p; + s[len] = NUL; + +- #ifdef FEAT_MBYTE + converted = FALSE; + if (virp->vir_conv.vc_type != CONV_NONE && *s != NUL) + { +--- 2813,2818 ---- +*************** +*** 2849,2855 **** + converted = TRUE; + } + } +! #endif + /* Need to copy in allocated memory if the string wasn't allocated + * above and we did allocate before, thus vir_line may change. */ + if (s != buf && allocated) +--- 2826,2832 ---- + converted = TRUE; + } + } +! + /* Need to copy in allocated memory if the string wasn't allocated + * above and we did allocate before, thus vir_line may change. */ + if (s != buf && allocated) +*************** +*** 2857,2867 **** + value->bv_string = s; + value->bv_type = BVAL_STRING; + value->bv_len = len; +! value->bv_allocated = allocated +! #ifdef FEAT_MBYTE +! || converted +! #endif +! ; + ++values->ga_len; + if (nextp != NULL) + { +--- 2834,2840 ---- + value->bv_string = s; + value->bv_type = BVAL_STRING; + value->bv_len = len; +! value->bv_allocated = allocated || converted; + ++values->ga_len; + if (nextp != NULL) + { +*************** +*** 4094,4102 **** + if (!oldbuf && eap != NULL) + { + set_file_options(TRUE, eap); +- #ifdef FEAT_MBYTE + set_forced_fenc(eap); +- #endif + } + } + +--- 4067,4073 ---- +*************** +*** 5317,5327 **** + else + { + /* search for a match at next column */ +- #ifdef FEAT_MBYTE + if (has_mbyte) + matchcol += mb_ptr2len(sub_firstline + matchcol); + else +- #endif + ++matchcol; + } + goto skip; +--- 5288,5296 ---- +*************** +*** 5759,5768 **** + p1 = new_start - 1; + } + } +- #ifdef FEAT_MBYTE + else if (has_mbyte) + p1 += (*mb_ptr2len)(p1) - 1; +- #endif + } + + /* +--- 5728,5735 ---- +*************** +*** 7017,7026 **** + FILE *fd; + char_u *s; + int fi; +- #ifdef FEAT_MBYTE + vimconv_T vc; + char_u *cp; +- #endif + + /* Find all "doc/ *.txt" files in this directory. */ + add_pathsep(NameBuff); +--- 6984,6991 ---- +*************** +*** 7086,7094 **** + && (s = vim_strchr(IObuff + 1, '*')) + != NULL) + { +- #ifdef FEAT_MBYTE + int this_utf = MAYBE; +! #endif + /* Change tag definition to a + * reference and remove <CR>/<NL>. */ + IObuff[0] = '|'; +--- 7051,7058 ---- + && (s = vim_strchr(IObuff + 1, '*')) + != NULL) + { + int this_utf = MAYBE; +! + /* Change tag definition to a + * reference and remove <CR>/<NL>. */ + IObuff[0] = '|'; +*************** +*** 7097,7103 **** + { + if (*s == '\r' || *s == '\n') + *s = NUL; +- #ifdef FEAT_MBYTE + /* The text is utf-8 when a byte + * above 127 is found and no + * illegal byte sequence is found. +--- 7061,7066 ---- +*************** +*** 7112,7121 **** + this_utf = FALSE; + s += l - 1; + } +- #endif + ++s; + } +! #ifdef FEAT_MBYTE + /* The help file is latin1 or utf-8; + * conversion to the current + * 'encoding' may be required. */ +--- 7075,7083 ---- + this_utf = FALSE; + s += l - 1; + } + ++s; + } +! + /* The help file is latin1 or utf-8; + * conversion to the current + * 'encoding' may be required. */ +*************** +*** 7140,7149 **** + ml_append(lnum, cp, (colnr_T)0, FALSE); + if (cp != IObuff) + vim_free(cp); +- #else +- ml_append(lnum, IObuff, (colnr_T)0, +- FALSE); +- #endif + ++lnum; + } + fclose(fd); +--- 7102,7107 ---- +*************** +*** 7199,7210 **** + int i; + char_u *fname; + int dirlen; +- # ifdef FEAT_MBYTE + int utf8 = MAYBE; + int this_utf8; + int firstline; + int mix = FALSE; /* detected mixed encodings */ +- # endif + + /* + * Find all *.txt files. +--- 7157,7166 ---- +*************** +*** 7274,7285 **** + } + fname = files[fi] + dirlen + 1; + +- # ifdef FEAT_MBYTE + firstline = TRUE; +- # endif + while (!vim_fgets(IObuff, IOSIZE, fd) && !got_int) + { +- # ifdef FEAT_MBYTE + if (firstline) + { + /* Detect utf-8 file by a non-ASCII char in the first line. */ +--- 7230,7238 ---- +*************** +*** 7311,7317 **** + } + firstline = FALSE; + } +- # endif + p1 = vim_strchr(IObuff, '*'); /* find first '*' */ + while (p1 != NULL) + { +--- 7264,7269 ---- +*************** +*** 7398,7407 **** + } + } + +- # ifdef FEAT_MBYTE + if (utf8 == TRUE) + fprintf(fd_tags, "!_TAG_FILE_ENCODING\tutf-8\t//\n"); +- # endif + + /* + * Write the tags into the file. +--- 7350,7357 ---- +*************** +*** 7426,7435 **** + } + } + } +- #ifdef FEAT_MBYTE + if (mix) + got_int = FALSE; /* continue with other languages */ +- #endif + + for (i = 0; i < ga.ga_len; ++i) + vim_free(((char_u **)ga.ga_data)[i]); +--- 7376,7383 ---- +*** ../vim-8.1.0804/src/ex_cmds2.c 2019-01-20 15:30:36.881328770 +0100 +--- src/ex_cmds2.c 2019-01-24 14:36:07.666721980 +0100 +*************** +*** 1957,1963 **** + if (IObuff[IOSIZE - 2] != NUL && IObuff[IOSIZE - 2] != NL) + { + int n = IOSIZE - 2; +! # ifdef FEAT_MBYTE + if (enc_utf8) + { + /* Move to the first byte of this char. +--- 1957,1963 ---- + if (IObuff[IOSIZE - 2] != NUL && IObuff[IOSIZE - 2] != NL) + { + int n = IOSIZE - 2; +! + if (enc_utf8) + { + /* Move to the first byte of this char. +*************** +*** 1968,1974 **** + } + else if (has_mbyte) + n -= mb_head_off(IObuff, IObuff + n); +- # endif + IObuff[n] = NL; + IObuff[n + 1] = NUL; + } +--- 1968,1973 ---- +*************** +*** 4254,4262 **** + int dbg_tick; /* debug_tick when breakpoint was set */ + int level; /* top nesting level of sourced file */ + #endif +- #ifdef FEAT_MBYTE + vimconv_T conv; /* type of conversion */ +- #endif + }; + + #ifdef FEAT_EVAL +--- 4253,4259 ---- +*************** +*** 4593,4599 **** + # endif + #endif + +- #ifdef FEAT_MBYTE + cookie.conv.vc_type = CONV_NONE; /* no conversion */ + + /* Read the first line so we can check for a UTF-8 BOM. */ +--- 4590,4595 ---- +*************** +*** 4612,4618 **** + firstline = p; + } + } +- #endif + + /* + * Call do_cmdline, which will call getsourceline() to get the lines. +--- 4608,4613 ---- +*************** +*** 4683,4691 **** + fclose(cookie.fp); + vim_free(cookie.nextline); + vim_free(firstline); +- #ifdef FEAT_MBYTE + convert_setup(&cookie.conv, NULL, NULL); +- #endif + + if (trigger_source_post) + apply_autocmds(EVENT_SOURCEPOST, fname_exp, fname_exp, FALSE, curbuf); +--- 4678,4684 ---- +*************** +*** 4924,4930 **** + } + } + +- #ifdef FEAT_MBYTE + if (line != NULL && sp->conv.vc_type != CONV_NONE) + { + char_u *s; +--- 4917,4922 ---- +*************** +*** 4937,4943 **** + line = s; + } + } +- #endif + + #ifdef FEAT_EVAL + /* Did we encounter a breakpoint? */ +--- 4929,4934 ---- +*************** +*** 5194,5200 **** + void + ex_scriptencoding(exarg_T *eap UNUSED) + { +- #ifdef FEAT_MBYTE + struct source_cookie *sp; + char_u *name; + +--- 5185,5190 ---- +*************** +*** 5219,5225 **** + + if (name != eap->arg) + vim_free(name); +- #endif + } + + #if defined(FEAT_EVAL) || defined(PROTO) +--- 5209,5214 ---- +*** ../vim-8.1.0804/src/ex_docmd.c 2019-01-24 13:34:37.815464545 +0100 +--- src/ex_docmd.c 2019-01-24 14:38:50.885564621 +0100 +*************** +*** 404,411 **** + # define ex_foldopen ex_ni + # define ex_folddo ex_ni + #endif +! #if !((defined(HAVE_LOCALE_H) || defined(X_LOCALE)) \ +! && (defined(FEAT_GETTEXT) || defined(FEAT_MBYTE))) + # define ex_language ex_ni + #endif + #ifndef FEAT_SIGNS +--- 404,410 ---- + # define ex_foldopen ex_ni + # define ex_folddo ex_ni + #endif +! #if !(defined(HAVE_LOCALE_H) || defined(X_LOCALE)) + # define ex_language ex_ni + #endif + #ifndef FEAT_SIGNS +*************** +*** 1550,1556 **** + #endif + } + +- #if defined(FEAT_EVAL) || defined(FEAT_MBYTE) || defined(PROTO) + /* + * If "fgetline" is get_loop_line(), return the cookie used by the original + * getline function. Otherwise return "cookie". +--- 1549,1554 ---- +*************** +*** 1560,1566 **** + char_u *(*fgetline)(int, void *, int) UNUSED, + void *cookie) /* argument for fgetline() */ + { +! # ifdef FEAT_EVAL + char_u *(*gp)(int, void *, int); + struct loop_cookie *cp; + +--- 1558,1564 ---- + char_u *(*fgetline)(int, void *, int) UNUSED, + void *cookie) /* argument for fgetline() */ + { +! #ifdef FEAT_EVAL + char_u *(*gp)(int, void *, int); + struct loop_cookie *cp; + +*************** +*** 1575,1585 **** + cp = cp->cookie; + } + return cp; +! # else + return cookie; +- # endif +- } + #endif + + + /* +--- 1573,1582 ---- + cp = cp->cookie; + } + return cp; +! #else + return cookie; + #endif ++ } + + + /* +*************** +*** 3116,3132 **** + d = IObuff + STRLEN(IObuff); + while (*s != NUL && d - IObuff < IOSIZE - 7) + { +! if ( +! #ifdef FEAT_MBYTE +! enc_utf8 ? (s[0] == 0xc2 && s[1] == 0xa0) : +! #endif +! *s == 0xa0) + { +! s += +! #ifdef FEAT_MBYTE +! enc_utf8 ? 2 : +! #endif +! 1; + STRCPY(d, "<a0>"); + d += 4; + } +--- 3113,3121 ---- + d = IObuff + STRLEN(IObuff); + while (*s != NUL && d - IObuff < IOSIZE - 7) + { +! if (enc_utf8 ? (s[0] == 0xc2 && s[1] == 0xa0) : *s == 0xa0) + { +! s += enc_utf8 ? 2 : 1; + STRCPY(d, "<a0>"); + d += 4; + } +*************** +*** 3752,3762 **** + p = xp->xp_pattern; + while (*p != NUL) + { +- #ifdef FEAT_MBYTE + if (has_mbyte) + c = mb_ptr2char(p); + else +- #endif + c = *p; + if (c == '\\' && p[1] != NUL) + ++p; +--- 3741,3749 ---- +*************** +*** 3780,3798 **** + len = 0; /* avoid getting stuck when space is in 'isfname' */ + while (*p != NUL) + { +- #ifdef FEAT_MBYTE + if (has_mbyte) + c = mb_ptr2char(p); + else +- #endif + c = *p; + if (c == '`' || vim_isfilec_or_wc(c)) + break; +- #ifdef FEAT_MBYTE + if (has_mbyte) + len = (*mb_ptr2len)(p); + else +- #endif + len = 1; + MB_PTR_ADV(p); + } +--- 3767,3781 ---- +*************** +*** 5408,5414 **** + return p; + } + +- #if defined(FEAT_MBYTE) || defined(PROTO) + int + get_bad_opt(char_u *p, exarg_T *eap) + { +--- 5391,5396 ---- +*************** +*** 5422,5428 **** + return FAIL; + return OK; + } +- #endif + + /* + * Get "++opt=arg" argument. +--- 5404,5409 ---- +*************** +*** 5433,5442 **** + { + char_u *arg = eap->arg + 2; + int *pp = NULL; +- #ifdef FEAT_MBYTE + int bad_char_idx; + char_u *p; +- #endif + + /* ":edit ++[no]bin[ary] file" */ + if (STRNCMP(arg, "bin", 3) == 0 || STRNCMP(arg, "nobin", 5) == 0) +--- 5414,5421 ---- +*************** +*** 5472,5478 **** + arg += 10; + pp = &eap->force_ff; + } +- #ifdef FEAT_MBYTE + else if (STRNCMP(arg, "enc", 3) == 0) + { + if (STRNCMP(arg, "encoding", 8) == 0) +--- 5451,5456 ---- +*************** +*** 5486,5492 **** + arg += 3; + pp = &bad_char_idx; + } +- #endif + + if (pp == NULL || *arg != '=') + return FAIL; +--- 5464,5469 ---- +*************** +*** 5497,5510 **** + eap->arg = skipwhite(arg); + *arg = NUL; + +- #ifdef FEAT_MBYTE + if (pp == &eap->force_ff) + { +- #endif + if (check_ff_value(eap->cmd + eap->force_ff) == FAIL) + return FAIL; + eap->force_ff = eap->cmd[eap->force_ff]; +- #ifdef FEAT_MBYTE + } + else if (pp == &eap->force_enc) + { +--- 5474,5484 ---- +*************** +*** 5519,5525 **** + if (get_bad_opt(eap->cmd + bad_char_idx, eap) == FAIL) + return FAIL; + } +- #endif + + return OK; + } +--- 5493,5498 ---- +*************** +*** 6507,6520 **** + } + else + { +- #ifdef FEAT_MBYTE + int charlen = (*mb_ptr2len)(p); + len += charlen; + p += charlen; +- #else +- ++len; +- ++p; +- #endif + } + } + +--- 6480,6489 ---- + } + else + { + int charlen = (*mb_ptr2len)(p); ++ + len += charlen; + p += charlen; + } + } + +*************** +*** 6685,6697 **** + result = STRLEN(eap->arg) + 2; + for (p = eap->arg; *p; ++p) + { +- #ifdef FEAT_MBYTE + if (enc_dbcs != 0 && (*mb_ptr2len)(p) == 2) + /* DBCS can contain \ in a trail byte, skip the + * double-byte character. */ + ++p; + else +- #endif + if (*p == '\\' || *p == '"') + ++result; + } +--- 6654,6664 ---- +*************** +*** 6701,6713 **** + *buf++ = '"'; + for (p = eap->arg; *p; ++p) + { +- #ifdef FEAT_MBYTE + if (enc_dbcs != 0 && (*mb_ptr2len)(p) == 2) + /* DBCS can contain \ in a trail byte, copy the + * double-byte character to avoid escaping. */ + *buf++ = *p++; + else +- #endif + if (*p == '\\' || *p == '"') + *buf++ = '\\'; + *buf++ = *p; +--- 6668,6678 ---- +*************** +*** 10328,10338 **** + ex_normal(exarg_T *eap) + { + save_state_T save_state; +- #ifdef FEAT_MBYTE + char_u *arg = NULL; + int l; + char_u *p; +- #endif + + if (ex_normal_lock > 0) + { +--- 10293,10301 ---- +*************** +*** 10345,10351 **** + return; + } + +- #ifdef FEAT_MBYTE + /* + * vgetc() expects a CSI and K_SPECIAL to have been escaped. Don't do + * this for the K_SPECIAL leading byte, otherwise special keys will not +--- 10308,10313 ---- +*************** +*** 10358,10372 **** + /* Count the number of characters to be escaped. */ + for (p = eap->arg; *p != NUL; ++p) + { +! # ifdef FEAT_GUI + if (*p == CSI) /* leadbyte CSI */ + len += 2; +! # endif + for (l = (*mb_ptr2len)(p) - 1; l > 0; --l) + if (*++p == K_SPECIAL /* trailbyte K_SPECIAL or CSI */ +! # ifdef FEAT_GUI + || *p == CSI +! # endif + ) + len += 2; + } +--- 10320,10334 ---- + /* Count the number of characters to be escaped. */ + for (p = eap->arg; *p != NUL; ++p) + { +! #ifdef FEAT_GUI + if (*p == CSI) /* leadbyte CSI */ + len += 2; +! #endif + for (l = (*mb_ptr2len)(p) - 1; l > 0; --l) + if (*++p == K_SPECIAL /* trailbyte K_SPECIAL or CSI */ +! #ifdef FEAT_GUI + || *p == CSI +! #endif + ) + len += 2; + } +*************** +*** 10379,10391 **** + for (p = eap->arg; *p != NUL; ++p) + { + arg[len++] = *p; +! # ifdef FEAT_GUI + if (*p == CSI) + { + arg[len++] = KS_EXTRA; + arg[len++] = (int)KE_CSI; + } +! # endif + for (l = (*mb_ptr2len)(p) - 1; l > 0; --l) + { + arg[len++] = *++p; +--- 10341,10353 ---- + for (p = eap->arg; *p != NUL; ++p) + { + arg[len++] = *p; +! #ifdef FEAT_GUI + if (*p == CSI) + { + arg[len++] = KS_EXTRA; + arg[len++] = (int)KE_CSI; + } +! #endif + for (l = (*mb_ptr2len)(p) - 1; l > 0; --l) + { + arg[len++] = *++p; +*************** +*** 10394,10413 **** + arg[len++] = KS_SPECIAL; + arg[len++] = KE_FILLER; + } +! # ifdef FEAT_GUI + else if (*p == CSI) + { + arg[len++] = KS_EXTRA; + arg[len++] = (int)KE_CSI; + } +! # endif + } + arg[len] = NUL; + } + } + } + } +- #endif + + ++ex_normal_busy; + if (save_current_state(&save_state)) +--- 10356,10374 ---- + arg[len++] = KS_SPECIAL; + arg[len++] = KE_FILLER; + } +! #ifdef FEAT_GUI + else if (*p == CSI) + { + arg[len++] = KS_EXTRA; + arg[len++] = (int)KE_CSI; + } +! #endif + } + arg[len] = NUL; + } + } + } + } + + ++ex_normal_busy; + if (save_current_state(&save_state)) +*************** +*** 10426,10436 **** + check_cursor_moved(curwin); + } + +! exec_normal_cmd( +! #ifdef FEAT_MBYTE +! arg != NULL ? arg : +! #endif +! eap->arg, eap->forceit ? REMAP_NONE : REMAP_YES, FALSE); + } + while (eap->addr_count > 0 && eap->line1 <= eap->line2 && !got_int); + } +--- 10387,10395 ---- + check_cursor_moved(curwin); + } + +! exec_normal_cmd(arg != NULL +! ? arg +! : eap->arg, eap->forceit ? REMAP_NONE : REMAP_YES, FALSE); + } + while (eap->addr_count > 0 && eap->line1 <= eap->line2 && !got_int); + } +*************** +*** 10447,10455 **** + ui_cursor_shape(); /* may show different cursor shape */ + #endif + +- #ifdef FEAT_MBYTE + vim_free(arg); +- #endif + } + + /* +--- 10406,10412 ---- +*** ../vim-8.1.0804/src/ex_getln.c 2019-01-22 22:54:56.215326924 +0100 +--- src/ex_getln.c 2019-01-24 14:41:44.460348365 +0100 +*************** +*** 89,97 **** + static int cmdline_charsize(int idx); + static void set_cmdspos(void); + static void set_cmdspos_cursor(void); +- #ifdef FEAT_MBYTE + static void correct_cmdspos(int idx, int cells); +- #endif + static void alloc_cmdbuff(int len); + static int realloc_cmdbuff(int len); + static void draw_cmdline(int start, int len); +--- 89,95 ---- +*************** +*** 769,775 **** + stuffcharReadbuff(*c); + *c = '\\'; + } +- #ifdef FEAT_MBYTE + // add any composing characters + if (mb_char2len(*c) != mb_ptr2len(ml_get_cursor())) + { +--- 767,772 ---- +*************** +*** 783,789 **** + } + *c = save_c; + } +- #endif + return FAIL; + } + } +--- 780,785 ---- +*************** +*** 1253,1262 **** + i = (int)(xpc.xp_pattern - ccline.cmdbuff); + while (--j > i) + { +- #ifdef FEAT_MBYTE + if (has_mbyte) + j -= (*mb_head_off)(ccline.cmdbuff, ccline.cmdbuff + j); +- #endif + if (vim_ispathsep(ccline.cmdbuff[j])) + { + found = TRUE; +--- 1249,1256 ---- +*************** +*** 1281,1290 **** + i = (int)(xpc.xp_pattern - ccline.cmdbuff); + while (--j > i) + { +- #ifdef FEAT_MBYTE + if (has_mbyte) + j -= (*mb_head_off)(ccline.cmdbuff, ccline.cmdbuff + j); +- #endif + if (vim_ispathsep(ccline.cmdbuff[j]) + #ifdef BACKSLASH_IN_FILENAME + && vim_strchr((char_u *)" *?[{`$%#", +--- 1275,1282 ---- +*************** +*** 1616,1633 **** + */ + if (c == K_DEL && ccline.cmdpos != ccline.cmdlen) + ++ccline.cmdpos; +- #ifdef FEAT_MBYTE + if (has_mbyte && c == K_DEL) + ccline.cmdpos += mb_off_next(ccline.cmdbuff, + ccline.cmdbuff + ccline.cmdpos); +- #endif + if (ccline.cmdpos > 0) + { + char_u *p; + + j = ccline.cmdpos; + p = ccline.cmdbuff + j; +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + p = mb_prevptr(ccline.cmdbuff, p); +--- 1608,1622 ---- +*************** +*** 1642,1650 **** + p += (*mb_ptr2len)(p); + } + } +! else +! #endif +! if (c == Ctrl_W) + { + while (p > ccline.cmdbuff && vim_isspace(p[-1])) + --p; +--- 1631,1637 ---- + p += (*mb_ptr2len)(p); + } + } +! else if (c == Ctrl_W) + { + while (p > ccline.cmdbuff && vim_isspace(p[-1])) + --p; +*************** +*** 1893,1913 **** + if (KeyTyped && ccline.cmdspos + i >= Columns * Rows) + break; + ccline.cmdspos += i; +- #ifdef FEAT_MBYTE + if (has_mbyte) + ccline.cmdpos += (*mb_ptr2len)(ccline.cmdbuff + + ccline.cmdpos); + else +- #endif + ++ccline.cmdpos; + } + while ((c == K_S_RIGHT || c == K_C_RIGHT + || (mod_mask & (MOD_MASK_SHIFT|MOD_MASK_CTRL))) + && ccline.cmdbuff[ccline.cmdpos] != ' '); +- #ifdef FEAT_MBYTE + if (has_mbyte) + set_cmdspos_cursor(); +- #endif + goto cmdline_not_changed; + + case K_LEFT: +--- 1880,1896 ---- +*************** +*** 1918,1938 **** + do + { + --ccline.cmdpos; +- #ifdef FEAT_MBYTE + if (has_mbyte) /* move to first byte of char */ + ccline.cmdpos -= (*mb_head_off)(ccline.cmdbuff, + ccline.cmdbuff + ccline.cmdpos); +- #endif + ccline.cmdspos -= cmdline_charsize(ccline.cmdpos); + } + while (ccline.cmdpos > 0 + && (c == K_S_LEFT || c == K_C_LEFT + || (mod_mask & (MOD_MASK_SHIFT|MOD_MASK_CTRL))) + && ccline.cmdbuff[ccline.cmdpos - 1] != ' '); +- #ifdef FEAT_MBYTE + if (has_mbyte) + set_cmdspos_cursor(); +- #endif + goto cmdline_not_changed; + + case K_IGNORE: +--- 1901,1917 ---- +*************** +*** 2030,2036 **** + if (mouse_row <= cmdline_row + ccline.cmdspos / Columns + && mouse_col < ccline.cmdspos % Columns + i) + break; +- # ifdef FEAT_MBYTE + if (has_mbyte) + { + /* Count ">" for double-wide char that doesn't fit. */ +--- 2009,2014 ---- +*************** +*** 2038,2044 **** + ccline.cmdpos += (*mb_ptr2len)(ccline.cmdbuff + + ccline.cmdpos) - 1; + } +- # endif + ccline.cmdspos += i; + } + goto cmdline_not_changed; +--- 2016,2021 ---- +*************** +*** 2301,2307 **** + c = get_literal(); /* get next (two) character(s) */ + do_abbr = FALSE; /* don't do abbreviation now */ + extra_char = NUL; +- #ifdef FEAT_MBYTE + /* may need to remove ^ when composing char was typed */ + if (enc_utf8 && utf_iscomposing(c) && !cmd_silent) + { +--- 2278,2283 ---- +*************** +*** 2309,2315 **** + msg_putchar(' '); + cursorcmd(); + } +- #endif + break; + + #ifdef FEAT_DIGRAPHS +--- 2285,2290 ---- +*************** +*** 2374,2386 **** + * We come here if we have a normal character. + */ + +! if (do_abbr && (IS_SPECIAL(c) || !vim_iswordc(c)) && (ccheck_abbr( +! #ifdef FEAT_MBYTE +! /* Add ABBR_OFF for characters above 0x100, this is +! * what check_abbr() expects. */ +! (has_mbyte && c >= 0x100) ? (c + ABBR_OFF) : +! #endif +! c) || c == Ctrl_RSB)) + goto cmdline_changed; + + /* +--- 2349,2360 ---- + * We come here if we have a normal character. + */ + +! if (do_abbr && (IS_SPECIAL(c) || !vim_iswordc(c)) +! && (ccheck_abbr( +! // Add ABBR_OFF for characters above 0x100, this is +! // what check_abbr() expects. +! (has_mbyte && c >= 0x100) ? (c + ABBR_OFF) : c) +! || c == Ctrl_RSB)) + goto cmdline_changed; + + /* +*************** +*** 2390,2396 **** + put_on_cmdline(get_special_key_name(c, mod_mask), -1, TRUE); + else + { +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + j = (*mb_char2bytes)(c, IObuff); +--- 2364,2369 ---- +*************** +*** 2398,2404 **** + put_on_cmdline(IObuff, j, TRUE); + } + else +- #endif + { + IObuff[0] = c; + put_on_cmdline(IObuff, 1, TRUE); +--- 2371,2376 ---- +*************** +*** 2687,2697 **** + for (i = 0; i < ccline.cmdlen && i < ccline.cmdpos; ++i) + { + c = cmdline_charsize(i); +- #ifdef FEAT_MBYTE + /* Count ">" for double-wide multi-byte char that doesn't fit. */ + if (has_mbyte) + correct_cmdspos(i, c); +- #endif + /* If the cmdline doesn't fit, show cursor on last visible char. + * Don't move the cursor itself, so we can still append. */ + if ((ccline.cmdspos += c) >= m) +--- 2659,2667 ---- +*************** +*** 2699,2712 **** + ccline.cmdspos -= c; + break; + } +- #ifdef FEAT_MBYTE + if (has_mbyte) + i += (*mb_ptr2len)(ccline.cmdbuff + i) - 1; +- #endif + } + } + +- #ifdef FEAT_MBYTE + /* + * Check if the character at "idx", which is "cells" wide, is a multi-byte + * character that doesn't fit, so that a ">" must be displayed. +--- 2669,2679 ---- +*************** +*** 2719,2725 **** + && ccline.cmdspos % Columns + cells > Columns) + ccline.cmdspos++; + } +- #endif + + /* + * Get an Ex command line for the ":" command. +--- 2686,2691 ---- +*************** +*** 2849,2855 **** + { + if (line_ga.ga_len > 0) + { +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + p = (char_u *)line_ga.ga_data; +--- 2815,2820 ---- +*************** +*** 2858,2864 **** + line_ga.ga_len -= len; + } + else +- #endif + --line_ga.ga_len; + goto redraw; + } +--- 2823,2828 ---- +*************** +*** 2962,2973 **** + + if (IS_SPECIAL(c1)) + c1 = '?'; +- #ifdef FEAT_MBYTE + if (has_mbyte) + len = (*mb_char2bytes)(c1, + (char_u *)line_ga.ga_data + line_ga.ga_len); + else +- #endif + { + len = 1; + ((char_u *)line_ga.ga_data)[line_ga.ga_len] = c1; +--- 2926,2935 ---- +*************** +*** 3070,3076 **** + if (ccline.cmdbuff == NULL || ccline.cmdpos > ccline.cmdlen) + return MAXCOL; + +- # ifdef FEAT_MBYTE + if (has_mbyte) + { + colnr_T col; +--- 3032,3037 ---- +*************** +*** 3082,3088 **** + return col; + } + else +- # endif + return ccline.cmdpos; + } + #endif +--- 3043,3048 ---- +*************** +*** 3111,3117 **** + old_col = msg_col; + cmdspos = ((ccline.cmdfirstc != NUL) ? 1 : 0) + ccline.cmdindent; + +- # ifdef FEAT_MBYTE + if (has_mbyte) + { + for (col = 0; col < preedit_start_col +--- 3071,3076 ---- +*************** +*** 3122,3128 **** + } + } + else +- # endif + { + cmdspos += preedit_start_col; + cmdpos += preedit_start_col; +--- 3081,3086 ---- +*************** +*** 3142,3152 **** + if (char_attr < 0) + break; /* end of preedit string */ + +- # ifdef FEAT_MBYTE + if (has_mbyte) + char_len = (*mb_ptr2len)(ccline.cmdbuff + cmdpos); + else +- # endif + char_len = 1; + + msg_outtrans_len_attr(ccline.cmdbuff + cmdpos, char_len, char_attr); +--- 3100,3108 ---- +*************** +*** 3245,3254 **** + for (i = 0; i < len; ++i) + { + msg_putchar('*'); +- # ifdef FEAT_MBYTE + if (has_mbyte) + i += (*mb_ptr2len)(ccline.cmdbuff + start + i) - 1; +- # endif + } + else + #endif +--- 3201,3208 ---- +*************** +*** 3382,3392 **** + msg_no_more = TRUE; + if (ccline.cmdlen == ccline.cmdpos) + msg_putchar(' '); +- #ifdef FEAT_MBYTE + else if (has_mbyte) + draw_cmdline(ccline.cmdpos, + (*mb_ptr2len)(ccline.cmdbuff + ccline.cmdpos)); +- #endif + else + draw_cmdline(ccline.cmdpos, 1); + msg_no_more = FALSE; +--- 3336,3344 ---- +*************** +*** 3429,3435 **** + } + else + { +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + /* Count nr of characters in the new string. */ +--- 3381,3386 ---- +*************** +*** 3450,3464 **** + else + ccline.cmdlen = ccline.cmdpos + len; + } +! else +! #endif +! if (ccline.cmdpos + len > ccline.cmdlen) + ccline.cmdlen = ccline.cmdpos + len; + } + mch_memmove(ccline.cmdbuff + ccline.cmdpos, str, (size_t)len); + ccline.cmdbuff[ccline.cmdlen] = NUL; + +- #ifdef FEAT_MBYTE + if (enc_utf8) + { + /* When the inserted text starts with a composing character, +--- 3401,3412 ---- + else + ccline.cmdlen = ccline.cmdpos + len; + } +! else if (ccline.cmdpos + len > ccline.cmdlen) + ccline.cmdlen = ccline.cmdpos + len; + } + mch_memmove(ccline.cmdbuff + ccline.cmdpos, str, (size_t)len); + ccline.cmdbuff[ccline.cmdlen] = NUL; + + if (enc_utf8) + { + /* When the inserted text starts with a composing character, +*************** +*** 3474,3480 **** + len += i; + c = utf_ptr2char(ccline.cmdbuff + ccline.cmdpos); + } +! # ifdef FEAT_ARABIC + if (i == 0 && ccline.cmdpos > 0 && arabic_maycombine(c)) + { + /* Check the previous character for Arabic combining pair. */ +--- 3422,3428 ---- + len += i; + c = utf_ptr2char(ccline.cmdbuff + ccline.cmdpos); + } +! #ifdef FEAT_ARABIC + if (i == 0 && ccline.cmdpos > 0 && arabic_maycombine(c)) + { + /* Check the previous character for Arabic combining pair. */ +*************** +*** 3489,3495 **** + else + i = 0; + } +! # endif + if (i != 0) + { + /* Also backup the cursor position. */ +--- 3437,3443 ---- + else + i = 0; + } +! #endif + if (i != 0) + { + /* Also backup the cursor position. */ +*************** +*** 3503,3509 **** + } + } + } +- #endif + + if (redraw && !cmd_silent) + { +--- 3451,3456 ---- +*************** +*** 3535,3551 **** + for (i = 0; i < len; ++i) + { + c = cmdline_charsize(ccline.cmdpos); +- #ifdef FEAT_MBYTE + /* count ">" for a double-wide char that doesn't fit. */ + if (has_mbyte) + correct_cmdspos(ccline.cmdpos, c); +- #endif + /* Stop cursor at the end of the screen, but do increment the + * insert position, so that entering a very long command + * works, even though you can't see it. */ + if (ccline.cmdspos + c < m) + ccline.cmdspos += c; +! #ifdef FEAT_MBYTE + if (has_mbyte) + { + c = (*mb_ptr2len)(ccline.cmdbuff + ccline.cmdpos) - 1; +--- 3482,3496 ---- + for (i = 0; i < len; ++i) + { + c = cmdline_charsize(ccline.cmdpos); + /* count ">" for a double-wide char that doesn't fit. */ + if (has_mbyte) + correct_cmdspos(ccline.cmdpos, c); + /* Stop cursor at the end of the screen, but do increment the + * insert position, so that entering a very long command + * works, even though you can't see it. */ + if (ccline.cmdspos + c < m) + ccline.cmdspos += c; +! + if (has_mbyte) + { + c = (*mb_ptr2len)(ccline.cmdbuff + ccline.cmdpos) - 1; +*************** +*** 3554,3560 **** + ccline.cmdpos += c; + i += c; + } +- #endif + ++ccline.cmdpos; + } + } +--- 3499,3504 ---- +*************** +*** 3654,3660 **** + /* Locate start of last word in the cmd buffer. */ + for (w = ccline.cmdbuff + ccline.cmdpos; w > ccline.cmdbuff; ) + { +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + len = (*mb_head_off)(ccline.cmdbuff, w - 1) + 1; +--- 3598,3603 ---- +*************** +*** 3663,3669 **** + w -= len; + } + else +- #endif + { + if (!vim_iswordc(w[-1])) + break; +--- 3606,3611 ---- +*************** +*** 3703,3713 **** + cv = *s; + if (cv == Ctrl_V && s[1]) + ++s; +- #ifdef FEAT_MBYTE + if (has_mbyte) + c = mb_cptr2char_adv(&s); + else +- #endif + c = *s++; + if (cv == Ctrl_V || c == ESC || c == Ctrl_C + || c == CAR || c == NL || c == Ctrl_L +--- 3645,3653 ---- +*************** +*** 4237,4258 **** + + for (len = 0; xp->xp_files[0][len]; len += mb_len) + { +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + mb_len = (*mb_ptr2len)(&xp->xp_files[0][len]); + c0 =(* mb_ptr2char)(&xp->xp_files[0][len]); + } + else +- #endif + c0 = xp->xp_files[0][len]; + for (i = 1; i < xp->xp_numfiles; ++i) + { +- #ifdef FEAT_MBYTE + if (has_mbyte) + ci =(* mb_ptr2char)(&xp->xp_files[i][len]); + else +- #endif + ci = xp->xp_files[i][len]; + if (p_fic && (xp->xp_context == EXPAND_DIRECTORIES + || xp->xp_context == EXPAND_FILES +--- 4177,4194 ---- +*** ../vim-8.1.0804/src/fileio.c 2019-01-20 15:30:36.885328746 +0100 +--- src/fileio.c 2019-01-24 14:48:42.309458757 +0100 +*************** +*** 27,37 **** + /* Is there any system that doesn't have access()? */ + #define USE_MCH_ACCESS + +- #ifdef FEAT_MBYTE + static char_u *next_fenc(char_u **pp); +! # ifdef FEAT_EVAL + static char_u *readfile_charconvert(char_u *fname, char_u *fenc, int *fdp); +- # endif + #endif + #ifdef FEAT_VIMINFO + static void check_marks_read(void); +--- 27,35 ---- + /* Is there any system that doesn't have access()? */ + #define USE_MCH_ACCESS + + static char_u *next_fenc(char_u **pp); +! #ifdef FEAT_EVAL + static char_u *readfile_charconvert(char_u *fname, char_u *fenc, int *fdp); + #endif + #ifdef FEAT_VIMINFO + static void check_marks_read(void); +*************** +*** 47,77 **** + static int apply_autocmds_exarg(event_T event, char_u *fname, char_u *fname_io, int force, buf_T *buf, exarg_T *eap); + static int au_find_group(char_u *name); + +! # define AUGROUP_DEFAULT -1 /* default autocmd group */ +! # define AUGROUP_ERROR -2 /* erroneous autocmd group */ +! # define AUGROUP_ALL -3 /* all autocmd groups */ +! +! #if defined(FEAT_CRYPT) || defined(FEAT_MBYTE) +! # define HAS_BW_FLAGS +! # define FIO_LATIN1 0x01 /* convert Latin1 */ +! # define FIO_UTF8 0x02 /* convert UTF-8 */ +! # define FIO_UCS2 0x04 /* convert UCS-2 */ +! # define FIO_UCS4 0x08 /* convert UCS-4 */ +! # define FIO_UTF16 0x10 /* convert UTF-16 */ +! # ifdef WIN3264 +! # define FIO_CODEPAGE 0x20 /* convert MS-Windows codepage */ +! # define FIO_PUT_CP(x) (((x) & 0xffff) << 16) /* put codepage in top word */ +! # define FIO_GET_CP(x) (((x)>>16) & 0xffff) /* get codepage from top word */ +! # endif +! # ifdef MACOS_CONVERT +! # define FIO_MACROMAN 0x20 /* convert MacRoman */ +! # endif +! # define FIO_ENDIAN_L 0x80 /* little endian */ +! # define FIO_ENCRYPTED 0x1000 /* encrypt written bytes */ +! # define FIO_NOCONVERT 0x2000 /* skip encoding conversion */ +! # define FIO_UCSBOM 0x4000 /* check for BOM at start of file */ +! # define FIO_ALL -1 /* allow all formats */ + #endif + + /* When converting, a read() or write() may leave some bytes to be converted + * for the next call. The value is guessed... */ +--- 45,73 ---- + static int apply_autocmds_exarg(event_T event, char_u *fname, char_u *fname_io, int force, buf_T *buf, exarg_T *eap); + static int au_find_group(char_u *name); + +! #define AUGROUP_DEFAULT -1 /* default autocmd group */ +! #define AUGROUP_ERROR -2 /* erroneous autocmd group */ +! #define AUGROUP_ALL -3 /* all autocmd groups */ +! +! #define HAS_BW_FLAGS +! #define FIO_LATIN1 0x01 /* convert Latin1 */ +! #define FIO_UTF8 0x02 /* convert UTF-8 */ +! #define FIO_UCS2 0x04 /* convert UCS-2 */ +! #define FIO_UCS4 0x08 /* convert UCS-4 */ +! #define FIO_UTF16 0x10 /* convert UTF-16 */ +! #ifdef WIN3264 +! # define FIO_CODEPAGE 0x20 /* convert MS-Windows codepage */ +! # define FIO_PUT_CP(x) (((x) & 0xffff) << 16) /* put codepage in top word */ +! # define FIO_GET_CP(x) (((x)>>16) & 0xffff) /* get codepage from top word */ + #endif ++ #ifdef MACOS_CONVERT ++ # define FIO_MACROMAN 0x20 /* convert MacRoman */ ++ #endif ++ #define FIO_ENDIAN_L 0x80 /* little endian */ ++ #define FIO_ENCRYPTED 0x1000 /* encrypt written bytes */ ++ #define FIO_NOCONVERT 0x2000 /* skip encoding conversion */ ++ #define FIO_UCSBOM 0x4000 /* check for BOM at start of file */ ++ #define FIO_ALL -1 /* allow all formats */ + + /* When converting, a read() or write() may leave some bytes to be converted + * for the next call. The value is guessed... */ +*************** +*** 95,101 **** + #ifdef FEAT_CRYPT + buf_T *bw_buffer; /* buffer being written */ + #endif +- #ifdef FEAT_MBYTE + char_u bw_rest[CONV_RESTLEN]; /* not converted bytes */ + int bw_restlen; /* nr of bytes in bw_rest[] */ + int bw_first; /* first write call */ +--- 91,96 ---- +*************** +*** 104,130 **** + int bw_conv_error; /* set for conversion error */ + linenr_T bw_conv_error_lnum; /* first line with error or zero */ + linenr_T bw_start_lnum; /* line number at start of buffer */ +! # ifdef USE_ICONV + iconv_t bw_iconv_fd; /* descriptor for iconv() or -1 */ +- # endif + #endif + }; + + static int buf_write_bytes(struct bw_info *ip); + +- #ifdef FEAT_MBYTE + static linenr_T readfile_linenr(linenr_T linecnt, char_u *p, char_u *endp); + static int ucs2bytes(unsigned c, char_u **pp, int flags); + static int need_conversion(char_u *fenc); + static int get_fio_flags(char_u *ptr); + static char_u *check_for_bom(char_u *p, long size, int *lenp, int flags); + static int make_bom(char_u *buf, char_u *name); +! # ifdef WIN3264 + static int get_win_fio_flags(char_u *ptr); +! # endif +! # ifdef MACOS_CONVERT + static int get_mac_fio_flags(char_u *ptr); +- # endif + #endif + static char *e_auchangedbuf = N_("E812: Autocommands changed buffer or buffer name"); + +--- 99,122 ---- + int bw_conv_error; /* set for conversion error */ + linenr_T bw_conv_error_lnum; /* first line with error or zero */ + linenr_T bw_start_lnum; /* line number at start of buffer */ +! #ifdef USE_ICONV + iconv_t bw_iconv_fd; /* descriptor for iconv() or -1 */ + #endif + }; + + static int buf_write_bytes(struct bw_info *ip); + + static linenr_T readfile_linenr(linenr_T linecnt, char_u *p, char_u *endp); + static int ucs2bytes(unsigned c, char_u **pp, int flags); + static int need_conversion(char_u *fenc); + static int get_fio_flags(char_u *ptr); + static char_u *check_for_bom(char_u *p, long size, int *lenp, int flags); + static int make_bom(char_u *buf, char_u *name); +! #ifdef WIN3264 + static int get_win_fio_flags(char_u *ptr); +! #endif +! #ifdef MACOS_CONVERT + static int get_mac_fio_flags(char_u *ptr); + #endif + static char *e_auchangedbuf = N_("E812: Autocommands changed buffer or buffer name"); + +*************** +*** 265,271 **** + int try_dos; + int try_unix; + int file_rewind = FALSE; +- #ifdef FEAT_MBYTE + int can_retry; + linenr_T conv_error = 0; /* line nr with conversion error */ + linenr_T illegal_byte = 0; /* line nr with illegal byte */ +--- 257,262 ---- +*************** +*** 281,299 **** + char_u *fenc_next = NULL; /* next item in 'fencs' or NULL */ + int advance_fenc = FALSE; + long real_size = 0; +! # ifdef USE_ICONV + iconv_t iconv_fd = (iconv_t)-1; /* descriptor for iconv() or -1 */ +! # ifdef FEAT_EVAL + int did_iconv = FALSE; /* TRUE when iconv() failed and trying + 'charconvert' next */ +- # endif + # endif + int converted = FALSE; /* TRUE if conversion done */ + int notconverted = FALSE; /* TRUE if conversion wanted but it + wasn't possible */ + char_u conv_rest[CONV_RESTLEN]; + int conv_restlen = 0; /* nr of bytes in conv_rest[] */ +- #endif + buf_T *old_curbuf; + char_u *old_b_ffname; + char_u *old_b_fname; +--- 272,289 ---- + char_u *fenc_next = NULL; /* next item in 'fencs' or NULL */ + int advance_fenc = FALSE; + long real_size = 0; +! #ifdef USE_ICONV + iconv_t iconv_fd = (iconv_t)-1; /* descriptor for iconv() or -1 */ +! # ifdef FEAT_EVAL + int did_iconv = FALSE; /* TRUE when iconv() failed and trying + 'charconvert' next */ + # endif ++ #endif + int converted = FALSE; /* TRUE if conversion done */ + int notconverted = FALSE; /* TRUE if conversion wanted but it + wasn't possible */ + char_u conv_rest[CONV_RESTLEN]; + int conv_restlen = 0; /* nr of bytes in conv_rest[] */ + buf_T *old_curbuf; + char_u *old_b_ffname; + char_u *old_b_fname; +*************** +*** 609,619 **** + * edited before and deleted. Get the old marks. */ + check_marks_read(); + #endif +- #ifdef FEAT_MBYTE + /* Set forced 'fileencoding'. */ + if (eap != NULL) + set_forced_fenc(eap); +- #endif + apply_autocmds_exarg(EVENT_BUFNEWFILE, sfname, sfname, + FALSE, curbuf, eap); + /* remember the current fileformat */ +--- 599,607 ---- +*************** +*** 658,667 **** + curbuf->b_p_eol = TRUE; + curbuf->b_start_eol = TRUE; + } +- #ifdef FEAT_MBYTE + curbuf->b_p_bomb = FALSE; + curbuf->b_start_bomb = FALSE; +- #endif + } + + /* Create a swap file now, so that other Vims are warned that we are +--- 646,653 ---- +*************** +*** 846,852 **** + */ + linecnt = curbuf->b_ml.ml_line_count; + +- #ifdef FEAT_MBYTE + /* "++bad=" argument. */ + if (eap != NULL && eap->bad_char != 0) + { +--- 832,837 ---- +*************** +*** 926,932 **** + fenc = next_fenc(&fenc_next); + fenc_alloced = TRUE; + } +- #endif + + /* + * Jump back here to retry reading the file in different ways. +--- 911,916 ---- +*************** +*** 966,979 **** + while (lnum > from) + ml_delete(lnum--, FALSE); + file_rewind = FALSE; +- #ifdef FEAT_MBYTE + if (set_options) + { + curbuf->b_p_bomb = FALSE; + curbuf->b_start_bomb = FALSE; + } + conv_error = 0; +- #endif + } + + /* +--- 950,961 ---- +*************** +*** 997,1011 **** + fileformat = EOL_UNKNOWN; /* detect from file */ + } + +! #ifdef FEAT_MBYTE +! # ifdef USE_ICONV + if (iconv_fd != (iconv_t)-1) + { + /* aborted conversion with iconv(), close the descriptor */ + iconv_close(iconv_fd); + iconv_fd = (iconv_t)-1; + } +! # endif + + if (advance_fenc) + { +--- 979,992 ---- + fileformat = EOL_UNKNOWN; /* detect from file */ + } + +! #ifdef USE_ICONV + if (iconv_fd != (iconv_t)-1) + { + /* aborted conversion with iconv(), close the descriptor */ + iconv_close(iconv_fd); + iconv_fd = (iconv_t)-1; + } +! #endif + + if (advance_fenc) + { +*************** +*** 1073,1121 **** + else if (enc_utf8 || STRCMP(p_enc, "latin1") == 0) + fio_flags = get_fio_flags(fenc); + +! # ifdef WIN3264 + /* + * Conversion from an MS-Windows codepage to UTF-8 or another codepage + * is handled with MultiByteToWideChar(). + */ + if (fio_flags == 0) + fio_flags = get_win_fio_flags(fenc); +! # endif + +! # ifdef MACOS_CONVERT + /* Conversion from Apple MacRoman to latin1 or UTF-8 */ + if (fio_flags == 0) + fio_flags = get_mac_fio_flags(fenc); +! # endif + +! # ifdef USE_ICONV + /* + * Try using iconv() if we can't convert internally. + */ + if (fio_flags == 0 +! # ifdef FEAT_EVAL + && !did_iconv +! # endif + ) + iconv_fd = (iconv_t)my_iconv_open( + enc_utf8 ? (char_u *)"utf-8" : p_enc, fenc); +! # endif + +! # ifdef FEAT_EVAL + /* + * Use the 'charconvert' expression when conversion is required + * and we can't do it internally or with iconv(). + */ + if (fio_flags == 0 && !read_stdin && !read_buffer && *p_ccv != NUL + && !read_fifo +! # ifdef USE_ICONV + && iconv_fd == (iconv_t)-1 +! # endif + ) + { +! # ifdef USE_ICONV + did_iconv = FALSE; +! # endif + /* Skip conversion when it's already done (retry for wrong + * "fileformat"). */ + if (tmpname == NULL) +--- 1054,1102 ---- + else if (enc_utf8 || STRCMP(p_enc, "latin1") == 0) + fio_flags = get_fio_flags(fenc); + +! #ifdef WIN3264 + /* + * Conversion from an MS-Windows codepage to UTF-8 or another codepage + * is handled with MultiByteToWideChar(). + */ + if (fio_flags == 0) + fio_flags = get_win_fio_flags(fenc); +! #endif + +! #ifdef MACOS_CONVERT + /* Conversion from Apple MacRoman to latin1 or UTF-8 */ + if (fio_flags == 0) + fio_flags = get_mac_fio_flags(fenc); +! #endif + +! #ifdef USE_ICONV + /* + * Try using iconv() if we can't convert internally. + */ + if (fio_flags == 0 +! # ifdef FEAT_EVAL + && !did_iconv +! # endif + ) + iconv_fd = (iconv_t)my_iconv_open( + enc_utf8 ? (char_u *)"utf-8" : p_enc, fenc); +! #endif + +! #ifdef FEAT_EVAL + /* + * Use the 'charconvert' expression when conversion is required + * and we can't do it internally or with iconv(). + */ + if (fio_flags == 0 && !read_stdin && !read_buffer && *p_ccv != NUL + && !read_fifo +! # ifdef USE_ICONV + && iconv_fd == (iconv_t)-1 +! # endif + ) + { +! # ifdef USE_ICONV + did_iconv = FALSE; +! # endif + /* Skip conversion when it's already done (retry for wrong + * "fileformat"). */ + if (tmpname == NULL) +*************** +*** 1137,1148 **** + } + } + else +! # endif + { + if (fio_flags == 0 +! # ifdef USE_ICONV + && iconv_fd == (iconv_t)-1 +! # endif + ) + { + /* Conversion wanted but we can't. +--- 1118,1129 ---- + } + } + else +! #endif + { + if (fio_flags == 0 +! #ifdef USE_ICONV + && iconv_fd == (iconv_t)-1 +! #endif + ) + { + /* Conversion wanted but we can't. +*************** +*** 1157,1163 **** + * another "fenc" value. It's FALSE when no other "fenc" to try, reading + * stdin or fixed at a specific encoding. */ + can_retry = (*fenc != NUL && !read_stdin && !read_fifo && !keep_dest_enc); +- #endif + + if (!skip_read) + { +--- 1138,1143 ---- +*************** +*** 1165,1173 **** + filesize = 0; + skip_count = lines_to_skip; + read_count = lines_to_read; +- #ifdef FEAT_MBYTE + conv_restlen = 0; +- #endif + #ifdef FEAT_PERSISTENT_UNDO + read_undo_file = (newfile && (flags & READ_KEEP_UNDO) == 0 + && curbuf->b_ffname != NULL +--- 1145,1151 ---- +*************** +*** 1253,1259 **** + ptr = buffer + linerest; + line_start = buffer; + +- #ifdef FEAT_MBYTE + /* May need room to translate into. + * For iconv() we don't really know the required space, use a + * factor ICONV_MULT. +--- 1231,1236 ---- +*************** +*** 1265,1275 **** + * ucs-4 to utf-8: 4 bytes become up to 6 bytes, size must be + * multiple of 4 */ + real_size = (int)size; +! # ifdef USE_ICONV + if (iconv_fd != (iconv_t)-1) + size = size / ICONV_MULT; + else +! # endif + if (fio_flags & FIO_LATIN1) + size = size / 2; + else if (fio_flags & (FIO_UCS2 | FIO_UTF16)) +--- 1242,1252 ---- + * ucs-4 to utf-8: 4 bytes become up to 6 bytes, size must be + * multiple of 4 */ + real_size = (int)size; +! #ifdef USE_ICONV + if (iconv_fd != (iconv_t)-1) + size = size / ICONV_MULT; + else +! #endif + if (fio_flags & FIO_LATIN1) + size = size / 2; + else if (fio_flags & (FIO_UCS2 | FIO_UTF16)) +*************** +*** 1278,1294 **** + size = (size * 2 / 3) & ~3; + else if (fio_flags == FIO_UCSBOM) + size = size / ICONV_MULT; /* worst case */ +! # ifdef WIN3264 + else if (fio_flags & FIO_CODEPAGE) + size = size / ICONV_MULT; /* also worst case */ +! # endif +! # ifdef MACOS_CONVERT + else if (fio_flags & FIO_MACROMAN) + size = size / ICONV_MULT; /* also worst case */ +- # endif + #endif + +- #ifdef FEAT_MBYTE + if (conv_restlen > 0) + { + /* Insert unconverted bytes from previous line. */ +--- 1255,1269 ---- + size = (size * 2 / 3) & ~3; + else if (fio_flags == FIO_UCSBOM) + size = size / ICONV_MULT; /* worst case */ +! #ifdef WIN3264 + else if (fio_flags & FIO_CODEPAGE) + size = size / ICONV_MULT; /* also worst case */ +! #endif +! #ifdef MACOS_CONVERT + else if (fio_flags & FIO_MACROMAN) + size = size / ICONV_MULT; /* also worst case */ + #endif + + if (conv_restlen > 0) + { + /* Insert unconverted bytes from previous line. */ +*************** +*** 1296,1302 **** + ptr += conv_restlen; + size -= conv_restlen; + } +- #endif + + if (read_buffer) + { +--- 1271,1276 ---- +*************** +*** 1445,1451 **** + { + if (size < 0) /* read error */ + error = TRUE; +- #ifdef FEAT_MBYTE + else if (conv_restlen > 0) + { + /* +--- 1419,1424 ---- +*************** +*** 1455,1463 **** + + /* When we did a conversion report an error. */ + if (fio_flags != 0 +! # ifdef USE_ICONV + || iconv_fd != (iconv_t)-1 +! # endif + ) + { + if (can_retry) +--- 1428,1436 ---- + + /* When we did a conversion report an error. */ + if (fio_flags != 0 +! #ifdef USE_ICONV + || iconv_fd != (iconv_t)-1 +! #endif + ) + { + if (can_retry) +*************** +*** 1482,1490 **** + * leave the UTF8 checking code to do it, as it + * works slightly differently. */ + if (bad_char_behavior != BAD_KEEP && (fio_flags != 0 +! # ifdef USE_ICONV + || iconv_fd != (iconv_t)-1 +! # endif + )) + { + while (conv_restlen > 0) +--- 1455,1463 ---- + * leave the UTF8 checking code to do it, as it + * works slightly differently. */ + if (bad_char_behavior != BAD_KEEP && (fio_flags != 0 +! #ifdef USE_ICONV + || iconv_fd != (iconv_t)-1 +! #endif + )) + { + while (conv_restlen > 0) +*************** +*** 1494,1514 **** + } + } + fio_flags = 0; /* don't convert this */ +! # ifdef USE_ICONV + if (iconv_fd != (iconv_t)-1) + { + iconv_close(iconv_fd); + iconv_fd = (iconv_t)-1; + } +! # endif + } + } +- #endif + } + } + skip_read = FALSE; + +- #ifdef FEAT_MBYTE + /* + * At start of file (or after crypt magic number): Check for BOM. + * Also check for a BOM for other Unicode encodings, but not after +--- 1467,1485 ---- + } + } + fio_flags = 0; /* don't convert this */ +! #ifdef USE_ICONV + if (iconv_fd != (iconv_t)-1) + { + iconv_close(iconv_fd); + iconv_fd = (iconv_t)-1; + } +! #endif + } + } + } + } + skip_read = FALSE; + + /* + * At start of file (or after crypt magic number): Check for BOM. + * Also check for a BOM for other Unicode encodings, but not after +*************** +*** 1516,1526 **** + * found. + */ + if ((filesize == 0 +! # ifdef FEAT_CRYPT + || (cryptkey != NULL + && filesize == crypt_get_header_len( + crypt_get_method_nr(curbuf))) +! # endif + ) + && (fio_flags == FIO_UCSBOM + || (!curbuf->b_p_bomb +--- 1487,1497 ---- + * found. + */ + if ((filesize == 0 +! #ifdef FEAT_CRYPT + || (cryptkey != NULL + && filesize == crypt_get_header_len( + crypt_get_method_nr(curbuf))) +! #endif + ) + && (fio_flags == FIO_UCSBOM + || (!curbuf->b_p_bomb +*************** +*** 1574,1589 **** + ptr -= conv_restlen; + size += conv_restlen; + conv_restlen = 0; +- #endif + /* + * Break here for a read error or end-of-file. + */ + if (size <= 0) + break; + +- #ifdef FEAT_MBYTE + +! # ifdef USE_ICONV + if (iconv_fd != (iconv_t)-1) + { + /* +--- 1545,1558 ---- + ptr -= conv_restlen; + size += conv_restlen; + conv_restlen = 0; + /* + * Break here for a read error or end-of-file. + */ + if (size <= 0) + break; + + +! #ifdef USE_ICONV + if (iconv_fd != (iconv_t)-1) + { + /* +*************** +*** 1645,1653 **** + mch_memmove(line_start, buffer, (size_t)linerest); + size = (long)((char_u *)top - ptr); + } +! # endif + +! # ifdef WIN3264 + if (fio_flags & FIO_CODEPAGE) + { + char_u *src, *dst; +--- 1614,1622 ---- + mch_memmove(line_start, buffer, (size_t)linerest); + size = (long)((char_u *)top - ptr); + } +! #endif + +! #ifdef WIN3264 + if (fio_flags & FIO_CODEPAGE) + { + char_u *src, *dst; +*************** +*** 1813,1820 **** + size = (long)(dst - ptr); + } + else +! # endif +! # ifdef MACOS_CONVERT + if (fio_flags & FIO_MACROMAN) + { + /* +--- 1782,1789 ---- + size = (long)(dst - ptr); + } + else +! #endif +! #ifdef MACOS_CONVERT + if (fio_flags & FIO_MACROMAN) + { + /* +*************** +*** 1825,1831 **** + goto rewind_retry; + } + else +! # endif + if (fio_flags != 0) + { + int u8c; +--- 1794,1800 ---- + goto rewind_retry; + } + else +! #endif + if (fio_flags != 0) + { + int u8c; +*************** +*** 2089,2099 **** + * file is more likely than a conversion error. */ + if (can_retry && !incomplete_tail) + break; +! # ifdef USE_ICONV + /* When we did a conversion report an error. */ + if (iconv_fd != (iconv_t)-1 && conv_error == 0) + conv_error = readfile_linenr(linecnt, ptr, p); +! # endif + /* Remember the first linenr with an illegal byte */ + if (conv_error == 0 && illegal_byte == 0) + illegal_byte = readfile_linenr(linecnt, ptr, p); +--- 2058,2068 ---- + * file is more likely than a conversion error. */ + if (can_retry && !incomplete_tail) + break; +! #ifdef USE_ICONV + /* When we did a conversion report an error. */ + if (iconv_fd != (iconv_t)-1 && conv_error == 0) + conv_error = readfile_linenr(linecnt, ptr, p); +! #endif + /* Remember the first linenr with an illegal byte */ + if (conv_error == 0 && illegal_byte == 0) + illegal_byte = readfile_linenr(linecnt, ptr, p); +*************** +*** 2117,2135 **** + /* Detected a UTF-8 error. */ + rewind_retry: + /* Retry reading with another conversion. */ +! # if defined(FEAT_EVAL) && defined(USE_ICONV) + if (*p_ccv != NUL && iconv_fd != (iconv_t)-1) + /* iconv() failed, try 'charconvert' */ + did_iconv = TRUE; + else +! # endif + /* use next item from 'fileencodings' */ + advance_fenc = TRUE; + file_rewind = TRUE; + goto retry; + } + } +- #endif + + /* count the number of characters (after conversion!) */ + filesize += size; +--- 2086,2103 ---- + /* Detected a UTF-8 error. */ + rewind_retry: + /* Retry reading with another conversion. */ +! #if defined(FEAT_EVAL) && defined(USE_ICONV) + if (*p_ccv != NUL && iconv_fd != (iconv_t)-1) + /* iconv() failed, try 'charconvert' */ + did_iconv = TRUE; + else +! #endif + /* use next item from 'fileencodings' */ + advance_fenc = TRUE; + file_rewind = TRUE; + goto retry; + } + } + + /* count the number of characters (after conversion!) */ + filesize += size; +*************** +*** 2371,2377 **** + * encryption was used. */ + #endif + +- #ifdef FEAT_MBYTE + /* If editing a new file: set 'fenc' for the current buffer. + * Also for ":read ++edit file". */ + if (set_options) +--- 2339,2344 ---- +*************** +*** 2379,2391 **** + OPT_FREE|OPT_LOCAL, 0); + if (fenc_alloced) + vim_free(fenc); +! # ifdef USE_ICONV + if (iconv_fd != (iconv_t)-1) + { + iconv_close(iconv_fd); + iconv_fd = (iconv_t)-1; + } +- # endif + #endif + + if (!read_buffer && !read_stdin) +--- 2346,2357 ---- + OPT_FREE|OPT_LOCAL, 0); + if (fenc_alloced) + vim_free(fenc); +! #ifdef USE_ICONV + if (iconv_fd != (iconv_t)-1) + { + iconv_close(iconv_fd); + iconv_fd = (iconv_t)-1; + } + #endif + + if (!read_buffer && !read_stdin) +*************** +*** 2409,2421 **** + } + #endif + +- #ifdef FEAT_MBYTE + if (tmpname != NULL) + { + mch_remove(tmpname); /* delete converted file */ + vim_free(tmpname); + } +- #endif + --no_wait_return; /* may wait for return now */ + + /* +--- 2375,2385 ---- +*************** +*** 2528,2534 **** + STRCAT(IObuff, _("[long lines split]")); + c = TRUE; + } +- #ifdef FEAT_MBYTE + if (notconverted) + { + STRCAT(IObuff, _("[NOT converted]")); +--- 2492,2497 ---- +*************** +*** 2539,2545 **** + STRCAT(IObuff, _("[converted]")); + c = TRUE; + } +- #endif + #ifdef FEAT_CRYPT + if (cryptkey != NULL) + { +--- 2502,2507 ---- +*************** +*** 2547,2553 **** + c = TRUE; + } + #endif +- #ifdef FEAT_MBYTE + if (conv_error != 0) + { + sprintf((char *)IObuff + STRLEN(IObuff), +--- 2509,2514 ---- +*************** +*** 2560,2568 **** + _("[ILLEGAL BYTE in line %ld]"), (long)illegal_byte); + c = TRUE; + } +! else +! #endif +! if (error) + { + STRCAT(IObuff, _("[READ ERRORS]")); + c = TRUE; +--- 2521,2527 ---- + _("[ILLEGAL BYTE in line %ld]"), (long)illegal_byte); + c = TRUE; + } +! else if (error) + { + STRCAT(IObuff, _("[READ ERRORS]")); + c = TRUE; +*************** +*** 2601,2611 **** + + /* with errors writing the file requires ":w!" */ + if (newfile && (error +- #ifdef FEAT_MBYTE + || conv_error != 0 +! || (illegal_byte > 0 && bad_char_behavior != BAD_KEEP) +! #endif +! )) + curbuf->b_p_ro = TRUE; + + u_clearline(); /* cannot use "U" command after adding lines */ +--- 2560,2567 ---- + + /* with errors writing the file requires ":w!" */ + if (newfile && (error + || conv_error != 0 +! || (illegal_byte > 0 && bad_char_behavior != BAD_KEEP))) + curbuf->b_p_ro = TRUE; + + u_clearline(); /* cannot use "U" command after adding lines */ +*************** +*** 2745,2752 **** + } + #endif + +- #ifdef FEAT_MBYTE +- + /* + * From the current line count and characters read after that, estimate the + * line number where we are now. +--- 2701,2706 ---- +*************** +*** 2767,2773 **** + ++lnum; + return lnum; + } +- #endif + + /* + * Fill "*eap" to force the 'fileencoding', 'fileformat' and 'binary to be +--- 2721,2726 ---- +*************** +*** 2777,2797 **** + int + prep_exarg(exarg_T *eap, buf_T *buf) + { +! eap->cmd = alloc(15 +! #ifdef FEAT_MBYTE +! + (unsigned)STRLEN(buf->b_p_fenc) +! #endif +! ); + if (eap->cmd == NULL) + return FAIL; + +- #ifdef FEAT_MBYTE + sprintf((char *)eap->cmd, "e ++enc=%s", buf->b_p_fenc); + eap->force_enc = 8; + eap->bad_char = buf->b_bad_char; +- #else +- sprintf((char *)eap->cmd, "e"); +- #endif + eap->force_ff = *buf->b_p_ff; + + eap->force_bin = buf->b_p_bin ? FORCE_BIN : FORCE_NOBIN; +--- 2730,2742 ---- + int + prep_exarg(exarg_T *eap, buf_T *buf) + { +! eap->cmd = alloc(15 + (unsigned)STRLEN(buf->b_p_fenc)); + if (eap->cmd == NULL) + return FAIL; + + sprintf((char *)eap->cmd, "e ++enc=%s", buf->b_p_fenc); + eap->force_enc = 8; + eap->bad_char = buf->b_bad_char; + eap->force_ff = *buf->b_p_ff; + + eap->force_bin = buf->b_p_bin ? FORCE_BIN : FORCE_NOBIN; +*************** +*** 2825,2831 **** + } + } + +- #if defined(FEAT_MBYTE) || defined(PROTO) + /* + * Set forced 'fileencoding'. + */ +--- 2770,2775 ---- +*************** +*** 2886,2892 **** + return r; + } + +! # ifdef FEAT_EVAL + /* + * Convert a file with the 'charconvert' expression. + * This closes the file which is to be read, converts it and opens the +--- 2830,2836 ---- + return r; + } + +! #ifdef FEAT_EVAL + /* + * Convert a file with the 'charconvert' expression. + * This closes the file which is to be read, converts it and opens the +*************** +*** 2937,2946 **** + + return tmpname; + } +- # endif +- + #endif + + #ifdef FEAT_VIMINFO + /* + * Read marks for the current buffer from the viminfo file, when we support +--- 2881,2889 ---- + + return tmpname; + } + #endif + ++ + #ifdef FEAT_VIMINFO + /* + * Read marks for the current buffer from the viminfo file, when we support +*************** +*** 3176,3187 **** + int fileformat; + int write_bin; + struct bw_info write_info; /* info for buf_write_bytes() */ +- #ifdef FEAT_MBYTE + int converted = FALSE; + int notconverted = FALSE; + char_u *fenc; /* effective 'fileencoding' */ + char_u *fenc_tofree = NULL; /* allocated "fenc" */ +- #endif + #ifdef HAS_BW_FLAGS + int wb_flags = 0; + #endif +--- 3119,3128 ---- +*************** +*** 3219,3233 **** + return FAIL; + } + +- #ifdef FEAT_MBYTE + /* must init bw_conv_buf and bw_iconv_fd before jumping to "fail" */ + write_info.bw_conv_buf = NULL; + write_info.bw_conv_error = FALSE; + write_info.bw_conv_error_lnum = 0; + write_info.bw_restlen = 0; +! # ifdef USE_ICONV + write_info.bw_iconv_fd = (iconv_t)-1; +- # endif + #endif + #ifdef FEAT_CRYPT + write_info.bw_buffer = buf; +--- 3160,3172 ---- + return FAIL; + } + + /* must init bw_conv_buf and bw_iconv_fd before jumping to "fail" */ + write_info.bw_conv_buf = NULL; + write_info.bw_conv_error = FALSE; + write_info.bw_conv_error_lnum = 0; + write_info.bw_restlen = 0; +! #ifdef USE_ICONV + write_info.bw_iconv_fd = (iconv_t)-1; + #endif + #ifdef FEAT_CRYPT + write_info.bw_buffer = buf; +*************** +*** 4227,4233 **** + * multi-byte conversion. */ + wfname = fname; + +- #ifdef FEAT_MBYTE + /* Check for forced 'fileencoding' from "++opt=val" argument. */ + if (eap != NULL && eap->force_enc != 0) + { +--- 4166,4171 ---- +*************** +*** 4265,4271 **** + } + } + +! # ifdef WIN3264 + if (converted && wb_flags == 0 && (wb_flags = get_win_fio_flags(fenc)) != 0) + { + /* Convert UTF-8 -> UCS-2 and UCS-2 -> DBCS. Worst-case * 4: */ +--- 4203,4209 ---- + } + } + +! #ifdef WIN3264 + if (converted && wb_flags == 0 && (wb_flags = get_win_fio_flags(fenc)) != 0) + { + /* Convert UTF-8 -> UCS-2 and UCS-2 -> DBCS. Worst-case * 4: */ +*************** +*** 4275,4283 **** + if (write_info.bw_conv_buf == NULL) + end = 0; + } +! # endif + +! # ifdef MACOS_CONVERT + if (converted && wb_flags == 0 && (wb_flags = get_mac_fio_flags(fenc)) != 0) + { + write_info.bw_conv_buflen = bufsize * 3; +--- 4213,4221 ---- + if (write_info.bw_conv_buf == NULL) + end = 0; + } +! #endif + +! #ifdef MACOS_CONVERT + if (converted && wb_flags == 0 && (wb_flags = get_mac_fio_flags(fenc)) != 0) + { + write_info.bw_conv_buflen = bufsize * 3; +*************** +*** 4286,4297 **** + if (write_info.bw_conv_buf == NULL) + end = 0; + } +! # endif + +! # if defined(FEAT_EVAL) || defined(USE_ICONV) + if (converted && wb_flags == 0) + { +! # ifdef USE_ICONV + /* + * Use iconv() conversion when conversion is needed and it's not done + * internally. +--- 4224,4235 ---- + if (write_info.bw_conv_buf == NULL) + end = 0; + } +! #endif + +! #if defined(FEAT_EVAL) || defined(USE_ICONV) + if (converted && wb_flags == 0) + { +! # ifdef USE_ICONV + /* + * Use iconv() conversion when conversion is needed and it's not done + * internally. +*************** +*** 4308,4319 **** + end = 0; + write_info.bw_first = TRUE; + } +! # ifdef FEAT_EVAL + else +- # endif + # endif + +! # ifdef FEAT_EVAL + /* + * When the file needs to be converted with 'charconvert' after + * writing, write to a temp file instead and let the conversion +--- 4246,4257 ---- + end = 0; + write_info.bw_first = TRUE; + } +! # ifdef FEAT_EVAL + else + # endif ++ # endif + +! # ifdef FEAT_EVAL + /* + * When the file needs to be converted with 'charconvert' after + * writing, write to a temp file instead and let the conversion +*************** +*** 4328,4343 **** + goto restore_backup; + } + } +- # endif +- } + # endif + if (converted && wb_flags == 0 +! # ifdef USE_ICONV + && write_info.bw_iconv_fd == (iconv_t)-1 +! # endif +! # ifdef FEAT_EVAL + && wfname == fname +! # endif + ) + { + if (!forceit) +--- 4266,4281 ---- + goto restore_backup; + } + } + # endif ++ } ++ #endif + if (converted && wb_flags == 0 +! #ifdef USE_ICONV + && write_info.bw_iconv_fd == (iconv_t)-1 +! # endif +! # ifdef FEAT_EVAL + && wfname == fname +! # endif + ) + { + if (!forceit) +*************** +*** 4347,4353 **** + } + notconverted = TRUE; + } +- #endif + + /* + * If conversion is taking place, we may first pretend to write and check +--- 4285,4290 ---- +*************** +*** 4362,4370 **** + * - we make a backup file, that can be restored in case of conversion + * failure. + */ +- #ifdef FEAT_MBYTE + if (!converted || dobackup) +- #endif + checking_conversion = FALSE; + + if (checking_conversion) +--- 4299,4305 ---- +*************** +*** 4477,4486 **** + end = 0; + } + +- #ifdef FEAT_MBYTE + if (wfname != fname) + vim_free(wfname); +- #endif + goto fail; + } + write_info.bw_fd = fd; +--- 4412,4419 ---- +*************** +*** 4563,4569 **** + else + write_bin = buf->b_p_bin; + +- #ifdef FEAT_MBYTE + /* + * The BOM is written just after the encryption magic number. + * Skip it when appending and the file already existed, the BOM only +--- 4496,4501 ---- +*************** +*** 4583,4589 **** + } + } + write_info.bw_start_lnum = start; +- #endif + + #ifdef FEAT_PERSISTENT_UNDO + write_undo_file = (buf->b_p_udf +--- 4515,4520 ---- +*************** +*** 4635,4643 **** + nchars += bufsize; + s = buffer; + len = 0; +- #ifdef FEAT_MBYTE + write_info.bw_start_lnum = lnum; +- #endif + } + /* write failed or last line has no EOL: stop here */ + if (end == 0 +--- 4566,4572 ---- +*************** +*** 4841,4847 **** + } + #endif + +! #if defined(FEAT_MBYTE) && defined(FEAT_EVAL) + if (wfname != fname) + { + /* +--- 4770,4776 ---- + } + #endif + +! #if defined(FEAT_EVAL) + if (wfname != fname) + { + /* +*************** +*** 4870,4876 **** + */ + if (errmsg == NULL) + { +- #ifdef FEAT_MBYTE + if (write_info.bw_conv_error) + { + if (write_info.bw_conv_error_lnum == 0) +--- 4799,4804 ---- +*************** +*** 4883,4894 **** + (long)write_info.bw_conv_error_lnum); + } + } + else +! #endif +! if (got_int) +! errmsg = (char_u *)_(e_interr); +! else +! errmsg = (char_u *)_("E514: write error (file system full?)"); + } + + /* +--- 4811,4820 ---- + (long)write_info.bw_conv_error_lnum); + } + } ++ else if (got_int) ++ errmsg = (char_u *)_(e_interr); + else +! errmsg = (char_u *)_("E514: write error (file system full?)"); + } + + /* +*************** +*** 4953,4959 **** + { + msg_add_fname(buf, fname); /* put fname in IObuff with quotes */ + c = FALSE; +- #ifdef FEAT_MBYTE + if (write_info.bw_conv_error) + { + STRCAT(IObuff, _(" CONVERSION ERROR")); +--- 4879,4884 ---- +*************** +*** 4972,4978 **** + STRCAT(IObuff, _("[converted]")); + c = TRUE; + } +- #endif + if (device) + { + STRCAT(IObuff, _("[Device]")); +--- 4897,4902 ---- +*************** +*** 5013,5023 **** + /* When written everything correctly: reset 'modified'. Unless not + * writing to the original file and '+' is not in 'cpoptions'. */ + if (reset_changed && whole && !append +- #ifdef FEAT_MBYTE + && !write_info.bw_conv_error +! #endif +! && (overwriting || vim_strchr(p_cpo, CPO_PLUS) != NULL) +! ) + { + unchanged(buf, TRUE); + /* b:changedtick is always incremented in unchanged() but that +--- 4937,4944 ---- + /* When written everything correctly: reset 'modified'. Unless not + * writing to the original file and '+' is not in 'cpoptions'. */ + if (reset_changed && whole && !append + && !write_info.bw_conv_error +! && (overwriting || vim_strchr(p_cpo, CPO_PLUS) != NULL)) + { + unchanged(buf, TRUE); + /* b:changedtick is always incremented in unchanged() but that +*************** +*** 5113,5128 **** + vim_free(backup); + if (buffer != smallbuf) + vim_free(buffer); +- #ifdef FEAT_MBYTE + vim_free(fenc_tofree); + vim_free(write_info.bw_conv_buf); +! # ifdef USE_ICONV + if (write_info.bw_iconv_fd != (iconv_t)-1) + { + iconv_close(write_info.bw_iconv_fd); + write_info.bw_iconv_fd = (iconv_t)-1; + } +- # endif + #endif + #ifdef HAVE_ACL + mch_free_acl(acl); +--- 5034,5047 ---- + vim_free(backup); + if (buffer != smallbuf) + vim_free(buffer); + vim_free(fenc_tofree); + vim_free(write_info.bw_conv_buf); +! #ifdef USE_ICONV + if (write_info.bw_iconv_fd != (iconv_t)-1) + { + iconv_close(write_info.bw_iconv_fd); + write_info.bw_iconv_fd = (iconv_t)-1; + } + #endif + #ifdef HAVE_ACL + mch_free_acl(acl); +*************** +*** 5411,5417 **** + int flags = ip->bw_flags; /* extra flags */ + #endif + +- #ifdef FEAT_MBYTE + /* + * Skip conversion when writing the crypt magic number or the BOM. + */ +--- 5330,5335 ---- +*************** +*** 5521,5527 **** + } + } + +! # ifdef WIN3264 + else if (flags & FIO_CODEPAGE) + { + /* +--- 5439,5445 ---- + } + } + +! #ifdef WIN3264 + else if (flags & FIO_CODEPAGE) + { + /* +*************** +*** 5617,5623 **** + + fromlen = to - ip->bw_conv_buf; + buf = to; +! # ifdef CP_UTF8 /* VC 4.1 doesn't define CP_UTF8 */ + if (FIO_GET_CP(flags) == CP_UTF8) + { + /* Convert from UCS-2 to UTF-8, using the remainder of the +--- 5535,5541 ---- + + fromlen = to - ip->bw_conv_buf; + buf = to; +! # ifdef CP_UTF8 /* VC 4.1 doesn't define CP_UTF8 */ + if (FIO_GET_CP(flags) == CP_UTF8) + { + /* Convert from UCS-2 to UTF-8, using the remainder of the +*************** +*** 5636,5642 **** + len = (int)(to - buf); + } + else +! #endif + { + /* Convert from UCS-2 to the codepage, using the remainder of + * the conversion buffer. If the conversion uses the default +--- 5554,5560 ---- + len = (int)(to - buf); + } + else +! # endif + { + /* Convert from UCS-2 to the codepage, using the remainder of + * the conversion buffer. If the conversion uses the default +*************** +*** 5653,5661 **** + } + } + } +! # endif + +! # ifdef MACOS_CONVERT + else if (flags & FIO_MACROMAN) + { + /* +--- 5571,5579 ---- + } + } + } +! #endif + +! #ifdef MACOS_CONVERT + else if (flags & FIO_MACROMAN) + { + /* +*************** +*** 5689,5697 **** + } + buf = ip->bw_conv_buf; + } +! # endif + +! # ifdef USE_ICONV + if (ip->bw_iconv_fd != (iconv_t)-1) + { + const char *from; +--- 5607,5615 ---- + } + buf = ip->bw_conv_buf; + } +! #endif + +! #ifdef USE_ICONV + if (ip->bw_iconv_fd != (iconv_t)-1) + { + const char *from; +*************** +*** 5759,5767 **** + buf = ip->bw_conv_buf; + len = (int)((char_u *)to - ip->bw_conv_buf); + } +! # endif + } +- #endif /* FEAT_MBYTE */ + + if (ip->bw_fd < 0) + /* Only checking conversion, which is OK if we get here. */ +--- 5677,5684 ---- + buf = ip->bw_conv_buf; + len = (int)((char_u *)to - ip->bw_conv_buf); + } +! #endif + } + + if (ip->bw_fd < 0) + /* Only checking conversion, which is OK if we get here. */ +*************** +*** 5798,5804 **** + return (wlen < len) ? FAIL : OK; + } + +- #ifdef FEAT_MBYTE + /* + * Convert a Unicode character to bytes. + * Return TRUE for an error, FALSE when it's OK. +--- 5715,5720 ---- +*************** +*** 6089,6095 **** + (void)ucs2bytes(0xfeff, &p, flags); + return (int)(p - buf); + } +- #endif + + /* + * Try to find a shortname by comparing the fullname with the current +--- 6005,6010 ---- +*************** +*** 7639,7651 **** + if (path_with_url(fname)) + return; + for (p = fname; *p != NUL; ++p) +- # ifdef FEAT_MBYTE + /* The Big5 encoding can have '\' in the trail byte. */ + if (enc_dbcs != 0 && (*mb_ptr2len)(p) > 1) + ++p; +! else +! # endif +! if (*p == '\\') + *p = '/'; + } + #endif +--- 7554,7563 ---- + if (path_with_url(fname)) + return; + for (p = fname; *p != NUL; ++p) + /* The Big5 encoding can have '\' in the trail byte. */ + if (enc_dbcs != 0 && (*mb_ptr2len)(p) > 1) + ++p; +! else if (*p == '\\') + *p = '/'; + } + #endif +*************** +*** 10340,10352 **** + #endif + default: + size++; +- # ifdef FEAT_MBYTE + if (enc_dbcs != 0 && (*mb_ptr2len)(p) > 1) + { + ++p; + ++size; + } +- # endif + break; + } + } +--- 10252,10262 ---- +*************** +*** 10479,10490 **** + reg_pat[i++] = ','; + break; + default: +- # ifdef FEAT_MBYTE + if (enc_dbcs != 0 && (*mb_ptr2len)(p) > 1) + reg_pat[i++] = *p++; +! else +! # endif +! if (allow_dirs != NULL && vim_ispathsep(*p)) + *allow_dirs = TRUE; + reg_pat[i++] = *p; + break; +--- 10389,10397 ---- + reg_pat[i++] = ','; + break; + default: + if (enc_dbcs != 0 && (*mb_ptr2len)(p) > 1) + reg_pat[i++] = *p++; +! else if (allow_dirs != NULL && vim_ispathsep(*p)) + *allow_dirs = TRUE; + reg_pat[i++] = *p; + break; +*** ../vim-8.1.0804/src/fold.c 2019-01-13 23:38:33.391773303 +0100 +--- src/fold.c 2019-01-24 14:49:06.965289375 +0100 +*************** +*** 1057,1067 **** + end->col = (colnr_T)STRLEN(ptr); + if (end->col > 0 && *p_sel == 'o') + --end->col; +- #ifdef FEAT_MBYTE + /* prevent cursor from moving on the trail byte */ + if (has_mbyte) + mb_adjust_cursor(); +- #endif + } + } + +--- 1057,1065 ---- +*************** +*** 1946,1952 **** + * replace a TAB with a space. */ + for (p = text; *p != NUL; ++p) + { +- # ifdef FEAT_MBYTE + int len; + + if (has_mbyte && (len = (*mb_ptr2len)(p)) > 1) +--- 1944,1949 ---- +*************** +*** 1956,1962 **** + p += len - 1; + } + else +- # endif + if (*p == TAB) + *p = ' '; + else if (ptr2cells(p) > 1) +--- 1953,1958 ---- +*** ../vim-8.1.0804/src/gui.c 2019-01-19 17:43:03.413449172 +0100 +--- src/gui.c 2019-01-24 14:52:09.860035462 +0100 +*************** +*** 13,19 **** + /* Structure containing all the GUI information */ + gui_T gui; + +! #if defined(FEAT_MBYTE) && !defined(FEAT_GUI_GTK) + static void set_guifontwide(char_u *font_name); + #endif + static void gui_check_pos(void); +--- 13,19 ---- + /* Structure containing all the GUI information */ + gui_T gui; + +! #if !defined(FEAT_GUI_GTK) + static void set_guifontwide(char_u *font_name); + #endif + static void gui_check_pos(void); +*************** +*** 397,409 **** + gui.fontset = NOFONTSET; + # endif + #endif +- #ifdef FEAT_MBYTE + gui.wide_font = NOFONT; +! # ifndef FEAT_GUI_GTK + gui.wide_bold_font = NOFONT; + gui.wide_ital_font = NOFONT; + gui.wide_boldital_font = NOFONT; +- # endif + #endif + + #ifdef FEAT_MENU +--- 397,407 ---- + gui.fontset = NOFONTSET; + # endif + #endif + gui.wide_font = NOFONT; +! #ifndef FEAT_GUI_GTK + gui.wide_bold_font = NOFONT; + gui.wide_ital_font = NOFONT; + gui.wide_boldital_font = NOFONT; + #endif + + #ifdef FEAT_MENU +*************** +*** 652,661 **** + emsg(_("E665: Cannot start GUI, no valid font found")); + goto error2; + } +- #ifdef FEAT_MBYTE + if (gui_get_wide_font() == FAIL) + emsg(_("E231: 'guifontwide' invalid")); +- #endif + + gui.num_cols = Columns; + gui.num_rows = Rows; +--- 650,657 ---- +*************** +*** 874,880 **** + * longer be used! */ + if (gui_mch_init_font(font_name, FALSE) == OK) + { +! #if defined(FEAT_MBYTE) && !defined(FEAT_GUI_GTK) + /* If it's a Unicode font, try setting 'guifontwide' to a + * similar double-width font. */ + if ((p_guifontwide == NULL || *p_guifontwide == NUL) +--- 870,876 ---- + * longer be used! */ + if (gui_mch_init_font(font_name, FALSE) == OK) + { +! #if !defined(FEAT_GUI_GTK) + /* If it's a Unicode font, try setting 'guifontwide' to a + * similar double-width font. */ + if ((p_guifontwide == NULL || *p_guifontwide == NUL) +*************** +*** 916,923 **** + return ret; + } + +! #if defined(FEAT_MBYTE) || defined(PROTO) +! # ifndef FEAT_GUI_GTK + /* + * Try setting 'guifontwide' to a font twice as wide as "name". + */ +--- 912,918 ---- + return ret; + } + +! #ifndef FEAT_GUI_GTK + /* + * Try setting 'guifontwide' to a font twice as wide as "name". + */ +*************** +*** 964,970 **** + } + } + } +! # endif /* !FEAT_GUI_GTK */ + + /* + * Get the font for 'guifontwide'. +--- 959,965 ---- + } + } + } +! #endif /* !FEAT_GUI_GTK */ + + /* + * Get the font for 'guifontwide'. +*************** +*** 995,1001 **** + } + + gui_mch_free_font(gui.wide_font); +! # ifdef FEAT_GUI_GTK + /* Avoid unnecessary overhead if 'guifontwide' is equal to 'guifont'. */ + if (font != NOFONT && gui.norm_font != NOFONT + && pango_font_description_equal(font, gui.norm_font)) +--- 990,996 ---- + } + + gui_mch_free_font(gui.wide_font); +! #ifdef FEAT_GUI_GTK + /* Avoid unnecessary overhead if 'guifontwide' is equal to 'guifont'. */ + if (font != NOFONT && gui.norm_font != NOFONT + && pango_font_description_equal(font, gui.norm_font)) +*************** +*** 1004,1022 **** + gui_mch_free_font(font); + } + else +! # endif + gui.wide_font = font; +! # ifdef FEAT_GUI_MSWIN + gui_mch_wide_font_changed(); +! # else + /* + * TODO: setup wide_bold_font, wide_ital_font and wide_boldital_font to + * support those fonts for 'guifontwide'. + */ +! # endif + return OK; + } +- #endif + + void + gui_set_cursor(int row, int col) +--- 999,1016 ---- + gui_mch_free_font(font); + } + else +! #endif + gui.wide_font = font; +! #ifdef FEAT_GUI_MSWIN + gui_mch_wide_font_changed(); +! #else + /* + * TODO: setup wide_bold_font, wide_ital_font and wide_boldital_font to + * support those fonts for 'guifontwide'. + */ +! #endif + return OK; + } + + void + gui_set_cursor(int row, int col) +*************** +*** 1258,1264 **** + } + else + { +! #if defined(FEAT_MBYTE) && defined(FEAT_RIGHTLEFT) + int col_off = FALSE; + #endif + /* +--- 1252,1258 ---- + } + else + { +! #if defined(FEAT_RIGHTLEFT) + int col_off = FALSE; + #endif + /* +*************** +*** 1275,1288 **** + cur_height = (gui.char_height * shape->percentage + 99) / 100; + cur_width = gui.char_width; + } +- #ifdef FEAT_MBYTE + if (has_mbyte && (*mb_off2cells)(LineOffset[gui.row] + gui.col, + LineOffset[gui.row] + screen_Columns) > 1) + { + /* Double wide character. */ + if (shape->shape != SHAPE_VER) + cur_width += gui.char_width; +! # ifdef FEAT_RIGHTLEFT + if (CURSOR_BAR_RIGHT) + { + /* gui.col points to the left halve of the character but +--- 1269,1281 ---- + cur_height = (gui.char_height * shape->percentage + 99) / 100; + cur_width = gui.char_width; + } + if (has_mbyte && (*mb_off2cells)(LineOffset[gui.row] + gui.col, + LineOffset[gui.row] + screen_Columns) > 1) + { + /* Double wide character. */ + if (shape->shape != SHAPE_VER) + cur_width += gui.char_width; +! #ifdef FEAT_RIGHTLEFT + if (CURSOR_BAR_RIGHT) + { + /* gui.col points to the left halve of the character but +*************** +*** 1292,1302 **** + col_off = TRUE; + ++gui.col; + } +- # endif +- } + #endif + gui_mch_draw_part_cursor(cur_width, cur_height, cbg); +! #if defined(FEAT_MBYTE) && defined(FEAT_RIGHTLEFT) + if (col_off) + --gui.col; + #endif +--- 1285,1294 ---- + col_off = TRUE; + ++gui.col; + } + #endif ++ } + gui_mch_draw_part_cursor(cur_width, cur_height, cbg); +! #if defined(FEAT_RIGHTLEFT) + if (col_off) + --gui.col; + #endif +*************** +*** 2023,2031 **** + gui_outstr(char_u *s, int len) + { + int this_len; +- #ifdef FEAT_MBYTE + int cells; +- #endif + + if (len == 0) + return; +--- 2015,2021 ---- +*************** +*** 2035,2041 **** + + while (len > 0) + { +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + /* Find out how many chars fit in the current line. */ +--- 2025,2030 ---- +*************** +*** 2051,2057 **** + this_len = len; /* don't include following composing char */ + } + else +- #endif + if (gui.col + len > Columns) + this_len = Columns - gui.col; + else +--- 2040,2045 ---- +*************** +*** 2061,2072 **** + 0, (guicolor_T)0, (guicolor_T)0, 0); + s += this_len; + len -= this_len; +- #ifdef FEAT_MBYTE + /* fill up for a double-width char that doesn't fit. */ + if (len > 0 && gui.col < Columns) + (void)gui_outstr_nowrap((char_u *)" ", 1, + 0, (guicolor_T)0, (guicolor_T)0, 0); +- #endif + /* The cursor may wrap to the next line. */ + if (gui.col >= Columns) + { +--- 2049,2058 ---- +*************** +*** 2089,2095 **** + guicolor_T bg, /* colors for cursor */ + int back) /* backup this many chars when using bold trick */ + { +- #ifdef FEAT_MBYTE + char_u buf[MB_MAXBYTES + 1]; + + /* Don't draw right halve of a double-width UTF-8 char. "cannot happen" */ +--- 2075,2080 ---- +*************** +*** 2112,2120 **** + return gui_outstr_nowrap(ScreenLines + off, + enc_dbcs ? (*mb_ptr2len)(ScreenLines + off) : 1, + flags, fg, bg, back); +- #else +- return gui_outstr_nowrap(ScreenLines + off, 1, flags, fg, bg, back); +- #endif + } + + #ifdef FEAT_GUI_GTK +--- 2097,2102 ---- +*************** +*** 2223,2231 **** + guicolor_T sp_color; + #if !defined(FEAT_GUI_GTK) + GuiFont font = NOFONT; +- # ifdef FEAT_MBYTE + GuiFont wide_font = NOFONT; +- # endif + # ifdef FEAT_XFONTSET + GuiFontset fontset = NOFONTSET; + # endif +--- 2205,2211 ---- +*************** +*** 2316,2322 **** + else + font = gui.norm_font; + +- # ifdef FEAT_MBYTE + /* + * Choose correct wide_font by font. wide_font should be set with font + * at same time in above block. But it will make many "ifdef" nasty +--- 2296,2301 ---- +*************** +*** 2330,2337 **** + wide_font = gui.wide_ital_font; + else if (font == gui.norm_font && gui.wide_font) + wide_font = gui.wide_font; +- # endif +- + } + # ifdef FEAT_XFONTSET + if (fontset != NOFONTSET) +--- 2309,2314 ---- +*************** +*** 2441,2447 **** + /* The value returned is the length in display cells */ + len = gui_gtk2_draw_string(gui.row, col, s, len, draw_flags); + #else +- # ifdef FEAT_MBYTE + if (enc_utf8) + { + int start; /* index of bytes to be drawn */ +--- 2418,2423 ---- +*************** +*** 2456,2466 **** + int curr_wide = FALSE; /* use 'guifontwide' */ + int prev_wide = FALSE; + int wide_changed; +! # ifdef WIN3264 + int sep_comp = FALSE; /* Don't separate composing chars. */ +! # else + int sep_comp = TRUE; /* Separate composing chars. */ +! # endif + + /* Break the string at a composing character, it has to be drawn on + * top of the previous character. */ +--- 2432,2442 ---- + int curr_wide = FALSE; /* use 'guifontwide' */ + int prev_wide = FALSE; + int wide_changed; +! # ifdef WIN3264 + int sep_comp = FALSE; /* Don't separate composing chars. */ +! # else + int sep_comp = TRUE; /* Separate composing chars. */ +! # endif + + /* Break the string at a composing character, it has to be drawn on + * top of the previous character. */ +*************** +*** 2476,2484 **** + if (!comping || sep_comp) + { + if (cn > 1 +! # ifdef FEAT_XFONTSET + && fontset == NOFONTSET +! # endif + && wide_font != NOFONT) + curr_wide = TRUE; + else +--- 2452,2460 ---- + if (!comping || sep_comp) + { + if (cn > 1 +! # ifdef FEAT_XFONTSET + && fontset == NOFONTSET +! # endif + && wide_font != NOFONT) + curr_wide = TRUE; + else +*************** +*** 2494,2508 **** + * a composing character. */ + if (i + cl >= len || (comping && sep_comp && i > start) + || wide_changed +! # if defined(FEAT_GUI_X11) + || (cn > 1 +! # ifdef FEAT_XFONTSET + /* No fontset: At least draw char after wide char at + * right position. */ + && fontset == NOFONTSET +- # endif +- ) + # endif + ) + { + if ((comping && sep_comp) || wide_changed) +--- 2470,2484 ---- + * a composing character. */ + if (i + cl >= len || (comping && sep_comp && i > start) + || wide_changed +! # if defined(FEAT_GUI_X11) + || (cn > 1 +! # ifdef FEAT_XFONTSET + /* No fontset: At least draw char after wide char at + * right position. */ + && fontset == NOFONTSET + # endif ++ ) ++ # endif + ) + { + if ((comping && sep_comp) || wide_changed) +*************** +*** 2529,2557 **** + cl = 0; + } + +! # if defined(FEAT_GUI_X11) + /* No fontset: draw a space to fill the gap after a wide char + * */ + if (cn > 1 && (draw_flags & DRAW_TRANSP) == 0 +! # ifdef FEAT_XFONTSET + && fontset == NOFONTSET +! # endif + && !wide_changed) + gui_mch_draw_string(gui.row, scol - 1, (char_u *)" ", + 1, draw_flags); +! # endif + } + /* Draw a composing char on top of the previous char. */ + if (comping && sep_comp) + { +! # if defined(__APPLE_CC__) && TARGET_API_MAC_CARBON + /* Carbon ATSUI autodraws composing char over previous char */ + gui_mch_draw_string(gui.row, scol, s + i, cl, + draw_flags | DRAW_TRANSP); +! # else + gui_mch_draw_string(gui.row, scol - cn, s + i, cl, + draw_flags | DRAW_TRANSP); +! # endif + start = i + cl; + } + prev_wide = curr_wide; +--- 2505,2533 ---- + cl = 0; + } + +! # if defined(FEAT_GUI_X11) + /* No fontset: draw a space to fill the gap after a wide char + * */ + if (cn > 1 && (draw_flags & DRAW_TRANSP) == 0 +! # ifdef FEAT_XFONTSET + && fontset == NOFONTSET +! # endif + && !wide_changed) + gui_mch_draw_string(gui.row, scol - 1, (char_u *)" ", + 1, draw_flags); +! # endif + } + /* Draw a composing char on top of the previous char. */ + if (comping && sep_comp) + { +! # if defined(__APPLE_CC__) && TARGET_API_MAC_CARBON + /* Carbon ATSUI autodraws composing char over previous char */ + gui_mch_draw_string(gui.row, scol, s + i, cl, + draw_flags | DRAW_TRANSP); +! # else + gui_mch_draw_string(gui.row, scol - cn, s + i, cl, + draw_flags | DRAW_TRANSP); +! # endif + start = i + cl; + } + prev_wide = curr_wide; +*************** +*** 2560,2576 **** + len = scol - col; + } + else +- # endif + { + gui_mch_draw_string(gui.row, col, s, len, draw_flags); +- # ifdef FEAT_MBYTE + if (enc_dbcs == DBCS_JPNU) + { + /* Get the length in display cells, this can be different from the + * number of bytes for "euc-jp". */ + len = mb_string2cells(s, len); + } +- # endif + } + #endif /* !FEAT_GUI_GTK */ + +--- 2536,2549 ---- +*************** +*** 2697,2705 **** + int idx, len; + int back, nback; + int retval = FALSE; +- #ifdef FEAT_MBYTE + int orig_col1, orig_col2; +- #endif + + /* Don't try to update when ScreenLines is not valid */ + if (!screen_cleared || ScreenLines == NULL) +--- 2670,2676 ---- +*************** +*** 2716,2729 **** + old_row = gui.row; + old_col = gui.col; + old_hl_mask = gui.highlight_mask; +- #ifdef FEAT_MBYTE + orig_col1 = col1; + orig_col2 = col2; +- #endif + + for (gui.row = row1; gui.row <= row2; gui.row++) + { +- #ifdef FEAT_MBYTE + /* When only half of a double-wide character is in the block, include + * the other half. */ + col1 = orig_col1; +--- 2687,2697 ---- +*************** +*** 2753,2764 **** + msg((char *)IObuff); + } + } +! # ifdef FEAT_GUI_GTK + if (col2 + 1 < Columns && ScreenLines[off + col2 + 1] == 0) + ++col2; +- # endif +- } + #endif + gui.col = col1; + off = LineOffset[gui.row] + gui.col; + len = col2 - col1 + 1; +--- 2721,2731 ---- + msg((char *)IObuff); + } + } +! #ifdef FEAT_GUI_GTK + if (col2 + 1 < Columns && ScreenLines[off + col2 + 1] == 0) + ++col2; + #endif ++ } + gui.col = col1; + off = LineOffset[gui.row] + gui.col; + len = col2 - col1 + 1; +*************** +*** 2778,2784 **** + { + first_attr = ScreenAttrs[off]; + gui.highlight_mask = first_attr; +! #if defined(FEAT_MBYTE) && !defined(FEAT_GUI_GTK) + if (enc_utf8 && ScreenLinesUC[off] != 0) + { + /* output multi-byte character separately */ +--- 2745,2751 ---- + { + first_attr = ScreenAttrs[off]; + gui.highlight_mask = first_attr; +! #if !defined(FEAT_GUI_GTK) + if (enc_utf8 && ScreenLinesUC[off] != 0) + { + /* output multi-byte character separately */ +*************** +*** 2814,2820 **** + for (idx = 0; idx < len && ScreenAttrs[off + idx] == first_attr; + idx++) + { +- # ifdef FEAT_MBYTE + /* Stop at a multi-byte Unicode character. */ + if (enc_utf8 && ScreenLinesUC[off + idx] != 0) + break; +--- 2781,2786 ---- +*************** +*** 2827,2833 **** + + off + idx) == 2) + ++idx; /* skip second byte of double-byte char */ + } +- # endif + } + nback = gui_outstr_nowrap(ScreenLines + off, idx, flags, + (guicolor_T)0, (guicolor_T)0, back); +--- 2793,2798 ---- +*************** +*** 3390,3400 **** + int col = check_col(X_2_COL(x)); + int row = check_row(Y_2_ROW(y)); + +- #ifdef FEAT_MBYTE + *colp = mb_fix_col(col, row); +- #else +- *colp = col; +- #endif + return row; + } + +--- 3355,3361 ---- +*** ../vim-8.1.0804/src/gui_mac.c 2019-01-13 23:38:33.395773275 +0100 +--- src/gui_mac.c 2019-01-24 14:55:07.014824269 +0100 +*************** +*** 48,58 **** + + /* Vim's Scrap flavor. */ + #define VIMSCRAPFLAVOR 'VIM!' +! #ifdef FEAT_MBYTE +! # define SCRAPTEXTFLAVOR kScrapFlavorTypeUnicode +! #else +! # define SCRAPTEXTFLAVOR kScrapFlavorTypeText +! #endif + + static EventHandlerUPP mouseWheelHandlerUPP = NULL; + SInt32 gMacSystemVersion; +--- 48,54 ---- + + /* Vim's Scrap flavor. */ + #define VIMSCRAPFLAVOR 'VIM!' +! #define SCRAPTEXTFLAVOR kScrapFlavorTypeUnicode + + static EventHandlerUPP mouseWheelHandlerUPP = NULL; + SInt32 gMacSystemVersion; +*************** +*** 169,177 **** + # define USE_ATSUI_DRAWING + int p_macatsui_last; + ATSUStyle gFontStyle; +- # ifdef FEAT_MBYTE + ATSUStyle gWideFontStyle; +- # endif + Boolean gIsFontFallbackSet; + UInt32 useAntialias_cached = 0x0; + #endif +--- 165,171 ---- +*************** +*** 2035,2049 **** + switch (eventKind) + { + case kEventWindowActivated: +- # if defined(FEAT_MBYTE) + im_on_window_switch(TRUE); +- # endif + return noErr; + + case kEventWindowDeactivated: +- # if defined(FEAT_MBYTE) + im_on_window_switch(FALSE); +- # endif + return noErr; + } + } +--- 2029,2039 ---- +*************** +*** 2391,2397 **** + } + else + { +- #ifdef FEAT_MBYTE + /* Convert characters when needed (e.g., from MacRoman to latin1). + * This doesn't work for the NUL byte. */ + if (input_conv.vc_type != CONV_NONE && key_char > 0) +--- 2381,2386 ---- +*************** +*** 2421,2427 **** + string[len++] = key_char; + } + else +- #endif + string[len++] = key_char; + } + +--- 2410,2415 ---- +*************** +*** 3195,3206 **** + } + #endif + +- /* +- #ifdef FEAT_MBYTE +- set_option_value((char_u *)"encoding", 0L, (char_u *)"utf-8", 0); +- #endif +- */ +- + #ifdef FEAT_GUI_TABLINE + /* + * Create the tabline +--- 3183,3188 ---- +*************** +*** 3254,3263 **** + { + if (p_macatsui && gFontStyle) + ATSUDisposeStyle(gFontStyle); +- #ifdef FEAT_MBYTE + if (p_macatsui && gWideFontStyle) + ATSUDisposeStyle(gWideFontStyle); +- #endif + } + #endif + +--- 3236,3243 ---- +*************** +*** 3430,3442 **** + if (ATSUCreateStyle(&gFontStyle) != noErr) + gFontStyle = NULL; + } +- #ifdef FEAT_MBYTE + if (p_macatsui && gWideFontStyle == NULL) + { + if (ATSUCreateStyle(&gWideFontStyle) != noErr) + gWideFontStyle = NULL; + } +- #endif + + p_macatsui_last = p_macatsui; + } +--- 3410,3420 ---- +*************** +*** 3622,3628 **** + gFontStyle = NULL; + } + +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + /* FIXME: we should use a more mbyte sensitive way to support +--- 3600,3605 ---- +*************** +*** 3637,3643 **** + gWideFontStyle = NULL; + } + } +- #endif + } + } + #endif +--- 3614,3619 ---- +*************** +*** 3811,3817 **** + static void + draw_string_QD(int row, int col, char_u *s, int len, int flags) + { +- #ifdef FEAT_MBYTE + char_u *tofree = NULL; + + if (output_conv.vc_type != CONV_NONE) +--- 3787,3792 ---- +*************** +*** 3820,3826 **** + if (tofree != NULL) + s = tofree; + } +- #endif + + /* + * On OS X, try using Quartz-style text antialiasing. +--- 3795,3800 ---- +*************** +*** 3849,3855 **** + + rc.left = FILL_X(col); + rc.top = FILL_Y(row); +- #ifdef FEAT_MBYTE + /* Multibyte computation taken from gui_w32.c */ + if (has_mbyte) + { +--- 3823,3828 ---- +*************** +*** 3857,3864 **** + rc.right = FILL_X(col + mb_string2cells(s, len)); + } + else +! #endif +! rc.right = FILL_X(col + len) + (col + len == Columns); + rc.bottom = FILL_Y(row + 1); + EraseRect(&rc); + } +--- 3830,3836 ---- + rc.right = FILL_X(col + mb_string2cells(s, len)); + } + else +! rc.right = FILL_X(col + len) + (col + len == Columns); + rc.bottom = FILL_Y(row + 1); + EraseRect(&rc); + } +*************** +*** 3918,3926 **** + if (flags & DRAW_UNDERC) + draw_undercurl(flags, row, col, len); + +- #ifdef FEAT_MBYTE + vim_free(tofree); +- #endif + } + + #ifdef USE_ATSUI_DRAWING +--- 3890,3896 ---- +*************** +*** 4007,4013 **** + useAntialias_cached = useAntialias; + } + +- #ifdef FEAT_MBYTE + if (has_mbyte) + { + int n, width_in_cell, last_width_in_cell; +--- 3977,3982 ---- +*************** +*** 4069,4075 **** + ATSUDisposeTextLayout(textLayout); + } + else +- #endif + { + ATSUTextLayout textLayout; + +--- 4038,4043 ---- +*************** +*** 4225,4234 **** + rc.left = FILL_X(gui.col); + rc.top = FILL_Y(gui.row); + rc.right = rc.left + gui.char_width; +- #ifdef FEAT_MBYTE + if (mb_lefthalve(gui.row, gui.col)) + rc.right += gui.char_width; +- #endif + rc.bottom = rc.top + gui.char_height; + + gui_mch_set_fg_color(color); +--- 4193,4200 ---- +*************** +*** 4705,4715 **** + */ + static long next_avail_id = 128; + long menu_after_me = 0; /* Default to the end */ +- #if defined(FEAT_MBYTE) + CFStringRef name; +- #else +- char_u *name; +- #endif + short index; + vimmenu_T *parent = menu->parent; + vimmenu_T *brother = menu->next; +--- 4671,4677 ---- +*************** +*** 4750,4761 **** + * OSStatus SetMenuTitle(MenuRef, ConstStr255Param title); + */ + menu->submenu_id = next_avail_id; +- #if defined(FEAT_MBYTE) + if (CreateNewMenu(menu->submenu_id, 0, (MenuRef *)&menu->submenu_handle) == noErr) + SetMenuTitleWithCFString((MenuRef)menu->submenu_handle, name); +- #else +- menu->submenu_handle = NewMenu(menu->submenu_id, name); +- #endif + next_avail_id++; + } + +--- 4712,4719 ---- +*************** +*** 4784,4804 **** + * to avoid special character recognition by InsertMenuItem + */ + InsertMenuItem(parent->submenu_handle, "\p ", idx); /* afterItem */ +- #if defined(FEAT_MBYTE) + SetMenuItemTextWithCFString(parent->submenu_handle, idx+1, name); +- #else +- SetMenuItemText(parent->submenu_handle, idx+1, name); +- #endif + SetItemCmd(parent->submenu_handle, idx+1, 0x1B); + SetItemMark(parent->submenu_handle, idx+1, menu->submenu_id); + InsertMenu(menu->submenu_handle, hierMenu); + } + +- #if defined(FEAT_MBYTE) + CFRelease(name); +- #else +- vim_free(name); +- #endif + + #if 0 + /* Done by Vim later on */ +--- 4742,4754 ---- +*************** +*** 4812,4822 **** + void + gui_mch_add_menu_item(vimmenu_T *menu, int idx) + { +- #if defined(FEAT_MBYTE) + CFStringRef name; +- #else +- char_u *name; +- #endif + vimmenu_T *parent = menu->parent; + int menu_inserted; + +--- 4762,4768 ---- +*************** +*** 4912,4934 **** + if (!menu_inserted) + InsertMenuItem(parent->submenu_handle, "\p ", idx); /* afterItem */ + /* Set the menu item name. */ +- #if defined(FEAT_MBYTE) + SetMenuItemTextWithCFString(parent->submenu_handle, idx+1, name); +- #else +- SetMenuItemText(parent->submenu_handle, idx+1, name); +- #endif + + #if 0 + /* Called by Vim */ + DrawMenuBar(); + #endif + +- #if defined(FEAT_MBYTE) + CFRelease(name); +- #else +- /* TODO: Can name be freed? */ +- vim_free(name); +- #endif + } + + void +--- 4858,4871 ---- +*************** +*** 6242,6248 **** + #endif + } + +! #if (defined(FEAT_MBYTE) && defined(USE_CARBONKEYHANDLER)) || defined(PROTO) + /* + * Input Method Control functions. + */ +--- 6179,6185 ---- + #endif + } + +! #if defined(USE_CARBONKEYHANDLER) || defined(PROTO) + /* + * Input Method Control functions. + */ +*************** +*** 6391,6398 **** + return im_is_active; + } + +! #endif /* defined(FEAT_MBYTE) || defined(PROTO) */ +! + + + +--- 6328,6334 ---- + return im_is_active; + } + +! #endif + + + +*** ../vim-8.1.0804/src/gui_photon.c 2019-01-13 23:38:33.395773275 +0100 +--- src/gui_photon.c 2019-01-24 14:55:37.770614257 +0100 +*************** +*** 513,525 **** + if (special_keys[i].key_sym == 0) + { + ch = PhTo8859_1(key); +! if (ch == -1 +! #ifdef FEAT_MBYTE +! || (enc_utf8 && ch > 127) +! #endif +! ) + { +- #ifdef FEAT_MBYTE + len = PhKeyToMb(string, key); + if (len > 0) + { +--- 513,520 ---- + if (special_keys[i].key_sym == 0) + { + ch = PhTo8859_1(key); +! if (ch == -1 || (enc_utf8 && ch > 127)) + { + len = PhKeyToMb(string, key); + if (len > 0) + { +*************** +*** 546,552 **** + return Pt_CONSUME; + } + len = 0; +- #endif + ch = key->key_cap; + if (ch < 0xff) + { +--- 541,546 ---- +*************** +*** 1074,1080 **** + + /****************************************************************************/ + +- #ifdef FEAT_MBYTE + void + gui_ph_encoding_changed(int new_encoding) + { +--- 1068,1073 ---- +*************** +*** 1100,1106 **** + + charset_translate = PxTranslateSet(charset_translate, charset); + } +- #endif + + /****************************************************************************/ + /****************************************************************************/ +--- 1093,1098 ---- +*************** +*** 2141,2151 **** + if (flags & DRAW_UNDERL) + PgSetUnderline(gui.norm_pixel, Pg_TRANSPARENT, 0); + +! if (charset_translate != NULL +! #ifdef FEAT_MBYTE +! && enc_utf8 == 0 +! #endif +! ) + { + int src_taken, dst_made; + +--- 2133,2139 ---- + if (flags & DRAW_UNDERL) + PgSetUnderline(gui.norm_pixel, Pg_TRANSPARENT, 0); + +! if (charset_translate != NULL && enc_utf8 == 0) + { + int src_taken, dst_made; + +*** ../vim-8.1.0804/src/version.c 2019-01-24 13:58:05.821568951 +0100 +--- src/version.c 2019-01-24 15:03:57.587208227 +0100 +*************** +*** 793,794 **** +--- 793,796 ---- + { /* Add new patch number below this line */ ++ /**/ ++ 805, + /**/ + +-- + An extraordinary TALL KNIGHT in all black (possibly John with Mike on his + shoulders) walks out from the dark trees. He is extremely fierce and + gruesome countenance. He walks towards KING ARTHUR and PATSY, who are + wazzing like mad. (Salopian slang, meaning very scared. almost to the + point of wetting oneself, e.g. before an important football match or + prior to a postering. Salopian slang meaning a beating by the school + praeposters. Sorry about the Salopian slant to this stage direction - Ed.) + "Monty Python and the Holy Grail" PYTHON (MONTY) PICTURES LTD + + /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ +/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ +\\\ an exciting new programming language -- http://www.Zimbu.org /// + \\\ help me help AIDS victims -- http://ICCF-Holland.org /// |