Apply clang-format to nick column code

Formatted all modified files according to irssi's .clang-format rules:
- src/fe-common/core/fe-expandos.c
- src/fe-common/core/formats.c
- src/fe-common/core/fe-messages.c

Key formatting changes:
- Indentation: spaces → tabs (IndentWidth: 8, UseTab: ForIndentation)
- Line breaking: ColumnLimit: 100, BreakBeforeBraces: Linux
- Alignment: AlignAfterOpenBracket: Align
- Spacing: proper spacing around operators and parentheses

Code functionality unchanged - purely cosmetic formatting
to match irssi project standards.

Timestamp: 2025-01-25 02:40
This commit is contained in:
kofany 2025-08-25 02:45:12 +02:00
commit 781d27e245
3 changed files with 385 additions and 455 deletions

View file

@ -53,7 +53,8 @@ static char *expando_winname(SERVER_REC *server, void *item, int *free_ret)
static int count_nick_chars(const char *str) static int count_nick_chars(const char *str)
{ {
int count = 0; int count = 0;
if (!str) return 0; if (!str)
return 0;
for (const char *p = str; *p; p++) { for (const char *p = str; *p; p++) {
/* Alfanumeryczne */ /* Alfanumeryczne */
@ -61,9 +62,8 @@ static int count_nick_chars(const char *str)
count++; count++;
} }
/* Specjalne znaki nicka - zgodnie z isnickchar z fe-messages.c */ /* Specjalne znaki nicka - zgodnie z isnickchar z fe-messages.c */
else if (*p == '`' || *p == '-' || *p == '_' || else if (*p == '`' || *p == '-' || *p == '_' || *p == '[' || *p == ']' ||
*p == '[' || *p == ']' || *p == '{' || *p == '}' || *p == '{' || *p == '}' || *p == '|' || *p == '\\' || *p == '^') {
*p == '|' || *p == '\\' || *p == '^') {
count++; count++;
} }
/* Ignoruje kody kolorów %B %N %Y %n itp. */ /* Ignoruje kody kolorów %B %N %Y %n itp. */
@ -100,8 +100,6 @@ static char *expando_nickalign(SERVER_REC *server, void *item, int *free_ret)
padding = width - total_chars; padding = width - total_chars;
} }
*free_ret = TRUE; *free_ret = TRUE;
return g_strnfill(padding, ' '); return g_strnfill(padding, ' ');
} }
@ -113,8 +111,6 @@ static char *expando_nicktrunc(SERVER_REC *server, void *item, int *free_ret)
const char *mode; const char *mode;
char *result; char *result;
/* Gdy wyłączone - zwróć oryginalny nick */ /* Gdy wyłączone - zwróć oryginalny nick */
if (!settings_get_bool("nick_column_enabled")) { if (!settings_get_bool("nick_column_enabled")) {
return current_nick ? current_nick : ""; return current_nick ? current_nick : "";
@ -139,12 +135,9 @@ static char *expando_nicktrunc(SERVER_REC *server, void *item, int *free_ret)
/* Przytnij nick i dodaj >> */ /* Przytnij nick i dodaj >> */
result = g_strdup_printf("%.*s>>", available_for_nick, current_nick); result = g_strdup_printf("%.*s>>", available_for_nick, current_nick);
} else { } else {
/* Mode sam za długi */ /* Mode sam za długi */
result = g_strdup(">>"); result = g_strdup(">>");
} }
*free_ret = TRUE; *free_ret = TRUE;
return result; return result;
@ -173,17 +166,13 @@ void clear_nick_context(void)
void fe_expandos_init(void) void fe_expandos_init(void)
{ {
expando_create("winref", expando_winref, expando_create("winref", expando_winref, "window changed", EXPANDO_ARG_NONE,
"window changed", EXPANDO_ARG_NONE,
"window refnum changed", EXPANDO_ARG_WINDOW, NULL); "window refnum changed", EXPANDO_ARG_WINDOW, NULL);
expando_create("winname", expando_winname, expando_create("winname", expando_winname, "window changed", EXPANDO_ARG_NONE,
"window changed", EXPANDO_ARG_NONE,
"window name changed", EXPANDO_ARG_WINDOW, NULL); "window name changed", EXPANDO_ARG_WINDOW, NULL);
expando_create("nickalign", expando_nickalign, expando_create("nickalign", expando_nickalign, "message public", EXPANDO_ARG_NONE,
"message public", EXPANDO_ARG_NONE,
"message own_public", EXPANDO_ARG_NONE, NULL); "message own_public", EXPANDO_ARG_NONE, NULL);
expando_create("nicktrunc", expando_nicktrunc, expando_create("nicktrunc", expando_nicktrunc, "message public", EXPANDO_ARG_NONE,
"message public", EXPANDO_ARG_NONE,
"message own_public", EXPANDO_ARG_NONE, NULL); "message own_public", EXPANDO_ARG_NONE, NULL);
} }

View file

@ -43,9 +43,8 @@ void clear_nick_context(void);
#define ishighalnum(c) ((unsigned char) (c) >= 128 || i_isalnum(c)) #define ishighalnum(c) ((unsigned char) (c) >= 128 || i_isalnum(c))
#define isnickchar(a) \ #define isnickchar(a) \
(i_isalnum(a) || (a) == '`' || (a) == '-' || (a) == '_' || \ (i_isalnum(a) || (a) == '`' || (a) == '-' || (a) == '_' || (a) == '[' || (a) == ']' || \
(a) == '[' || (a) == ']' || (a) == '{' || (a) == '}' || \ (a) == '{' || (a) == '}' || (a) == '|' || (a) == '\\' || (a) == '^')
(a) == '|' || (a) == '\\' || (a) == '^')
GHashTable *printnicks; GHashTable *printnicks;
@ -82,10 +81,10 @@ char *expand_emphasis(WI_ITEM_REC *item, const char *text)
that the matching end marker ends a word */ that the matching end marker ends a word */
if ((pos > 0 && bgn[-1] != ' ') || !ishighalnum(bgn[1])) if ((pos > 0 && bgn[-1] != ' ') || !ishighalnum(bgn[1]))
continue; continue;
if ((end = strchr(bgn+1, *bgn)) == NULL) if ((end = strchr(bgn + 1, *bgn)) == NULL)
continue; continue;
if (!ishighalnum(end[-1]) || ishighalnum(end[1]) || if (!ishighalnum(end[-1]) || ishighalnum(end[1]) || end[1] == type ||
end[1] == type || end[1] == '*' || end[1] == '_' || end[1] == '*' || end[1] == '_' ||
/* special case for italics to not emphasise /* special case for italics to not emphasise
common paths by skipping /.../.X */ common paths by skipping /.../.X */
(type == 29 && i_ispunct(end[1]) && ishighalnum(end[2]))) (type == 29 && i_ispunct(end[1]) && ishighalnum(end[2])))
@ -103,7 +102,8 @@ char *expand_emphasis(WI_ITEM_REC *item, const char *text)
end[1] = '\0'; end[1] = '\0';
found = nicklist_find(CHANNEL(item), bgn) != NULL; found = nicklist_find(CHANNEL(item), bgn) != NULL;
end[1] = c; end[1] = c;
if (found) continue; if (found)
continue;
/* check if the whole 'word' (e.g. "_foo_^") is a nick /* check if the whole 'word' (e.g. "_foo_^") is a nick
in "_foo_^ ", end will be the second _, end2 the ^ */ in "_foo_^ ", end will be the second _, end2 the ^ */
@ -114,22 +114,24 @@ char *expand_emphasis(WI_ITEM_REC *item, const char *text)
end2[1] = '\0'; end2[1] = '\0';
found = nicklist_find(CHANNEL(item), bgn) != NULL; found = nicklist_find(CHANNEL(item), bgn) != NULL;
end2[1] = c; end2[1] = c;
if (found) continue; if (found)
continue;
} }
/* allow only *word* emphasis, not *multiple words* */ /* allow only *word* emphasis, not *multiple words* */
if (!settings_get_bool("emphasis_multiword")) { if (!settings_get_bool("emphasis_multiword")) {
char *c; char *c;
for (c = bgn+1; c != end; c++) { for (c = bgn + 1; c != end; c++) {
if (!ishighalnum(*c)) if (!ishighalnum(*c))
break; break;
} }
if (c != end) continue; if (c != end)
continue;
} }
if (settings_get_bool("emphasis_replace")) { if (settings_get_bool("emphasis_replace")) {
*bgn = *end = type; *bgn = *end = type;
pos += (end-bgn); pos += (end - bgn);
} else { } else {
g_string_insert_c(str, pos, type); g_string_insert_c(str, pos, type);
pos += (end - bgn) + 2; pos += (end - bgn) + 2;
@ -165,13 +167,11 @@ char *channel_get_nickmode(CHANNEL_REC *channel, const char *nick)
{ {
g_return_val_if_fail(nick != NULL, NULL); g_return_val_if_fail(nick != NULL, NULL);
return channel_get_nickmode_rec(channel == NULL ? NULL : return channel_get_nickmode_rec(channel == NULL ? NULL : nicklist_find(channel, nick));
nicklist_find(channel, nick));
} }
static void sig_message_public(SERVER_REC *server, const char *msg, static void sig_message_public(SERVER_REC *server, const char *msg, const char *nick,
const char *nick, const char *address, const char *address, const char *target, NICK_REC *nickrec)
const char *target, NICK_REC *nickrec)
{ {
CHANNEL_REC *chanrec; CHANNEL_REC *chanrec;
const char *printnick; const char *printnick;
@ -186,16 +186,16 @@ static void sig_message_public(SERVER_REC *server, const char *msg,
if (nickrec == NULL && chanrec != NULL) if (nickrec == NULL && chanrec != NULL)
nickrec = nicklist_find(chanrec, nick); nickrec = nicklist_find(chanrec, nick);
for_me = !settings_get_bool("hilight_nick_matches") ? FALSE : for_me = !settings_get_bool("hilight_nick_matches") ?
FALSE :
!settings_get_bool("hilight_nick_matches_everywhere") ? !settings_get_bool("hilight_nick_matches_everywhere") ?
nick_match_msg(chanrec, msg, server->nick) : nick_match_msg(chanrec, msg, server->nick) :
nick_match_msg_everywhere(chanrec, msg, server->nick); nick_match_msg_everywhere(chanrec, msg, server->nick);
hilight = for_me ? NULL : hilight =
hilight_match_nick(server, target, nick, address, MSGLEVEL_PUBLIC, msg); for_me ? NULL : hilight_match_nick(server, target, nick, address, MSGLEVEL_PUBLIC, msg);
color = (hilight == NULL) ? NULL : hilight_get_color(hilight); color = (hilight == NULL) ? NULL : hilight_get_color(hilight);
print_channel = chanrec == NULL || print_channel = chanrec == NULL || !window_item_is_active((WI_ITEM_REC *) chanrec);
!window_item_is_active((WI_ITEM_REC *) chanrec);
if (!print_channel && settings_get_bool("print_active_channel") && if (!print_channel && settings_get_bool("print_active_channel") &&
window_item_window((WI_ITEM_REC *) chanrec)->items->next != NULL) window_item_window((WI_ITEM_REC *) chanrec)->items->next != NULL)
print_channel = TRUE; print_channel = TRUE;
@ -217,8 +217,7 @@ static void sig_message_public(SERVER_REC *server, const char *msg,
/* get nick mode & nick what to print the msg with /* get nick mode & nick what to print the msg with
(in case there's multiple identical nicks) */ (in case there's multiple identical nicks) */
nickmode = channel_get_nickmode_rec(nickrec); nickmode = channel_get_nickmode_rec(nickrec);
printnick = nickrec == NULL ? nick : printnick = nickrec == NULL ? nick : g_hash_table_lookup(printnicks, nickrec);
g_hash_table_lookup(printnicks, nickrec);
if (printnick == NULL) if (printnick == NULL)
printnick = nick; printnick = nick;
@ -232,23 +231,19 @@ static void sig_message_public(SERVER_REC *server, const char *msg,
dest.nick = nick; dest.nick = nick;
if (color != NULL) { if (color != NULL) {
/* highlighted nick */ /* highlighted nick */
hilight_update_text_dest(&dest,hilight); hilight_update_text_dest(&dest, hilight);
if (!print_channel) /* message to active channel in window */ if (!print_channel) /* message to active channel in window */
printformat_dest(&dest, TXT_PUBMSG_HILIGHT, color, printformat_dest(&dest, TXT_PUBMSG_HILIGHT, color, printnick, msg,
printnick, msg, nickmode);
else /* message to not existing/active channel */
printformat_dest(&dest, TXT_PUBMSG_HILIGHT_CHANNEL,
color, printnick, target, msg,
nickmode); nickmode);
else /* message to not existing/active channel */
printformat_dest(&dest, TXT_PUBMSG_HILIGHT_CHANNEL, color, printnick,
target, msg, nickmode);
} else { } else {
if (!print_channel) if (!print_channel)
printformat_dest(&dest, printformat_dest(&dest, for_me ? TXT_PUBMSG_ME : TXT_PUBMSG, printnick, msg,
for_me ? TXT_PUBMSG_ME : TXT_PUBMSG, nickmode);
printnick, msg, nickmode);
else else
printformat_dest(&dest, printformat_dest(&dest, for_me ? TXT_PUBMSG_ME_CHANNEL : TXT_PUBMSG_CHANNEL,
for_me ? TXT_PUBMSG_ME_CHANNEL :
TXT_PUBMSG_CHANNEL,
printnick, target, msg, nickmode); printnick, target, msg, nickmode);
} }
@ -257,8 +252,8 @@ static void sig_message_public(SERVER_REC *server, const char *msg,
g_free_not_null(color); g_free_not_null(color);
} }
static void sig_message_private(SERVER_REC *server, const char *msg, static void sig_message_private(SERVER_REC *server, const char *msg, const char *nick,
const char *nick, const char *address, const char *target) const char *address, const char *target)
{ {
QUERY_REC *query; QUERY_REC *query;
char *freemsg = NULL; char *freemsg = NULL;
@ -276,19 +271,18 @@ static void sig_message_private(SERVER_REC *server, const char *msg,
if (own) { if (own) {
printformat(server, target, level, printformat(server, target, level,
query == NULL ? TXT_OWN_MSG_PRIVATE : query == NULL ? TXT_OWN_MSG_PRIVATE : TXT_OWN_MSG_PRIVATE_QUERY, target,
TXT_OWN_MSG_PRIVATE_QUERY, target, msg, server->nick); msg, server->nick);
} else { } else {
printformat(server, nick, level, printformat(server, nick, level,
query == NULL ? TXT_MSG_PRIVATE : query == NULL ? TXT_MSG_PRIVATE : TXT_MSG_PRIVATE_QUERY, nick, address,
TXT_MSG_PRIVATE_QUERY, nick, address, msg); msg);
} }
g_free_not_null(freemsg); g_free_not_null(freemsg);
} }
static void sig_message_own_public(SERVER_REC *server, const char *msg, static void sig_message_own_public(SERVER_REC *server, const char *msg, const char *target)
const char *target)
{ {
WINDOW_REC *window; WINDOW_REC *window;
CHANNEL_REC *channel; CHANNEL_REC *channel;
@ -306,14 +300,12 @@ static void sig_message_own_public(SERVER_REC *server, const char *msg,
update_nick_context(server->nick, nickmode); update_nick_context(server->nick, nickmode);
} }
window = channel == NULL ? NULL : window = channel == NULL ? NULL : window_item_window((WI_ITEM_REC *) channel);
window_item_window((WI_ITEM_REC *) channel);
print_channel = window == NULL || print_channel = window == NULL || window->active != (WI_ITEM_REC *) channel;
window->active != (WI_ITEM_REC *) channel;
if (!print_channel && settings_get_bool("print_active_channel") && if (!print_channel && settings_get_bool("print_active_channel") && window != NULL &&
window != NULL && g_slist_length(window->items) > 1) g_slist_length(window->items) > 1)
print_channel = TRUE; print_channel = TRUE;
if (settings_get_bool("emphasis")) if (settings_get_bool("emphasis"))
@ -331,8 +323,8 @@ static void sig_message_own_public(SERVER_REC *server, const char *msg,
g_free_not_null(freemsg); g_free_not_null(freemsg);
} }
static void sig_message_own_private(SERVER_REC *server, const char *msg, static void sig_message_own_private(SERVER_REC *server, const char *msg, const char *target,
const char *target, const char *origtarget) const char *origtarget)
{ {
QUERY_REC *query; QUERY_REC *query;
char *freemsg = NULL; char *freemsg = NULL;
@ -347,8 +339,7 @@ static void sig_message_own_private(SERVER_REC *server, const char *msg,
g_strcmp0(origtarget, ".") == 0); g_strcmp0(origtarget, ".") == 0);
printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE,
*origtarget == ',' ? TXT_NO_MSGS_GOT : *origtarget == ',' ? TXT_NO_MSGS_GOT : TXT_NO_MSGS_SENT);
TXT_NO_MSGS_SENT);
signal_stop(); signal_stop();
return; return;
} }
@ -358,17 +349,15 @@ static void sig_message_own_private(SERVER_REC *server, const char *msg,
if (settings_get_bool("emphasis")) if (settings_get_bool("emphasis"))
msg = freemsg = expand_emphasis((WI_ITEM_REC *) query, msg); msg = freemsg = expand_emphasis((WI_ITEM_REC *) query, msg);
printformat(server, target, printformat(server, target, MSGLEVEL_MSGS | MSGLEVEL_NOHILIGHT | MSGLEVEL_NO_ACT,
MSGLEVEL_MSGS | MSGLEVEL_NOHILIGHT | MSGLEVEL_NO_ACT, query == NULL ? TXT_OWN_MSG_PRIVATE : TXT_OWN_MSG_PRIVATE_QUERY, target, msg,
query == NULL ? TXT_OWN_MSG_PRIVATE : server->nick);
TXT_OWN_MSG_PRIVATE_QUERY, target, msg, server->nick);
g_free_not_null(freemsg); g_free_not_null(freemsg);
} }
static void sig_message_join(SERVER_REC *server, const char *channel, static void sig_message_join(SERVER_REC *server, const char *channel, const char *nick,
const char *nick, const char *address, const char *address, const char *account, const char *realname)
const char *account, const char *realname)
{ {
int level = MSGLEVEL_JOINS; int level = MSGLEVEL_JOINS;
@ -376,37 +365,33 @@ static void sig_message_join(SERVER_REC *server, const char *channel,
if (settings_get_bool("show_extended_join")) { if (settings_get_bool("show_extended_join")) {
int txt; int txt;
if (*account == '\0') txt = TXT_JOIN; if (*account == '\0')
else if (g_strcmp0("*", account) == 0) txt = TXT_JOIN_EXTENDED; txt = TXT_JOIN;
else txt = TXT_JOIN_EXTENDED_ACCOUNT; else if (g_strcmp0("*", account) == 0)
printformat(server, channel, level, txt = TXT_JOIN_EXTENDED;
txt, nick, address, channel, account, realname); else
txt = TXT_JOIN_EXTENDED_ACCOUNT;
printformat(server, channel, level, txt, nick, address, channel, account, realname);
} else { } else {
printformat(server, channel, level, printformat(server, channel, level, TXT_JOIN, nick, address, channel, account,
TXT_JOIN, nick, address, channel, account, realname); realname);
} }
} }
static void sig_message_part(SERVER_REC *server, const char *channel, static void sig_message_part(SERVER_REC *server, const char *channel, const char *nick,
const char *nick, const char *address, const char *address, const char *reason)
const char *reason)
{ {
int level = MSGLEVEL_PARTS; int level = MSGLEVEL_PARTS;
ignore_check_plus(server, nick, address, channel, NULL, &level, FALSE); ignore_check_plus(server, nick, address, channel, NULL, &level, FALSE);
printformat(server, channel, level, printformat(server, channel, level, TXT_PART, nick, address, channel, reason);
TXT_PART, nick, address, channel, reason);
} }
static void spread_server_message_to_windows(SERVER_REC *server, gboolean once, static void spread_server_message_to_windows(SERVER_REC *server, gboolean once, gboolean in_query,
gboolean in_query, int base_level, int txt, int txt_once,
int base_level,
int txt, int txt_once,
const char *nick, const char *address, const char *nick, const char *address,
const char *data, const char *data, const char *ignore_data)
const char *ignore_data
)
{ {
WINDOW_REC *window; WINDOW_REC *window;
GString *chans; GString *chans;
@ -419,7 +404,8 @@ static void spread_server_message_to_windows(SERVER_REC *server, gboolean once,
print_channel = NULL; print_channel = NULL;
count = 0; windows = NULL; count = 0;
windows = NULL;
chans = g_string_new(NULL); chans = g_string_new(NULL);
for (tmp = server->channels; tmp != NULL; tmp = tmp->next) { for (tmp = server->channels; tmp != NULL; tmp = tmp->next) {
CHANNEL_REC *rec; CHANNEL_REC *rec;
@ -430,14 +416,13 @@ static void spread_server_message_to_windows(SERVER_REC *server, gboolean once,
continue; continue;
} }
if (ignore_check_plus(server, nick, address, rec->visible_name, if (ignore_check_plus(server, nick, address, rec->visible_name, ignore_data, &level,
ignore_data, &level, TRUE)) { TRUE)) {
count++; count++;
continue; continue;
} }
if (print_channel == NULL || if (print_channel == NULL || active_win->active == (WI_ITEM_REC *) rec) {
active_win->active == (WI_ITEM_REC *) rec) {
print_channel = rec->visible_name; print_channel = rec->visible_name;
} }
@ -447,10 +432,8 @@ static void spread_server_message_to_windows(SERVER_REC *server, gboolean once,
window = window_item_window((WI_ITEM_REC *) rec); window = window_item_window((WI_ITEM_REC *) rec);
if (g_slist_find(windows, window) == NULL) { if (g_slist_find(windows, window) == NULL) {
windows = g_slist_prepend(windows, window); windows = g_slist_prepend(windows, window);
printformat(server, rec->visible_name, printformat(server, rec->visible_name, level, txt, nick, address,
level, data, rec->visible_name);
txt, nick, address, data,
rec->visible_name);
} }
} }
count++; count++;
@ -462,38 +445,30 @@ static void spread_server_message_to_windows(SERVER_REC *server, gboolean once,
display the change there too */ display the change there too */
QUERY_REC *query = query_find(server, nick); QUERY_REC *query = query_find(server, nick);
if (query != NULL) { if (query != NULL) {
printformat(server, nick, level, printformat(server, nick, level, txt, nick, address, data, "");
txt, nick, address, data, "");
} }
} }
if (once || count == 0) { if (once || count == 0) {
if (chans->len > 0) { if (chans->len > 0) {
g_string_truncate(chans, chans->len-1); g_string_truncate(chans, chans->len - 1);
} }
printformat(server, print_channel, base_level, printformat(server, print_channel, base_level, count <= 1 ? txt : txt_once, nick,
count <= 1 ? txt : txt_once, address, data, chans->str);
nick, address, data, chans->str);
} }
g_string_free(chans, TRUE); g_string_free(chans, TRUE);
} }
static void sig_message_host_changed(SERVER_REC *server, const char *nick, static void sig_message_host_changed(SERVER_REC *server, const char *nick, const char *address,
const char *address, const char *old_address) const char *old_address)
{ {
spread_server_message_to_windows( spread_server_message_to_windows(server, settings_get_bool("show_quit_once"), TRUE,
server, MSGLEVEL_JOINS, TXT_HOST_CHANGED, TXT_HOST_CHANGED, nick,
settings_get_bool("show_quit_once"), address, old_address, NULL);
TRUE,
MSGLEVEL_JOINS,
TXT_HOST_CHANGED, TXT_HOST_CHANGED,
nick, address, old_address,
NULL
);
} }
static void sig_message_account_changed(SERVER_REC *server, const char *nick, static void sig_message_account_changed(SERVER_REC *server, const char *nick, const char *address,
const char *address, const char *account) const char *account)
{ {
gboolean logged_in; gboolean logged_in;
int txt; int txt;
@ -504,64 +479,46 @@ static void sig_message_account_changed(SERVER_REC *server, const char *nick,
logged_in = g_strcmp0("*", account) != 0; logged_in = g_strcmp0("*", account) != 0;
txt = logged_in ? TXT_LOGGED_IN : TXT_LOGGED_OUT; txt = logged_in ? TXT_LOGGED_IN : TXT_LOGGED_OUT;
spread_server_message_to_windows( spread_server_message_to_windows(server, settings_get_bool("show_quit_once"), TRUE,
server, MSGLEVEL_MODES, txt, txt, nick, address, account,
settings_get_bool("show_quit_once"), "account");
TRUE,
MSGLEVEL_MODES,
txt, txt,
nick, address, account,
"account"
);
} }
static void sig_message_quit(SERVER_REC *server, const char *nick, static void sig_message_quit(SERVER_REC *server, const char *nick, const char *address,
const char *address, const char *reason) const char *reason)
{ {
spread_server_message_to_windows( spread_server_message_to_windows(server, settings_get_bool("show_quit_once"), TRUE,
server, MSGLEVEL_QUITS, TXT_QUIT, TXT_QUIT_ONCE, nick, address,
settings_get_bool("show_quit_once"), reason, reason);
TRUE,
MSGLEVEL_QUITS,
TXT_QUIT, TXT_QUIT_ONCE,
nick, address, reason,
reason
);
} }
static void sig_message_kick(SERVER_REC *server, const char *channel, static void sig_message_kick(SERVER_REC *server, const char *channel, const char *nick,
const char *nick, const char *kicker, const char *kicker, const char *address, const char *reason)
const char *address, const char *reason)
{ {
int level = MSGLEVEL_KICKS; int level = MSGLEVEL_KICKS;
ignore_check_plus(server, kicker, address, channel, reason, &level, FALSE); ignore_check_plus(server, kicker, address, channel, reason, &level, FALSE);
printformat(server, channel, level, printformat(server, channel, level, TXT_KICK, nick, channel, kicker, reason, address);
TXT_KICK, nick, channel, kicker, reason, address);
} }
static void print_nick_change_channel(SERVER_REC *server, const char *channel, static void print_nick_change_channel(SERVER_REC *server, const char *channel, const char *newnick,
const char *newnick, const char *oldnick, const char *oldnick, const char *address, int ownnick)
const char *address,
int ownnick)
{ {
int level; int level;
level = MSGLEVEL_NICKS; level = MSGLEVEL_NICKS;
if (ownnick) level |= MSGLEVEL_NO_ACT; if (ownnick)
if (ignore_check_plus(server, oldnick, address, level |= MSGLEVEL_NO_ACT;
channel, newnick, &level, TRUE)) if (ignore_check_plus(server, oldnick, address, channel, newnick, &level, TRUE))
return; return;
printformat(server, channel, level, printformat(server, channel, level, ownnick ? TXT_YOUR_NICK_CHANGED : TXT_NICK_CHANGED,
ownnick ? TXT_YOUR_NICK_CHANGED : TXT_NICK_CHANGED,
oldnick, newnick, channel, address); oldnick, newnick, channel, address);
} }
static void print_nick_change(SERVER_REC *server, const char *newnick, static void print_nick_change(SERVER_REC *server, const char *newnick, const char *oldnick,
const char *oldnick, const char *address, const char *address, int ownnick)
int ownnick)
{ {
GSList *tmp, *windows; GSList *tmp, *windows;
int msgprint; int msgprint;
@ -573,59 +530,55 @@ static void print_nick_change(SERVER_REC *server, const char *newnick,
windows = NULL; windows = NULL;
for (tmp = server->channels; tmp != NULL; tmp = tmp->next) { for (tmp = server->channels; tmp != NULL; tmp = tmp->next) {
CHANNEL_REC *channel = tmp->data; CHANNEL_REC *channel = tmp->data;
WINDOW_REC *window = WINDOW_REC *window = window_item_window((WI_ITEM_REC *) channel);
window_item_window((WI_ITEM_REC *) channel);
if (nicklist_find(channel, newnick) == NULL || if (nicklist_find(channel, newnick) == NULL ||
g_slist_find(windows, window) != NULL) g_slist_find(windows, window) != NULL)
continue; continue;
windows = g_slist_append(windows, window); windows = g_slist_append(windows, window);
print_nick_change_channel(server, channel->visible_name, print_nick_change_channel(server, channel->visible_name, newnick, oldnick, address,
newnick, oldnick, address, ownnick); ownnick);
msgprint = TRUE; msgprint = TRUE;
} }
g_slist_free(windows); g_slist_free(windows);
if (!msgprint && ownnick) { if (!msgprint && ownnick) {
printformat(server, NULL, MSGLEVEL_NICKS, printformat(server, NULL, MSGLEVEL_NICKS, TXT_YOUR_NICK_CHANGED, oldnick, newnick,
TXT_YOUR_NICK_CHANGED, oldnick, newnick, "", "", address);
address);
} }
} }
static void sig_message_nick(SERVER_REC *server, const char *newnick, static void sig_message_nick(SERVER_REC *server, const char *newnick, const char *oldnick,
const char *oldnick, const char *address) const char *address)
{ {
print_nick_change(server, newnick, oldnick, address, FALSE); print_nick_change(server, newnick, oldnick, address, FALSE);
} }
static void sig_message_own_nick(SERVER_REC *server, const char *newnick, static void sig_message_own_nick(SERVER_REC *server, const char *newnick, const char *oldnick,
const char *oldnick, const char *address) const char *address)
{ {
if (!settings_get_bool("show_own_nickchange_once")) if (!settings_get_bool("show_own_nickchange_once"))
print_nick_change(server, newnick, oldnick, address, TRUE); print_nick_change(server, newnick, oldnick, address, TRUE);
else { else {
printformat(server, NULL, MSGLEVEL_NICKS, printformat(server, NULL, MSGLEVEL_NICKS, TXT_YOUR_NICK_CHANGED, oldnick, newnick,
TXT_YOUR_NICK_CHANGED, oldnick, newnick, "", "", address);
address);
} }
} }
static void sig_message_invite(SERVER_REC *server, const char *channel, static void sig_message_invite(SERVER_REC *server, const char *channel, const char *nick,
const char *nick, const char *address) const char *address)
{ {
char *str; char *str;
str = show_lowascii(channel); str = show_lowascii(channel);
printformat(server, NULL, MSGLEVEL_INVITES, printformat(server, NULL, MSGLEVEL_INVITES, TXT_INVITE, nick, str, address);
TXT_INVITE, nick, str, address);
g_free(str); g_free(str);
} }
static void sig_message_invite_other(SERVER_REC *server, const char *channel, static void sig_message_invite_other(SERVER_REC *server, const char *channel, const char *invited,
const char *invited, const char *nick, const char *address) const char *nick, const char *address)
{ {
char *str; char *str;
int level = MSGLEVEL_INVITES; int level = MSGLEVEL_INVITES;
@ -633,45 +586,34 @@ static void sig_message_invite_other(SERVER_REC *server, const char *channel,
ignore_check_plus(server, nick, address, channel, invited, &level, FALSE); ignore_check_plus(server, nick, address, channel, invited, &level, FALSE);
str = show_lowascii(channel); str = show_lowascii(channel);
printformat(server, channel, level, printformat(server, channel, level, TXT_INVITE_OTHER, invited, nick, str, address);
TXT_INVITE_OTHER, invited, nick, str, address);
g_free(str); g_free(str);
} }
static void sig_message_topic(SERVER_REC *server, const char *channel, static void sig_message_topic(SERVER_REC *server, const char *channel, const char *topic,
const char *topic,
const char *nick, const char *address) const char *nick, const char *address)
{ {
int level = MSGLEVEL_TOPICS; int level = MSGLEVEL_TOPICS;
ignore_check_plus(server, nick, address, channel, topic, &level, FALSE); ignore_check_plus(server, nick, address, channel, topic, &level, FALSE);
printformat(server, channel, level, printformat(server, channel, level, *topic != '\0' ? TXT_NEW_TOPIC : TXT_TOPIC_UNSET, nick,
*topic != '\0' ? TXT_NEW_TOPIC : TXT_TOPIC_UNSET, channel, topic, address);
nick, channel, topic, address);
} }
static void sig_message_away_notify(SERVER_REC *server, const char *nick, static void sig_message_away_notify(SERVER_REC *server, const char *nick, const char *addr,
const char *addr, const char *awaymsg) const char *awaymsg)
{ {
int txt = *awaymsg == '\0' ? TXT_NOTIFY_UNAWAY_CHANNEL : int txt = *awaymsg == '\0' ? TXT_NOTIFY_UNAWAY_CHANNEL : TXT_NOTIFY_AWAY_CHANNEL;
TXT_NOTIFY_AWAY_CHANNEL;
if (!settings_get_bool("away_notify_public")) if (!settings_get_bool("away_notify_public"))
return; return;
spread_server_message_to_windows(server, FALSE, spread_server_message_to_windows(server, FALSE, FALSE, MSGLEVEL_CRAP, txt, txt, nick, addr,
FALSE, awaymsg, awaymsg);
MSGLEVEL_CRAP,
txt, txt,
nick, addr,
awaymsg,
awaymsg
);
} }
static int printnick_exists(NICK_REC *first, NICK_REC *ignore, static int printnick_exists(NICK_REC *first, NICK_REC *ignore, const char *nick)
const char *nick)
{ {
char *printnick; char *printnick;
@ -724,11 +666,15 @@ static void sig_nicklist_new(CHANNEL_REC *channel, NICK_REC *nick)
/* identical nick already exists, have to change it somehow.. */ /* identical nick already exists, have to change it somehow.. */
p = strchr(nick->host, '@'); p = strchr(nick->host, '@');
if (p == NULL) p = nick->host; else p++; if (p == NULL)
p = nick->host;
else
p++;
nickhost = g_strdup_printf("%s@%s", nick->nick, p); nickhost = g_strdup_printf("%s@%s", nick->nick, p);
p = strchr(nickhost+strlen(nick->nick), '.'); p = strchr(nickhost + strlen(nick->nick), '.');
if (p != NULL) *p = '\0'; if (p != NULL)
*p = '\0';
if (!printnick_exists(firstnick, nick, nickhost)) { if (!printnick_exists(firstnick, nick, nickhost)) {
/* use nick@host */ /* use nick@host */
@ -798,8 +744,7 @@ static void i_hash_free_value(void *key, void *value)
void fe_messages_init(void) void fe_messages_init(void)
{ {
printnicks = g_hash_table_new((GHashFunc) g_direct_hash, printnicks = g_hash_table_new((GHashFunc) g_direct_hash, (GCompareFunc) g_direct_equal);
(GCompareFunc) g_direct_equal);
settings_add_bool("lookandfeel", "hilight_nick_matches", TRUE); settings_add_bool("lookandfeel", "hilight_nick_matches", TRUE);
settings_add_bool("lookandfeel", "hilight_nick_matches_everywhere", FALSE); settings_add_bool("lookandfeel", "hilight_nick_matches_everywhere", FALSE);

View file

@ -63,8 +63,7 @@ int format_find_tag(const char *module, const char *tag)
return -1; return -1;
for (n = 0; formats[n].def != NULL; n++) { for (n = 0; formats[n].def != NULL; n++) {
if (formats[n].tag != NULL && if (formats[n].tag != NULL && g_ascii_strcasecmp(formats[n].tag, tag) == 0)
g_ascii_strcasecmp(formats[n].tag, tag) == 0)
return n; return n;
} }
@ -89,7 +88,8 @@ static void format_expand_code(const char **format, GString *out, int *flags)
set = TRUE; set = TRUE;
else if (**format == '-') else if (**format == '-')
set = FALSE; set = FALSE;
else switch (**format) { else
switch (**format) {
case 's': case 's':
case 'S': case 'S':
*flags |= !set ? PRINT_FLAG_UNSET_LINE_START : *flags |= !set ? PRINT_FLAG_UNSET_LINE_START :
@ -97,12 +97,12 @@ static void format_expand_code(const char **format, GString *out, int *flags)
PRINT_FLAG_SET_LINE_START_IRSSI; PRINT_FLAG_SET_LINE_START_IRSSI;
break; break;
case 't': case 't':
*flags |= set ? PRINT_FLAG_SET_TIMESTAMP : *flags |=
PRINT_FLAG_UNSET_TIMESTAMP; set ? PRINT_FLAG_SET_TIMESTAMP : PRINT_FLAG_UNSET_TIMESTAMP;
break; break;
case 'T': case 'T':
*flags |= set ? PRINT_FLAG_SET_SERVERTAG : *flags |=
PRINT_FLAG_UNSET_SERVERTAG; set ? PRINT_FLAG_SET_SERVERTAG : PRINT_FLAG_UNSET_SERVERTAG;
break; break;
} }
@ -116,18 +116,15 @@ void format_ext_color(GString *out, int bg, int color)
if (bg && color < 0x10) if (bg && color < 0x10)
g_string_append_c(out, FORMAT_COLOR_NOCHANGE); g_string_append_c(out, FORMAT_COLOR_NOCHANGE);
if (color < 0x10) if (color < 0x10)
g_string_append_c(out, color+'0'); g_string_append_c(out, color + '0');
else { else {
if (color < 0x60) if (color < 0x60)
g_string_append_c(out, bg ? FORMAT_COLOR_EXT1_BG g_string_append_c(out, bg ? FORMAT_COLOR_EXT1_BG : FORMAT_COLOR_EXT1);
: FORMAT_COLOR_EXT1);
else if (color < 0xb0) else if (color < 0xb0)
g_string_append_c(out, bg ? FORMAT_COLOR_EXT2_BG g_string_append_c(out, bg ? FORMAT_COLOR_EXT2_BG : FORMAT_COLOR_EXT2);
: FORMAT_COLOR_EXT2);
else else
g_string_append_c(out, bg ? FORMAT_COLOR_EXT3_BG g_string_append_c(out, bg ? FORMAT_COLOR_EXT3_BG : FORMAT_COLOR_EXT3);
: FORMAT_COLOR_EXT3); g_string_append_c(out, FORMAT_COLOR_NOCHANGE + ((color - 0x10) % 0x50));
g_string_append_c(out, FORMAT_COLOR_NOCHANGE + ((color-0x10)%0x50));
} }
if (!bg && color < 0x10) if (!bg && color < 0x10)
@ -166,8 +163,7 @@ void unformat_24bit_color(char **ptr, int off, int *fgcolor, int *bgcolor, int *
if (rgbx[3] & 0x1) { if (rgbx[3] & 0x1) {
*bgcolor = color; *bgcolor = color;
*flags |= GUI_PRINT_FLAG_COLOR_24_BG; *flags |= GUI_PRINT_FLAG_COLOR_24_BG;
} } else {
else {
*fgcolor = color; *fgcolor = color;
*flags |= GUI_PRINT_FLAG_COLOR_24_FG; *flags |= GUI_PRINT_FLAG_COLOR_24_FG;
} }
@ -294,7 +290,7 @@ int format_expand_styles(GString *out, const char **format, int *flags)
if ((*format)[1] < '0' || (*format)[1] > '7') if ((*format)[1] < '0' || (*format)[1] > '7')
break; break;
tmp = 16 + ((*format)[1]-'0'-1)*36; tmp = 16 + ((*format)[1] - '0' - 1) * 36;
if (tmp > 231) { if (tmp > 231) {
if (!isalpha((*format)[2])) if (!isalpha((*format)[2]))
break; break;
@ -303,8 +299,7 @@ int format_expand_styles(GString *out, const char **format, int *flags)
if (tmp > 255) if (tmp > 255)
break; break;
} } else if (tmp > 0) {
else if (tmp > 0) {
if (!isalnum((*format)[2])) if (!isalnum((*format)[2]))
break; break;
@ -314,8 +309,7 @@ int format_expand_styles(GString *out, const char **format, int *flags)
tmp += 10 + (*format)[2] - 'A'; tmp += 10 + (*format)[2] - 'A';
else else
tmp += (*format)[2] - '0'; tmp += (*format)[2] - '0';
} } else {
else {
if (!isxdigit((*format)[2])) if (!isxdigit((*format)[2]))
break; break;
@ -361,26 +355,28 @@ int format_expand_styles(GString *out, const char **format, int *flags)
if (p != NULL) { if (p != NULL) {
g_string_append_c(out, 4); g_string_append_c(out, 4);
g_string_append_c(out, FORMAT_COLOR_NOCHANGE); g_string_append_c(out, FORMAT_COLOR_NOCHANGE);
g_string_append_c(out, (char) ((int) (p-format_backs)+'0')); g_string_append_c(out, (char) ((int) (p - format_backs) + '0'));
break; break;
} }
/* check if it's a foreground color */ /* check if it's a foreground color */
if (fmt == 'p') fmt = 'm'; if (fmt == 'p')
fmt = 'm';
p = strchr(format_fores, fmt); p = strchr(format_fores, fmt);
if (p != NULL) { if (p != NULL) {
g_string_append_c(out, 4); g_string_append_c(out, 4);
g_string_append_c(out, (char) ((int) (p-format_fores)+'0')); g_string_append_c(out, (char) ((int) (p - format_fores) + '0'));
g_string_append_c(out, FORMAT_COLOR_NOCHANGE); g_string_append_c(out, FORMAT_COLOR_NOCHANGE);
break; break;
} }
/* check if it's a bold foreground color */ /* check if it's a bold foreground color */
if (fmt == 'P') fmt = 'M'; if (fmt == 'P')
fmt = 'M';
p = strchr(format_boldfores, fmt); p = strchr(format_boldfores, fmt);
if (p != NULL) { if (p != NULL) {
g_string_append_c(out, 4); g_string_append_c(out, 4);
g_string_append_c(out, (char) (8+(int) (p-format_boldfores)+'0')); g_string_append_c(out, (char) (8 + (int) (p - format_boldfores) + '0'));
g_string_append_c(out, FORMAT_COLOR_NOCHANGE); g_string_append_c(out, FORMAT_COLOR_NOCHANGE);
break; break;
} }
@ -391,8 +387,7 @@ int format_expand_styles(GString *out, const char **format, int *flags)
return retval; return retval;
} }
void format_read_arglist(va_list va, FORMAT_REC *format, void format_read_arglist(va_list va, FORMAT_REC *format, char **arglist, int arglist_size,
char **arglist, int arglist_size,
char *buffer, int buffer_size) char *buffer, int buffer_size)
{ {
int num, len, bufpos; int num, len, bufpos;
@ -416,10 +411,9 @@ void format_read_arglist(va_list va, FORMAT_REC *format,
break; break;
} }
arglist[num] = buffer+bufpos; arglist[num] = buffer + bufpos;
len = g_snprintf(buffer+bufpos, buffer_size-bufpos, len = g_snprintf(buffer + bufpos, buffer_size - bufpos, "%d", d);
"%d", d); bufpos += len + 1;
bufpos += len+1;
break; break;
} }
case FORMAT_LONG: { case FORMAT_LONG: {
@ -430,10 +424,9 @@ void format_read_arglist(va_list va, FORMAT_REC *format,
break; break;
} }
arglist[num] = buffer+bufpos; arglist[num] = buffer + bufpos;
len = g_snprintf(buffer+bufpos, buffer_size-bufpos, len = g_snprintf(buffer + bufpos, buffer_size - bufpos, "%ld", l);
"%ld", l); bufpos += len + 1;
bufpos += len+1;
break; break;
} }
case FORMAT_FLOAT: { case FORMAT_FLOAT: {
@ -444,10 +437,9 @@ void format_read_arglist(va_list va, FORMAT_REC *format,
break; break;
} }
arglist[num] = buffer+bufpos; arglist[num] = buffer + bufpos;
len = g_snprintf(buffer+bufpos, buffer_size-bufpos, len = g_snprintf(buffer + bufpos, buffer_size - bufpos, "%0.2f", f);
"%0.2f", f); bufpos += len + 1;
bufpos += len+1;
break; break;
} }
} }
@ -485,8 +477,7 @@ void format_create_dest_tag_meta(TEXT_DEST_REC *dest, void *server, const char *
dest->server_tag = server != NULL ? SERVER(server)->tag : server_tag; dest->server_tag = server != NULL ? SERVER(server)->tag : server_tag;
dest->target = target; dest->target = target;
dest->level = level; dest->level = level;
dest->window = window != NULL ? window : dest->window = window != NULL ? window : window_find_closest(server, target, level);
window_find_closest(server, target, level);
dest->meta = meta != NULL ? meta : global_meta; dest->meta = meta != NULL ? meta : global_meta;
} }
@ -583,7 +574,7 @@ int format_real_length(const char *str, int len)
} }
g_string_free(tmp, TRUE); g_string_free(tmp, TRUE);
return (int) (str-start); return (int) (str - start);
} }
char *format_string_expand(const char *text, int *flags) char *format_string_expand(const char *text, int *flags)
@ -596,7 +587,8 @@ char *format_string_expand(const char *text, int *flags)
out = g_string_new(NULL); out = g_string_new(NULL);
if (flags != NULL) *flags = 0; if (flags != NULL)
*flags = 0;
code = 0; code = 0;
while (*text != '\0') { while (*text != '\0') {
if (code == '%') { if (code == '%') {
@ -739,8 +731,7 @@ char *format_string_unexpand(const char *text, int flags)
return g_string_free(out, FALSE); return g_string_free(out, FALSE);
} }
static char *format_get_text_args(TEXT_DEST_REC *dest, static char *format_get_text_args(TEXT_DEST_REC *dest, const char *text, char **arglist)
const char *text, char **arglist)
{ {
GString *out; GString *out;
char code, *ret; char code, *ret;
@ -767,7 +758,8 @@ static char *format_get_text_args(TEXT_DEST_REC *dest,
char *ret; char *ret;
ret = parse_special((char **) &text, dest->server, ret = parse_special((char **) &text, dest->server,
dest->target == NULL ? NULL : dest->target == NULL ?
NULL :
window_item_find(dest->server, dest->target), window_item_find(dest->server, dest->target),
arglist, &need_free, NULL, 0); arglist, &need_free, NULL, 0);
@ -776,13 +768,15 @@ static char *format_get_text_args(TEXT_DEST_REC *dest,
mess up the next one or two characters */ mess up the next one or two characters */
int diff; int diff;
int len = strlen(ret); int len = strlen(ret);
while (len > 0 && ret[len-1] == 3) len--; while (len > 0 && ret[len - 1] == 3)
diff = strlen(ret)-len; len--;
diff = strlen(ret) - len;
g_string_append(out, ret); g_string_append(out, ret);
if (diff > 0) if (diff > 0)
g_string_truncate(out, out->len-diff); g_string_truncate(out, out->len - diff);
if (need_free) g_free(ret); if (need_free)
g_free(ret);
} }
code = 0; code = 0;
} else { } else {
@ -799,8 +793,8 @@ static char *format_get_text_args(TEXT_DEST_REC *dest,
return ret; return ret;
} }
char *format_get_text_theme(THEME_REC *theme, const char *module, char *format_get_text_theme(THEME_REC *theme, const char *module, TEXT_DEST_REC *dest,
TEXT_DEST_REC *dest, int formatnum, ...) int formatnum, ...)
{ {
va_list va; va_list va;
char *str; char *str;
@ -815,21 +809,18 @@ char *format_get_text_theme(THEME_REC *theme, const char *module,
return str; return str;
} }
char *format_get_text_theme_args(THEME_REC *theme, const char *module, char *format_get_text_theme_args(THEME_REC *theme, const char *module, TEXT_DEST_REC *dest,
TEXT_DEST_REC *dest, int formatnum, int formatnum, va_list va)
va_list va)
{ {
char *arglist[MAX_FORMAT_PARAMS]; char *arglist[MAX_FORMAT_PARAMS];
char buffer[DEFAULT_FORMAT_ARGLIST_SIZE]; char buffer[DEFAULT_FORMAT_ARGLIST_SIZE];
FORMAT_REC *formats; FORMAT_REC *formats;
formats = g_hash_table_lookup(default_formats, module); formats = g_hash_table_lookup(default_formats, module);
format_read_arglist(va, &formats[formatnum], format_read_arglist(va, &formats[formatnum], arglist, sizeof(arglist) / sizeof(char *),
arglist, sizeof(arglist)/sizeof(char *),
buffer, sizeof(buffer)); buffer, sizeof(buffer));
return format_get_text_theme_charargs(theme, module, dest, return format_get_text_theme_charargs(theme, module, dest, formatnum, arglist);
formatnum, arglist);
} }
/* Check if format number is a message format that needs nick column */ /* Check if format number is a message format that needs nick column */
@ -871,7 +862,8 @@ static char *apply_nick_column_formatting(const char *format, int formatnum)
char search_param[10], replace_param[20]; char search_param[10], replace_param[20];
int nick_param; int nick_param;
if (!format) return NULL; if (!format)
return NULL;
/* Get correct parameter number for nick in this format */ /* Get correct parameter number for nick in this format */
nick_param = get_nick_param_for_format(formatnum); nick_param = get_nick_param_for_format(formatnum);
@ -893,9 +885,8 @@ static char *apply_nick_column_formatting(const char *format, int formatnum)
return result; return result;
} }
char *format_get_text_theme_charargs(THEME_REC *theme, const char *module, char *format_get_text_theme_charargs(THEME_REC *theme, const char *module, TEXT_DEST_REC *dest,
TEXT_DEST_REC *dest, int formatnum, int formatnum, char **args)
char **args)
{ {
MODULE_THEME_REC *module_theme; MODULE_THEME_REC *module_theme;
char *text, *modified_text = NULL; char *text, *modified_text = NULL;
@ -912,17 +903,13 @@ char *format_get_text_theme_charargs(THEME_REC *theme, const char *module,
/* Apply nick column formatting if enabled and this is a message format */ /* Apply nick column formatting if enabled and this is a message format */
/* Additional protection: avoid recursion during timestamp formatting */ /* Additional protection: avoid recursion during timestamp formatting */
if (settings_get_bool("nick_column_enabled") && if (settings_get_bool("nick_column_enabled") && g_strcmp0(module, "fe-common/core") == 0 &&
g_strcmp0(module, "fe-common/core") == 0 && is_message_format(formatnum) && nick_formatting_depth == 0) { /* Prevent recursion */
is_message_format(formatnum) &&
nick_formatting_depth == 0) { /* Prevent recursion */
nick_formatting_depth++; nick_formatting_depth++;
modified_text = apply_nick_column_formatting(text, formatnum); modified_text = apply_nick_column_formatting(text, formatnum);
text = modified_text; text = modified_text;
nick_formatting_depth--; nick_formatting_depth--;
} }
result = format_get_text_args(dest, text, args); result = format_get_text_args(dest, text, args);
@ -933,8 +920,7 @@ char *format_get_text_theme_charargs(THEME_REC *theme, const char *module,
return result; return result;
} }
char *format_get_text(const char *module, WINDOW_REC *window, char *format_get_text(const char *module, WINDOW_REC *window, void *server, const char *target,
void *server, const char *target,
int formatnum, ...) int formatnum, ...)
{ {
TEXT_DEST_REC dest; TEXT_DEST_REC dest;
@ -1001,8 +987,7 @@ char *format_add_lineend(const char *text, const char *linestart)
return ret; return ret;
} }
#define LINE_START_IRSSI_LEVEL \ #define LINE_START_IRSSI_LEVEL (MSGLEVEL_CLIENTERROR | MSGLEVEL_CLIENTNOTICE)
(MSGLEVEL_CLIENTERROR | MSGLEVEL_CLIENTNOTICE)
#define NOT_LINE_START_LEVEL \ #define NOT_LINE_START_LEVEL \
(MSGLEVEL_NEVER | MSGLEVEL_LASTLOG | MSGLEVEL_CLIENTCRAP | MSGLEVEL_MSGS | \ (MSGLEVEL_NEVER | MSGLEVEL_LASTLOG | MSGLEVEL_CLIENTCRAP | MSGLEVEL_MSGS | \
@ -1049,10 +1034,9 @@ static char *get_timestamp(THEME_REC *theme, TEXT_DEST_REC *dest, time_t t)
return NULL; return NULL;
if ((dest->flags & PRINT_FLAG_SET_TIMESTAMP) == 0 && if ((dest->flags & PRINT_FLAG_SET_TIMESTAMP) == 0 &&
(dest->level & (MSGLEVEL_NEVER|MSGLEVEL_LASTLOG)) != 0) (dest->level & (MSGLEVEL_NEVER | MSGLEVEL_LASTLOG)) != 0)
return NULL; return NULL;
if (timestamp_timeout > 0) { if (timestamp_timeout > 0) {
diff = t - dest->window->last_timestamp; diff = t - dest->window->last_timestamp;
dest->window->last_timestamp = t; dest->window->last_timestamp = t;
@ -1061,8 +1045,7 @@ static char *get_timestamp(THEME_REC *theme, TEXT_DEST_REC *dest, time_t t)
} }
tm = localtime(&t); tm = localtime(&t);
format = format_get_text_theme(theme, MODULE_NAME, dest, format = format_get_text_theme(theme, MODULE_NAME, dest, TXT_TIMESTAMP);
TXT_TIMESTAMP);
if (strftime(str, sizeof(str), format, tm) <= 0) if (strftime(str, sizeof(str), format, tm) <= 0)
str[0] = '\0'; str[0] = '\0';
g_free(format); g_free(format);
@ -1081,8 +1064,7 @@ static char *get_server_tag(THEME_REC *theme, TEXT_DEST_REC *dest)
return NULL; return NULL;
if ((dest->flags & PRINT_FLAG_SET_SERVERTAG) == 0) { if ((dest->flags & PRINT_FLAG_SET_SERVERTAG) == 0) {
if (dest->window->active != NULL && if (dest->window->active != NULL && dest->window->active->server == dest->server)
dest->window->active->server == dest->server)
return NULL; return NULL;
if (servers != NULL) { if (servers != NULL) {
@ -1100,8 +1082,7 @@ static char *get_server_tag(THEME_REC *theme, TEXT_DEST_REC *dest)
return NULL; return NULL;
} }
return format_get_text_theme(theme, MODULE_NAME, dest, return format_get_text_theme(theme, MODULE_NAME, dest, TXT_SERVERTAG, dest->server_tag);
TXT_SERVERTAG, dest->server_tag);
} }
char *format_get_line_start(THEME_REC *theme, TEXT_DEST_REC *dest, time_t t) char *format_get_line_start(THEME_REC *theme, TEXT_DEST_REC *dest, time_t t)
@ -1115,8 +1096,7 @@ char *format_get_line_start(THEME_REC *theme, TEXT_DEST_REC *dest, time_t t)
if (timestamp == NULL && servertag == NULL) if (timestamp == NULL && servertag == NULL)
return NULL; return NULL;
linestart = g_strconcat(timestamp != NULL ? timestamp : "", linestart = g_strconcat(timestamp != NULL ? timestamp : "", servertag, NULL);
servertag, NULL);
g_free_not_null(timestamp); g_free_not_null(timestamp);
g_free_not_null(servertag); g_free_not_null(servertag);
@ -1132,10 +1112,9 @@ void format_newline(TEXT_DEST_REC *dest)
GINT_TO_POINTER(-1), GINT_TO_POINTER(GUI_PRINT_FLAG_NEWLINE), "", dest); GINT_TO_POINTER(-1), GINT_TO_POINTER(GUI_PRINT_FLAG_NEWLINE), "", dest);
} }
/* parse ANSI color string */ /* parse ANSI color string */
static const char *get_ansi_color(THEME_REC *theme, const char *str, static const char *get_ansi_color(THEME_REC *theme, const char *str, int *fg_ret, int *bg_ret,
int *fg_ret, int *bg_ret, int *flags_ret) int *flags_ret)
{ {
static char ansitab[8] = { 0, 4, 2, 6, 1, 5, 3, 7 }; static char ansitab[8] = { 0, 4, 2, 6, 1, 5, 3, 7 };
const char *start; const char *start;
@ -1153,7 +1132,8 @@ static const char *get_ansi_color(THEME_REC *theme, const char *str,
num = 0; num = 0;
for (;; str++) { for (;; str++) {
if (*str == '\0') return start; if (*str == '\0')
return start;
if (i_isdigit(*str)) { if (i_isdigit(*str)) {
if (!parse_uint(str, &endptr, 10, &num)) { if (!parse_uint(str, &endptr, 10, &num)) {
@ -1170,8 +1150,8 @@ static const char *get_ansi_color(THEME_REC *theme, const char *str,
/* reset colors and attributes back to default */ /* reset colors and attributes back to default */
fg = theme->default_color; fg = theme->default_color;
bg = -1; bg = -1;
flags &= ~(GUI_PRINT_FLAG_INDENT | flags &= ~(GUI_PRINT_FLAG_INDENT | GUI_PRINT_FLAG_BOLD |
GUI_PRINT_FLAG_BOLD | GUI_PRINT_FLAG_ITALIC | GUI_PRINT_FLAG_UNDERLINE | GUI_PRINT_FLAG_ITALIC | GUI_PRINT_FLAG_UNDERLINE |
GUI_PRINT_FLAG_BLINK | GUI_PRINT_FLAG_REVERSE | GUI_PRINT_FLAG_BLINK | GUI_PRINT_FLAG_REVERSE |
GUI_PRINT_FLAG_COLOR_24_FG | GUI_PRINT_FLAG_COLOR_24_BG); GUI_PRINT_FLAG_COLOR_24_FG | GUI_PRINT_FLAG_COLOR_24_BG);
break; break;
@ -1228,7 +1208,8 @@ static const char *get_ansi_color(THEME_REC *theme, const char *str,
case 38: case 38:
case 48: case 48:
/* ANSI indexed color or RGB color */ /* ANSI indexed color or RGB color */
if (*str != ';') break; if (*str != ';')
break;
str++; str++;
if (!parse_uint(str, &endptr, 10, &num2)) { if (!parse_uint(str, &endptr, 10, &num2)) {
@ -1236,7 +1217,8 @@ static const char *get_ansi_color(THEME_REC *theme, const char *str,
} }
str = endptr; str = endptr;
if (*str == '\0') return start; if (*str == '\0')
return start;
switch (num2) { switch (num2) {
case 2: case 2:
@ -1252,13 +1234,15 @@ static const char *get_ansi_color(THEME_REC *theme, const char *str,
} }
str++; str++;
for (; i_isdigit(*str); str++) for (; i_isdigit(*str); str++)
num2 = (num2&~0xff) | num2 = (num2 & ~0xff) |
(((num2&0xff) * 10 + (*str-'0'))&0xff); (((num2 & 0xff) * 10 + (*str - '0')) & 0xff);
if (*str == '\0') return start; if (*str == '\0')
return start;
} }
if (i == -1) break; if (i == -1)
break;
if (num == 38) { if (num == 38) {
flags |= GUI_PRINT_FLAG_COLOR_24_FG; flags |= GUI_PRINT_FLAG_COLOR_24_FG;
@ -1271,7 +1255,8 @@ static const char *get_ansi_color(THEME_REC *theme, const char *str,
break; break;
case 5: case 5:
/* indexed */ /* indexed */
if (*str != ';') break; if (*str != ';')
break;
str++; str++;
if (!parse_uint(str, &endptr, 10, &num2)) { if (!parse_uint(str, &endptr, 10, &num2)) {
@ -1279,7 +1264,8 @@ static const char *get_ansi_color(THEME_REC *theme, const char *str,
} }
str = endptr; str = endptr;
if (*str == '\0') return start; if (*str == '\0')
return start;
if (num == 38) { if (num == 38) {
flags &= ~GUI_PRINT_FLAG_COLOR_24_FG; flags &= ~GUI_PRINT_FLAG_COLOR_24_FG;
@ -1295,25 +1281,28 @@ static const char *get_ansi_color(THEME_REC *theme, const char *str,
default: default:
if (num >= 30 && num <= 37) { if (num >= 30 && num <= 37) {
flags &= ~GUI_PRINT_FLAG_COLOR_24_FG; flags &= ~GUI_PRINT_FLAG_COLOR_24_FG;
fg = ansitab[num-30]; fg = ansitab[num - 30];
} else if (num >= 40 && num <= 47) { } else if (num >= 40 && num <= 47) {
flags &= ~GUI_PRINT_FLAG_COLOR_24_BG; flags &= ~GUI_PRINT_FLAG_COLOR_24_BG;
bg = ansitab[num-40]; bg = ansitab[num - 40];
} else if (num >= 90 && num <= 97) { } else if (num >= 90 && num <= 97) {
flags &= ~GUI_PRINT_FLAG_COLOR_24_FG; flags &= ~GUI_PRINT_FLAG_COLOR_24_FG;
fg = 8 + ansitab[num-90]; fg = 8 + ansitab[num - 90];
} else if (num >= 100 && num <= 107) { } else if (num >= 100 && num <= 107) {
flags &= ~GUI_PRINT_FLAG_COLOR_24_BG; flags &= ~GUI_PRINT_FLAG_COLOR_24_BG;
bg = 8 + ansitab[num-100]; bg = 8 + ansitab[num - 100];
} }
break; break;
} }
num = 0; num = 0;
if (*str == 'm') { if (*str == 'm') {
if (fg_ret != NULL) *fg_ret = fg; if (fg_ret != NULL)
if (bg_ret != NULL) *bg_ret = bg; *fg_ret = fg;
if (flags_ret != NULL) *flags_ret = flags; if (bg_ret != NULL)
*bg_ret = bg;
if (flags_ret != NULL)
*flags_ret = flags;
str++; str++;
break; break;
@ -1337,37 +1326,38 @@ static void get_mirc_color(const char **str, int *fg_ret, int *bg_ret)
bg = -1; bg = -1;
} else { } else {
/* foreground color */ /* foreground color */
fg = **str-'0'; fg = **str - '0';
(*str)++; (*str)++;
if (i_isdigit(**str)) { if (i_isdigit(**str)) {
fg = fg*10 + (**str-'0'); fg = fg * 10 + (**str - '0');
(*str)++; (*str)++;
} }
if ((*str)[0] == ',' && i_isdigit((*str)[1])) { if ((*str)[0] == ',' && i_isdigit((*str)[1])) {
/* background color */ /* background color */
(*str)++; (*str)++;
bg = **str-'0'; bg = **str - '0';
(*str)++; (*str)++;
if (i_isdigit(**str)) { if (i_isdigit(**str)) {
bg = bg*10 + (**str-'0'); bg = bg * 10 + (**str - '0');
(*str)++; (*str)++;
} }
} }
} }
if (fg_ret) *fg_ret = fg; if (fg_ret)
if (bg_ret) *bg_ret = bg; *fg_ret = fg;
if (bg_ret)
*bg_ret = bg;
} }
#define IS_COLOR_CODE(c) \ #define IS_COLOR_CODE(c) \
((c) == 2 || (c) == 3 || (c) == 4 || (c) == 6 || (c) == 7 || \ ((c) == 2 || (c) == 3 || (c) == 4 || (c) == 6 || (c) == 7 || (c) == 15 || (c) == 17 || \
(c) == 15 || (c) == 17 || (c) == 22 || (c) == 27 || (c) == 29 || (c) == 31) (c) == 22 || (c) == 27 || (c) == 29 || (c) == 31)
/* Return how many characters in `str' must be skipped before `len' /* Return how many characters in `str' must be skipped before `len'
characters of text is skipped. */ characters of text is skipped. */
int strip_real_length(const char *str, int len, int strip_real_length(const char *str, int len, int *last_color_pos, int *last_color_len)
int *last_color_pos, int *last_color_len)
{ {
const char *start = str; const char *start = str;
@ -1381,36 +1371,39 @@ int strip_real_length(const char *str, int len,
const char *mircstart = str; const char *mircstart = str;
if (last_color_pos != NULL) if (last_color_pos != NULL)
*last_color_pos = (int) (str-start); *last_color_pos = (int) (str - start);
str++; str++;
get_mirc_color(&str, NULL, NULL); get_mirc_color(&str, NULL, NULL);
if (last_color_len != NULL) if (last_color_len != NULL)
*last_color_len = (int) (str-mircstart); *last_color_len = (int) (str - mircstart);
} else if (*str == 4 && str[1] != '\0') { } else if (*str == 4 && str[1] != '\0') {
/* We expect 4 to indicate an internal Irssi color code. However 4 /* We expect 4 to indicate an internal Irssi color code. However 4
* also means hex color, an alternative to mIRC color codes. We * also means hex color, an alternative to mIRC color codes. We
* don't support those. */ * don't support those. */
if (str[1] == FORMAT_COLOR_24 && str[2] != '\0') { if (str[1] == FORMAT_COLOR_24 && str[2] != '\0') {
if (str[3] == '\0') str++; if (str[3] == '\0')
else if (str[4] == '\0') str += 2; str++;
else if (str[5] == '\0') str += 3; else if (str[4] == '\0')
str += 2;
else if (str[5] == '\0')
str += 3;
else { else {
if (last_color_pos != NULL) if (last_color_pos != NULL)
*last_color_pos = (int) (str-start); *last_color_pos = (int) (str - start);
if (last_color_len != NULL) if (last_color_len != NULL)
*last_color_len = 6; *last_color_len = 6;
str+=4; str += 4;
} }
} else if (str[1] < FORMAT_STYLE_SPECIAL && str[2] != '\0') { } else if (str[1] < FORMAT_STYLE_SPECIAL && str[2] != '\0') {
if (last_color_pos != NULL) if (last_color_pos != NULL)
*last_color_pos = (int) (str-start); *last_color_pos = (int) (str - start);
if (last_color_len != NULL) if (last_color_len != NULL)
*last_color_len = 3; *last_color_len = 3;
str++; str++;
} else if (str[1] == FORMAT_STYLE_DEFAULTS) { } else if (str[1] == FORMAT_STYLE_DEFAULTS) {
if (last_color_pos != NULL) if (last_color_pos != NULL)
*last_color_pos = (int) (str-start); *last_color_pos = (int) (str - start);
if (last_color_len != NULL) if (last_color_len != NULL)
*last_color_len = 2; *last_color_len = 2;
} }
@ -1424,7 +1417,7 @@ int strip_real_length(const char *str, int len,
} }
} }
return (int) (str-start); return (int) (str - start);
} }
char *strip_codes(const char *input) char *strip_codes(const char *input)
@ -1452,10 +1445,14 @@ char *strip_codes(const char *input)
/* irssi color */ /* irssi color */
if (p[2] != '\0') { if (p[2] != '\0') {
if (p[1] == FORMAT_COLOR_24) { if (p[1] == FORMAT_COLOR_24) {
if (p[3] == '\0') p += 2; if (p[3] == '\0')
else if (p[4] == '\0') p += 3; p += 2;
else if (p[5] == '\0') p += 4; else if (p[4] == '\0')
else p += 5; p += 3;
else if (p[5] == '\0')
p += 4;
else
p += 5;
} else } else
p += 2; p += 2;
continue; continue;
@ -1492,7 +1489,9 @@ void format_send_as_gui_flags(TEXT_DEST_REC *dest, const char *text, SIGNAL_FUNC
dup = str = g_strdup(text); dup = str = g_strdup(text);
flags = 0; fgcolor = theme->default_color; bgcolor = -1; flags = 0;
fgcolor = theme->default_color;
bgcolor = -1;
if (*str == '\0') { if (*str == '\0') {
/* empty line, write line info only */ /* empty line, write line info only */
@ -1519,7 +1518,7 @@ void format_send_as_gui_flags(TEXT_DEST_REC *dest, const char *text, SIGNAL_FUNC
/* send the text to gui handler */ /* send the text to gui handler */
handler(dest->window, GINT_TO_POINTER(fgcolor), GINT_TO_POINTER(bgcolor), handler(dest->window, GINT_TO_POINTER(fgcolor), GINT_TO_POINTER(bgcolor),
GINT_TO_POINTER(flags), str, dest); GINT_TO_POINTER(flags), str, dest);
flags &= ~(GUI_PRINT_FLAG_INDENT|GUI_PRINT_FLAG_CLRTOEOL); flags &= ~(GUI_PRINT_FLAG_INDENT | GUI_PRINT_FLAG_CLRTOEOL);
} }
if (type == '\n') { if (type == '\n') {
@ -1527,14 +1526,13 @@ void format_send_as_gui_flags(TEXT_DEST_REC *dest, const char *text, SIGNAL_FUNC
GINT_TO_POINTER(GUI_PRINT_FLAG_NEWLINE), "", dest); GINT_TO_POINTER(GUI_PRINT_FLAG_NEWLINE), "", dest);
fgcolor = theme->default_color; fgcolor = theme->default_color;
bgcolor = -1; bgcolor = -1;
flags &= GUI_PRINT_FLAG_INDENT|GUI_PRINT_FLAG_MONOSPACE; flags &= GUI_PRINT_FLAG_INDENT | GUI_PRINT_FLAG_MONOSPACE;
} }
if (*ptr == '\0') if (*ptr == '\0')
break; break;
switch (type) switch (type) {
{
case 2: case 2:
/* bold */ /* bold */
if (!hide_text_style) if (!hide_text_style)
@ -1542,8 +1540,7 @@ void format_send_as_gui_flags(TEXT_DEST_REC *dest, const char *text, SIGNAL_FUNC
break; break;
case 3: case 3:
/* MIRC color */ /* MIRC color */
get_mirc_color((const char **) &ptr, get_mirc_color((const char **) &ptr, hide_colors ? NULL : &fgcolor,
hide_colors ? NULL : &fgcolor,
hide_colors ? NULL : &bgcolor); hide_colors ? NULL : &bgcolor);
if (!hide_colors) if (!hide_colors)
flags |= GUI_PRINT_FLAG_MIRC_COLOR; flags |= GUI_PRINT_FLAG_MIRC_COLOR;
@ -1576,7 +1573,7 @@ void format_send_as_gui_flags(TEXT_DEST_REC *dest, const char *text, SIGNAL_FUNC
case FORMAT_STYLE_DEFAULTS: case FORMAT_STYLE_DEFAULTS:
fgcolor = theme->default_color; fgcolor = theme->default_color;
bgcolor = -1; bgcolor = -1;
flags &= GUI_PRINT_FLAG_INDENT|GUI_PRINT_FLAG_MONOSPACE; flags &= GUI_PRINT_FLAG_INDENT | GUI_PRINT_FLAG_MONOSPACE;
break; break;
case FORMAT_STYLE_CLRTOEOL: case FORMAT_STYLE_CLRTOEOL:
break; break;
@ -1610,7 +1607,8 @@ void format_send_as_gui_flags(TEXT_DEST_REC *dest, const char *text, SIGNAL_FUNC
default: default:
if (*ptr != FORMAT_COLOR_NOCHANGE) { if (*ptr != FORMAT_COLOR_NOCHANGE) {
flags &= ~GUI_PRINT_FLAG_COLOR_24_FG; flags &= ~GUI_PRINT_FLAG_COLOR_24_FG;
fgcolor = *ptr==(char)0xff ? -1 : (unsigned char) *ptr-'0'; fgcolor =
*ptr == (char) 0xff ? -1 : (unsigned char) *ptr - '0';
} }
if (ptr[1] == '\0') if (ptr[1] == '\0')
break; break;
@ -1618,7 +1616,7 @@ void format_send_as_gui_flags(TEXT_DEST_REC *dest, const char *text, SIGNAL_FUNC
ptr++; ptr++;
if (*ptr != FORMAT_COLOR_NOCHANGE) { if (*ptr != FORMAT_COLOR_NOCHANGE) {
flags &= ~GUI_PRINT_FLAG_COLOR_24_BG; flags &= ~GUI_PRINT_FLAG_COLOR_24_BG;
bgcolor = *ptr==(char)0xff ? -1 : *ptr-'0'; bgcolor = *ptr == (char) 0xff ? -1 : *ptr - '0';
} }
} }
if (*ptr == '\0') if (*ptr == '\0')
@ -1635,7 +1633,7 @@ void format_send_as_gui_flags(TEXT_DEST_REC *dest, const char *text, SIGNAL_FUNC
/* remove all styling */ /* remove all styling */
fgcolor = theme->default_color; fgcolor = theme->default_color;
bgcolor = -1; bgcolor = -1;
flags &= GUI_PRINT_FLAG_INDENT|GUI_PRINT_FLAG_MONOSPACE; flags &= GUI_PRINT_FLAG_INDENT | GUI_PRINT_FLAG_MONOSPACE;
break; break;
case 17: case 17:
if (!hide_text_style) if (!hide_text_style)
@ -1658,9 +1656,7 @@ void format_send_as_gui_flags(TEXT_DEST_REC *dest, const char *text, SIGNAL_FUNC
break; break;
case 27: case 27:
/* ansi color code */ /* ansi color code */
ptr = (char *) ptr = (char *) get_ansi_color(theme, ptr, hide_colors ? NULL : &fgcolor,
get_ansi_color(theme, ptr,
hide_colors ? NULL : &fgcolor,
hide_colors ? NULL : &bgcolor, hide_colors ? NULL : &bgcolor,
hide_colors ? NULL : &flags); hide_colors ? NULL : &flags);
break; break;
@ -1767,7 +1763,7 @@ static void read_settings(void)
timestamp_level = settings_get_bool("timestamps") ? MSGLEVEL_ALL : 0; timestamp_level = settings_get_bool("timestamps") ? MSGLEVEL_ALL : 0;
if (timestamp_level > 0) if (timestamp_level > 0)
timestamp_level = settings_get_level("timestamp_level"); timestamp_level = settings_get_level("timestamp_level");
timestamp_timeout = settings_get_time("timestamp_timeout")/1000; timestamp_timeout = settings_get_time("timestamp_timeout") / 1000;
hide_server_tags = settings_get_bool("hide_server_tags"); hide_server_tags = settings_get_bool("hide_server_tags");
hide_text_style = settings_get_bool("hide_text_style"); hide_text_style = settings_get_bool("hide_text_style");