Merge #8934 'Remove mb_ptr2len_len, mb_ptr2cells, mb_ptr2cells_len'

This commit is contained in:
Justin M. Keyes 2018-09-01 19:46:46 +02:00 committed by GitHub
commit f62d4865d8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 57 additions and 65 deletions

View File

@ -5649,11 +5649,11 @@ void ex_sign(exarg_T *eap)
// Count cells and check for non-printable chars // Count cells and check for non-printable chars
cells = 0; cells = 0;
for (s = arg; s < p; s += (*mb_ptr2len)(s)) { for (s = arg; s < p; s += utfc_ptr2len(s)) {
if (!vim_isprintc(utf_ptr2char(s))) { if (!vim_isprintc(utf_ptr2char(s))) {
break; break;
} }
cells += (*mb_ptr2cells)(s); cells += utf_ptr2cells(s);
} }
// Currently must be one or two display cells // Currently must be one or two display cells
if (s != p || cells < 1 || cells > 2) { if (s != p || cells < 1 || cells > 2) {

View File

@ -2152,10 +2152,11 @@ static void set_cmdspos_cursor(void)
*/ */
static void correct_cmdspos(int idx, int cells) static void correct_cmdspos(int idx, int cells)
{ {
if ((*mb_ptr2len)(ccline.cmdbuff + idx) > 1 if (utfc_ptr2len(ccline.cmdbuff + idx) > 1
&& (*mb_ptr2cells)(ccline.cmdbuff + idx) > 1 && utf_ptr2cells(ccline.cmdbuff + idx) > 1
&& ccline.cmdspos % Columns + cells > Columns) && ccline.cmdspos % Columns + cells > Columns) {
ccline.cmdspos++; ccline.cmdspos++;
}
} }
/* /*

View File

@ -892,10 +892,7 @@ static colnr_T hardcopy_line(prt_settings_T *psettings, int page_line, prt_pos_T
need_break = 1; need_break = 1;
} else { } else {
need_break = mch_print_text_out(line + col, (size_t)outputlen); need_break = mch_print_text_out(line + col, (size_t)outputlen);
if (has_mbyte) print_pos += utf_ptr2cells(line + col);
print_pos += (*mb_ptr2cells)(line + col);
else
print_pos++;
} }
} }
@ -2912,7 +2909,7 @@ int mch_print_text_out(char_u *const textp, size_t len)
} }
} }
if (prt_out_mbyte) { if (prt_out_mbyte) {
const bool half_width = ((*mb_ptr2cells)(p) == 1); const bool half_width = (utf_ptr2cells(p) == 1);
if (half_width) { if (half_width) {
char_width /= 2; char_width /= 2;
} }

View File

@ -898,7 +898,7 @@ char_u *replace_termcodes(const char_u *from, const size_t from_len,
} }
// skip multibyte char correctly // skip multibyte char correctly
for (i = (*mb_ptr2len_len)(src, (int) (end - src) + 1); i > 0; i--) { for (i = utfc_ptr2len_len(src, (int)(end - src) + 1); i > 0; i--) {
// If the character is K_SPECIAL, replace it with K_SPECIAL // If the character is K_SPECIAL, replace it with K_SPECIAL
// KS_SPECIAL KE_FILLER. // KS_SPECIAL KE_FILLER.
// If compiled with the GUI replace CSI with K_CSI. // If compiled with the GUI replace CSI with K_CSI.

View File

@ -550,7 +550,7 @@ size_t mb_string2cells(const char_u *str)
size_t clen = 0; size_t clen = 0;
for (const char_u *p = str; *p != NUL; p += (*mb_ptr2len)(p)) { for (const char_u *p = str; *p != NUL; p += (*mb_ptr2len)(p)) {
clen += (*mb_ptr2cells)(p); clen += utf_ptr2cells(p);
} }
return clen; return clen;
@ -2124,8 +2124,9 @@ static char_u *iconv_string(const vimconv_T *const vcp, char_u *str,
* conversion from 'encoding' to something else. In other * conversion from 'encoding' to something else. In other
* situations we don't know what to skip anyway. */ * situations we don't know what to skip anyway. */
*to++ = '?'; *to++ = '?';
if ((*mb_ptr2cells)((char_u *)from) > 1) if (utf_ptr2cells((char_u *)from) > 1) {
*to++ = '?'; *to++ = '?';
}
l = utfc_ptr2len_len((const char_u *)from, (int)fromlen); l = utfc_ptr2len_len((const char_u *)from, (int)fromlen);
from += l; from += l;
fromlen -= l; fromlen -= l;

View File

@ -47,11 +47,8 @@ enum { MAX_MCO = 6 };
// TODO(bfredl): eventually we should keep only one of the namings // TODO(bfredl): eventually we should keep only one of the namings
#define mb_ptr2len utfc_ptr2len #define mb_ptr2len utfc_ptr2len
#define mb_ptr2len_len utfc_ptr2len_len
#define mb_char2len utf_char2len #define mb_char2len utf_char2len
#define mb_char2bytes utf_char2bytes #define mb_char2bytes utf_char2bytes
#define mb_ptr2cells utf_ptr2cells
#define mb_ptr2cells_len utf_ptr2cells_len
#define mb_char2cells utf_char2cells #define mb_char2cells utf_char2cells
/// Flags for vimconv_T /// Flags for vimconv_T

View File

@ -699,8 +699,8 @@ char_u *msg_may_trunc(int force, char_u *s)
return s; return s;
for (n = 0; size >= room; ) { for (n = 0; size >= room; ) {
size -= (*mb_ptr2cells)(s + n); size -= utf_ptr2cells(s + n);
n += (*mb_ptr2len)(s + n); n += utfc_ptr2len(s + n);
} }
--n; --n;
} }
@ -1222,7 +1222,7 @@ int msg_outtrans_len_attr(char_u *msgstr, int len, int attr)
c = utf_ptr2char((char_u *)str); c = utf_ptr2char((char_u *)str);
if (vim_isprintc(c)) { if (vim_isprintc(c)) {
// Printable multi-byte char: count the cells. // Printable multi-byte char: count the cells.
retval += (*mb_ptr2cells)((char_u *)str); retval += utf_ptr2cells((char_u *)str);
} else { } else {
// Unprintable multi-byte char: print the printable chars so // Unprintable multi-byte char: print the printable chars so
// far and the translation of the unprintable char. // far and the translation of the unprintable char.
@ -1476,13 +1476,13 @@ void msg_prt_line(char_u *s, int list)
c = c_extra; c = c_extra;
else else
c = *p_extra++; c = *p_extra++;
} else if (has_mbyte && (l = (*mb_ptr2len)(s)) > 1) { } else if ((l = utfc_ptr2len(s)) > 1) {
col += (*mb_ptr2cells)(s); col += utf_ptr2cells(s);
char buf[MB_MAXBYTES + 1]; char buf[MB_MAXBYTES + 1];
if (lcs_nbsp != NUL && list if (lcs_nbsp != NUL && list
&& (utf_ptr2char(s) == 160 || utf_ptr2char(s) == 0x202f)) { && (utf_ptr2char(s) == 160 || utf_ptr2char(s) == 0x202f)) {
mb_char2bytes(lcs_nbsp, (char_u *)buf); utf_char2bytes(lcs_nbsp, (char_u *)buf);
buf[(*mb_ptr2len)((char_u *)buf)] = NUL; buf[utfc_ptr2len((char_u *)buf)] = NUL;
} else { } else {
memmove(buf, s, (size_t)l); memmove(buf, s, (size_t)l);
buf[l] = NUL; buf[l] = NUL;
@ -1549,7 +1549,7 @@ static char_u *screen_puts_mbyte(char_u *s, int l, int attr)
int cw; int cw;
msg_didout = true; // remember that line is not empty msg_didout = true; // remember that line is not empty
cw = (*mb_ptr2cells)(s); cw = utf_ptr2cells(s);
if (cw > 1 if (cw > 1
&& (cmdmsg_rl ? msg_col <= 1 : msg_col == Columns - 1)) { && (cmdmsg_rl ? msg_col <= 1 : msg_col == Columns - 1)) {
// Doesn't fit, print a highlighted '>' to fill it up. // Doesn't fit, print a highlighted '>' to fill it up.
@ -1711,14 +1711,12 @@ static void msg_puts_display(const char_u *str, int maxlen, int attr,
&& (*s == '\n' || (cmdmsg_rl && (*s == '\n' || (cmdmsg_rl
? (msg_col <= 1 ? (msg_col <= 1
|| (*s == TAB && msg_col <= 7) || (*s == TAB && msg_col <= 7)
|| (has_mbyte || (utf_ptr2cells(s) > 1
&& (*mb_ptr2cells)(s) > 1
&& msg_col <= 2)) && msg_col <= 2))
: (msg_col + t_col >= Columns - 1 : (msg_col + t_col >= Columns - 1
|| (*s == TAB || (*s == TAB
&& msg_col + t_col >= ((Columns - 1) & ~7)) && msg_col + t_col >= ((Columns - 1) & ~7))
|| (has_mbyte || (utf_ptr2cells(s) > 1
&& (*mb_ptr2cells)(s) > 1
&& msg_col + t_col >= Columns - 2))))) { && msg_col + t_col >= Columns - 2))))) {
// The screen is scrolled up when at the last row (some terminals // The screen is scrolled up when at the last row (some terminals
// scroll automatically, some don't. To avoid problems we scroll // scroll automatically, some don't. To avoid problems we scroll
@ -1787,7 +1785,7 @@ static void msg_puts_display(const char_u *str, int maxlen, int attr,
wrap = *s == '\n' wrap = *s == '\n'
|| msg_col + t_col >= Columns || msg_col + t_col >= Columns
|| (has_mbyte && (*mb_ptr2cells)(s) > 1 || (utf_ptr2cells(s) > 1
&& msg_col + t_col >= Columns - 1) && msg_col + t_col >= Columns - 1)
; ;
if (t_col > 0 && (wrap || *s == '\r' || *s == '\b' if (t_col > 0 && (wrap || *s == '\r' || *s == '\b'
@ -1821,7 +1819,7 @@ static void msg_puts_display(const char_u *str, int maxlen, int attr,
} else if (*s == BELL) { // beep (from ":sh") } else if (*s == BELL) { // beep (from ":sh")
vim_beep(BO_SH); vim_beep(BO_SH);
} else if (*s >= 0x20) { // printable char } else if (*s >= 0x20) { // printable char
cw = mb_ptr2cells(s); cw = utf_ptr2cells(s);
if (maxlen >= 0) { if (maxlen >= 0) {
// avoid including composing chars after the end // avoid including composing chars after the end
l = utfc_ptr2len_len(s, (int)((str + maxlen) - s)); l = utfc_ptr2len_len(s, (int)((str + maxlen) - s));

View File

@ -466,7 +466,7 @@ static void out_data_append_to_screen(char *output, size_t *count, bool eof)
// incomplete UTF-8 sequence that could be composing with the last // incomplete UTF-8 sequence that could be composing with the last
// complete sequence. // complete sequence.
// This will be corrected when we switch to vterm based implementation // This will be corrected when we switch to vterm based implementation
int i = *p ? mb_ptr2len_len((char_u *)p, (int)(end-p)) : 1; int i = *p ? utfc_ptr2len_len((char_u *)p, (int)(end-p)) : 1;
if (!eof && i == 1 && utf8len_tab_zero[*(uint8_t *)p] > (end-p)) { if (!eof && i == 1 && utf8len_tab_zero[*(uint8_t *)p] > (end-p)) {
*count = (size_t)(p - output); *count = (size_t)(p - output);
goto end; goto end;

View File

@ -399,7 +399,7 @@ void pum_redraw(void)
if (size > pum_width) { if (size > pum_width) {
do { do {
size -= has_mbyte ? (*mb_ptr2cells)(rt) : 1; size -= utf_ptr2cells(rt);
MB_PTR_ADV(rt); MB_PTR_ADV(rt);
} while (size > pum_width); } while (size > pum_width);

View File

@ -1874,8 +1874,8 @@ static void fold_line(win_T *wp, long fold_count, foldinfo_T *foldinfo, linenr_T
// Store multibyte characters in ScreenLines[] et al. correctly. // Store multibyte characters in ScreenLines[] et al. correctly.
for (p = text; *p != NUL; ) { for (p = text; *p != NUL; ) {
cells = (*mb_ptr2cells)(p); cells = utf_ptr2cells(p);
c_len = (*mb_ptr2len)(p); c_len = utfc_ptr2len(p);
if (col + cells > wp->w_width - (wp->w_p_rl ? col : 0)) { if (col + cells > wp->w_width - (wp->w_p_rl ? col : 0)) {
break; break;
} }
@ -2914,16 +2914,17 @@ win_line (
if (draw_state == WL_LINE && area_highlighting) { if (draw_state == WL_LINE && area_highlighting) {
/* handle Visual or match highlighting in this line */ /* handle Visual or match highlighting in this line */
if (vcol == fromcol if (vcol == fromcol
|| (has_mbyte && vcol + 1 == fromcol && n_extra == 0 || (vcol + 1 == fromcol && n_extra == 0
&& (*mb_ptr2cells)(ptr) > 1) && utf_ptr2cells(ptr) > 1)
|| ((int)vcol_prev == fromcol_prev || ((int)vcol_prev == fromcol_prev
&& vcol_prev < vcol /* not at margin */ && vcol_prev < vcol // not at margin
&& vcol < tocol)) && vcol < tocol)) {
area_attr = attr; /* start highlighting */ area_attr = attr; // start highlighting
else if (area_attr != 0 } else if (area_attr != 0 && (vcol == tocol
&& (vcol == tocol || (noinvcur
|| (noinvcur && (colnr_T)vcol == wp->w_virtcol))) && (colnr_T)vcol == wp->w_virtcol))) {
area_attr = 0; /* stop highlighting */ area_attr = 0; // stop highlighting
}
if (!n_extra) { if (!n_extra) {
/* /*
@ -4879,8 +4880,8 @@ static void win_redr_status(win_T *wp, int ignore_pum)
// Find first character that will fit. // Find first character that will fit.
// Going from start to end is much faster for DBCS. // Going from start to end is much faster for DBCS.
for (i = 0; p[i] != NUL && clen >= this_ru_col - 1; for (i = 0; p[i] != NUL && clen >= this_ru_col - 1;
i += (*mb_ptr2len)(p + i)) { i += utfc_ptr2len(p + i)) {
clen -= (*mb_ptr2cells)(p + i); clen -= utf_ptr2cells(p + i);
} }
len = clen; len = clen;
if (i > 0) { if (i > 0) {
@ -6128,16 +6129,16 @@ void setcursor(void)
{ {
if (redrawing()) { if (redrawing()) {
validate_cursor(); validate_cursor();
int left_offset = curwin->w_wcol;
if (curwin->w_p_rl) {
// With 'rightleft' set and the cursor on a double-wide character,
// position it on the leftmost column.
left_offset = curwin->w_width - curwin->w_wcol
- ((utf_ptr2cells(get_cursor_pos_ptr()) == 2
&& vim_isprintc(gchar_cursor())) ? 2 : 1);
}
ui_cursor_goto(curwin->w_winrow + curwin->w_wrow, ui_cursor_goto(curwin->w_winrow + curwin->w_wrow,
curwin->w_wincol + ( curwin->w_wincol + left_offset);
/* With 'rightleft' set and the cursor on a double-wide
* character, position it on the leftmost column. */
curwin->w_p_rl ? (curwin->w_width - curwin->w_wcol - (
(has_mbyte
&& (*mb_ptr2cells)(get_cursor_pos_ptr()) == 2
&& vim_isprintc(gchar_cursor())) ? 2 :
1)) :
curwin->w_wcol));
} }
} }
@ -6968,18 +6969,15 @@ static void win_redr_ruler(win_T *wp, int always)
} }
get_rel_pos(wp, buffer + i, RULER_BUF_LEN - i); get_rel_pos(wp, buffer + i, RULER_BUF_LEN - i);
} }
/* Truncate at window boundary. */ // Truncate at window boundary.
if (has_mbyte) { o = 0;
o = 0; for (i = 0; buffer[i] != NUL; i += utfc_ptr2len(buffer + i)) {
for (i = 0; buffer[i] != NUL; i += (*mb_ptr2len)(buffer + i)) { o += utf_ptr2cells(buffer + i);
o += (*mb_ptr2cells)(buffer + i); if (this_ru_col + o > width) {
if (this_ru_col + o > width) { buffer[i] = NUL;
buffer[i] = NUL; break;
break;
}
} }
} else if (this_ru_col + (int)STRLEN(buffer) > width) }
buffer[width - this_ru_col] = NUL;
screen_puts(buffer, row, this_ru_col + off, attr); screen_puts(buffer, row, this_ru_col + off, attr);
i = redraw_cmdline; i = redraw_cmdline;