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

@ -36,7 +36,7 @@ static char *expando_winref(SERVER_REC *server, void *item, int *free_ret)
if (active_win == NULL)
return "";
*free_ret = TRUE;
*free_ret = TRUE;
return g_strdup_printf("%d", active_win->refnum);
}
@ -53,7 +53,8 @@ static char *expando_winname(SERVER_REC *server, void *item, int *free_ret)
static int count_nick_chars(const char *str)
{
int count = 0;
if (!str) return 0;
if (!str)
return 0;
for (const char *p = str; *p; p++) {
/* Alfanumeryczne */
@ -61,9 +62,8 @@ static int count_nick_chars(const char *str)
count++;
}
/* Specjalne znaki nicka - zgodnie z isnickchar z fe-messages.c */
else if (*p == '`' || *p == '-' || *p == '_' ||
*p == '[' || *p == ']' || *p == '{' || *p == '}' ||
*p == '|' || *p == '\\' || *p == '^') {
else if (*p == '`' || *p == '-' || *p == '_' || *p == '[' || *p == ']' ||
*p == '{' || *p == '}' || *p == '|' || *p == '\\' || *p == '^') {
count++;
}
/* 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;
}
*free_ret = TRUE;
return g_strnfill(padding, ' ');
}
@ -113,8 +111,6 @@ static char *expando_nicktrunc(SERVER_REC *server, void *item, int *free_ret)
const char *mode;
char *result;
/* Gdy wyłączone - zwróć oryginalny nick */
if (!settings_get_bool("nick_column_enabled")) {
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 >> */
result = g_strdup_printf("%.*s>>", available_for_nick, current_nick);
} else {
/* Mode sam za długi */
result = g_strdup(">>");
}
*free_ret = TRUE;
return result;
@ -173,18 +166,14 @@ void clear_nick_context(void)
void fe_expandos_init(void)
{
expando_create("winref", expando_winref,
"window changed", EXPANDO_ARG_NONE,
"window refnum changed", EXPANDO_ARG_WINDOW, NULL);
expando_create("winname", expando_winname,
"window changed", EXPANDO_ARG_NONE,
"window name changed", EXPANDO_ARG_WINDOW, NULL);
expando_create("nickalign", expando_nickalign,
"message public", EXPANDO_ARG_NONE,
"message own_public", EXPANDO_ARG_NONE, NULL);
expando_create("nicktrunc", expando_nicktrunc,
"message public", EXPANDO_ARG_NONE,
"message own_public", EXPANDO_ARG_NONE, NULL);
expando_create("winref", expando_winref, "window changed", EXPANDO_ARG_NONE,
"window refnum changed", EXPANDO_ARG_WINDOW, NULL);
expando_create("winname", expando_winname, "window changed", EXPANDO_ARG_NONE,
"window name changed", EXPANDO_ARG_WINDOW, NULL);
expando_create("nickalign", expando_nickalign, "message public", EXPANDO_ARG_NONE,
"message own_public", EXPANDO_ARG_NONE, NULL);
expando_create("nicktrunc", expando_nicktrunc, "message public", EXPANDO_ARG_NONE,
"message own_public", EXPANDO_ARG_NONE, NULL);
}
void fe_expandos_deinit(void)

View file

@ -42,10 +42,9 @@ void update_nick_context(const char *nick, const char *mode);
void clear_nick_context(void);
#define ishighalnum(c) ((unsigned char) (c) >= 128 || i_isalnum(c))
#define isnickchar(a) \
(i_isalnum(a) || (a) == '`' || (a) == '-' || (a) == '_' || \
(a) == '[' || (a) == ']' || (a) == '{' || (a) == '}' || \
(a) == '|' || (a) == '\\' || (a) == '^')
#define isnickchar(a) \
(i_isalnum(a) || (a) == '`' || (a) == '-' || (a) == '_' || (a) == '[' || (a) == ']' || \
(a) == '{' || (a) == '}' || (a) == '|' || (a) == '\\' || (a) == '^')
GHashTable *printnicks;
@ -58,7 +57,7 @@ char *expand_emphasis(WI_ITEM_REC *item, const char *text)
int pos;
int emphasis_italics;
g_return_val_if_fail(text != NULL, NULL);
g_return_val_if_fail(text != NULL, NULL);
emphasis_italics = settings_get_bool("emphasis_italics");
@ -82,10 +81,10 @@ char *expand_emphasis(WI_ITEM_REC *item, const char *text)
that the matching end marker ends a word */
if ((pos > 0 && bgn[-1] != ' ') || !ishighalnum(bgn[1]))
continue;
if ((end = strchr(bgn+1, *bgn)) == NULL)
if ((end = strchr(bgn + 1, *bgn)) == NULL)
continue;
if (!ishighalnum(end[-1]) || ishighalnum(end[1]) ||
end[1] == type || end[1] == '*' || end[1] == '_' ||
if (!ishighalnum(end[-1]) || ishighalnum(end[1]) || end[1] == type ||
end[1] == '*' || end[1] == '_' ||
/* special case for italics to not emphasise
common paths by skipping /.../.X */
(type == 29 && i_ispunct(end[1]) && ishighalnum(end[2])))
@ -95,15 +94,16 @@ char *expand_emphasis(WI_ITEM_REC *item, const char *text)
/* check that this isn't a _nick_, we don't want to
use emphasis on them. */
int found;
char c;
char c;
char *end2;
/* check if _foo_ is a nick */
c = end[1];
end[1] = '\0';
found = nicklist_find(CHANNEL(item), bgn) != NULL;
end[1] = '\0';
found = nicklist_find(CHANNEL(item), bgn) != NULL;
end[1] = c;
if (found) continue;
if (found)
continue;
/* check if the whole 'word' (e.g. "_foo_^") is a nick
in "_foo_^ ", end will be the second _, end2 the ^ */
@ -114,25 +114,27 @@ char *expand_emphasis(WI_ITEM_REC *item, const char *text)
end2[1] = '\0';
found = nicklist_find(CHANNEL(item), bgn) != NULL;
end2[1] = c;
if (found) continue;
if (found)
continue;
}
/* allow only *word* emphasis, not *multiple words* */
if (!settings_get_bool("emphasis_multiword")) {
char *c;
for (c = bgn+1; c != end; c++) {
for (c = bgn + 1; c != end; c++) {
if (!ishighalnum(*c))
break;
}
if (c != end) continue;
if (c != end)
continue;
}
if (settings_get_bool("emphasis_replace")) {
*bgn = *end = type;
pos += (end-bgn);
pos += (end - bgn);
} else {
g_string_insert_c(str, pos, type);
pos += (end - bgn) + 2;
pos += (end - bgn) + 2;
g_string_insert_c(str, pos++, type);
}
}
@ -143,13 +145,13 @@ char *expand_emphasis(WI_ITEM_REC *item, const char *text)
static char *channel_get_nickmode_rec(NICK_REC *nickrec)
{
char *emptystr;
char *emptystr;
char *nickmode;
if (!settings_get_bool("show_nickmode"))
return g_strdup("");
return g_strdup("");
emptystr = settings_get_bool("show_nickmode_empty") ? " " : "";
emptystr = settings_get_bool("show_nickmode_empty") ? " " : "";
if (nickrec == NULL || nickrec->prefixes[0] == '\0')
nickmode = g_strdup(emptystr);
@ -165,13 +167,11 @@ char *channel_get_nickmode(CHANNEL_REC *channel, const char *nick)
{
g_return_val_if_fail(nick != NULL, NULL);
return channel_get_nickmode_rec(channel == NULL ? NULL :
nicklist_find(channel, nick));
return channel_get_nickmode_rec(channel == NULL ? NULL : nicklist_find(channel, nick));
}
static void sig_message_public(SERVER_REC *server, const char *msg,
const char *nick, const char *address,
const char *target, NICK_REC *nickrec)
static void sig_message_public(SERVER_REC *server, const char *msg, const char *nick,
const char *address, const char *target, NICK_REC *nickrec)
{
CHANNEL_REC *chanrec;
const char *printnick;
@ -184,18 +184,18 @@ static void sig_message_public(SERVER_REC *server, const char *msg,
/WINDOW CLOSE and server still sends the few last messages */
chanrec = channel_find(server, target);
if (nickrec == NULL && chanrec != NULL)
nickrec = nicklist_find(chanrec, nick);
nickrec = nicklist_find(chanrec, nick);
for_me = !settings_get_bool("hilight_nick_matches") ? FALSE :
!settings_get_bool("hilight_nick_matches_everywhere") ?
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);
for_me = !settings_get_bool("hilight_nick_matches") ?
FALSE :
!settings_get_bool("hilight_nick_matches_everywhere") ?
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);
print_channel = chanrec == NULL ||
!window_item_is_active((WI_ITEM_REC *) chanrec);
print_channel = chanrec == NULL || !window_item_is_active((WI_ITEM_REC *) chanrec);
if (!print_channel && settings_get_bool("print_active_channel") &&
window_item_window((WI_ITEM_REC *) chanrec)->items->next != NULL)
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
(in case there's multiple identical nicks) */
nickmode = channel_get_nickmode_rec(nickrec);
printnick = nickrec == NULL ? nick :
g_hash_table_lookup(printnicks, nickrec);
printnick = nickrec == NULL ? nick : g_hash_table_lookup(printnicks, nickrec);
if (printnick == NULL)
printnick = nick;
@ -232,24 +231,20 @@ static void sig_message_public(SERVER_REC *server, const char *msg,
dest.nick = nick;
if (color != NULL) {
/* highlighted nick */
hilight_update_text_dest(&dest,hilight);
hilight_update_text_dest(&dest, hilight);
if (!print_channel) /* message to active channel in window */
printformat_dest(&dest, TXT_PUBMSG_HILIGHT, color,
printnick, msg, nickmode);
printformat_dest(&dest, TXT_PUBMSG_HILIGHT, color, printnick, msg,
nickmode);
else /* message to not existing/active channel */
printformat_dest(&dest, TXT_PUBMSG_HILIGHT_CHANNEL,
color, printnick, target, msg,
nickmode);
printformat_dest(&dest, TXT_PUBMSG_HILIGHT_CHANNEL, color, printnick,
target, msg, nickmode);
} else {
if (!print_channel)
printformat_dest(&dest,
for_me ? TXT_PUBMSG_ME : TXT_PUBMSG,
printnick, msg, nickmode);
printformat_dest(&dest, for_me ? TXT_PUBMSG_ME : TXT_PUBMSG, printnick, msg,
nickmode);
else
printformat_dest(&dest,
for_me ? TXT_PUBMSG_ME_CHANNEL :
TXT_PUBMSG_CHANNEL,
printnick, target, msg, nickmode);
printformat_dest(&dest, for_me ? TXT_PUBMSG_ME_CHANNEL : TXT_PUBMSG_CHANNEL,
printnick, target, msg, nickmode);
}
g_free_not_null(nickmode);
@ -257,11 +252,11 @@ static void sig_message_public(SERVER_REC *server, const char *msg,
g_free_not_null(color);
}
static void sig_message_private(SERVER_REC *server, const char *msg,
const char *nick, const char *address, const char *target)
static void sig_message_private(SERVER_REC *server, const char *msg, const char *nick,
const char *address, const char *target)
{
QUERY_REC *query;
char *freemsg = NULL;
char *freemsg = NULL;
int level = MSGLEVEL_MSGS;
/* own message returned by bouncer? */
@ -276,24 +271,23 @@ static void sig_message_private(SERVER_REC *server, const char *msg,
if (own) {
printformat(server, target, level,
query == NULL ? TXT_OWN_MSG_PRIVATE :
TXT_OWN_MSG_PRIVATE_QUERY, target, msg, server->nick);
query == NULL ? TXT_OWN_MSG_PRIVATE : TXT_OWN_MSG_PRIVATE_QUERY, target,
msg, server->nick);
} else {
printformat(server, nick, level,
query == NULL ? TXT_MSG_PRIVATE :
TXT_MSG_PRIVATE_QUERY, nick, address, msg);
query == NULL ? TXT_MSG_PRIVATE : TXT_MSG_PRIVATE_QUERY, nick, address,
msg);
}
g_free_not_null(freemsg);
}
static void sig_message_own_public(SERVER_REC *server, const char *msg,
const char *target)
static void sig_message_own_public(SERVER_REC *server, const char *msg, const char *target)
{
WINDOW_REC *window;
CHANNEL_REC *channel;
char *nickmode;
char *freemsg = NULL;
char *freemsg = NULL;
int print_channel;
channel = channel_find(server, target);
if (channel != NULL)
@ -306,14 +300,12 @@ static void sig_message_own_public(SERVER_REC *server, const char *msg,
update_nick_context(server->nick, nickmode);
}
window = channel == NULL ? NULL :
window_item_window((WI_ITEM_REC *) channel);
window = channel == NULL ? NULL : window_item_window((WI_ITEM_REC *) channel);
print_channel = window == NULL ||
window->active != (WI_ITEM_REC *) channel;
print_channel = window == NULL || window->active != (WI_ITEM_REC *) channel;
if (!print_channel && settings_get_bool("print_active_channel") &&
window != NULL && g_slist_length(window->items) > 1)
if (!print_channel && settings_get_bool("print_active_channel") && window != NULL &&
g_slist_length(window->items) > 1)
print_channel = TRUE;
if (settings_get_bool("emphasis"))
@ -321,21 +313,21 @@ static void sig_message_own_public(SERVER_REC *server, const char *msg,
if (!print_channel) {
printformat(server, target, MSGLEVEL_PUBLIC | MSGLEVEL_NOHILIGHT | MSGLEVEL_NO_ACT,
TXT_OWN_MSG, server->nick, msg, nickmode);
TXT_OWN_MSG, server->nick, msg, nickmode);
} else {
printformat(server, target, MSGLEVEL_PUBLIC | MSGLEVEL_NOHILIGHT | MSGLEVEL_NO_ACT,
TXT_OWN_MSG_CHANNEL, server->nick, target, msg, nickmode);
TXT_OWN_MSG_CHANNEL, server->nick, target, msg, nickmode);
}
g_free_not_null(nickmode);
g_free_not_null(freemsg);
}
static void sig_message_own_private(SERVER_REC *server, const char *msg,
const char *target, const char *origtarget)
static void sig_message_own_private(SERVER_REC *server, const char *msg, const char *target,
const char *origtarget)
{
QUERY_REC *query;
char *freemsg = NULL;
char *freemsg = NULL;
g_return_if_fail(server != NULL);
g_return_if_fail(msg != NULL);
@ -344,11 +336,10 @@ static void sig_message_own_private(SERVER_REC *server, const char *msg,
we should display some error message. currently the special
targets are only ',' and '.'. */
g_return_if_fail(g_strcmp0(origtarget, ",") == 0 ||
g_strcmp0(origtarget, ".") == 0);
g_strcmp0(origtarget, ".") == 0);
printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE,
*origtarget == ',' ? TXT_NO_MSGS_GOT :
TXT_NO_MSGS_SENT);
*origtarget == ',' ? TXT_NO_MSGS_GOT : TXT_NO_MSGS_SENT);
signal_stop();
return;
}
@ -358,17 +349,15 @@ static void sig_message_own_private(SERVER_REC *server, const char *msg,
if (settings_get_bool("emphasis"))
msg = freemsg = expand_emphasis((WI_ITEM_REC *) query, msg);
printformat(server, target,
MSGLEVEL_MSGS | MSGLEVEL_NOHILIGHT | MSGLEVEL_NO_ACT,
query == NULL ? TXT_OWN_MSG_PRIVATE :
TXT_OWN_MSG_PRIVATE_QUERY, target, msg, server->nick);
printformat(server, target, MSGLEVEL_MSGS | MSGLEVEL_NOHILIGHT | MSGLEVEL_NO_ACT,
query == NULL ? TXT_OWN_MSG_PRIVATE : TXT_OWN_MSG_PRIVATE_QUERY, target, msg,
server->nick);
g_free_not_null(freemsg);
}
static void sig_message_join(SERVER_REC *server, const char *channel,
const char *nick, const char *address,
const char *account, const char *realname)
static void sig_message_join(SERVER_REC *server, const char *channel, const char *nick,
const char *address, const char *account, const char *realname)
{
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")) {
int txt;
if (*account == '\0') txt = TXT_JOIN;
else if (g_strcmp0("*", account) == 0) txt = TXT_JOIN_EXTENDED;
else txt = TXT_JOIN_EXTENDED_ACCOUNT;
printformat(server, channel, level,
txt, nick, address, channel, account, realname);
if (*account == '\0')
txt = TXT_JOIN;
else if (g_strcmp0("*", account) == 0)
txt = TXT_JOIN_EXTENDED;
else
txt = TXT_JOIN_EXTENDED_ACCOUNT;
printformat(server, channel, level, txt, nick, address, channel, account, realname);
} else {
printformat(server, channel, level,
TXT_JOIN, nick, address, channel, account, realname);
printformat(server, channel, level, TXT_JOIN, nick, address, channel, account,
realname);
}
}
static void sig_message_part(SERVER_REC *server, const char *channel,
const char *nick, const char *address,
const char *reason)
static void sig_message_part(SERVER_REC *server, const char *channel, const char *nick,
const char *address, const char *reason)
{
int level = MSGLEVEL_PARTS;
ignore_check_plus(server, nick, address, channel, NULL, &level, FALSE);
printformat(server, channel, level,
TXT_PART, nick, address, channel, reason);
printformat(server, channel, level, TXT_PART, nick, address, channel, reason);
}
static void spread_server_message_to_windows(SERVER_REC *server, gboolean once,
gboolean in_query,
int base_level,
int txt, int txt_once,
const char *nick, const char *address,
const char *data,
const char *ignore_data
)
static void spread_server_message_to_windows(SERVER_REC *server, gboolean once, gboolean in_query,
int base_level, int txt, int txt_once,
const char *nick, const char *address,
const char *data, const char *ignore_data)
{
WINDOW_REC *window;
GString *chans;
@ -419,7 +404,8 @@ static void spread_server_message_to_windows(SERVER_REC *server, gboolean once,
print_channel = NULL;
count = 0; windows = NULL;
count = 0;
windows = NULL;
chans = g_string_new(NULL);
for (tmp = server->channels; tmp != NULL; tmp = tmp->next) {
CHANNEL_REC *rec;
@ -430,14 +416,13 @@ static void spread_server_message_to_windows(SERVER_REC *server, gboolean once,
continue;
}
if (ignore_check_plus(server, nick, address, rec->visible_name,
ignore_data, &level, TRUE)) {
if (ignore_check_plus(server, nick, address, rec->visible_name, ignore_data, &level,
TRUE)) {
count++;
continue;
}
if (print_channel == NULL ||
active_win->active == (WI_ITEM_REC *) rec) {
if (print_channel == NULL || active_win->active == (WI_ITEM_REC *) rec) {
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);
if (g_slist_find(windows, window) == NULL) {
windows = g_slist_prepend(windows, window);
printformat(server, rec->visible_name,
level,
txt, nick, address, data,
rec->visible_name);
printformat(server, rec->visible_name, level, txt, nick, address,
data, rec->visible_name);
}
}
count++;
@ -462,38 +445,30 @@ static void spread_server_message_to_windows(SERVER_REC *server, gboolean once,
display the change there too */
QUERY_REC *query = query_find(server, nick);
if (query != NULL) {
printformat(server, nick, level,
txt, nick, address, data, "");
printformat(server, nick, level, txt, nick, address, data, "");
}
}
if (once || count == 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,
count <= 1 ? txt : txt_once,
nick, address, data, chans->str);
printformat(server, print_channel, base_level, count <= 1 ? txt : txt_once, nick,
address, data, chans->str);
}
g_string_free(chans, TRUE);
}
static void sig_message_host_changed(SERVER_REC *server, const char *nick,
const char *address, const char *old_address)
static void sig_message_host_changed(SERVER_REC *server, const char *nick, const char *address,
const char *old_address)
{
spread_server_message_to_windows(
server,
settings_get_bool("show_quit_once"),
TRUE,
MSGLEVEL_JOINS,
TXT_HOST_CHANGED, TXT_HOST_CHANGED,
nick, address, old_address,
NULL
);
spread_server_message_to_windows(server, settings_get_bool("show_quit_once"), 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,
const char *address, const char *account)
static void sig_message_account_changed(SERVER_REC *server, const char *nick, const char *address,
const char *account)
{
gboolean logged_in;
int txt;
@ -504,64 +479,46 @@ static void sig_message_account_changed(SERVER_REC *server, const char *nick,
logged_in = g_strcmp0("*", account) != 0;
txt = logged_in ? TXT_LOGGED_IN : TXT_LOGGED_OUT;
spread_server_message_to_windows(
server,
settings_get_bool("show_quit_once"),
TRUE,
MSGLEVEL_MODES,
txt, txt,
nick, address, account,
"account"
);
spread_server_message_to_windows(server, settings_get_bool("show_quit_once"), TRUE,
MSGLEVEL_MODES, txt, txt, nick, address, account,
"account");
}
static void sig_message_quit(SERVER_REC *server, const char *nick,
const char *address, const char *reason)
static void sig_message_quit(SERVER_REC *server, const char *nick, const char *address,
const char *reason)
{
spread_server_message_to_windows(
server,
settings_get_bool("show_quit_once"),
TRUE,
MSGLEVEL_QUITS,
TXT_QUIT, TXT_QUIT_ONCE,
nick, address, reason,
reason
);
spread_server_message_to_windows(server, settings_get_bool("show_quit_once"), TRUE,
MSGLEVEL_QUITS, TXT_QUIT, TXT_QUIT_ONCE, nick, address,
reason, reason);
}
static void sig_message_kick(SERVER_REC *server, const char *channel,
const char *nick, const char *kicker,
const char *address, const char *reason)
static void sig_message_kick(SERVER_REC *server, const char *channel, const char *nick,
const char *kicker, const char *address, const char *reason)
{
int level = MSGLEVEL_KICKS;
ignore_check_plus(server, kicker, address, channel, reason, &level, FALSE);
printformat(server, channel, level,
TXT_KICK, nick, channel, kicker, reason, address);
printformat(server, channel, level, TXT_KICK, nick, channel, kicker, reason, address);
}
static void print_nick_change_channel(SERVER_REC *server, const char *channel,
const char *newnick, const char *oldnick,
const char *address,
int ownnick)
static void print_nick_change_channel(SERVER_REC *server, const char *channel, const char *newnick,
const char *oldnick, const char *address, int ownnick)
{
int level;
level = MSGLEVEL_NICKS;
if (ownnick) level |= MSGLEVEL_NO_ACT;
if (ignore_check_plus(server, oldnick, address,
channel, newnick, &level, TRUE))
if (ownnick)
level |= MSGLEVEL_NO_ACT;
if (ignore_check_plus(server, oldnick, address, channel, newnick, &level, TRUE))
return;
printformat(server, channel, level,
ownnick ? TXT_YOUR_NICK_CHANGED : TXT_NICK_CHANGED,
oldnick, newnick, channel, address);
printformat(server, channel, level, ownnick ? TXT_YOUR_NICK_CHANGED : TXT_NICK_CHANGED,
oldnick, newnick, channel, address);
}
static void print_nick_change(SERVER_REC *server, const char *newnick,
const char *oldnick, const char *address,
int ownnick)
static void print_nick_change(SERVER_REC *server, const char *newnick, const char *oldnick,
const char *address, int ownnick)
{
GSList *tmp, *windows;
int msgprint;
@ -573,59 +530,55 @@ static void print_nick_change(SERVER_REC *server, const char *newnick,
windows = NULL;
for (tmp = server->channels; tmp != NULL; tmp = tmp->next) {
CHANNEL_REC *channel = tmp->data;
WINDOW_REC *window =
window_item_window((WI_ITEM_REC *) channel);
WINDOW_REC *window = window_item_window((WI_ITEM_REC *) channel);
if (nicklist_find(channel, newnick) == NULL ||
g_slist_find(windows, window) != NULL)
continue;
windows = g_slist_append(windows, window);
print_nick_change_channel(server, channel->visible_name,
newnick, oldnick, address, ownnick);
print_nick_change_channel(server, channel->visible_name, newnick, oldnick, address,
ownnick);
msgprint = TRUE;
}
g_slist_free(windows);
if (!msgprint && ownnick) {
printformat(server, NULL, MSGLEVEL_NICKS,
TXT_YOUR_NICK_CHANGED, oldnick, newnick, "",
address);
printformat(server, NULL, MSGLEVEL_NICKS, TXT_YOUR_NICK_CHANGED, oldnick, newnick,
"", address);
}
}
static void sig_message_nick(SERVER_REC *server, const char *newnick,
const char *oldnick, const char *address)
static void sig_message_nick(SERVER_REC *server, const char *newnick, const char *oldnick,
const char *address)
{
print_nick_change(server, newnick, oldnick, address, FALSE);
}
static void sig_message_own_nick(SERVER_REC *server, const char *newnick,
const char *oldnick, const char *address)
static void sig_message_own_nick(SERVER_REC *server, const char *newnick, const char *oldnick,
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);
else {
printformat(server, NULL, MSGLEVEL_NICKS,
TXT_YOUR_NICK_CHANGED, oldnick, newnick, "",
address);
printformat(server, NULL, MSGLEVEL_NICKS, TXT_YOUR_NICK_CHANGED, oldnick, newnick,
"", address);
}
}
static void sig_message_invite(SERVER_REC *server, const char *channel,
const char *nick, const char *address)
static void sig_message_invite(SERVER_REC *server, const char *channel, const char *nick,
const char *address)
{
char *str;
str = show_lowascii(channel);
printformat(server, NULL, MSGLEVEL_INVITES,
TXT_INVITE, nick, str, address);
printformat(server, NULL, MSGLEVEL_INVITES, TXT_INVITE, nick, str, address);
g_free(str);
}
static void sig_message_invite_other(SERVER_REC *server, const char *channel,
const char *invited, const char *nick, const char *address)
static void sig_message_invite_other(SERVER_REC *server, const char *channel, const char *invited,
const char *nick, const char *address)
{
char *str;
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);
str = show_lowascii(channel);
printformat(server, channel, level,
TXT_INVITE_OTHER, invited, nick, str, address);
printformat(server, channel, level, TXT_INVITE_OTHER, invited, nick, str, address);
g_free(str);
}
static void sig_message_topic(SERVER_REC *server, const char *channel,
const char *topic,
const char *nick, const char *address)
static void sig_message_topic(SERVER_REC *server, const char *channel, const char *topic,
const char *nick, const char *address)
{
int level = MSGLEVEL_TOPICS;
ignore_check_plus(server, nick, address, channel, topic, &level, FALSE);
printformat(server, channel, level,
*topic != '\0' ? TXT_NEW_TOPIC : TXT_TOPIC_UNSET,
nick, channel, topic, address);
printformat(server, channel, level, *topic != '\0' ? TXT_NEW_TOPIC : TXT_TOPIC_UNSET, nick,
channel, topic, address);
}
static void sig_message_away_notify(SERVER_REC *server, const char *nick,
const char *addr, const char *awaymsg)
static void sig_message_away_notify(SERVER_REC *server, const char *nick, const char *addr,
const char *awaymsg)
{
int txt = *awaymsg == '\0' ? TXT_NOTIFY_UNAWAY_CHANNEL :
TXT_NOTIFY_AWAY_CHANNEL;
int txt = *awaymsg == '\0' ? TXT_NOTIFY_UNAWAY_CHANNEL : TXT_NOTIFY_AWAY_CHANNEL;
if (!settings_get_bool("away_notify_public"))
return;
spread_server_message_to_windows(server, FALSE,
FALSE,
MSGLEVEL_CRAP,
txt, txt,
nick, addr,
awaymsg,
awaymsg
);
spread_server_message_to_windows(server, FALSE, FALSE, MSGLEVEL_CRAP, txt, txt, nick, addr,
awaymsg, awaymsg);
}
static int printnick_exists(NICK_REC *first, NICK_REC *ignore,
const char *nick)
static int printnick_exists(NICK_REC *first, NICK_REC *ignore, const char *nick)
{
char *printnick;
@ -685,14 +627,14 @@ static int printnick_exists(NICK_REC *first, NICK_REC *ignore,
first = first->next;
}
return FALSE;
return FALSE;
}
static NICK_REC *printnick_find_original(NICK_REC *nick)
{
while (nick != NULL) {
if (g_hash_table_lookup(printnicks, nick) == NULL)
return nick;
return nick;
nick = nick->next;
}
@ -716,31 +658,35 @@ static void sig_nicklist_new(CHANNEL_REC *channel, NICK_REC *nick)
someone else having the original nick already in use.. */
nick = printnick_find_original(firstnick->next);
if (nick == NULL)
return; /* nope, we have it */
return; /* nope, we have it */
}
if (nick->host == NULL)
return;
return;
/* identical nick already exists, have to change it somehow.. */
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);
p = strchr(nickhost+strlen(nick->nick), '.');
if (p != NULL) *p = '\0';
p = strchr(nickhost + strlen(nick->nick), '.');
if (p != NULL)
*p = '\0';
if (!printnick_exists(firstnick, nick, nickhost)) {
/* use nick@host */
/* use nick@host */
g_hash_table_insert(printnicks, nick, nickhost);
return;
return;
}
newnick = g_string_new(NULL);
n = 2;
n = 2;
do {
g_string_printf(newnick, "%s%d", nickhost, n);
n++;
n++;
} while (printnick_exists(firstnick, nick, newnick->str));
g_hash_table_insert(printnicks, nick, g_string_free_and_steal(newnick));
@ -753,53 +699,52 @@ static void sig_nicklist_remove(CHANNEL_REC *channel, NICK_REC *nick)
nickname = g_hash_table_lookup(printnicks, nick);
if (nickname != NULL) {
g_free(nickname);
g_free(nickname);
g_hash_table_remove(printnicks, nick);
}
}
static void sig_nicklist_changed(CHANNEL_REC *channel, NICK_REC *nick)
{
sig_nicklist_remove(channel, nick);
sig_nicklist_new(channel, nick);
sig_nicklist_remove(channel, nick);
sig_nicklist_new(channel, nick);
}
static void sig_channel_joined(CHANNEL_REC *channel)
{
NICK_REC *nick;
NICK_REC *nick;
char *nickname;
/* channel->ownnick is set at this point - check if our own nick
has been changed, if it was set it back to the original nick and
change the previous original to something else */
nickname = g_hash_table_lookup(printnicks, channel->ownnick);
nickname = g_hash_table_lookup(printnicks, channel->ownnick);
if (nickname == NULL)
return;
g_free(nickname);
g_free(nickname);
g_hash_table_remove(printnicks, channel->ownnick);
/* our own nick is guaranteed to be the first in list */
nick = channel->ownnick->next;
/* our own nick is guaranteed to be the first in list */
nick = channel->ownnick->next;
while (nick != NULL) {
if (g_hash_table_lookup(printnicks, nick) == NULL) {
sig_nicklist_new(channel, nick);
break;
break;
}
nick = nick->next;
nick = nick->next;
}
}
static void i_hash_free_value(void *key, void *value)
{
g_free(value);
g_free(value);
}
void fe_messages_init(void)
{
printnicks = g_hash_table_new((GHashFunc) g_direct_hash,
(GCompareFunc) g_direct_equal);
printnicks = g_hash_table_new((GHashFunc) g_direct_hash, (GCompareFunc) g_direct_equal);
settings_add_bool("lookandfeel", "hilight_nick_matches", TRUE);
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;
for (n = 0; formats[n].def != NULL; n++) {
if (formats[n].tag != NULL &&
g_ascii_strcasecmp(formats[n].tag, tag) == 0)
if (formats[n].tag != NULL && g_ascii_strcasecmp(formats[n].tag, tag) == 0)
return n;
}
@ -89,22 +88,23 @@ static void format_expand_code(const char **format, GString *out, int *flags)
set = TRUE;
else if (**format == '-')
set = FALSE;
else switch (**format) {
case 's':
case 'S':
*flags |= !set ? PRINT_FLAG_UNSET_LINE_START :
**format == 's' ? PRINT_FLAG_SET_LINE_START :
PRINT_FLAG_SET_LINE_START_IRSSI;
break;
case 't':
*flags |= set ? PRINT_FLAG_SET_TIMESTAMP :
PRINT_FLAG_UNSET_TIMESTAMP;
break;
case 'T':
*flags |= set ? PRINT_FLAG_SET_SERVERTAG :
PRINT_FLAG_UNSET_SERVERTAG;
break;
}
else
switch (**format) {
case 's':
case 'S':
*flags |= !set ? PRINT_FLAG_UNSET_LINE_START :
**format == 's' ? PRINT_FLAG_SET_LINE_START :
PRINT_FLAG_SET_LINE_START_IRSSI;
break;
case 't':
*flags |=
set ? PRINT_FLAG_SET_TIMESTAMP : PRINT_FLAG_UNSET_TIMESTAMP;
break;
case 'T':
*flags |=
set ? PRINT_FLAG_SET_SERVERTAG : PRINT_FLAG_UNSET_SERVERTAG;
break;
}
(*format)++;
}
@ -116,18 +116,15 @@ void format_ext_color(GString *out, int bg, int color)
if (bg && color < 0x10)
g_string_append_c(out, FORMAT_COLOR_NOCHANGE);
if (color < 0x10)
g_string_append_c(out, color+'0');
g_string_append_c(out, color + '0');
else {
if (color < 0x60)
g_string_append_c(out, bg ? FORMAT_COLOR_EXT1_BG
: FORMAT_COLOR_EXT1);
g_string_append_c(out, bg ? FORMAT_COLOR_EXT1_BG : FORMAT_COLOR_EXT1);
else if (color < 0xb0)
g_string_append_c(out, bg ? FORMAT_COLOR_EXT2_BG
: FORMAT_COLOR_EXT2);
g_string_append_c(out, bg ? FORMAT_COLOR_EXT2_BG : FORMAT_COLOR_EXT2);
else
g_string_append_c(out, bg ? FORMAT_COLOR_EXT3_BG
: FORMAT_COLOR_EXT3);
g_string_append_c(out, FORMAT_COLOR_NOCHANGE + ((color-0x10)%0x50));
g_string_append_c(out, bg ? FORMAT_COLOR_EXT3_BG : FORMAT_COLOR_EXT3);
g_string_append_c(out, FORMAT_COLOR_NOCHANGE + ((color - 0x10) % 0x50));
}
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) {
*bgcolor = color;
*flags |= GUI_PRINT_FLAG_COLOR_24_BG;
}
else {
} else {
*fgcolor = color;
*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')
break;
tmp = 16 + ((*format)[1]-'0'-1)*36;
tmp = 16 + ((*format)[1] - '0' - 1) * 36;
if (tmp > 231) {
if (!isalpha((*format)[2]))
break;
@ -303,8 +299,7 @@ int format_expand_styles(GString *out, const char **format, int *flags)
if (tmp > 255)
break;
}
else if (tmp > 0) {
} else if (tmp > 0) {
if (!isalnum((*format)[2]))
break;
@ -314,8 +309,7 @@ int format_expand_styles(GString *out, const char **format, int *flags)
tmp += 10 + (*format)[2] - 'A';
else
tmp += (*format)[2] - '0';
}
else {
} else {
if (!isxdigit((*format)[2]))
break;
@ -361,26 +355,28 @@ int format_expand_styles(GString *out, const char **format, int *flags)
if (p != NULL) {
g_string_append_c(out, 4);
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;
}
/* check if it's a foreground color */
if (fmt == 'p') fmt = 'm';
if (fmt == 'p')
fmt = 'm';
p = strchr(format_fores, fmt);
if (p != NULL) {
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);
break;
}
/* check if it's a bold foreground color */
if (fmt == 'P') fmt = 'M';
if (fmt == 'P')
fmt = 'M';
p = strchr(format_boldfores, fmt);
if (p != NULL) {
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);
break;
}
@ -391,9 +387,8 @@ int format_expand_styles(GString *out, const char **format, int *flags)
return retval;
}
void format_read_arglist(va_list va, FORMAT_REC *format,
char **arglist, int arglist_size,
char *buffer, int buffer_size)
void format_read_arglist(va_list va, FORMAT_REC *format, char **arglist, int arglist_size,
char *buffer, int buffer_size)
{
int num, len, bufpos;
@ -416,10 +411,9 @@ void format_read_arglist(va_list va, FORMAT_REC *format,
break;
}
arglist[num] = buffer+bufpos;
len = g_snprintf(buffer+bufpos, buffer_size-bufpos,
"%d", d);
bufpos += len+1;
arglist[num] = buffer + bufpos;
len = g_snprintf(buffer + bufpos, buffer_size - bufpos, "%d", d);
bufpos += len + 1;
break;
}
case FORMAT_LONG: {
@ -430,10 +424,9 @@ void format_read_arglist(va_list va, FORMAT_REC *format,
break;
}
arglist[num] = buffer+bufpos;
len = g_snprintf(buffer+bufpos, buffer_size-bufpos,
"%ld", l);
bufpos += len+1;
arglist[num] = buffer + bufpos;
len = g_snprintf(buffer + bufpos, buffer_size - bufpos, "%ld", l);
bufpos += len + 1;
break;
}
case FORMAT_FLOAT: {
@ -444,10 +437,9 @@ void format_read_arglist(va_list va, FORMAT_REC *format,
break;
}
arglist[num] = buffer+bufpos;
len = g_snprintf(buffer+bufpos, buffer_size-bufpos,
"%0.2f", f);
bufpos += len+1;
arglist[num] = buffer + bufpos;
len = g_snprintf(buffer + bufpos, buffer_size - bufpos, "%0.2f", f);
bufpos += len + 1;
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->target = target;
dest->level = level;
dest->window = window != NULL ? window :
window_find_closest(server, target, level);
dest->window = window != NULL ? window : window_find_closest(server, target, level);
dest->meta = meta != NULL ? meta : global_meta;
}
@ -521,10 +512,10 @@ int format_get_length(const char *str)
if (*str == '%' && str[1] != '\0') {
str++;
if (*str != '%') {
adv = format_expand_styles(tmp, &str, NULL);
str += adv;
if (adv)
continue;
adv = format_expand_styles(tmp, &str, NULL);
str += adv;
if (adv)
continue;
}
/* %% or unknown %code, written as-is */
@ -561,17 +552,17 @@ int format_real_length(const char *str, int len)
if (*str == '%' && str[1] != '\0') {
str++;
if (*str != '%') {
adv = format_expand_styles(tmp, &str, NULL);
if (adv) {
str += adv;
continue;
}
/* discount for unknown % */
if (--len < 0) {
str = oldstr;
break;
}
oldstr = str;
adv = format_expand_styles(tmp, &str, NULL);
if (adv) {
str += adv;
continue;
}
/* discount for unknown % */
if (--len < 0) {
str = oldstr;
break;
}
oldstr = str;
}
}
@ -583,7 +574,7 @@ int format_real_length(const char *str, int len)
}
g_string_free(tmp, TRUE);
return (int) (str-start);
return (int) (str - start);
}
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);
if (flags != NULL) *flags = 0;
if (flags != NULL)
*flags = 0;
code = 0;
while (*text != '\0') {
if (code == '%') {
@ -607,7 +599,7 @@ char *format_string_expand(const char *text, int *flags)
g_string_append_c(out, '%');
g_string_append_c(out, *text);
} else {
text += adv - 1;
text += adv - 1;
}
code = 0;
} else {
@ -739,8 +731,7 @@ char *format_string_unexpand(const char *text, int flags)
return g_string_free(out, FALSE);
}
static char *format_get_text_args(TEXT_DEST_REC *dest,
const char *text, char **arglist)
static char *format_get_text_args(TEXT_DEST_REC *dest, const char *text, char **arglist)
{
GString *out;
char code, *ret;
@ -767,22 +758,25 @@ static char *format_get_text_args(TEXT_DEST_REC *dest,
char *ret;
ret = parse_special((char **) &text, dest->server,
dest->target == NULL ? NULL :
window_item_find(dest->server, dest->target),
arglist, &need_free, NULL, 0);
dest->target == NULL ?
NULL :
window_item_find(dest->server, dest->target),
arglist, &need_free, NULL, 0);
if (ret != NULL) {
/* string shouldn't end with \003 or it could
mess up the next one or two characters */
int diff;
int len = strlen(ret);
while (len > 0 && ret[len-1] == 3) len--;
diff = strlen(ret)-len;
while (len > 0 && ret[len - 1] == 3)
len--;
diff = strlen(ret) - len;
g_string_append(out, ret);
if (diff > 0)
g_string_truncate(out, out->len-diff);
if (need_free) g_free(ret);
g_string_truncate(out, out->len - diff);
if (need_free)
g_free(ret);
}
code = 0;
} else {
@ -799,8 +793,8 @@ static char *format_get_text_args(TEXT_DEST_REC *dest,
return ret;
}
char *format_get_text_theme(THEME_REC *theme, const char *module,
TEXT_DEST_REC *dest, int formatnum, ...)
char *format_get_text_theme(THEME_REC *theme, const char *module, TEXT_DEST_REC *dest,
int formatnum, ...)
{
va_list va;
char *str;
@ -815,21 +809,18 @@ char *format_get_text_theme(THEME_REC *theme, const char *module,
return str;
}
char *format_get_text_theme_args(THEME_REC *theme, const char *module,
TEXT_DEST_REC *dest, int formatnum,
va_list va)
char *format_get_text_theme_args(THEME_REC *theme, const char *module, TEXT_DEST_REC *dest,
int formatnum, va_list va)
{
char *arglist[MAX_FORMAT_PARAMS];
char buffer[DEFAULT_FORMAT_ARGLIST_SIZE];
FORMAT_REC *formats;
formats = g_hash_table_lookup(default_formats, module);
format_read_arglist(va, &formats[formatnum],
arglist, sizeof(arglist)/sizeof(char *),
buffer, sizeof(buffer));
format_read_arglist(va, &formats[formatnum], arglist, sizeof(arglist) / sizeof(char *),
buffer, sizeof(buffer));
return format_get_text_theme_charargs(theme, module, dest,
formatnum, arglist);
return format_get_text_theme_charargs(theme, module, dest, formatnum, arglist);
}
/* Check if format number is a message format that needs nick column */
@ -846,20 +837,20 @@ static gboolean is_message_format(int formatnum)
static int get_nick_param_for_format(int formatnum)
{
switch (formatnum) {
case TXT_OWN_MSG:
case TXT_OWN_MSG_CHANNEL:
case TXT_PUBMSG:
case TXT_PUBMSG_CHANNEL:
case TXT_PUBMSG_ME:
case TXT_PUBMSG_ME_CHANNEL:
return 0; /* $0 = nick */
case TXT_OWN_MSG:
case TXT_OWN_MSG_CHANNEL:
case TXT_PUBMSG:
case TXT_PUBMSG_CHANNEL:
case TXT_PUBMSG_ME:
case TXT_PUBMSG_ME_CHANNEL:
return 0; /* $0 = nick */
case TXT_PUBMSG_HILIGHT:
case TXT_PUBMSG_HILIGHT_CHANNEL:
return 1; /* $1 = nick (because $0 = color) */
case TXT_PUBMSG_HILIGHT:
case TXT_PUBMSG_HILIGHT_CHANNEL:
return 1; /* $1 = nick (because $0 = color) */
default:
return 0; /* fallback */
default:
return 0; /* fallback */
}
}
@ -871,7 +862,8 @@ static char *apply_nick_column_formatting(const char *format, int formatnum)
char search_param[10], replace_param[20];
int nick_param;
if (!format) return NULL;
if (!format)
return NULL;
/* Get correct parameter number for nick in this format */
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;
}
char *format_get_text_theme_charargs(THEME_REC *theme, const char *module,
TEXT_DEST_REC *dest, int formatnum,
char **args)
char *format_get_text_theme_charargs(THEME_REC *theme, const char *module, TEXT_DEST_REC *dest,
int formatnum, char **args)
{
MODULE_THEME_REC *module_theme;
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 */
/* Additional protection: avoid recursion during timestamp formatting */
if (settings_get_bool("nick_column_enabled") &&
g_strcmp0(module, "fe-common/core") == 0 &&
is_message_format(formatnum) &&
nick_formatting_depth == 0) { /* Prevent recursion */
if (settings_get_bool("nick_column_enabled") && g_strcmp0(module, "fe-common/core") == 0 &&
is_message_format(formatnum) && nick_formatting_depth == 0) { /* Prevent recursion */
nick_formatting_depth++;
modified_text = apply_nick_column_formatting(text, formatnum);
text = modified_text;
nick_formatting_depth--;
}
result = format_get_text_args(dest, text, args);
@ -933,9 +920,8 @@ char *format_get_text_theme_charargs(THEME_REC *theme, const char *module,
return result;
}
char *format_get_text(const char *module, WINDOW_REC *window,
void *server, const char *target,
int formatnum, ...)
char *format_get_text(const char *module, WINDOW_REC *window, void *server, const char *target,
int formatnum, ...)
{
TEXT_DEST_REC dest;
THEME_REC *theme;
@ -1001,8 +987,7 @@ char *format_add_lineend(const char *text, const char *linestart)
return ret;
}
#define LINE_START_IRSSI_LEVEL \
(MSGLEVEL_CLIENTERROR | MSGLEVEL_CLIENTNOTICE)
#define LINE_START_IRSSI_LEVEL (MSGLEVEL_CLIENTERROR | MSGLEVEL_CLIENTNOTICE)
#define NOT_LINE_START_LEVEL \
(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;
if ((dest->flags & PRINT_FLAG_SET_TIMESTAMP) == 0 &&
(dest->level & (MSGLEVEL_NEVER|MSGLEVEL_LASTLOG)) != 0)
(dest->level & (MSGLEVEL_NEVER | MSGLEVEL_LASTLOG)) != 0)
return NULL;
if (timestamp_timeout > 0) {
diff = t - dest->window->last_timestamp;
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);
format = format_get_text_theme(theme, MODULE_NAME, dest,
TXT_TIMESTAMP);
format = format_get_text_theme(theme, MODULE_NAME, dest, TXT_TIMESTAMP);
if (strftime(str, sizeof(str), format, tm) <= 0)
str[0] = '\0';
g_free(format);
@ -1081,8 +1064,7 @@ static char *get_server_tag(THEME_REC *theme, TEXT_DEST_REC *dest)
return NULL;
if ((dest->flags & PRINT_FLAG_SET_SERVERTAG) == 0) {
if (dest->window->active != NULL &&
dest->window->active->server == dest->server)
if (dest->window->active != NULL && dest->window->active->server == dest->server)
return NULL;
if (servers != NULL) {
@ -1100,8 +1082,7 @@ static char *get_server_tag(THEME_REC *theme, TEXT_DEST_REC *dest)
return NULL;
}
return format_get_text_theme(theme, MODULE_NAME, dest,
TXT_SERVERTAG, dest->server_tag);
return format_get_text_theme(theme, MODULE_NAME, dest, TXT_SERVERTAG, dest->server_tag);
}
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)
return NULL;
linestart = g_strconcat(timestamp != NULL ? timestamp : "",
servertag, NULL);
linestart = g_strconcat(timestamp != NULL ? timestamp : "", servertag, NULL);
g_free_not_null(timestamp);
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);
}
/* parse ANSI color string */
static const char *get_ansi_color(THEME_REC *theme, const char *str,
int *fg_ret, int *bg_ret, int *flags_ret)
static const char *get_ansi_color(THEME_REC *theme, const char *str, int *fg_ret, int *bg_ret,
int *flags_ret)
{
static char ansitab[8] = { 0, 4, 2, 6, 1, 5, 3, 7 };
const char *start;
@ -1153,7 +1132,8 @@ static const char *get_ansi_color(THEME_REC *theme, const char *str,
num = 0;
for (;; str++) {
if (*str == '\0') return start;
if (*str == '\0')
return start;
if (i_isdigit(*str)) {
if (!parse_uint(str, &endptr, 10, &num)) {
@ -1170,10 +1150,10 @@ static const char *get_ansi_color(THEME_REC *theme, const char *str,
/* reset colors and attributes back to default */
fg = theme->default_color;
bg = -1;
flags &= ~(GUI_PRINT_FLAG_INDENT |
GUI_PRINT_FLAG_BOLD | GUI_PRINT_FLAG_ITALIC | GUI_PRINT_FLAG_UNDERLINE |
GUI_PRINT_FLAG_BLINK | GUI_PRINT_FLAG_REVERSE |
GUI_PRINT_FLAG_COLOR_24_FG | GUI_PRINT_FLAG_COLOR_24_BG);
flags &= ~(GUI_PRINT_FLAG_INDENT | GUI_PRINT_FLAG_BOLD |
GUI_PRINT_FLAG_ITALIC | GUI_PRINT_FLAG_UNDERLINE |
GUI_PRINT_FLAG_BLINK | GUI_PRINT_FLAG_REVERSE |
GUI_PRINT_FLAG_COLOR_24_FG | GUI_PRINT_FLAG_COLOR_24_BG);
break;
case 1:
/* hilight */
@ -1228,7 +1208,8 @@ static const char *get_ansi_color(THEME_REC *theme, const char *str,
case 38:
case 48:
/* ANSI indexed color or RGB color */
if (*str != ';') break;
if (*str != ';')
break;
str++;
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;
if (*str == '\0') return start;
if (*str == '\0')
return start;
switch (num2) {
case 2:
@ -1252,13 +1234,15 @@ static const char *get_ansi_color(THEME_REC *theme, const char *str,
}
str++;
for (; i_isdigit(*str); str++)
num2 = (num2&~0xff) |
(((num2&0xff) * 10 + (*str-'0'))&0xff);
num2 = (num2 & ~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) {
flags |= GUI_PRINT_FLAG_COLOR_24_FG;
@ -1271,7 +1255,8 @@ static const char *get_ansi_color(THEME_REC *theme, const char *str,
break;
case 5:
/* indexed */
if (*str != ';') break;
if (*str != ';')
break;
str++;
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;
if (*str == '\0') return start;
if (*str == '\0')
return start;
if (num == 38) {
flags &= ~GUI_PRINT_FLAG_COLOR_24_FG;
@ -1295,25 +1281,28 @@ static const char *get_ansi_color(THEME_REC *theme, const char *str,
default:
if (num >= 30 && num <= 37) {
flags &= ~GUI_PRINT_FLAG_COLOR_24_FG;
fg = ansitab[num-30];
fg = ansitab[num - 30];
} else if (num >= 40 && num <= 47) {
flags &= ~GUI_PRINT_FLAG_COLOR_24_BG;
bg = ansitab[num-40];
bg = ansitab[num - 40];
} else if (num >= 90 && num <= 97) {
flags &= ~GUI_PRINT_FLAG_COLOR_24_FG;
fg = 8 + ansitab[num-90];
fg = 8 + ansitab[num - 90];
} else if (num >= 100 && num <= 107) {
flags &= ~GUI_PRINT_FLAG_COLOR_24_BG;
bg = 8 + ansitab[num-100];
bg = 8 + ansitab[num - 100];
}
break;
}
num = 0;
if (*str == 'm') {
if (fg_ret != NULL) *fg_ret = fg;
if (bg_ret != NULL) *bg_ret = bg;
if (flags_ret != NULL) *flags_ret = flags;
if (fg_ret != NULL)
*fg_ret = fg;
if (bg_ret != NULL)
*bg_ret = bg;
if (flags_ret != NULL)
*flags_ret = flags;
str++;
break;
@ -1337,37 +1326,38 @@ static void get_mirc_color(const char **str, int *fg_ret, int *bg_ret)
bg = -1;
} else {
/* foreground color */
fg = **str-'0';
fg = **str - '0';
(*str)++;
if (i_isdigit(**str)) {
fg = fg*10 + (**str-'0');
fg = fg * 10 + (**str - '0');
(*str)++;
}
if ((*str)[0] == ',' && i_isdigit((*str)[1])) {
/* background color */
(*str)++;
bg = **str-'0';
bg = **str - '0';
(*str)++;
if (i_isdigit(**str)) {
bg = bg*10 + (**str-'0');
bg = bg * 10 + (**str - '0');
(*str)++;
}
}
}
if (fg_ret) *fg_ret = fg;
if (bg_ret) *bg_ret = bg;
if (fg_ret)
*fg_ret = fg;
if (bg_ret)
*bg_ret = bg;
}
#define IS_COLOR_CODE(c) \
((c) == 2 || (c) == 3 || (c) == 4 || (c) == 6 || (c) == 7 || \
(c) == 15 || (c) == 17 || (c) == 22 || (c) == 27 || (c) == 29 || (c) == 31)
#define IS_COLOR_CODE(c) \
((c) == 2 || (c) == 3 || (c) == 4 || (c) == 6 || (c) == 7 || (c) == 15 || (c) == 17 || \
(c) == 22 || (c) == 27 || (c) == 29 || (c) == 31)
/* Return how many characters in `str' must be skipped before `len'
characters of text is skipped. */
int strip_real_length(const char *str, int len,
int *last_color_pos, int *last_color_len)
int strip_real_length(const char *str, int len, int *last_color_pos, int *last_color_len)
{
const char *start = str;
@ -1381,36 +1371,39 @@ int strip_real_length(const char *str, int len,
const char *mircstart = str;
if (last_color_pos != NULL)
*last_color_pos = (int) (str-start);
*last_color_pos = (int) (str - start);
str++;
get_mirc_color(&str, NULL, 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') {
/* We expect 4 to indicate an internal Irssi color code. However 4
* also means hex color, an alternative to mIRC color codes. We
* don't support those. */
if (str[1] == FORMAT_COLOR_24 && str[2] != '\0') {
if (str[3] == '\0') str++;
else if (str[4] == '\0') str += 2;
else if (str[5] == '\0') str += 3;
if (str[3] == '\0')
str++;
else if (str[4] == '\0')
str += 2;
else if (str[5] == '\0')
str += 3;
else {
if (last_color_pos != NULL)
*last_color_pos = (int) (str-start);
*last_color_pos = (int) (str - start);
if (last_color_len != NULL)
*last_color_len = 6;
str+=4;
str += 4;
}
} else if (str[1] < FORMAT_STYLE_SPECIAL && str[2] != '\0') {
if (last_color_pos != NULL)
*last_color_pos = (int) (str-start);
*last_color_pos = (int) (str - start);
if (last_color_len != NULL)
*last_color_len = 3;
str++;
} else if (str[1] == FORMAT_STYLE_DEFAULTS) {
if (last_color_pos != NULL)
*last_color_pos = (int) (str-start);
*last_color_pos = (int) (str - start);
if (last_color_len != NULL)
*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)
@ -1452,12 +1445,16 @@ char *strip_codes(const char *input)
/* irssi color */
if (p[2] != '\0') {
if (p[1] == FORMAT_COLOR_24) {
if (p[3] == '\0') p += 2;
else if (p[4] == '\0') p += 3;
else if (p[5] == '\0') p += 4;
else p += 5;
if (p[3] == '\0')
p += 2;
else if (p[4] == '\0')
p += 3;
else if (p[5] == '\0')
p += 4;
else
p += 5;
} else
p += 2;
p += 2;
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);
flags = 0; fgcolor = theme->default_color; bgcolor = -1;
flags = 0;
fgcolor = theme->default_color;
bgcolor = -1;
if (*str == '\0') {
/* 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 */
handler(dest->window, GINT_TO_POINTER(fgcolor), GINT_TO_POINTER(bgcolor),
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') {
@ -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);
fgcolor = theme->default_color;
bgcolor = -1;
flags &= GUI_PRINT_FLAG_INDENT|GUI_PRINT_FLAG_MONOSPACE;
flags &= GUI_PRINT_FLAG_INDENT | GUI_PRINT_FLAG_MONOSPACE;
}
if (*ptr == '\0')
break;
switch (type)
{
switch (type) {
case 2:
/* bold */
if (!hide_text_style)
@ -1542,9 +1540,8 @@ void format_send_as_gui_flags(TEXT_DEST_REC *dest, const char *text, SIGNAL_FUNC
break;
case 3:
/* MIRC color */
get_mirc_color((const char **) &ptr,
hide_colors ? NULL : &fgcolor,
hide_colors ? NULL : &bgcolor);
get_mirc_color((const char **) &ptr, hide_colors ? NULL : &fgcolor,
hide_colors ? NULL : &bgcolor);
if (!hide_colors)
flags |= GUI_PRINT_FLAG_MIRC_COLOR;
break;
@ -1576,7 +1573,7 @@ void format_send_as_gui_flags(TEXT_DEST_REC *dest, const char *text, SIGNAL_FUNC
case FORMAT_STYLE_DEFAULTS:
fgcolor = theme->default_color;
bgcolor = -1;
flags &= GUI_PRINT_FLAG_INDENT|GUI_PRINT_FLAG_MONOSPACE;
flags &= GUI_PRINT_FLAG_INDENT | GUI_PRINT_FLAG_MONOSPACE;
break;
case FORMAT_STYLE_CLRTOEOL:
break;
@ -1610,7 +1607,8 @@ void format_send_as_gui_flags(TEXT_DEST_REC *dest, const char *text, SIGNAL_FUNC
default:
if (*ptr != FORMAT_COLOR_NOCHANGE) {
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')
break;
@ -1618,7 +1616,7 @@ void format_send_as_gui_flags(TEXT_DEST_REC *dest, const char *text, SIGNAL_FUNC
ptr++;
if (*ptr != FORMAT_COLOR_NOCHANGE) {
flags &= ~GUI_PRINT_FLAG_COLOR_24_BG;
bgcolor = *ptr==(char)0xff ? -1 : *ptr-'0';
bgcolor = *ptr == (char) 0xff ? -1 : *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 */
fgcolor = theme->default_color;
bgcolor = -1;
flags &= GUI_PRINT_FLAG_INDENT|GUI_PRINT_FLAG_MONOSPACE;
flags &= GUI_PRINT_FLAG_INDENT | GUI_PRINT_FLAG_MONOSPACE;
break;
case 17:
if (!hide_text_style)
@ -1658,11 +1656,9 @@ void format_send_as_gui_flags(TEXT_DEST_REC *dest, const char *text, SIGNAL_FUNC
break;
case 27:
/* ansi color code */
ptr = (char *)
get_ansi_color(theme, ptr,
hide_colors ? NULL : &fgcolor,
hide_colors ? NULL : &bgcolor,
hide_colors ? NULL : &flags);
ptr = (char *) get_ansi_color(theme, ptr, hide_colors ? NULL : &fgcolor,
hide_colors ? NULL : &bgcolor,
hide_colors ? NULL : &flags);
break;
}
@ -1767,7 +1763,7 @@ static void read_settings(void)
timestamp_level = settings_get_bool("timestamps") ? MSGLEVEL_ALL : 0;
if (timestamp_level > 0)
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_text_style = settings_get_bool("hide_text_style");