Remove word handling from formatParse
parent
b22e008d68
commit
6aa42b852b
13
format.c
13
format.c
|
@ -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
8
ui.c
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue