diff options
author | June McEnroe <june@causal.agency> | 2018-09-14 18:48:03 -0400 |
---|---|---|
committer | June McEnroe <june@causal.agency> | 2018-09-14 18:48:03 -0400 |
commit | 6aa42b852bc569f7baedc85b74037588777ccbb4 (patch) | |
tree | b97b6f760d1f33f4459fb2fcf54d39ef52cea574 | |
parent | Apply consecutive formatting codes at once (diff) | |
download | catgirl-6aa42b852bc569f7baedc85b74037588777ccbb4.tar.gz catgirl-6aa42b852bc569f7baedc85b74037588777ccbb4.zip |
Remove word handling from formatParse
-rw-r--r-- | format.c | 13 | ||||
-rw-r--r-- | ui.c | 8 |
2 files changed, 10 insertions, 11 deletions
diff --git a/format.c b/format.c index a2aaf4b..02406e3 100644 --- a/format.c +++ b/format.c @@ -79,10 +79,8 @@ static void parseColor(struct Format *format) { format->str = &format->str[1 + len]; } -static const wchar_t Stops[] = { - L' ', - IRCBold, IRCColor, IRCReverse, IRCReset, IRCItalic, IRCUnderline, - L'\0', +static const wchar_t Codes[] = { + IRCBold, IRCColor, IRCReverse, IRCReset, IRCItalic, IRCUnderline, L'\0', }; 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); - if (format->str[0] == L' ') { - format->len = 1 + wcscspn(&format->str[1], Stops); - } else { - format->len = wcscspn(format->str, Stops); - } + format->len = wcscspn(format->str, Codes); if (split > format->str && split < &format->str[format->len]) { format->len = split - format->str; } @@ -172,6 +166,7 @@ int main() { assert(testColor(L"\00316,16a", IRCDefault, IRCDefault, 6)); assert(testColor(L"\00399,99a", IRCDefault, IRCDefault, 6)); + assert(testSplits(L"")); assert(testSplits(L"ab")); assert(testSplits(L"\002")); assert(testSplits(L"\002ab")); diff --git a/ui.c b/ui.c index e1e006d..b1e56c7 100644 --- a/ui.c +++ b/ui.c @@ -194,11 +194,14 @@ static void addFormat(WINDOW *win, const struct Format *format) { } static int addWrap(WINDOW *win, const wchar_t *str) { + int lines = 0; + struct Format format = { .str = str }; formatReset(&format); - - int lines = 0; while (formatParse(&format, NULL)) { + size_t word = 1 + wcscspn(&format.str[1], L" "); + if (word < format.len) format.len = word; + int _, x, xMax; getyx(win, _, x); getmaxyx(win, _, xMax); @@ -210,6 +213,7 @@ static int addWrap(WINDOW *win, const wchar_t *str) { waddch(win, '\n'); lines++; } + addFormat(win, &format); } return lines; |