Avoid coloring mentions if there are control codes
This was breaking leading color codes.master
parent
2c9ff1717b
commit
8e55c049b5
23
handle.c
23
handle.c
|
@ -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';
|
||||||
|
|
Loading…
Reference in New Issue