Implement word wrapping
parent
d6fb797b11
commit
3f3fa34d8a
2
pls.c
2
pls.c
|
@ -26,7 +26,7 @@ wchar_t *wcssep(wchar_t **stringp, const wchar_t *delim) {
|
|||
size_t i = wcscspn(orig, delim);
|
||||
*stringp = NULL;
|
||||
if (orig[i]) {
|
||||
orig[i] = '\0';
|
||||
orig[i] = L'\0';
|
||||
*stringp = &orig[i + 1];
|
||||
}
|
||||
return orig;
|
||||
|
|
19
ui.c
19
ui.c
|
@ -198,6 +198,24 @@ static const wchar_t *parseColor(short *pair, const wchar_t *str) {
|
|||
return str;
|
||||
}
|
||||
|
||||
static void wordWrap(WINDOW *win, const wchar_t *str) {
|
||||
size_t len = wcscspn(str, L" ");
|
||||
size_t width = 1;
|
||||
for (size_t i = 0; i < len; ++i) {
|
||||
if (iswprint(str[i])) width += wcwidth(str[i]);
|
||||
}
|
||||
|
||||
int _, x, xMax;
|
||||
getyx(win, _, x);
|
||||
getmaxyx(win, _, xMax);
|
||||
|
||||
if (width >= (size_t)(xMax - x)) {
|
||||
waddch(win, '\n');
|
||||
} else {
|
||||
waddch(win, ' ');
|
||||
}
|
||||
}
|
||||
|
||||
static void addIRC(WINDOW *win, const wchar_t *str) {
|
||||
attr_t attr = A_NORMAL;
|
||||
short pair = -1;
|
||||
|
@ -209,6 +227,7 @@ static void addIRC(WINDOW *win, const wchar_t *str) {
|
|||
|
||||
str = &str[cc];
|
||||
switch (*str++) {
|
||||
break; case L' ': wordWrap(win, str);
|
||||
break; case L'\2': attr ^= A_BOLD;
|
||||
break; case L'\3': str = parseColor(&pair, str);
|
||||
break; case L'\35': attr ^= A_ITALIC;
|
||||
|
|
Loading…
Reference in New Issue