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);
|
size_t i = wcscspn(orig, delim);
|
||||||
*stringp = NULL;
|
*stringp = NULL;
|
||||||
if (orig[i]) {
|
if (orig[i]) {
|
||||||
orig[i] = '\0';
|
orig[i] = L'\0';
|
||||||
*stringp = &orig[i + 1];
|
*stringp = &orig[i + 1];
|
||||||
}
|
}
|
||||||
return orig;
|
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;
|
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) {
|
static void addIRC(WINDOW *win, const wchar_t *str) {
|
||||||
attr_t attr = A_NORMAL;
|
attr_t attr = A_NORMAL;
|
||||||
short pair = -1;
|
short pair = -1;
|
||||||
|
@ -209,6 +227,7 @@ static void addIRC(WINDOW *win, const wchar_t *str) {
|
||||||
|
|
||||||
str = &str[cc];
|
str = &str[cc];
|
||||||
switch (*str++) {
|
switch (*str++) {
|
||||||
|
break; case L' ': wordWrap(win, str);
|
||||||
break; case L'\2': attr ^= A_BOLD;
|
break; case L'\2': attr ^= A_BOLD;
|
||||||
break; case L'\3': str = parseColor(&pair, str);
|
break; case L'\3': str = parseColor(&pair, str);
|
||||||
break; case L'\35': attr ^= A_ITALIC;
|
break; case L'\35': attr ^= A_ITALIC;
|
||||||
|
|
Loading…
Reference in New Issue