summaryrefslogtreecommitdiff
path: root/src/fe-common/core/hilight-text.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/fe-common/core/hilight-text.c')
-rw-r--r--src/fe-common/core/hilight-text.c75
1 files changed, 31 insertions, 44 deletions
diff --git a/src/fe-common/core/hilight-text.c b/src/fe-common/core/hilight-text.c
index 197957f6..0a16c5b2 100644
--- a/src/fe-common/core/hilight-text.c
+++ b/src/fe-common/core/hilight-text.c
@@ -37,8 +37,7 @@
#include "formats.h"
static NICKMATCH_REC *nickmatch;
-static HILIGHT_REC *next_nick_hilight, *next_line_hilight;
-static int next_hilight_start, next_hilight_end;
+static HILIGHT_REC *next_nick_hilight;
static int never_hilight_level, default_hilight_level;
GSList *hilights;
@@ -277,22 +276,24 @@ static void hilight_update_text_dest(TEXT_DEST_REC *dest, HILIGHT_REC *rec)
dest->hilight_color = hilight_get_act_color(rec);
}
-static void sig_print_text_stripped(TEXT_DEST_REC *dest, const char *str)
+static void sig_print_text(TEXT_DEST_REC *dest, const char *text,
+ const char *stripped)
{
- HILIGHT_REC *hilight;
-
- g_return_if_fail(str != NULL);
+ HILIGHT_REC *hilight;
+ char *color, *newstr;
+ int hilight_start, hilight_end, hilight_len;
+ hilight_start = hilight_end = 0;
if (next_nick_hilight != NULL) {
if (!next_nick_hilight->nick) {
/* non-nick hilight wanted */
hilight = next_nick_hilight;
next_nick_hilight = NULL;
- if (!hilight_match_text(hilight, str,
- &next_hilight_start,
- &next_hilight_end)) {
- next_hilight_start = 0;
- next_hilight_end = strlen(str);
+ if (!hilight_match_text(hilight, stripped,
+ &hilight_start,
+ &hilight_end)) {
+ hilight_start = 0;
+ hilight_end = strlen(stripped);
}
} else {
/* nick is highlighted, just set priority */
@@ -305,33 +306,23 @@ static void sig_print_text_stripped(TEXT_DEST_REC *dest, const char *str)
return;
hilight = hilight_match(dest->server, dest->target,
- NULL, NULL, dest->level, str,
- &next_hilight_start,
- &next_hilight_end);
- }
-
- if (hilight != NULL) {
- /* update the level / hilight info */
- hilight_update_text_dest(dest, hilight);
-
- next_line_hilight = hilight;
+ NULL, NULL, dest->level, stripped,
+ &hilight_start,
+ &hilight_end);
}
-}
-static void sig_print_text(TEXT_DEST_REC *dest, const char *str)
-{
- char *color, *newstr;
- int next_hilight_len;
-
- if (next_line_hilight == NULL)
+ if (hilight == NULL)
return;
- color = hilight_get_color(next_line_hilight);
- next_hilight_len = next_hilight_end-next_hilight_start;
+ /* update the level / hilight info */
+ hilight_update_text_dest(dest, hilight);
+
+ color = hilight_get_color(hilight);
+ hilight_len = hilight_end-hilight_start;
- if (!next_line_hilight->word) {
+ if (!hilight->word) {
/* hilight whole line */
- char *tmp = strip_codes(str);
+ char *tmp = strip_codes(text);
newstr = g_strconcat(color, tmp, NULL);
g_free(tmp);
} else {
@@ -343,25 +334,25 @@ static void sig_print_text(TEXT_DEST_REC *dest, const char *str)
tmp = g_string_new(NULL);
/* start of the line */
- pos = strip_real_length(str, next_hilight_start, NULL, NULL);
- g_string_append(tmp, str);
+ pos = strip_real_length(text, hilight_start, NULL, NULL);
+ g_string_append(tmp, text);
g_string_truncate(tmp, pos);
/* color */
g_string_append(tmp, color);
/* middle of the line, stripped */
- middle = strip_codes(str+pos);
+ middle = strip_codes(text+pos);
pos = tmp->len;
g_string_append(tmp, middle);
- g_string_truncate(tmp, pos+next_hilight_len);
+ g_string_truncate(tmp, pos+hilight_len);
g_free(middle);
/* end of the line */
- pos = strip_real_length(str, next_hilight_end,
+ pos = strip_real_length(text, hilight_end,
&color_pos, &color_len);
if (color_pos > 0)
- lastcolor = g_strndup(str+color_pos, color_len);
+ lastcolor = g_strndup(text+color_pos, color_len);
else {
/* no colors in line, change back to default */
lastcolor = g_malloc0(3);
@@ -369,15 +360,14 @@ static void sig_print_text(TEXT_DEST_REC *dest, const char *str)
lastcolor[1] = FORMAT_STYLE_DEFAULTS;
}
g_string_append(tmp, lastcolor);
- g_string_append(tmp, str+pos);
+ g_string_append(tmp, text+pos);
g_free(lastcolor);
newstr = tmp->str;
g_string_free(tmp, FALSE);
}
- next_line_hilight = NULL;
- signal_emit("print text", 2, dest, newstr);
+ signal_emit("print text", 3, dest, newstr, stripped);
g_free(color);
g_free(newstr);
@@ -665,14 +655,12 @@ void hilight_text_init(void)
settings_add_str("lookandfeel", "hilight_level", "PUBLIC DCCMSGS");
next_nick_hilight = NULL;
- next_line_hilight = NULL;
read_settings();
nickmatch = nickmatch_init(hilight_nick_cache);
read_hilight_config();
- signal_add_first("print text stripped", (SIGNAL_FUNC) sig_print_text_stripped);
signal_add_first("print text", (SIGNAL_FUNC) sig_print_text);
signal_add("setup reread", (SIGNAL_FUNC) read_hilight_config);
signal_add("setup changed", (SIGNAL_FUNC) read_settings);
@@ -687,7 +675,6 @@ void hilight_text_deinit(void)
hilights_destroy_all();
nickmatch_deinit(nickmatch);
- signal_remove("print text stripped", (SIGNAL_FUNC) sig_print_text_stripped);
signal_remove("print text", (SIGNAL_FUNC) sig_print_text);
signal_remove("setup reread", (SIGNAL_FUNC) read_hilight_config);
signal_remove("setup changed", (SIGNAL_FUNC) read_settings);