summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.0805
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.0805')
-rw-r--r--data/vim/patches/8.1.08057316
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 ///