mirror of
https://github.com/profanity-im/profanity.git
synced 2025-02-02 15:08:15 -05:00
Use utf-8 safe functions in _mucwin_print_mention()
get_mentions() correctly counts utf-8 chars. So the positions of mentions we get from there are correct. But in _mucwin_print_mention() we set position equal to byte. We need to use utf-8 safe functions here. Regards https://github.com/profanity-im/profanity/issues/1231
This commit is contained in:
parent
8ffb1bdd37
commit
6bc440c6f7
@ -389,7 +389,8 @@ _mucwin_print_mention(ProfWin* window, const char* const message, const char* co
|
|||||||
while (curr) {
|
while (curr) {
|
||||||
pos = GPOINTER_TO_INT(curr->data);
|
pos = GPOINTER_TO_INT(curr->data);
|
||||||
|
|
||||||
char* before_str = g_strndup(message + last_pos, pos - last_pos);
|
char *before_str = g_utf8_substring(message, last_pos, last_pos + pos - last_pos);
|
||||||
|
|
||||||
if (strncmp(before_str, "/me ", 4) == 0) {
|
if (strncmp(before_str, "/me ", 4) == 0) {
|
||||||
win_print_them(window, THEME_ROOMMENTION, ch, flags, "");
|
win_print_them(window, THEME_ROOMMENTION, ch, flags, "");
|
||||||
win_append_highlight(window, THEME_ROOMMENTION, "*%s ", from);
|
win_append_highlight(window, THEME_ROOMMENTION, "*%s ", from);
|
||||||
@ -399,16 +400,22 @@ _mucwin_print_mention(ProfWin* window, const char* const message, const char* co
|
|||||||
win_append_highlight(window, THEME_ROOMMENTION, "%s", before_str);
|
win_append_highlight(window, THEME_ROOMMENTION, "%s", before_str);
|
||||||
}
|
}
|
||||||
g_free(before_str);
|
g_free(before_str);
|
||||||
char* mynick_str = g_strndup(message + pos, strlen(mynick));
|
|
||||||
|
glong mynick_len = g_utf8_strlen(mynick, -1);
|
||||||
|
char* mynick_str = g_utf8_substring(message, pos, pos + mynick_len);
|
||||||
win_append_highlight(window, THEME_ROOMMENTION_TERM, "%s", mynick_str);
|
win_append_highlight(window, THEME_ROOMMENTION_TERM, "%s", mynick_str);
|
||||||
g_free(mynick_str);
|
g_free(mynick_str);
|
||||||
|
|
||||||
last_pos = pos + strlen(mynick);
|
last_pos = pos + mynick_len;
|
||||||
|
|
||||||
curr = g_slist_next(curr);
|
curr = g_slist_next(curr);
|
||||||
}
|
}
|
||||||
if (last_pos < strlen(message)) {
|
|
||||||
win_appendln_highlight(window, THEME_ROOMMENTION, "%s", &message[last_pos]);
|
glong message_len = g_utf8_strlen(message, -1);
|
||||||
|
if (last_pos < message_len) {
|
||||||
|
char* rest = g_utf8_substring(message, last_pos, last_pos + message_len);
|
||||||
|
win_appendln_highlight(window, THEME_ROOMMENTION, "%s", rest);
|
||||||
|
g_free(rest);
|
||||||
} else {
|
} else {
|
||||||
win_appendln_highlight(window, THEME_ROOMMENTION, "");
|
win_appendln_highlight(window, THEME_ROOMMENTION, "");
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user