summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/fe-common/core/fe-messages.c16
-rw-r--r--src/fe-common/core/formats.c2
-rw-r--r--src/fe-common/core/formats.h6
-rw-r--r--src/fe-common/core/hilight-text.c9
-rw-r--r--src/fe-common/core/hilight-text.h2
5 files changed, 23 insertions, 12 deletions
diff --git a/src/fe-common/core/fe-messages.c b/src/fe-common/core/fe-messages.c
index d09c1b0b..e06a4571 100644
--- a/src/fe-common/core/fe-messages.c
+++ b/src/fe-common/core/fe-messages.c
@@ -175,6 +175,7 @@ static void sig_message_public(SERVER_REC *server, const char *msg,
int for_me, print_channel, level;
char *nickmode, *color, *freemsg = NULL;
HILIGHT_REC *hilight;
+ int match_beg = 0, match_end = 0;
/* NOTE: this may return NULL if some channel is just closed with
/WINDOW CLOSE and server still sends the few last messages */
@@ -187,8 +188,8 @@ static void sig_message_public(SERVER_REC *server, const char *msg,
nick_match_msg(chanrec, msg, server->nick) :
nick_match_msg_everywhere(chanrec, msg, server->nick);
hilight = for_me ? NULL :
- hilight_match_nick(server, target, nick, address, MSGLEVEL_PUBLIC, msg);
- color = (hilight == NULL) ? NULL : hilight_get_color(hilight);
+ hilight_match(server, target, nick, address, MSGLEVEL_PUBLIC, msg, &match_beg, &match_end);
+ color = (hilight == NULL || !hilight->nick) ? NULL : hilight_get_color(hilight);
print_channel = chanrec == NULL ||
!window_item_is_active((WI_ITEM_REC *) chanrec);
@@ -214,10 +215,13 @@ static void sig_message_public(SERVER_REC *server, const char *msg,
if (printnick == NULL)
printnick = nick;
+ TEXT_DEST_REC dest;
+ format_create_dest(&dest, server, target, level, NULL);
+ dest.hilight = hilight;
+ dest.match_beg = match_beg;
+ dest.match_end = match_end;
if (color != NULL) {
/* highlighted nick */
- TEXT_DEST_REC dest;
- format_create_dest(&dest, server, target, level, NULL);
hilight_update_text_dest(&dest,hilight);
if (!print_channel) /* message to active channel in window */
printformat_dest(&dest, TXT_PUBMSG_HILIGHT, color,
@@ -228,11 +232,11 @@ static void sig_message_public(SERVER_REC *server, const char *msg,
nickmode);
} else {
if (!print_channel)
- printformat(server, target, level,
+ printformat_dest(&dest,
for_me ? TXT_PUBMSG_ME : TXT_PUBMSG,
printnick, msg, nickmode);
else
- printformat(server, target, level,
+ printformat_dest(&dest,
for_me ? TXT_PUBMSG_ME_CHANNEL :
TXT_PUBMSG_CHANNEL,
printnick, target, msg, nickmode);
diff --git a/src/fe-common/core/formats.c b/src/fe-common/core/formats.c
index ccf48394..b95b3966 100644
--- a/src/fe-common/core/formats.c
+++ b/src/fe-common/core/formats.c
@@ -416,6 +416,8 @@ void format_create_dest_tag(TEXT_DEST_REC *dest, void *server,
dest->server_tag = server != NULL ? SERVER(server)->tag : server_tag;
dest->target = target;
dest->level = level;
+ dest->match_beg = 0;
+ dest->match_end = 0;
dest->window = window != NULL ? window :
window_find_closest(server, target, level);
}
diff --git a/src/fe-common/core/formats.h b/src/fe-common/core/formats.h
index 07e1832c..484105f9 100644
--- a/src/fe-common/core/formats.h
+++ b/src/fe-common/core/formats.h
@@ -45,6 +45,9 @@ struct _FORMAT_REC {
#define PRINT_FLAG_SET_SERVERTAG 0x0010
#define PRINT_FLAG_UNSET_SERVERTAG 0x0020
+// FIXME: sould use better
+typedef struct _HILIGHT_REC HILIGHT_REC;
+
typedef struct _TEXT_DEST_REC {
WINDOW_REC *window;
SERVER_REC *server;
@@ -52,6 +55,9 @@ typedef struct _TEXT_DEST_REC {
const char *target;
int level;
+ HILIGHT_REC *hilight;
+ int match_beg;
+ int match_end;
int hilight_priority;
char *hilight_color;
int flags;
diff --git a/src/fe-common/core/hilight-text.c b/src/fe-common/core/hilight-text.c
index 9822de1e..2c0075ec 100644
--- a/src/fe-common/core/hilight-text.c
+++ b/src/fe-common/core/hilight-text.c
@@ -325,11 +325,10 @@ static void sig_print_text(TEXT_DEST_REC *dest, const char *text,
if (dest->level & MSGLEVEL_NOHILIGHT)
return;
- hilight_start = hilight_end = 0;
- hilight = hilight_match(dest->server, dest->target,
- NULL, NULL, dest->level, stripped,
- &hilight_start,
- &hilight_end);
+ hilight_start = dest->match_beg;
+ hilight_end = dest->match_end;
+ hilight = dest->hilight;
+
if (hilight == NULL)
return;
diff --git a/src/fe-common/core/hilight-text.h b/src/fe-common/core/hilight-text.h
index 1692b8ab..fa083882 100644
--- a/src/fe-common/core/hilight-text.h
+++ b/src/fe-common/core/hilight-text.h
@@ -7,7 +7,7 @@
#include "formats.h"
-typedef struct _HILIGHT_REC HILIGHT_REC;
+//typedef struct _HILIGHT_REC HILIGHT_REC;
struct _HILIGHT_REC {
char *text;