Remove word handling from formatParse

weechat-hashes
Curtis McEnroe 2018-09-14 18:48:03 -04:00
parent b22e008d68
commit 6aa42b852b
No known key found for this signature in database
GPG Key ID: CEA2F97ADCFCD77C
2 changed files with 10 additions and 11 deletions

View File

@ -79,10 +79,8 @@ static void parseColor(struct Format *format) {
format->str = &format->str[1 + len]; format->str = &format->str[1 + len];
} }
static const wchar_t Stops[] = { static const wchar_t Codes[] = {
L' ', IRCBold, IRCColor, IRCReverse, IRCReset, IRCItalic, IRCUnderline, L'\0',
IRCBold, IRCColor, IRCReverse, IRCReset, IRCItalic, IRCUnderline,
L'\0',
}; };
bool formatParse(struct Format *format, const wchar_t *split) { bool formatParse(struct Format *format, const wchar_t *split) {
@ -110,11 +108,7 @@ bool formatParse(struct Format *format, const wchar_t *split) {
} }
format->split = (split >= init && split <= format->str); format->split = (split >= init && split <= format->str);
if (format->str[0] == L' ') { format->len = wcscspn(format->str, Codes);
format->len = 1 + wcscspn(&format->str[1], Stops);
} else {
format->len = wcscspn(format->str, Stops);
}
if (split > format->str && split < &format->str[format->len]) { if (split > format->str && split < &format->str[format->len]) {
format->len = split - format->str; format->len = split - format->str;
} }
@ -172,6 +166,7 @@ int main() {
assert(testColor(L"\00316,16a", IRCDefault, IRCDefault, 6)); assert(testColor(L"\00316,16a", IRCDefault, IRCDefault, 6));
assert(testColor(L"\00399,99a", IRCDefault, IRCDefault, 6)); assert(testColor(L"\00399,99a", IRCDefault, IRCDefault, 6));
assert(testSplits(L""));
assert(testSplits(L"ab")); assert(testSplits(L"ab"));
assert(testSplits(L"\002")); assert(testSplits(L"\002"));
assert(testSplits(L"\002ab")); assert(testSplits(L"\002ab"));

8
ui.c
View File

@ -194,11 +194,14 @@ static void addFormat(WINDOW *win, const struct Format *format) {
} }
static int addWrap(WINDOW *win, const wchar_t *str) { static int addWrap(WINDOW *win, const wchar_t *str) {
int lines = 0;
struct Format format = { .str = str }; struct Format format = { .str = str };
formatReset(&format); formatReset(&format);
int lines = 0;
while (formatParse(&format, NULL)) { while (formatParse(&format, NULL)) {
size_t word = 1 + wcscspn(&format.str[1], L" ");
if (word < format.len) format.len = word;
int _, x, xMax; int _, x, xMax;
getyx(win, _, x); getyx(win, _, x);
getmaxyx(win, _, xMax); getmaxyx(win, _, xMax);
@ -210,6 +213,7 @@ static int addWrap(WINDOW *win, const wchar_t *str) {
waddch(win, '\n'); waddch(win, '\n');
lines++; lines++;
} }
addFormat(win, &format); addFormat(win, &format);
} }
return lines; return lines;