Fri, 21 May 2004 14:33:32 +0000
[gaim-migrate @ 9774]
" This patch renames the existing received-*-msg signals
to receiving-*msg to fit the naming of other signals
where a pointer to the message is passed (writing,
sending, displaying)
It adds new received-*-msg signals which are emitted
after the receiving signals, in line with the other
conversation signals (wrote, sent, displayed)
This is necessary to allow plugins which depend on the
final received message to work alongside plugins which
may modify the message.
One known example of this is festival-gaim alongside
gaim-encryption - festival-gaim would try to "speak"
the encrypted text:
http://sf.net/tracker/?func=detail&aid=943216&group_id=89763&atid=591320
I've tested this with gaim-encryption and festival-gaim
(locally modified so gaim-encryption uses the receiving
signal and festival uses the received signal)
All in-tree users of received-*-msg are updated to use
receiving-*-msg if they do modify the message, the
conversation-signals documentation is updated, the
signals-test.c & signal-test.tcl plugins are also updated." --Stu Tomlinson
committer: Luke Schierer <lschiere@pidgin.im>
| 5309 | 1 | /** |
| 5312 | 2 | * @file utils.c Utility functions |
| 5309 | 3 | * |
| 4 | * gaim | |
| 5 | * | |
|
8475
3b5687726055
[gaim-migrate @ 9208]
Christian Hammond <chipx86@chipx86.com>
parents:
7134
diff
changeset
|
6 | * Copyright (C) 2003-2004 Christian Hammond <chipx86@gnupdate.org> |
|
6701
7e2db9273748
[gaim-migrate @ 7227]
Christian Hammond <chipx86@chipx86.com>
parents:
6359
diff
changeset
|
7 | * |
| 5309 | 8 | * This program is free software; you can redistribute it and/or modify |
| 9 | * it under the terms of the GNU General Public License as published by | |
| 10 | * the Free Software Foundation; either version 2 of the License, or | |
| 11 | * (at your option) any later version. | |
| 12 | * | |
| 13 | * This program is distributed in the hope that it will be useful, | |
| 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 16 | * GNU General Public License for more details. | |
| 17 | * | |
| 18 | * You should have received a copy of the GNU General Public License | |
| 19 | * along with this program; if not, write to the Free Software | |
| 20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| 21 | */ | |
| 22 | #include "msn.h" | |
| 23 | ||
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
24 | void |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
25 | msn_parse_format(const char *mime, char **pre_ret, char **post_ret) |
| 5309 | 26 | { |
| 27 | char *cur; | |
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
28 | GString *pre = g_string_new(NULL); |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
29 | GString *post = g_string_new(NULL); |
|
6093
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
30 | unsigned int colors[3]; |
| 5309 | 31 | |
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
32 | if (pre_ret != NULL) *pre_ret = NULL; |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
33 | if (post_ret != NULL) *post_ret = NULL; |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
34 | |
| 5309 | 35 | cur = strstr(mime, "FN="); |
| 36 | ||
| 8518 | 37 | if (cur && (*(cur = cur + 3) != ';')) |
| 38 | { | |
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
39 | pre = g_string_append(pre, "<FONT FACE=\""); |
| 5309 | 40 | |
| 8518 | 41 | while (*cur && *cur != ';') |
| 42 | { | |
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
43 | pre = g_string_append_c(pre, *cur); |
| 5309 | 44 | cur++; |
| 45 | } | |
| 46 | ||
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
47 | pre = g_string_append(pre, "\">"); |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
48 | post = g_string_prepend(post, "</FONT>"); |
| 5309 | 49 | } |
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
50 | |
| 5309 | 51 | cur = strstr(mime, "EF="); |
| 52 | ||
| 8518 | 53 | if (cur && (*(cur = cur + 3) != ';')) |
| 54 | { | |
| 55 | while (*cur && *cur != ';') | |
| 56 | { | |
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
57 | pre = g_string_append_c(pre, '<'); |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
58 | pre = g_string_append_c(pre, *cur); |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
59 | pre = g_string_append_c(pre, '>'); |
| 8691 | 60 | post = g_string_prepend_c(post, '>'); |
| 61 | post = g_string_prepend_c(post, *cur); | |
| 62 | post = g_string_prepend_c(post, '/'); | |
| 63 | post = g_string_prepend_c(post, '<'); | |
| 5309 | 64 | cur++; |
| 65 | } | |
| 66 | } | |
| 67 | ||
| 68 | cur = strstr(mime, "CO="); | |
| 69 | ||
| 8518 | 70 | if (cur && (*(cur = cur + 3) != ';')) |
| 71 | { | |
|
6093
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
72 | int i; |
|
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
73 | |
|
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
74 | i = sscanf(cur, "%02x%02x%02x;", &colors[0], &colors[1], &colors[2]); |
|
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
75 | |
| 8518 | 76 | if (i > 0) |
| 77 | { | |
| 5309 | 78 | char tag[64]; |
|
6093
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
79 | |
| 8518 | 80 | if (i == 1) |
| 81 | { | |
|
6093
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
82 | colors[1] = 0; |
| 8518 | 83 | colors[2] = 0; |
|
6093
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
84 | } |
| 8518 | 85 | else if (i == 2) |
| 86 | { | |
| 87 | unsigned int temp = colors[0]; | |
| 88 | ||
| 89 | colors[0] = colors[1]; | |
| 90 | colors[1] = temp; | |
| 91 | colors[2] = 0; | |
| 92 | } | |
| 93 | else if (i == 3) | |
| 94 | { | |
| 95 | unsigned int temp = colors[2]; | |
| 96 | ||
| 97 | colors[2] = colors[0]; | |
| 98 | colors[0] = temp; | |
|
6093
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
99 | } |
|
2095841fde03
[gaim-migrate @ 6552]
Christian Hammond <chipx86@chipx86.com>
parents:
5964
diff
changeset
|
100 | |
| 5309 | 101 | g_snprintf(tag, sizeof(tag), |
| 102 | "<FONT COLOR=\"#%02hhx%02hhx%02hhx\">", | |
| 8518 | 103 | colors[0], colors[1], colors[2]); |
| 104 | ||
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
105 | pre = g_string_append(pre, tag); |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
106 | post = g_string_prepend(post, "</FONT>"); |
| 5309 | 107 | } |
| 108 | } | |
| 109 | ||
| 7134 | 110 | cur = g_strdup(gaim_url_decode(pre->str)); |
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
111 | g_string_free(pre, TRUE); |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
112 | |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
113 | if (pre_ret != NULL) |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
114 | *pre_ret = cur; |
|
6359
5b1705ffdd55
[gaim-migrate @ 6863]
Christian Hammond <chipx86@chipx86.com>
parents:
6358
diff
changeset
|
115 | else |
|
5b1705ffdd55
[gaim-migrate @ 6863]
Christian Hammond <chipx86@chipx86.com>
parents:
6358
diff
changeset
|
116 | g_free(cur); |
| 5309 | 117 | |
| 7134 | 118 | cur = g_strdup(gaim_url_decode(post->str)); |
|
6358
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
119 | g_string_free(post, TRUE); |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
120 | |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
121 | if (post_ret != NULL) |
|
c3347685b9ef
[gaim-migrate @ 6862]
Christian Hammond <chipx86@chipx86.com>
parents:
6093
diff
changeset
|
122 | *post_ret = cur; |
|
6359
5b1705ffdd55
[gaim-migrate @ 6863]
Christian Hammond <chipx86@chipx86.com>
parents:
6358
diff
changeset
|
123 | else |
|
5b1705ffdd55
[gaim-migrate @ 6863]
Christian Hammond <chipx86@chipx86.com>
parents:
6358
diff
changeset
|
124 | g_free(cur); |
| 5309 | 125 | } |
| 8518 | 126 | |
| 127 | /* | |
| 128 | * We need this because we're only supposed to encode spaces in the font | |
| 129 | * names. gaim_url_encode() isn't acceptable. | |
| 130 | */ | |
| 131 | const char * | |
| 132 | encode_spaces(const char *str) | |
| 133 | { | |
| 134 | static char buf[BUF_LEN]; | |
| 135 | const char *c; | |
| 136 | char *d; | |
| 137 | ||
| 138 | g_return_val_if_fail(str != NULL, NULL); | |
| 139 | ||
| 140 | for (c = str, d = buf; *c != '\0'; c++) | |
| 141 | { | |
| 142 | if (*c == ' ') | |
| 143 | { | |
| 144 | *d++ = '%'; | |
| 145 | *d++ = '2'; | |
| 146 | *d++ = '0'; | |
| 147 | } | |
| 148 | else | |
| 149 | *d++ = *c; | |
| 150 | } | |
| 151 | ||
| 152 | return buf; | |
| 153 | } | |
| 154 | ||
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
155 | /* |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
156 | * Taken from the zephyr plugin. |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
157 | * This parses HTML formatting (put out by one of the gtkimhtml widgets |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
158 | * and converts it to msn formatting. It doesn't deal with the tag closing, |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
159 | * but gtkimhtml widgets give valid html. |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
160 | * It currently deals properly with <b>, <u>, <i>, <font face=...>, |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
161 | * <font color=...>. |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
162 | * It ignores <font back=...> and <font size=...> |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
163 | */ |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
164 | void |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
165 | msn_import_html(const char *html, char **attributes, char **message) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
166 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
167 | int len, retcount = 0; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
168 | const char *c; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
169 | char *msg; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
170 | char *fontface = NULL; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
171 | char fonteffect[4]; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
172 | char fontcolor[7]; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
173 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
174 | g_return_if_fail(html != NULL); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
175 | g_return_if_fail(attributes != NULL); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
176 | g_return_if_fail(message != NULL); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
177 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
178 | len = strlen(html); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
179 | msg = g_malloc0(len + 1); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
180 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
181 | memset(fontcolor, 0, sizeof(fontcolor)); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
182 | memset(fonteffect, 0, sizeof(fontcolor)); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
183 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
184 | for (c = html; *c != '\0';) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
185 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
186 | if (*c == '<') |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
187 | { |
|
8923
cadbc8e3dfe2
[gaim-migrate @ 9693]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8921
diff
changeset
|
188 | if (!g_ascii_strncasecmp(c + 1, "br>", 3)) |
|
cadbc8e3dfe2
[gaim-migrate @ 9693]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8921
diff
changeset
|
189 | { |
|
cadbc8e3dfe2
[gaim-migrate @ 9693]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8921
diff
changeset
|
190 | msg[retcount++] = '\r'; |
|
cadbc8e3dfe2
[gaim-migrate @ 9693]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8921
diff
changeset
|
191 | msg[retcount++] = '\n'; |
|
cadbc8e3dfe2
[gaim-migrate @ 9693]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8921
diff
changeset
|
192 | c += 4; |
|
cadbc8e3dfe2
[gaim-migrate @ 9693]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8921
diff
changeset
|
193 | } |
|
cadbc8e3dfe2
[gaim-migrate @ 9693]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8921
diff
changeset
|
194 | else if (!g_ascii_strncasecmp(c + 1, "i>", 2)) |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
195 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
196 | strcat(fonteffect, "I"); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
197 | c += 3; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
198 | } |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
199 | else if (!g_ascii_strncasecmp(c + 1, "b>", 2)) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
200 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
201 | strcat(fonteffect, "B"); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
202 | c += 3; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
203 | } |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
204 | else if (!g_ascii_strncasecmp(c + 1, "u>", 2)) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
205 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
206 | strcat(fonteffect, "U"); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
207 | c += 3; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
208 | } |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
209 | else if (!g_ascii_strncasecmp(c + 1, "a href=\"", 8)) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
210 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
211 | c += 9; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
212 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
213 | while (g_ascii_strncasecmp(c, "\">", 2)) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
214 | msg[retcount++] = *c++; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
215 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
216 | c += 2; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
217 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
218 | /* ignore descriptive string */ |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
219 | while (g_ascii_strncasecmp(c, "</a>", 4)) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
220 | c++; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
221 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
222 | c += 4; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
223 | } |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
224 | else if (!g_ascii_strncasecmp(c + 1, "font", 4)) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
225 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
226 | c += 5; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
227 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
228 | while (!g_ascii_strncasecmp(c, " ", 1)) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
229 | c++; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
230 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
231 | if (!g_ascii_strncasecmp(c, "color=\"#", 7)) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
232 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
233 | c += 8; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
234 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
235 | fontcolor[0] = *(c + 4); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
236 | fontcolor[1] = *(c + 5); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
237 | fontcolor[2] = *(c + 2); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
238 | fontcolor[3] = *(c + 3); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
239 | fontcolor[4] = *c; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
240 | fontcolor[5] = *(c + 1); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
241 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
242 | c += 8; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
243 | } |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
244 | else if (!g_ascii_strncasecmp(c, "face=\"", 6)) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
245 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
246 | const char *end = NULL; |
|
8921
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
247 | const char *comma = NULL; |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
248 | unsigned int namelen = 0; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
249 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
250 | c += 6; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
251 | end = strchr(c, '\"'); |
|
8921
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
252 | comma = strchr(c, ','); |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
253 | |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
254 | namelen = (unsigned int)((comma != NULL ? comma : end) - c); |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
255 | |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
256 | fontface = g_strndup(c, namelen); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
257 | c = end + 2; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
258 | } |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
259 | else |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
260 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
261 | /* Drop all unrecognized/misparsed font tags */ |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
262 | while (g_ascii_strncasecmp(c, "\">", 2)) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
263 | c++; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
264 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
265 | c += 2; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
266 | } |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
267 | } |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
268 | else |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
269 | { |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
270 | while (g_ascii_strncasecmp(c, ">", 1)) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
271 | c++; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
272 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
273 | c++; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
274 | } |
|
8921
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
275 | } |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
276 | else if (*c == '&') |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
277 | { |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
278 | if (!g_ascii_strncasecmp(c, "<", 4)) |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
279 | { |
| 8678 | 280 | msg[retcount++] = '<'; |
| 281 | c += 4; | |
|
8921
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
282 | } |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
283 | else if (!g_ascii_strncasecmp(c, ">", 4)) |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
284 | { |
| 8678 | 285 | msg[retcount++] = '>'; |
| 286 | c += 4; | |
|
8921
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
287 | } |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
288 | else if (!g_ascii_strncasecmp(c, """, 6)) |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
289 | { |
| 8678 | 290 | msg[retcount++] = '"'; |
| 291 | c += 6; | |
|
8921
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
292 | } |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
293 | else if (!g_ascii_strncasecmp(c, "&", 5)) |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
294 | { |
| 8678 | 295 | msg[retcount++] = '&'; |
| 296 | c += 5; | |
| 297 | } | |
|
8921
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
298 | } |
|
5daa40528148
[gaim-migrate @ 9691]
Felipe Contreras <felipe.contreras@gmail.com>
parents:
8691
diff
changeset
|
299 | else |
|
8595
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
300 | msg[retcount++] = *c++; |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
301 | } |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
302 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
303 | if (fontface == NULL) |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
304 | fontface = g_strdup("MS Sans Serif"); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
305 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
306 | *attributes = g_strdup_printf("FN=%s; EF=%s; CO=%s; PF=0", |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
307 | encode_spaces(fontface), |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
308 | fonteffect, fontcolor); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
309 | *message = g_strdup(msg); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
310 | |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
311 | g_free(fontface); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
312 | g_free(msg); |
|
c751f6b0260e
[gaim-migrate @ 9346]
Christian Hammond <chipx86@chipx86.com>
parents:
8530
diff
changeset
|
313 | } |