# HG changeset patch # User Ethan Blanton # Date 1180374724 0 # Node ID 82a02dbf2fa294566206fa0fc4cd997d1a2c94ba # Parent 58a286e231b736101e8cea21afdd86257d6da90d This performs mIRC formatting code stripping for the room list, as well as fixing (I think) mIRC color code stripping for all purposes. I haven't tested this carefully, so someone scream if it breaks anything. Fixes #557 diff -r 58a286e231b7 -r 82a02dbf2fa2 libpurple/protocols/irc/msgs.c --- a/libpurple/protocols/irc/msgs.c Mon May 28 03:18:02 2007 +0000 +++ b/libpurple/protocols/irc/msgs.c Mon May 28 17:52:04 2007 +0000 @@ -369,6 +369,7 @@ if (!strcmp(name, "322")) { PurpleRoomlistRoom *room; + char *topic; if (!args[0] || !args[1] || !args[2] || !args[3]) return; @@ -376,7 +377,9 @@ room = purple_roomlist_room_new(PURPLE_ROOMLIST_ROOMTYPE_ROOM, args[1], NULL); purple_roomlist_room_add_field(irc->roomlist, room, args[1]); purple_roomlist_room_add_field(irc->roomlist, room, GINT_TO_POINTER(strtol(args[2], NULL, 10))); - purple_roomlist_room_add_field(irc->roomlist, room, args[3]); + topic = irc_mirc2txt(args[3]); + purple_roomlist_room_add_field(irc->roomlist, room, topic); + g_free(topic); purple_roomlist_room_add(irc->roomlist, room); } } diff -r 58a286e231b7 -r 82a02dbf2fa2 libpurple/protocols/irc/parse.c --- a/libpurple/protocols/irc/parse.c Mon May 28 03:18:02 2007 +0000 +++ b/libpurple/protocols/irc/parse.c Mon May 28 17:52:04 2007 +0000 @@ -402,6 +402,22 @@ switch (result[i]) { case '\002': case '\003': + /* Foreground color */ + if (isdigit(result[i + 1])) + i++; + if (isdigit(result[i + 1])) + i++; + /* Optional comma and background color */ + if (result[i + 1] == ',') { + i++; + if (isdigit(result[i + 1])) + i++; + if (isdigit(result[i + 1])) + i++; + } + /* Note that i still points to the last character + * of the color selection string. */ + continue; case '\007': case '\017': case '\026':