Avoid coloring mentions if there are control codes

This was breaking leading color codes.
weechat-hashes
C. McEnroe 2020-02-10 03:58:00 -05:00
parent 2c9ff1717b
commit 8e55c049b5
1 changed files with 10 additions and 13 deletions

View File

@ -490,19 +490,16 @@ static bool isMention(const struct Message *msg) {
} }
static const char *colorMentions(size_t id, struct Message *msg) { static const char *colorMentions(size_t id, struct Message *msg) {
char *mention; char *split = strchr(msg->params[1], ':');
char final; if (!split) split = strchr(msg->params[1], ' ');
if (strchr(msg->params[1], ':')) { if (!split) split = &msg->params[1][strlen(msg->params[1])];
mention = strsep(&msg->params[1], ":"); for (char *ch = msg->params[1]; ch < split; ++ch) {
final = ':'; if (iscntrl(*ch)) return "";
} else if (strchr(msg->params[1], ' ')) {
mention = strsep(&msg->params[1], " ");
final = ' ';
} else {
mention = msg->params[1];
msg->params[1] = "";
final = '\0';
} }
char delimit = *split;
char *mention = msg->params[1];
msg->params[1] = (delimit ? &split[1] : split);
*split = '\0';
static char buf[1024]; static char buf[1024];
FILE *str = fmemopen(buf, sizeof(buf), "w"); FILE *str = fmemopen(buf, sizeof(buf), "w");
@ -520,7 +517,7 @@ static const char *colorMentions(size_t id, struct Message *msg) {
mention[len] = punct; mention[len] = punct;
mention += len; mention += len;
} }
fputc(final, str); fputc(delimit, str);
fclose(str); fclose(str);
buf[sizeof(buf) - 1] = '\0'; buf[sizeof(buf) - 1] = '\0';