version 1.31, 2019/05/15 19:06:01 |
version 1.32, 2019/08/31 13:44:29 |
|
|
wchar_t ch, prev_ch; |
wchar_t ch, prev_ch; |
int i, len, width; |
int i, len, width; |
|
|
i = curr - 1; |
if ((len = mbtowc_left(&ch, linebuf + curr, curr)) <= 0) |
if (utf_mode) { |
|
while (i >= lmargin && IS_UTF8_TRAIL(linebuf[i])) |
|
i--; |
|
} |
|
if (i < lmargin) |
|
return (0); |
return (0); |
if (utf_mode) { |
curr -= len; |
len = mbtowc(&ch, linebuf + i, curr - i); |
|
if (len == -1 || i + len < curr) { |
|
(void)mbtowc(NULL, NULL, MB_CUR_MAX); |
|
return (0); |
|
} |
|
} else |
|
ch = linebuf[i]; |
|
|
|
/* This assumes that there is no '\b' in linebuf. */ |
/* This assumes that there is no '\b' in linebuf. */ |
while (curr > lmargin && column > lmargin && |
while (curr >= lmargin && column > lmargin && |
(!(attr[curr - 1] & (AT_ANSI|AT_BINARY)))) { |
!(attr[curr] & (AT_ANSI|AT_BINARY))) { |
curr = i--; |
if ((len = mbtowc_left(&prev_ch, linebuf + curr, curr)) <= 0) |
if (utf_mode) { |
|
while (i >= lmargin && IS_UTF8_TRAIL(linebuf[i])) |
|
i--; |
|
} |
|
if (i < lmargin) |
|
prev_ch = L'\0'; |
prev_ch = L'\0'; |
else if (utf_mode) { |
|
len = mbtowc(&prev_ch, linebuf + i, curr - i); |
|
if (len == -1 || i + len < curr) { |
|
(void)mbtowc(NULL, NULL, MB_CUR_MAX); |
|
prev_ch = L'\0'; |
|
} |
|
} else |
|
prev_ch = linebuf[i]; |
|
width = pwidth(ch, attr[curr], prev_ch); |
width = pwidth(ch, attr[curr], prev_ch); |
column -= width; |
column -= width; |
if (width > 0) |
if (width > 0) |
return (1); |
return (1); |
|
curr -= len; |
if (prev_ch == L'\0') |
if (prev_ch == L'\0') |
return (0); |
return (0); |
ch = prev_ch; |
ch = prev_ch; |
|
|
} |
} |
if (w == -1) { |
if (w == -1) { |
wchar_t prev_ch; |
wchar_t prev_ch; |
|
if (mbtowc_left(&prev_ch, linebuf + curr, curr) <= 0) |
if (utf_mode) { |
prev_ch = L' '; |
for (i = curr - 1; i >= 0; i--) |
|
if (!IS_UTF8_TRAIL(linebuf[i])) |
|
break; |
|
if (i >= 0) { |
|
w = mbtowc(&prev_ch, linebuf + i, curr - i); |
|
if (w == -1 || i + w < curr) { |
|
(void)mbtowc(NULL, NULL, MB_CUR_MAX); |
|
prev_ch = L' '; |
|
} |
|
} else |
|
prev_ch = L' '; |
|
} else |
|
prev_ch = curr > 0 ? linebuf[curr - 1] : L' '; |
|
w = pwidth(ch, a, prev_ch); |
w = pwidth(ch, a, prev_ch); |
} |
} |
|
|