Mon, 12 Sep 2016 08:55:35 -0500
gg: Protect against issues when closing while connecting
Since the GIOStream is cancelled when data is freed, any cancelled
callbacks are called after such data is freed. This patch guards against
cancelled calls by safely returning without accessing any freed data if
the connection has been cancelled (aka closed).
Futhermore, if GG tries to connect and is quickly disconnected,
ggp_tcpsocket_close() is never called. As far as I can tell, it's an
existing bug, but PurpleSockets both work differently when closing and
are closed by the connection if any leak. So the issue wasn't a major
problem. This patch lessens the issue by guarding against it, but it
should be fixed at some point.
| 6513 | 1 | /* |
| 15884 | 2 | * purple |
| 6513 | 3 | * |
| 4 | * Some code copyright 2003 Tim Ringenbach <omarvo@hotmail.com> | |
| 5 | * (marv on irc.freenode.net) | |
| 6 | * | |
| 7 | * This program is free software; you can redistribute it and/or modify | |
| 8 | * it under the terms of the GNU General Public License as published by | |
| 9 | * the Free Software Foundation; either version 2 of the License, or | |
| 10 | * (at your option) any later version. | |
| 11 | * | |
| 12 | * This program is distributed in the hope that it will be useful, | |
| 13 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 14 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 15 | * GNU General Public License for more details. | |
| 16 | * | |
| 17 | * You should have received a copy of the GNU General Public License | |
| 18 | * along with this program; if not, write to the Free Software | |
|
19859
71d37b57eff2
The FSF changed its address a while ago; our files were out of date.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
19337
diff
changeset
|
19 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA |
| 6513 | 20 | * |
| 21 | */ | |
| 22 | ||
| 23 | #ifdef HAVE_CONFIG_H | |
| 24 | #include "config.h" | |
|
27335
06a805d4e690
Strip trailing whitespace and comment #endif marcos that close #ifdef macros
Mark Doliner <markdoliner@pidgin.im>
parents:
24181
diff
changeset
|
25 | #endif /* HAVE_CONFIG_H */ |
| 6513 | 26 | |
|
10023
6b0014040323
[gaim-migrate @ 10955]
Mark Doliner <markdoliner@pidgin.im>
parents:
9164
diff
changeset
|
27 | #include "debug.h" |
|
6b0014040323
[gaim-migrate @ 10955]
Mark Doliner <markdoliner@pidgin.im>
parents:
9164
diff
changeset
|
28 | #include "internal.h" |
|
36543
a8c3fecee2d3
Renamed prpl.[ch] to protocol.[ch]
Ankit Vani <a@nevitus.org>
parents:
34234
diff
changeset
|
29 | #include "protocol.h" |
|
10023
6b0014040323
[gaim-migrate @ 10955]
Mark Doliner <markdoliner@pidgin.im>
parents:
9164
diff
changeset
|
30 | |
|
36670
418f1f8581de
Add/remove YahooProtocol, YahooJPProtocol via the single yahoo plugin
Ankit Vani <a@nevitus.org>
parents:
36598
diff
changeset
|
31 | #include "ymsg.h" |
| 6513 | 32 | |
|
6546
6a14dfe43d5c
[gaim-migrate @ 7068]
Mark Doliner <markdoliner@pidgin.im>
parents:
6513
diff
changeset
|
33 | #include <string.h> |
|
24181
e028e31dcc67
Do a better job of detecting if the yahoo account is connecting through a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
23173
diff
changeset
|
34 | |
|
e028e31dcc67
Do a better job of detecting if the yahoo account is connecting through a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
23173
diff
changeset
|
35 | gboolean |
|
30435
47b104e299b1
Make HTTP proxy detection in the yahoo prpls a bit more robust. This should
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
29324
diff
changeset
|
36 | yahoo_account_use_http_proxy(PurpleConnection *pc) |
|
24181
e028e31dcc67
Do a better job of detecting if the yahoo account is connecting through a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
23173
diff
changeset
|
37 | { |
|
30435
47b104e299b1
Make HTTP proxy detection in the yahoo prpls a bit more robust. This should
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
29324
diff
changeset
|
38 | PurpleAccount *account = purple_connection_get_account(pc); |
|
47b104e299b1
Make HTTP proxy detection in the yahoo prpls a bit more robust. This should
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
29324
diff
changeset
|
39 | PurpleProxyInfo *ppi = NULL; |
|
47b104e299b1
Make HTTP proxy detection in the yahoo prpls a bit more robust. This should
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
29324
diff
changeset
|
40 | PurpleProxyType type = PURPLE_PROXY_NONE; |
|
36051
f06dab8296be
Fix coverity dead code warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
36002
diff
changeset
|
41 | #if 0 |
|
30435
47b104e299b1
Make HTTP proxy detection in the yahoo prpls a bit more robust. This should
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
29324
diff
changeset
|
42 | gboolean proxy_ssl = purple_account_get_bool(account, "proxy_ssl", FALSE); |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30755
diff
changeset
|
43 | |
|
30435
47b104e299b1
Make HTTP proxy detection in the yahoo prpls a bit more robust. This should
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
29324
diff
changeset
|
44 | if(proxy_ssl) |
|
47b104e299b1
Make HTTP proxy detection in the yahoo prpls a bit more robust. This should
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
29324
diff
changeset
|
45 | ppi = purple_proxy_get_setup(account); |
|
47b104e299b1
Make HTTP proxy detection in the yahoo prpls a bit more robust. This should
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
29324
diff
changeset
|
46 | else |
|
30755
10446db8b003
Fix connecting to Yahoo when a global proxy has been specified, but is
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
30435
diff
changeset
|
47 | ppi = purple_proxy_get_setup(NULL); |
|
36051
f06dab8296be
Fix coverity dead code warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
36002
diff
changeset
|
48 | #else |
|
f06dab8296be
Fix coverity dead code warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
36002
diff
changeset
|
49 | ppi = purple_proxy_get_setup(account); |
|
f06dab8296be
Fix coverity dead code warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
36002
diff
changeset
|
50 | #endif |
|
35378
5d9e2581005b
gtk-doc prep: *_get_type() functions are hidden as standard GType-returning funcs, so rename them.
Ankit Vani <a@nevitus.org>
parents:
35268
diff
changeset
|
51 | type = purple_proxy_info_get_proxy_type(ppi); |
|
30435
47b104e299b1
Make HTTP proxy detection in the yahoo prpls a bit more robust. This should
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
29324
diff
changeset
|
52 | |
|
47b104e299b1
Make HTTP proxy detection in the yahoo prpls a bit more robust. This should
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
29324
diff
changeset
|
53 | return (type == PURPLE_PROXY_HTTP || type == PURPLE_PROXY_USE_ENVVAR); |
|
24181
e028e31dcc67
Do a better job of detecting if the yahoo account is connecting through a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
23173
diff
changeset
|
54 | } |
|
e028e31dcc67
Do a better job of detecting if the yahoo account is connecting through a HTTP
Daniel Atallah <datallah@pidgin.im>
parents:
23173
diff
changeset
|
55 | |
|
22202
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
56 | /* |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
57 | * Returns cookies formatted as a null terminated string for the given connection. |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
58 | * Must g_free return value. |
|
27335
06a805d4e690
Strip trailing whitespace and comment #endif marcos that close #ifdef macros
Mark Doliner <markdoliner@pidgin.im>
parents:
24181
diff
changeset
|
59 | * |
|
22202
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
60 | * TODO:will work, but must test for strict correctness |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
61 | */ |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
62 | gchar* yahoo_get_cookies(PurpleConnection *gc) |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
63 | { |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
64 | gchar *ans = NULL; |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
65 | gchar *cur; |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
66 | char firstflag = 1; |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
67 | gchar *t1,*t2,*t3; |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
68 | GSList *tmp; |
|
32280
704f84f692f6
Convert yahoo prpl to use accessor functions purple_connection_get_protocol_data() and purple_connection_set_protocol_data()
Andrew Victor <andrew.victor@mxit.com>
parents:
31294
diff
changeset
|
69 | YahooData *yd = purple_connection_get_protocol_data(gc); |
|
704f84f692f6
Convert yahoo prpl to use accessor functions purple_connection_get_protocol_data() and purple_connection_set_protocol_data()
Andrew Victor <andrew.victor@mxit.com>
parents:
31294
diff
changeset
|
70 | GSList *cookies = yd->cookies; |
|
704f84f692f6
Convert yahoo prpl to use accessor functions purple_connection_get_protocol_data() and purple_connection_set_protocol_data()
Andrew Victor <andrew.victor@mxit.com>
parents:
31294
diff
changeset
|
71 | |
|
22202
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
72 | tmp = cookies; |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
73 | while(tmp) |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
74 | { |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
75 | cur = tmp->data; |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
76 | t1 = ans; |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
77 | t2 = g_strrstr(cur, ";expires="); |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
78 | if(t2 == NULL) |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
79 | t2 = g_strrstr(cur, "; expires="); |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
80 | if(t2 == NULL) |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
81 | { |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
82 | if(firstflag) |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
83 | ans = g_strdup_printf("%c=%s", cur[0], cur+2); |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
84 | else |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
85 | ans = g_strdup_printf("%s; %c=%s", t1, cur[0], cur+2); |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
86 | } |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
87 | else |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
88 | { |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
89 | t3 = strstr(t2+1, ";"); |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
90 | if(t3 != NULL) |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
91 | { |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
92 | t2[0] = '\0'; |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
93 | |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
94 | if(firstflag) |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
95 | ans = g_strdup_printf("%c=%s%s", cur[0], cur+2, t3); |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
96 | else |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
97 | ans = g_strdup_printf("%s; %c=%s%s", t1, cur[0], cur+2, t3); |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
98 | |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
99 | t2[0] = ';'; |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
100 | } |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
101 | else |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
102 | { |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
103 | t2[0] = '\0'; |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
104 | |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
105 | if(firstflag) |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
106 | ans = g_strdup_printf("%c=%s", cur[0], cur+2); |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
107 | else |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
108 | ans = g_strdup_printf("%s; %c=%s", t1, cur[0], cur+2); |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
109 | |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
110 | t2[0] = ';'; |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
111 | } |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
112 | } |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
113 | if(firstflag) |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
114 | firstflag = 0; |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
115 | else |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
116 | g_free(t1); |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
117 | tmp = g_slist_next(tmp); |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
118 | } |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
119 | return ans; |
|
e42ab2e3eba1
This patch from Thanumalayan S. implements Yahoo protocol version 15 file
Thanumalayan Sankaranarayanan <madthanu@gmail.com>
parents:
21946
diff
changeset
|
120 | } |
|
6546
6a14dfe43d5c
[gaim-migrate @ 7068]
Mark Doliner <markdoliner@pidgin.im>
parents:
6513
diff
changeset
|
121 | |
|
35268
0ff850475a1d
Change the last param of yahoo_string_encode from gboolean* to gboolean.
Mark Doliner <mark@kingant.net>
parents:
35265
diff
changeset
|
122 | char *yahoo_string_encode(PurpleConnection *gc, const char *str, gboolean utf8) |
| 7827 | 123 | { |
| 124 | char *ret; | |
|
10504
eae130eefbfe
[gaim-migrate @ 11796]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10380
diff
changeset
|
125 | const char *to_codeset; |
|
35258
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
126 | GError *error = NULL; |
| 7827 | 127 | |
|
35268
0ff850475a1d
Change the last param of yahoo_string_encode from gboolean* to gboolean.
Mark Doliner <mark@kingant.net>
parents:
35265
diff
changeset
|
128 | if (utf8) /* FIXME: maybe don't use utf8 if it'll fit in latin1 */ |
| 7827 | 129 | return g_strdup(str); |
| 130 | ||
|
23173
c6dde2d2e30e
applied changes from a5e7a62db1d43009f4ff463b7fe67ff3a7275a78
Daniel Atallah <datallah@pidgin.im>
parents:
22289
diff
changeset
|
131 | to_codeset = purple_account_get_string(purple_connection_get_account(gc), "local_charset", "ISO-8859-1"); |
|
35258
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
132 | ret = g_convert_with_fallback(str, -1, to_codeset, "UTF-8", "?", NULL, NULL, &error); |
|
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
133 | if (!ret) { |
|
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
134 | if (error) { |
|
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
135 | purple_debug_error("yahoo", "Could not convert %s from UTF-8 to " |
|
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
136 | "%s: %d - %s\n", str ? str : "(null)", to_codeset, |
|
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
137 | error->code, |
|
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
138 | error->message ? error->message : "(null)"); |
|
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
139 | g_error_free(error); |
|
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
140 | } else { |
|
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
141 | purple_debug_error("yahoo", "Could not convert %s from UTF-8 to " |
|
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
142 | "%s: unkown error\n", str ? str : "(null)", to_codeset); |
|
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
143 | } |
|
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
144 | return g_strdup(""); |
|
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
145 | } |
| 7827 | 146 | |
|
35258
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
147 | return ret; |
| 7827 | 148 | } |
| 149 | ||
| 150 | /** | |
| 151 | * Decode some text received from the server. | |
| 152 | * | |
| 153 | * @param gc The gc handle. | |
| 154 | * @param str The null terminated string to decode. | |
| 155 | * @param utf8 Did the server tell us it was supposed to be utf8? | |
| 156 | * @return The decoded, utf-8 string, which must be g_free()'d. | |
| 157 | */ | |
| 15884 | 158 | char *yahoo_string_decode(PurpleConnection *gc, const char *str, gboolean utf8) |
| 7827 | 159 | { |
| 160 | char *ret; | |
| 14347 | 161 | const char *from_codeset; |
|
35258
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
162 | GError *error = NULL; |
| 7827 | 163 | |
| 164 | if (utf8) { | |
| 165 | if (g_utf8_validate(str, -1, NULL)) | |
| 166 | return g_strdup(str); | |
| 35257 | 167 | purple_debug_warning("yahoo", "Server told us a string was supposed " |
| 168 | "to be UTF-8, but it was not. Will try another encoding.\n"); | |
| 7827 | 169 | } |
| 170 | ||
|
37195
3032113d656e
Remove Yahoo! Japan
Michael McConville <mmcconville@mykolab.com>
parents:
37158
diff
changeset
|
171 | from_codeset = purple_account_get_string(purple_connection_get_account(gc), "local_charset", "ISO-8859-1"); |
| 7827 | 172 | |
|
35258
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
173 | ret = g_convert_with_fallback(str, -1, "UTF-8", from_codeset, NULL, NULL, NULL, &error); |
|
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
174 | if (!ret) { |
|
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
175 | if (error) { |
|
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
176 | purple_debug_error("yahoo", "Could not convert %s from %s to " |
|
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
177 | "UTF-8: %d - %s\n", str ? str : "(null)", from_codeset, |
|
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
178 | error->code, error->message ? error->message : "(null)"); |
|
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
179 | g_error_free(error); |
|
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
180 | } else { |
|
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
181 | purple_debug_error("yahoo", "Could not convert %s from %s to " |
|
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
182 | "UTF-8: unkown error\n", str ? str : "(null)", |
|
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
183 | from_codeset); |
|
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
184 | } |
|
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
185 | return g_strdup(""); |
|
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
186 | } |
| 7827 | 187 | |
|
35258
956f247148db
More error logging, please.
Mark Doliner <mark@kingant.net>
parents:
35257
diff
changeset
|
188 | return ret; |
| 7827 | 189 | } |
| 190 | ||
|
22259
bc9fcfd10196
disapproval of revision 'db9b3bc9d4427a6a03d1c25aac5215bf0f8e05ec'
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22248
diff
changeset
|
191 | char *yahoo_convert_to_numeric(const char *str) |
|
bc9fcfd10196
disapproval of revision 'db9b3bc9d4427a6a03d1c25aac5215bf0f8e05ec'
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22248
diff
changeset
|
192 | { |
|
22261
e80d3a79f3b8
Since I needed to bring back yahoo_convert_to_numeric, I figured I could at
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22259
diff
changeset
|
193 | GString *gstr = NULL; |
|
22289
a1f40ee48fa8
Fix (hopefully) the last problem in this function. Refs #3295.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22261
diff
changeset
|
194 | const unsigned char *p; |
|
22259
bc9fcfd10196
disapproval of revision 'db9b3bc9d4427a6a03d1c25aac5215bf0f8e05ec'
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22248
diff
changeset
|
195 | |
|
22261
e80d3a79f3b8
Since I needed to bring back yahoo_convert_to_numeric, I figured I could at
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22259
diff
changeset
|
196 | gstr = g_string_sized_new(strlen(str) * 6 + 1); |
|
e80d3a79f3b8
Since I needed to bring back yahoo_convert_to_numeric, I figured I could at
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22259
diff
changeset
|
197 | |
|
22289
a1f40ee48fa8
Fix (hopefully) the last problem in this function. Refs #3295.
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22261
diff
changeset
|
198 | for (p = (unsigned char *)str; *p; p++) { |
|
22261
e80d3a79f3b8
Since I needed to bring back yahoo_convert_to_numeric, I figured I could at
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22259
diff
changeset
|
199 | g_string_append_printf(gstr, "&#%u;", *p); |
|
22259
bc9fcfd10196
disapproval of revision 'db9b3bc9d4427a6a03d1c25aac5215bf0f8e05ec'
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22248
diff
changeset
|
200 | } |
|
22261
e80d3a79f3b8
Since I needed to bring back yahoo_convert_to_numeric, I figured I could at
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22259
diff
changeset
|
201 | |
| 28009 | 202 | return g_string_free(gstr, FALSE); |
|
22259
bc9fcfd10196
disapproval of revision 'db9b3bc9d4427a6a03d1c25aac5215bf0f8e05ec'
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22248
diff
changeset
|
203 | } |
|
bc9fcfd10196
disapproval of revision 'db9b3bc9d4427a6a03d1c25aac5215bf0f8e05ec'
John Bailey <rekkanoryo@rekkanoryo.org>
parents:
22248
diff
changeset
|
204 | |
| 6513 | 205 | /* |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
206 | * The values in this hash table should probably be lowercase, since that's |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
207 | * what xhtml expects. Also because yahoo_codes_to_html() does |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
208 | * case-sensitive comparisons. |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
209 | * |
| 6513 | 210 | * I found these on some website but i don't know that they actually |
|
8735
01248ea222d3
[gaim-migrate @ 9490]
Jonathan Champ <royanee@users.sourceforge.net>
parents:
8533
diff
changeset
|
211 | * work (or are supposed to work). I didn't implement them yet. |
|
27335
06a805d4e690
Strip trailing whitespace and comment #endif marcos that close #ifdef macros
Mark Doliner <markdoliner@pidgin.im>
parents:
24181
diff
changeset
|
212 | * |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
213 | * [0;30m ---black |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
214 | * [1;37m ---white |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
215 | * [0;37m ---tan |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
216 | * [0;38m ---light black |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
217 | * [1;39m ---dark blue |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
218 | * [0;32m ---green |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
219 | * [0;33m ---yellow |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
220 | * [0;35m ---pink |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
221 | * [1;35m ---purple |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
222 | * [1;30m ---light blue |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
223 | * [0;31m ---red |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
224 | * [0;34m ---blue |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
225 | * [0;36m ---aqua |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
226 | * (shift+comma)lyellow(shift+period) ---light yellow |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
227 | * (shift+comma)lgreen(shift+period) ---light green |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
228 | * [2;30m <--white out |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
229 | */ |
| 6513 | 230 | |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
231 | static GHashTable *esc_codes_ht = NULL; |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
232 | static GHashTable *tags_ht = NULL; |
| 6513 | 233 | |
| 234 | void yahoo_init_colorht() | |
| 235 | { | |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
236 | if (esc_codes_ht != NULL) |
|
27683
9ee099fab4ee
Don't double-free the color hash table when deinitializing both prpl-yahoo
Mark Doliner <markdoliner@pidgin.im>
parents:
27555
diff
changeset
|
237 | /* Hash table has already been initialized */ |
|
9ee099fab4ee
Don't double-free the color hash table when deinitializing both prpl-yahoo
Mark Doliner <markdoliner@pidgin.im>
parents:
27555
diff
changeset
|
238 | return; |
|
9ee099fab4ee
Don't double-free the color hash table when deinitializing both prpl-yahoo
Mark Doliner <markdoliner@pidgin.im>
parents:
27555
diff
changeset
|
239 | |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
240 | /* Key is the escape code string. Value is the HTML that should be |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
241 | * inserted in place of the escape code. */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
242 | esc_codes_ht = g_hash_table_new(g_str_hash, g_str_equal); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
243 | |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
244 | /* Key is the name of the HTML tag, for example "font" or "/font" |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
245 | * value is the HTML that should be inserted in place of the old tag */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
246 | tags_ht = g_hash_table_new(g_str_hash, g_str_equal); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
247 | |
|
27683
9ee099fab4ee
Don't double-free the color hash table when deinitializing both prpl-yahoo
Mark Doliner <markdoliner@pidgin.im>
parents:
27555
diff
changeset
|
248 | /* the numbers in comments are what gyach uses, but i think they're incorrect */ |
|
28045
dca626985d99
Change yahoo_codes_to_html() to use the same USE_CSS_FORMATTING #define
Mark Doliner <markdoliner@pidgin.im>
parents:
28041
diff
changeset
|
249 | #ifdef USE_CSS_FORMATTING |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
250 | g_hash_table_insert(esc_codes_ht, "30", "<span style=\"color: #000000\">"); /* black */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
251 | g_hash_table_insert(esc_codes_ht, "31", "<span style=\"color: #0000FF\">"); /* blue */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
252 | g_hash_table_insert(esc_codes_ht, "32", "<span style=\"color: #008080\">"); /* cyan */ /* 00b2b2 */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
253 | g_hash_table_insert(esc_codes_ht, "33", "<span style=\"color: #808080\">"); /* gray */ /* 808080 */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
254 | g_hash_table_insert(esc_codes_ht, "34", "<span style=\"color: #008000\">"); /* green */ /* 00c200 */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
255 | g_hash_table_insert(esc_codes_ht, "35", "<span style=\"color: #FF0080\">"); /* pink */ /* ffafaf */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
256 | g_hash_table_insert(esc_codes_ht, "36", "<span style=\"color: #800080\">"); /* purple */ /* b200b2 */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
257 | g_hash_table_insert(esc_codes_ht, "37", "<span style=\"color: #FF8000\">"); /* orange */ /* ffff00 */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
258 | g_hash_table_insert(esc_codes_ht, "38", "<span style=\"color: #FF0000\">"); /* red */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
259 | g_hash_table_insert(esc_codes_ht, "39", "<span style=\"color: #808000\">"); /* olive */ /* 546b50 */ |
|
28045
dca626985d99
Change yahoo_codes_to_html() to use the same USE_CSS_FORMATTING #define
Mark Doliner <markdoliner@pidgin.im>
parents:
28041
diff
changeset
|
260 | #else |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
261 | g_hash_table_insert(esc_codes_ht, "30", "<font color=\"#000000\">"); /* black */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
262 | g_hash_table_insert(esc_codes_ht, "31", "<font color=\"#0000FF\">"); /* blue */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
263 | g_hash_table_insert(esc_codes_ht, "32", "<font color=\"#008080\">"); /* cyan */ /* 00b2b2 */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
264 | g_hash_table_insert(esc_codes_ht, "33", "<font color=\"#808080\">"); /* gray */ /* 808080 */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
265 | g_hash_table_insert(esc_codes_ht, "34", "<font color=\"#008000\">"); /* green */ /* 00c200 */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
266 | g_hash_table_insert(esc_codes_ht, "35", "<font color=\"#FF0080\">"); /* pink */ /* ffafaf */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
267 | g_hash_table_insert(esc_codes_ht, "36", "<font color=\"#800080\">"); /* purple */ /* b200b2 */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
268 | g_hash_table_insert(esc_codes_ht, "37", "<font color=\"#FF8000\">"); /* orange */ /* ffff00 */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
269 | g_hash_table_insert(esc_codes_ht, "38", "<font color=\"#FF0000\">"); /* red */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
270 | g_hash_table_insert(esc_codes_ht, "39", "<font color=\"#808000\">"); /* olive */ /* 546b50 */ |
|
28045
dca626985d99
Change yahoo_codes_to_html() to use the same USE_CSS_FORMATTING #define
Mark Doliner <markdoliner@pidgin.im>
parents:
28041
diff
changeset
|
271 | #endif /* !USE_CSS_FORMATTING */ |
| 6513 | 272 | |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
273 | g_hash_table_insert(esc_codes_ht, "1", "<b>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
274 | g_hash_table_insert(esc_codes_ht, "x1", "</b>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
275 | g_hash_table_insert(esc_codes_ht, "2", "<i>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
276 | g_hash_table_insert(esc_codes_ht, "x2", "</i>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
277 | g_hash_table_insert(esc_codes_ht, "4", "<u>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
278 | g_hash_table_insert(esc_codes_ht, "x4", "</u>"); |
| 6513 | 279 | |
| 6629 | 280 | /* these just tell us the text they surround is supposed |
| 15884 | 281 | * to be a link. purple figures that out on its own so we |
| 6629 | 282 | * just ignore it. |
| 283 | */ | |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
284 | g_hash_table_insert(esc_codes_ht, "l", ""); /* link start */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
285 | g_hash_table_insert(esc_codes_ht, "xl", ""); /* link end */ |
| 6629 | 286 | |
|
28045
dca626985d99
Change yahoo_codes_to_html() to use the same USE_CSS_FORMATTING #define
Mark Doliner <markdoliner@pidgin.im>
parents:
28041
diff
changeset
|
287 | #ifdef USE_CSS_FORMATTING |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
288 | g_hash_table_insert(tags_ht, "black", "<span style=\"color: #000000\">"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
289 | g_hash_table_insert(tags_ht, "blue", "<span style=\"color: #0000FF\">"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
290 | g_hash_table_insert(tags_ht, "cyan", "<span style=\"color: #008284\">"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
291 | g_hash_table_insert(tags_ht, "gray", "<span style=\"color: #848284\">"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
292 | g_hash_table_insert(tags_ht, "green", "<span style=\"color: #008200\">"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
293 | g_hash_table_insert(tags_ht, "pink", "<span style=\"color: #FF0084\">"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
294 | g_hash_table_insert(tags_ht, "purple", "<span style=\"color: #840084\">"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
295 | g_hash_table_insert(tags_ht, "orange", "<span style=\"color: #FF8000\">"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
296 | g_hash_table_insert(tags_ht, "red", "<span style=\"color: #FF0000\">"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
297 | g_hash_table_insert(tags_ht, "yellow", "<span style=\"color: #848200\">"); |
| 6513 | 298 | |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
299 | g_hash_table_insert(tags_ht, "/black", "</span>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
300 | g_hash_table_insert(tags_ht, "/blue", "</span>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
301 | g_hash_table_insert(tags_ht, "/cyan", "</span>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
302 | g_hash_table_insert(tags_ht, "/gray", "</span>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
303 | g_hash_table_insert(tags_ht, "/green", "</span>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
304 | g_hash_table_insert(tags_ht, "/pink", "</span>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
305 | g_hash_table_insert(tags_ht, "/purple", "</span>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
306 | g_hash_table_insert(tags_ht, "/orange", "</span>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
307 | g_hash_table_insert(tags_ht, "/red", "</span>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
308 | g_hash_table_insert(tags_ht, "/yellow", "</span>"); |
|
28045
dca626985d99
Change yahoo_codes_to_html() to use the same USE_CSS_FORMATTING #define
Mark Doliner <markdoliner@pidgin.im>
parents:
28041
diff
changeset
|
309 | #else |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
310 | g_hash_table_insert(tags_ht, "black", "<font color=\"#000000\">"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
311 | g_hash_table_insert(tags_ht, "blue", "<font color=\"#0000FF\">"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
312 | g_hash_table_insert(tags_ht, "cyan", "<font color=\"#008284\">"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
313 | g_hash_table_insert(tags_ht, "gray", "<font color=\"#848284\">"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
314 | g_hash_table_insert(tags_ht, "green", "<font color=\"#008200\">"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
315 | g_hash_table_insert(tags_ht, "pink", "<font color=\"#FF0084\">"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
316 | g_hash_table_insert(tags_ht, "purple", "<font color=\"#840084\">"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
317 | g_hash_table_insert(tags_ht, "orange", "<font color=\"#FF8000\">"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
318 | g_hash_table_insert(tags_ht, "red", "<font color=\"#FF0000\">"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
319 | g_hash_table_insert(tags_ht, "yellow", "<font color=\"#848200\">"); |
|
28045
dca626985d99
Change yahoo_codes_to_html() to use the same USE_CSS_FORMATTING #define
Mark Doliner <markdoliner@pidgin.im>
parents:
28041
diff
changeset
|
320 | |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
321 | g_hash_table_insert(tags_ht, "/black", "</font>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
322 | g_hash_table_insert(tags_ht, "/blue", "</font>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
323 | g_hash_table_insert(tags_ht, "/cyan", "</font>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
324 | g_hash_table_insert(tags_ht, "/gray", "</font>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
325 | g_hash_table_insert(tags_ht, "/green", "</font>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
326 | g_hash_table_insert(tags_ht, "/pink", "</font>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
327 | g_hash_table_insert(tags_ht, "/purple", "</font>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
328 | g_hash_table_insert(tags_ht, "/orange", "</font>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
329 | g_hash_table_insert(tags_ht, "/red", "</font>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
330 | g_hash_table_insert(tags_ht, "/yellow", "</font>"); |
|
28045
dca626985d99
Change yahoo_codes_to_html() to use the same USE_CSS_FORMATTING #define
Mark Doliner <markdoliner@pidgin.im>
parents:
28041
diff
changeset
|
331 | #endif /* !USE_CSS_FORMATTING */ |
| 6513 | 332 | |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
333 | /* We don't support these tags, so discard them */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
334 | g_hash_table_insert(tags_ht, "alt", ""); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
335 | g_hash_table_insert(tags_ht, "fade", ""); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
336 | g_hash_table_insert(tags_ht, "snd", ""); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
337 | g_hash_table_insert(tags_ht, "/alt", ""); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
338 | g_hash_table_insert(tags_ht, "/fade", ""); |
| 8375 | 339 | |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
340 | /* Official clients don't seem to send b, i or u tags. They use |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
341 | * the escape codes listed above. Official clients definitely send |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
342 | * font tags, though. I wonder if we can remove the opening and |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
343 | * closing b, i and u tags from here? */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
344 | g_hash_table_insert(tags_ht, "b", "<b>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
345 | g_hash_table_insert(tags_ht, "i", "<i>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
346 | g_hash_table_insert(tags_ht, "u", "<u>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
347 | g_hash_table_insert(tags_ht, "font", "<font>"); |
| 8375 | 348 | |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
349 | g_hash_table_insert(tags_ht, "/b", "</b>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
350 | g_hash_table_insert(tags_ht, "/i", "</i>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
351 | g_hash_table_insert(tags_ht, "/u", "</u>"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
352 | g_hash_table_insert(tags_ht, "/font", "</font>"); |
| 6513 | 353 | } |
| 354 | ||
| 355 | void yahoo_dest_colorht() | |
| 356 | { | |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
357 | if (esc_codes_ht == NULL) |
|
27683
9ee099fab4ee
Don't double-free the color hash table when deinitializing both prpl-yahoo
Mark Doliner <markdoliner@pidgin.im>
parents:
27555
diff
changeset
|
358 | /* Hash table has already been destroyed */ |
|
9ee099fab4ee
Don't double-free the color hash table when deinitializing both prpl-yahoo
Mark Doliner <markdoliner@pidgin.im>
parents:
27555
diff
changeset
|
359 | return; |
|
9ee099fab4ee
Don't double-free the color hash table when deinitializing both prpl-yahoo
Mark Doliner <markdoliner@pidgin.im>
parents:
27555
diff
changeset
|
360 | |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
361 | g_hash_table_destroy(esc_codes_ht); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
362 | esc_codes_ht = NULL; |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
363 | g_hash_table_destroy(tags_ht); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
364 | tags_ht = NULL; |
| 6513 | 365 | } |
| 366 | ||
|
28045
dca626985d99
Change yahoo_codes_to_html() to use the same USE_CSS_FORMATTING #define
Mark Doliner <markdoliner@pidgin.im>
parents:
28041
diff
changeset
|
367 | #ifndef USE_CSS_FORMATTING |
| 6629 | 368 | static int point_to_html(int x) |
| 369 | { | |
| 370 | if (x < 9) | |
| 371 | return 1; | |
| 372 | if (x < 11) | |
| 373 | return 2; | |
| 374 | if (x < 13) | |
| 375 | return 3; | |
| 376 | if (x < 17) | |
| 377 | return 4; | |
| 378 | if (x < 25) | |
| 379 | return 5; | |
| 380 | if (x < 35) | |
| 381 | return 6; | |
| 382 | return 7; | |
| 383 | } | |
|
28045
dca626985d99
Change yahoo_codes_to_html() to use the same USE_CSS_FORMATTING #define
Mark Doliner <markdoliner@pidgin.im>
parents:
28041
diff
changeset
|
384 | #endif /* !USE_CSS_FORMATTING */ |
|
10380
8608e553808f
[gaim-migrate @ 11605]
Evan Schoenberg <evands@pidgin.im>
parents:
10023
diff
changeset
|
385 | |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
386 | static void append_attrs_datalist_foreach_cb(GQuark key_id, gpointer data, gpointer user_data) |
| 6629 | 387 | { |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
388 | const char *key; |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
389 | const char *value; |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34304
diff
changeset
|
390 | PurpleXmlNode *cur; |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
391 | |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
392 | key = g_quark_to_string(key_id); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
393 | value = data; |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
394 | cur = user_data; |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
395 | |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34304
diff
changeset
|
396 | purple_xmlnode_set_attrib(cur, key, value); |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
397 | } |
| 6629 | 398 | |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
399 | /** |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
400 | * @param cur A pointer to the position in the XML tree that we're |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
401 | * currently building. This will be modified when opening a tag |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
402 | * or closing an existing tag. |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
403 | */ |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34304
diff
changeset
|
404 | static void yahoo_codes_to_html_add_tag(PurpleXmlNode **cur, const char *tag, gboolean is_closing_tag, const gchar *tag_name, gboolean is_font_tag) |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
405 | { |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
406 | if (is_closing_tag) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34304
diff
changeset
|
407 | PurpleXmlNode *tmp; |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
408 | GSList *dangling_tags = NULL; |
|
28045
dca626985d99
Change yahoo_codes_to_html() to use the same USE_CSS_FORMATTING #define
Mark Doliner <markdoliner@pidgin.im>
parents:
28041
diff
changeset
|
409 | |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
410 | /* Move up the DOM until we find the opening tag */ |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34304
diff
changeset
|
411 | for (tmp = *cur; tmp != NULL; tmp = purple_xmlnode_get_parent(tmp)) { |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
412 | /* Add one to tag_name when doing this comparison because it starts with a / */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
413 | if (g_str_equal(tmp->name, tag_name + 1)) |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
414 | /* Found */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
415 | break; |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
416 | dangling_tags = g_slist_prepend(dangling_tags, tmp); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
417 | } |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
418 | if (tmp == NULL) { |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
419 | /* This is a closing tag with no opening tag. Useless. */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
420 | purple_debug_error("yahoo", "Ignoring unmatched tag %s", tag); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
421 | g_slist_free(dangling_tags); |
| 6629 | 422 | return; |
| 423 | } | |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
424 | |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
425 | /* Move our current position up, now that we've closed a tag */ |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34304
diff
changeset
|
426 | *cur = purple_xmlnode_get_parent(tmp); |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
427 | |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
428 | /* Re-open any tags that were nested below the tag we just closed */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
429 | while (dangling_tags != NULL) { |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
430 | tmp = dangling_tags->data; |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
431 | dangling_tags = g_slist_delete_link(dangling_tags, dangling_tags); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
432 | |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
433 | /* Create a copy of this tag+attributes (but not child tags or |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
434 | * data) at our new location */ |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34304
diff
changeset
|
435 | *cur = purple_xmlnode_new_child(*cur, tmp->name); |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
436 | for (tmp = tmp->child; tmp != NULL; tmp = tmp->next) |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34304
diff
changeset
|
437 | if (tmp->type == PURPLE_XMLNODE_TYPE_ATTRIB) |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34304
diff
changeset
|
438 | purple_xmlnode_set_attrib_full(*cur, tmp->name, |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
439 | tmp->xmlns, tmp->prefix, tmp->data); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
440 | } |
| 6629 | 441 | } else { |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
442 | const char *start; |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
443 | const char *end; |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
444 | GData *attributes; |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
445 | char *fontsize = NULL; |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
446 | |
|
35991
e6937e52930b
Fix some CWE-252 coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35258
diff
changeset
|
447 | if (!purple_markup_find_tag(tag_name, tag, &start, &end, &attributes)) |
|
e6937e52930b
Fix some CWE-252 coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35258
diff
changeset
|
448 | g_return_if_reached(); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34304
diff
changeset
|
449 | *cur = purple_xmlnode_new_child(*cur, tag_name); |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
450 | |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
451 | if (is_font_tag) { |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
452 | /* Special case for the font size attribute */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
453 | fontsize = g_strdup(g_datalist_get_data(&attributes, "size")); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
454 | if (fontsize != NULL) |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
455 | g_datalist_remove_data(&attributes, "size"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
456 | } |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
457 | |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
458 | /* Add all font tag attributes */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
459 | g_datalist_foreach(&attributes, append_attrs_datalist_foreach_cb, *cur); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
460 | g_datalist_clear(&attributes); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
461 | |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
462 | if (fontsize != NULL) { |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
463 | #ifdef USE_CSS_FORMATTING |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
464 | /* |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
465 | * The Yahoo font size value is given in pt, even though the HTML |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
466 | * standard for <font size="x"> treats the size as a number on a |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
467 | * scale between 1 and 7. So we insert the font size as a CSS |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
468 | * style on a span tag. |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
469 | */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
470 | gchar *tmp = g_strdup_printf("font-size: %spt", fontsize); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34304
diff
changeset
|
471 | *cur = purple_xmlnode_new_child(*cur, "span"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34304
diff
changeset
|
472 | purple_xmlnode_set_attrib(*cur, "style", tmp); |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
473 | g_free(tmp); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
474 | #else |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
475 | /* |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
476 | * The Yahoo font size value is given in pt, even though the HTML |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
477 | * standard for <font size="x"> treats the size as a number on a |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
478 | * scale between 1 and 7. So we convert it to an appropriate |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
479 | * value. This loses precision, which is why CSS formatting is |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
480 | * preferred. The "absz" attribute remains here for backward |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
481 | * compatibility with UIs that might use it, but it is totally |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
482 | * not standard at all. |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
483 | */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
484 | int size, htmlsize; |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
485 | gchar tmp[11]; |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
486 | size = strtol(fontsize, NULL, 10); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
487 | htmlsize = point_to_html(size); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
488 | sprintf(tmp, "%u", htmlsize); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34304
diff
changeset
|
489 | purple_xmlnode_set_attrib(*cur, "size", tmp); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34304
diff
changeset
|
490 | purple_xmlnode_set_attrib(*cur, "absz", fontsize); |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
491 | #endif /* !USE_CSS_FORMATTING */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
492 | g_free(fontsize); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
493 | } |
| 6629 | 494 | } |
| 495 | } | |
| 496 | ||
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
497 | /** |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
498 | * Similar to purple_markup_get_tag_name(), but works with closing tags. |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
499 | * |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
500 | * @return The lowercase name of the tag. If this is a closing tag then |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
501 | * this value starts with a forward slash. The caller must free |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
502 | * this string with g_free. |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
503 | */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
504 | static gchar *yahoo_markup_get_tag_name(const char *tag, gboolean *is_closing_tag) |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
505 | { |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
506 | size_t len; |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
507 | |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
508 | *is_closing_tag = (tag[1] == '/'); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
509 | if (*is_closing_tag) |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
510 | len = strcspn(tag + 1, "> "); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
511 | else |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
512 | len = strcspn(tag + 1, "> /"); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
513 | |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
514 | return g_utf8_strdown(tag + 1, len); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
515 | } |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
516 | |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
517 | /* |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
518 | * Yahoo! messages generally aren't well-formed. Their markup is |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
519 | * more of a flow from start to finish rather than a hierarchy from |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
520 | * outer to inner. They tend to open tags and close them only when |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
521 | * necessary. |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
522 | * |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
523 | * Example: <font size="8">size 8 <font size="16">size 16 <font size="8">size 8 again |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
524 | * |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
525 | * But we want to send well-formed HTML to the core, so we step through |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34304
diff
changeset
|
526 | * the input string and build an PurpleXmlNode tree containing sanitized HTML. |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
527 | */ |
| 6629 | 528 | char *yahoo_codes_to_html(const char *x) |
| 6513 | 529 | { |
|
28036
b9c7f979cd4f
Minor optimization when sending and receiving messages on Yahoo: only
Mark Doliner <markdoliner@pidgin.im>
parents:
28035
diff
changeset
|
530 | size_t x_len; |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34304
diff
changeset
|
531 | PurpleXmlNode *html, *cur; |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
532 | GString *cdata = g_string_new(NULL); |
|
36256
a437550a9308
Remove -Wno-sign-compare and backport fixes from default.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
35991
diff
changeset
|
533 | guint i, j; |
|
28041
84fb2d6540ea
Of course I got it backwards
Mark Doliner <markdoliner@pidgin.im>
parents:
28040
diff
changeset
|
534 | gboolean no_more_gt_brackets = FALSE; |
|
28037
ec211dfd0937
Make match a const char *, and remove two unnecessary casts
Mark Doliner <markdoliner@pidgin.im>
parents:
28036
diff
changeset
|
535 | const char *match; |
|
28307
400743761337
Oh, I guess we should escape this when printing to the debug window.
Mark Doliner <markdoliner@pidgin.im>
parents:
28298
diff
changeset
|
536 | gchar *xmlstr1, *xmlstr2, *esc; |
| 6513 | 537 | |
|
28036
b9c7f979cd4f
Minor optimization when sending and receiving messages on Yahoo: only
Mark Doliner <markdoliner@pidgin.im>
parents:
28035
diff
changeset
|
538 | x_len = strlen(x); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34304
diff
changeset
|
539 | html = purple_xmlnode_new("html"); |
| 6513 | 540 | |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
541 | cur = html; |
|
28036
b9c7f979cd4f
Minor optimization when sending and receiving messages on Yahoo: only
Mark Doliner <markdoliner@pidgin.im>
parents:
28035
diff
changeset
|
542 | for (i = 0; i < x_len; i++) { |
| 6513 | 543 | if ((x[i] == 0x1b) && (x[i+1] == '[')) { |
|
28040
476db09dcc7a
Better variable name?
Mark Doliner <markdoliner@pidgin.im>
parents:
28038
diff
changeset
|
544 | /* This escape sequence signifies the beginning of some |
|
476db09dcc7a
Better variable name?
Mark Doliner <markdoliner@pidgin.im>
parents:
28038
diff
changeset
|
545 | * text formatting code */ |
| 6513 | 546 | j = i + 1; |
| 547 | ||
|
28036
b9c7f979cd4f
Minor optimization when sending and receiving messages on Yahoo: only
Mark Doliner <markdoliner@pidgin.im>
parents:
28035
diff
changeset
|
548 | while (j++ < x_len) { |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
549 | gchar *code; |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
550 | |
| 6513 | 551 | if (x[j] != 'm') |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
552 | /* Keep looking for the end of this sequence */ |
| 6513 | 553 | continue; |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
554 | |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
555 | /* We've reached the end of the formatting sequence, yay */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
556 | |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
557 | /* Append any character data that belongs in the current node */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
558 | if (cdata->len > 0) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34304
diff
changeset
|
559 | purple_xmlnode_insert_data(cur, cdata->str, cdata->len); |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
560 | g_string_truncate(cdata, 0); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
561 | } |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
562 | |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
563 | code = g_strndup(x + i + 2, j - i - 2); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
564 | if (code[0] == '#') { |
|
28045
dca626985d99
Change yahoo_codes_to_html() to use the same USE_CSS_FORMATTING #define
Mark Doliner <markdoliner@pidgin.im>
parents:
28041
diff
changeset
|
565 | #ifdef USE_CSS_FORMATTING |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
566 | gchar *tmp = g_strdup_printf("color: %s", code); |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34304
diff
changeset
|
567 | cur = purple_xmlnode_new_child(cur, "span"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34304
diff
changeset
|
568 | purple_xmlnode_set_attrib(cur, "style", tmp); |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
569 | g_free(tmp); |
|
28045
dca626985d99
Change yahoo_codes_to_html() to use the same USE_CSS_FORMATTING #define
Mark Doliner <markdoliner@pidgin.im>
parents:
28041
diff
changeset
|
570 | #else |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34304
diff
changeset
|
571 | cur = purple_xmlnode_new_child(cur, "font"); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34304
diff
changeset
|
572 | purple_xmlnode_set_attrib(cur, "color", code); |
|
28045
dca626985d99
Change yahoo_codes_to_html() to use the same USE_CSS_FORMATTING #define
Mark Doliner <markdoliner@pidgin.im>
parents:
28041
diff
changeset
|
573 | #endif /* !USE_CSS_FORMATTING */ |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
574 | |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
575 | } else if ((match = g_hash_table_lookup(esc_codes_ht, code))) { |
|
28240
2022259114fc
Fix a possible crash when receiving URLs in yahoo. It doesn't crash for me
Mark Doliner <markdoliner@pidgin.im>
parents:
28107
diff
changeset
|
576 | /* Some tags are in the hash table only because we |
|
2022259114fc
Fix a possible crash when receiving URLs in yahoo. It doesn't crash for me
Mark Doliner <markdoliner@pidgin.im>
parents:
28107
diff
changeset
|
577 | * want to ignore them */ |
|
2022259114fc
Fix a possible crash when receiving URLs in yahoo. It doesn't crash for me
Mark Doliner <markdoliner@pidgin.im>
parents:
28107
diff
changeset
|
578 | if (match[0] != '\0') { |
|
2022259114fc
Fix a possible crash when receiving URLs in yahoo. It doesn't crash for me
Mark Doliner <markdoliner@pidgin.im>
parents:
28107
diff
changeset
|
579 | gboolean is_closing_tag; |
|
2022259114fc
Fix a possible crash when receiving URLs in yahoo. It doesn't crash for me
Mark Doliner <markdoliner@pidgin.im>
parents:
28107
diff
changeset
|
580 | gchar *tag_name; |
|
2022259114fc
Fix a possible crash when receiving URLs in yahoo. It doesn't crash for me
Mark Doliner <markdoliner@pidgin.im>
parents:
28107
diff
changeset
|
581 | tag_name = yahoo_markup_get_tag_name(match, &is_closing_tag); |
|
2022259114fc
Fix a possible crash when receiving URLs in yahoo. It doesn't crash for me
Mark Doliner <markdoliner@pidgin.im>
parents:
28107
diff
changeset
|
582 | yahoo_codes_to_html_add_tag(&cur, match, is_closing_tag, tag_name, FALSE); |
|
2022259114fc
Fix a possible crash when receiving URLs in yahoo. It doesn't crash for me
Mark Doliner <markdoliner@pidgin.im>
parents:
28107
diff
changeset
|
583 | g_free(tag_name); |
|
2022259114fc
Fix a possible crash when receiving URLs in yahoo. It doesn't crash for me
Mark Doliner <markdoliner@pidgin.im>
parents:
28107
diff
changeset
|
584 | } |
| 6513 | 585 | |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
586 | } else { |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
587 | purple_debug_error("yahoo", |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
588 | "Ignoring unknown ansi code 'ESC[%sm'.\n", code); |
| 6513 | 589 | } |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
590 | |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
591 | g_free(code); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
592 | i = j; |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
593 | break; |
| 6513 | 594 | } |
| 595 | ||
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
596 | } else if (x[i] == '<' && !no_more_gt_brackets) { |
|
28040
476db09dcc7a
Better variable name?
Mark Doliner <markdoliner@pidgin.im>
parents:
28038
diff
changeset
|
597 | /* The start of an HTML tag */ |
| 6629 | 598 | j = i; |
| 6513 | 599 | |
|
28036
b9c7f979cd4f
Minor optimization when sending and receiving messages on Yahoo: only
Mark Doliner <markdoliner@pidgin.im>
parents:
28035
diff
changeset
|
600 | while (j++ < x_len) { |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
601 | gchar *tag; |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
602 | gboolean is_closing_tag; |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
603 | gchar *tag_name; |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
604 | |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
605 | if (x[j] != '>') { |
|
28106
686088ceb2d1
Take care of a special case where we would incorrectly parse incoming IMs
Mark Doliner <markdoliner@pidgin.im>
parents:
28103
diff
changeset
|
606 | if (x[j] == '"') { |
|
686088ceb2d1
Take care of a special case where we would incorrectly parse incoming IMs
Mark Doliner <markdoliner@pidgin.im>
parents:
28103
diff
changeset
|
607 | /* We're inside a quoted attribute value. Skip to the end */ |
|
686088ceb2d1
Take care of a special case where we would incorrectly parse incoming IMs
Mark Doliner <markdoliner@pidgin.im>
parents:
28103
diff
changeset
|
608 | j++; |
|
686088ceb2d1
Take care of a special case where we would incorrectly parse incoming IMs
Mark Doliner <markdoliner@pidgin.im>
parents:
28103
diff
changeset
|
609 | while (j != x_len && x[j] != '"') |
|
686088ceb2d1
Take care of a special case where we would incorrectly parse incoming IMs
Mark Doliner <markdoliner@pidgin.im>
parents:
28103
diff
changeset
|
610 | j++; |
|
686088ceb2d1
Take care of a special case where we would incorrectly parse incoming IMs
Mark Doliner <markdoliner@pidgin.im>
parents:
28103
diff
changeset
|
611 | } else if (x[j] == '\'') { |
|
686088ceb2d1
Take care of a special case where we would incorrectly parse incoming IMs
Mark Doliner <markdoliner@pidgin.im>
parents:
28103
diff
changeset
|
612 | /* We're inside a quoted attribute value. Skip to the end */ |
|
686088ceb2d1
Take care of a special case where we would incorrectly parse incoming IMs
Mark Doliner <markdoliner@pidgin.im>
parents:
28103
diff
changeset
|
613 | j++; |
|
686088ceb2d1
Take care of a special case where we would incorrectly parse incoming IMs
Mark Doliner <markdoliner@pidgin.im>
parents:
28103
diff
changeset
|
614 | while (j != x_len && x[j] != '\'') |
|
686088ceb2d1
Take care of a special case where we would incorrectly parse incoming IMs
Mark Doliner <markdoliner@pidgin.im>
parents:
28103
diff
changeset
|
615 | j++; |
|
686088ceb2d1
Take care of a special case where we would incorrectly parse incoming IMs
Mark Doliner <markdoliner@pidgin.im>
parents:
28103
diff
changeset
|
616 | } |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
617 | if (j != x_len) |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
618 | /* Keep looking for the end of this tag */ |
| 6513 | 619 | continue; |
| 620 | ||
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
621 | /* This < has no corresponding > */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
622 | g_string_append_c(cdata, x[i]); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
623 | no_more_gt_brackets = TRUE; |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
624 | break; |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
625 | } |
| 6513 | 626 | |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
627 | tag = g_strndup(x + i, j - i + 1); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
628 | tag_name = yahoo_markup_get_tag_name(tag, &is_closing_tag); |
| 6513 | 629 | |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
630 | match = g_hash_table_lookup(tags_ht, tag_name); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
631 | if (match == NULL) { |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
632 | /* Unknown tag. The user probably typed a less-than sign */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
633 | g_string_append_c(cdata, x[i]); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
634 | g_free(tag); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
635 | g_free(tag_name); |
| 6513 | 636 | break; |
| 637 | } | |
| 638 | ||
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
639 | /* Some tags are in the hash table only because we |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
640 | * want to ignore them */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
641 | if (match[0] != '\0') { |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
642 | /* Append any character data that belongs in the current node */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
643 | if (cdata->len > 0) { |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34304
diff
changeset
|
644 | purple_xmlnode_insert_data(cur, cdata->str, cdata->len); |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
645 | g_string_truncate(cdata, 0); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
646 | } |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
647 | if (g_str_equal(tag_name, "font")) |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
648 | /* Font tags are a special case. We don't |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
649 | * necessarily want to replace the whole thing-- |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
650 | * we just want to fix the size attribute. */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
651 | yahoo_codes_to_html_add_tag(&cur, tag, is_closing_tag, tag_name, TRUE); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
652 | else |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
653 | yahoo_codes_to_html_add_tag(&cur, match, is_closing_tag, tag_name, FALSE); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
654 | } |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
655 | |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
656 | i = j; |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
657 | g_free(tag); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
658 | g_free(tag_name); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
659 | break; |
| 6513 | 660 | } |
| 661 | ||
| 662 | } else { | |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
663 | g_string_append_c(cdata, x[i]); |
| 6513 | 664 | } |
| 665 | } | |
| 666 | ||
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
667 | /* Append any remaining character data */ |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
668 | if (cdata->len > 0) |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34304
diff
changeset
|
669 | purple_xmlnode_insert_data(cur, cdata->str, cdata->len); |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
670 | g_string_free(cdata, TRUE); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
671 | |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
672 | /* Serialize our HTML */ |
|
34935
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34304
diff
changeset
|
673 | xmlstr1 = purple_xmlnode_to_str(html, NULL); |
|
686fa55b0deb
Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents:
34304
diff
changeset
|
674 | purple_xmlnode_free(html); |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
675 | |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
676 | /* Strip off the outter HTML node */ |
|
28100
53d948810829
Make this enum follow our naming conventions a little better
Mark Doliner <markdoliner@pidgin.im>
parents:
28093
diff
changeset
|
677 | /* This probably isn't necessary, especially if we made the outter HTML |
|
53d948810829
Make this enum follow our naming conventions a little better
Mark Doliner <markdoliner@pidgin.im>
parents:
28093
diff
changeset
|
678 | * node an empty span. But the HTML is simpler this way. */ |
|
28973
be6a842df4b9
Make yahoo_codes_to_html not crash when given an empty string, or a string
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
28786
diff
changeset
|
679 | if (!purple_strequal(xmlstr1, "<html/>")) |
|
be6a842df4b9
Make yahoo_codes_to_html not crash when given an empty string, or a string
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
28786
diff
changeset
|
680 | xmlstr2 = g_strndup(xmlstr1 + 6, strlen(xmlstr1) - 13); |
|
be6a842df4b9
Make yahoo_codes_to_html not crash when given an empty string, or a string
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
28786
diff
changeset
|
681 | else |
|
be6a842df4b9
Make yahoo_codes_to_html not crash when given an empty string, or a string
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
28786
diff
changeset
|
682 | xmlstr2 = g_strdup(""); |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
683 | g_free(xmlstr1); |
|
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
684 | |
|
28307
400743761337
Oh, I guess we should escape this when printing to the debug window.
Mark Doliner <markdoliner@pidgin.im>
parents:
28298
diff
changeset
|
685 | esc = g_strescape(x, NULL); |
|
400743761337
Oh, I guess we should escape this when printing to the debug window.
Mark Doliner <markdoliner@pidgin.im>
parents:
28298
diff
changeset
|
686 | purple_debug_misc("yahoo", "yahoo_codes_to_html(%s)=%s\n", esc, xmlstr2); |
|
400743761337
Oh, I guess we should escape this when printing to the debug window.
Mark Doliner <markdoliner@pidgin.im>
parents:
28298
diff
changeset
|
687 | g_free(esc); |
|
400743761337
Oh, I guess we should escape this when printing to the debug window.
Mark Doliner <markdoliner@pidgin.im>
parents:
28298
diff
changeset
|
688 | |
|
28093
e21ce2c8991d
Changes to the way we translate raw yahoo messages to HTML. The HTML
Mark Doliner <markdoliner@pidgin.im>
parents:
28051
diff
changeset
|
689 | return xmlstr2; |
| 6513 | 690 | } |
| 6629 | 691 | |
| 692 | /* borrowed from gtkimhtml */ | |
| 693 | #define MAX_FONT_SIZE 7 | |
|
10899
87d9aec5b72d
[gaim-migrate @ 12619]
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
10504
diff
changeset
|
694 | #define POINT_SIZE(x) (_point_sizes [MIN ((x > 0 ? x : 1), MAX_FONT_SIZE) - 1]) |
|
14904
cab89db4854c
[gaim-migrate @ 17611]
Henning Norén <henning.noren@gmail.com>
parents:
14347
diff
changeset
|
695 | static const gint _point_sizes [] = { 8, 10, 12, 14, 20, 30, 40 }; |
| 6629 | 696 | |
|
28292
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
697 | typedef struct |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
698 | { |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
699 | gboolean bold; |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
700 | gboolean italic; |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
701 | gboolean underline; |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
702 | gboolean in_link; |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
703 | int font_size; |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
704 | char *font_face; |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
705 | char *font_color; |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
706 | } CurrentMsgState; |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
707 | |
|
28101
b82c1e37c9a0
This is actually a stack, not a queue, so we can use a simpler data
Mark Doliner <markdoliner@pidgin.im>
parents:
28100
diff
changeset
|
708 | static void yahoo_htc_list_cleanup(GSList *l) |
| 6629 | 709 | { |
|
28101
b82c1e37c9a0
This is actually a stack, not a queue, so we can use a simpler data
Mark Doliner <markdoliner@pidgin.im>
parents:
28100
diff
changeset
|
710 | while (l != NULL) { |
|
b82c1e37c9a0
This is actually a stack, not a queue, so we can use a simpler data
Mark Doliner <markdoliner@pidgin.im>
parents:
28100
diff
changeset
|
711 | g_free(l->data); |
|
b82c1e37c9a0
This is actually a stack, not a queue, so we can use a simpler data
Mark Doliner <markdoliner@pidgin.im>
parents:
28100
diff
changeset
|
712 | l = g_slist_delete_link(l, l); |
|
b82c1e37c9a0
This is actually a stack, not a queue, so we can use a simpler data
Mark Doliner <markdoliner@pidgin.im>
parents:
28100
diff
changeset
|
713 | } |
| 6629 | 714 | } |
| 715 | ||
|
28309
656e6e3170f0
This function no longer needs these two parameters
Mark Doliner <markdoliner@pidgin.im>
parents:
28308
diff
changeset
|
716 | static void parse_font_tag(GString *dest, const char *tag_name, const char *tag, |
|
656e6e3170f0
This function no longer needs these two parameters
Mark Doliner <markdoliner@pidgin.im>
parents:
28308
diff
changeset
|
717 | GSList **colors, GSList **tags) |
| 6629 | 718 | { |
|
28293
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
719 | const char *start; |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
720 | const char *end; |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
721 | GData *attributes; |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
722 | const char *attribute; |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
723 | gboolean needendtag; |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
724 | GString *tmp; |
| 6629 | 725 | |
|
35991
e6937e52930b
Fix some CWE-252 coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35258
diff
changeset
|
726 | if (!purple_markup_find_tag(tag_name, tag, &start, &end, &attributes)) |
|
e6937e52930b
Fix some CWE-252 coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35258
diff
changeset
|
727 | g_return_if_reached(); |
| 6629 | 728 | |
|
28298
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
729 | needendtag = FALSE; |
|
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
730 | tmp = g_string_new(NULL); |
|
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
731 | |
|
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
732 | attribute = g_datalist_get_data(&attributes, "color"); |
|
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
733 | if (attribute != NULL) { |
|
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
734 | g_string_append(tmp, *colors ? (*colors)->data : "\033[#000000m"); |
|
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
735 | g_string_append_printf(dest, "\033[%sm", attribute); |
|
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
736 | *colors = g_slist_prepend(*colors, |
|
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
737 | g_strdup_printf("\033[%sm", attribute)); |
|
28312
2624c0abf3ef
Fix a bug in our outgoing yahoo message formatting where messages
Mark Doliner <markdoliner@pidgin.im>
parents:
28309
diff
changeset
|
738 | } else { |
|
2624c0abf3ef
Fix a bug in our outgoing yahoo message formatting where messages
Mark Doliner <markdoliner@pidgin.im>
parents:
28309
diff
changeset
|
739 | /* We need to add a value to the colors stack even if we're not |
|
2624c0abf3ef
Fix a bug in our outgoing yahoo message formatting where messages
Mark Doliner <markdoliner@pidgin.im>
parents:
28309
diff
changeset
|
740 | * setting a color because we ALWAYS pop exactly 1 element from |
|
2624c0abf3ef
Fix a bug in our outgoing yahoo message formatting where messages
Mark Doliner <markdoliner@pidgin.im>
parents:
28309
diff
changeset
|
741 | * this stack for every </font> tag. If we don't add anything |
|
2624c0abf3ef
Fix a bug in our outgoing yahoo message formatting where messages
Mark Doliner <markdoliner@pidgin.im>
parents:
28309
diff
changeset
|
742 | * then we'll pop something that we shouldn't when we hit this |
|
2624c0abf3ef
Fix a bug in our outgoing yahoo message formatting where messages
Mark Doliner <markdoliner@pidgin.im>
parents:
28309
diff
changeset
|
743 | * corresponding </font>. */ |
|
2624c0abf3ef
Fix a bug in our outgoing yahoo message formatting where messages
Mark Doliner <markdoliner@pidgin.im>
parents:
28309
diff
changeset
|
744 | *colors = g_slist_prepend(*colors, |
|
2624c0abf3ef
Fix a bug in our outgoing yahoo message formatting where messages
Mark Doliner <markdoliner@pidgin.im>
parents:
28309
diff
changeset
|
745 | *colors ? g_strdup((*colors)->data) : g_strdup("\033[#000000m")); |
|
28298
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
746 | } |
|
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
747 | |
|
28293
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
748 | attribute = g_datalist_get_data(&attributes, "face"); |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
749 | if (attribute != NULL) { |
|
28298
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
750 | needendtag = TRUE; |
|
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
751 | g_string_append(dest, "<font "); |
|
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
752 | g_string_append_printf(dest, "face=\"%s\" ", attribute); |
|
28293
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
753 | } |
| 6629 | 754 | |
|
28293
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
755 | attribute = g_datalist_get_data(&attributes, "size"); |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
756 | if (attribute != NULL) { |
|
28298
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
757 | if (!needendtag) { |
|
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
758 | needendtag = TRUE; |
|
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
759 | g_string_append(dest, "<font "); |
|
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
760 | } |
|
28297
230a550b96df
Use a GSList here instead of a GQueue. Yay for simplification.
Mark Doliner <markdoliner@pidgin.im>
parents:
28296
diff
changeset
|
761 | |
|
28298
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
762 | g_string_append_printf(dest, "size=\"%d\" ", |
|
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
763 | POINT_SIZE(strtol(attribute, NULL, 10))); |
|
28297
230a550b96df
Use a GSList here instead of a GQueue. Yay for simplification.
Mark Doliner <markdoliner@pidgin.im>
parents:
28296
diff
changeset
|
764 | } |
| 6629 | 765 | |
|
28297
230a550b96df
Use a GSList here instead of a GQueue. Yay for simplification.
Mark Doliner <markdoliner@pidgin.im>
parents:
28296
diff
changeset
|
766 | if (needendtag) { |
|
230a550b96df
Use a GSList here instead of a GQueue. Yay for simplification.
Mark Doliner <markdoliner@pidgin.im>
parents:
28296
diff
changeset
|
767 | dest->str[dest->len-1] = '>'; |
|
230a550b96df
Use a GSList here instead of a GQueue. Yay for simplification.
Mark Doliner <markdoliner@pidgin.im>
parents:
28296
diff
changeset
|
768 | *tags = g_slist_prepend(*tags, g_strdup("</font>")); |
|
230a550b96df
Use a GSList here instead of a GQueue. Yay for simplification.
Mark Doliner <markdoliner@pidgin.im>
parents:
28296
diff
changeset
|
769 | g_string_free(tmp, TRUE); |
|
230a550b96df
Use a GSList here instead of a GQueue. Yay for simplification.
Mark Doliner <markdoliner@pidgin.im>
parents:
28296
diff
changeset
|
770 | } else { |
|
230a550b96df
Use a GSList here instead of a GQueue. Yay for simplification.
Mark Doliner <markdoliner@pidgin.im>
parents:
28296
diff
changeset
|
771 | *tags = g_slist_prepend(*tags, tmp->str); |
|
230a550b96df
Use a GSList here instead of a GQueue. Yay for simplification.
Mark Doliner <markdoliner@pidgin.im>
parents:
28296
diff
changeset
|
772 | g_string_free(tmp, FALSE); |
| 6629 | 773 | } |
|
28298
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
774 | |
|
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
775 | g_datalist_clear(&attributes); |
| 6629 | 776 | } |
| 777 | ||
| 778 | char *yahoo_html_to_codes(const char *src) | |
| 779 | { | |
|
28101
b82c1e37c9a0
This is actually a stack, not a queue, so we can use a simpler data
Mark Doliner <markdoliner@pidgin.im>
parents:
28100
diff
changeset
|
780 | GSList *colors = NULL; |
|
28298
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
781 | |
|
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
782 | /** |
|
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
783 | * A stack of char*s where each char* is the string that should be |
|
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
784 | * appended to dest in order to close all the tags that were opened |
|
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
785 | * by a <font> tag. |
|
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
786 | */ |
|
28101
b82c1e37c9a0
This is actually a stack, not a queue, so we can use a simpler data
Mark Doliner <markdoliner@pidgin.im>
parents:
28100
diff
changeset
|
787 | GSList *tags = NULL; |
|
28298
5084ac8ea136
Don't put stuff into a linked list only to iterate through the linked list
Mark Doliner <markdoliner@pidgin.im>
parents:
28297
diff
changeset
|
788 | |
|
28036
b9c7f979cd4f
Minor optimization when sending and receiving messages on Yahoo: only
Mark Doliner <markdoliner@pidgin.im>
parents:
28035
diff
changeset
|
789 | size_t src_len; |
|
36256
a437550a9308
Remove -Wno-sign-compare and backport fixes from default.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
35991
diff
changeset
|
790 | guint i, j; |
| 6629 | 791 | GString *dest; |
| 28009 | 792 | char *esc; |
|
28292
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
793 | gboolean no_more_gt_brackets = FALSE; |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
794 | gchar *tag, *tag_name; |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
795 | gboolean is_closing_tag; |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
796 | CurrentMsgState current_state; |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
797 | |
|
28308
835e7fddf397
use memset instead of bzero for better portability and profit
Daniel Atallah <datallah@pidgin.im>
parents:
28307
diff
changeset
|
798 | memset(¤t_state, 0, sizeof(current_state)); |
| 6629 | 799 | |
|
28036
b9c7f979cd4f
Minor optimization when sending and receiving messages on Yahoo: only
Mark Doliner <markdoliner@pidgin.im>
parents:
28035
diff
changeset
|
800 | src_len = strlen(src); |
|
b9c7f979cd4f
Minor optimization when sending and receiving messages on Yahoo: only
Mark Doliner <markdoliner@pidgin.im>
parents:
28035
diff
changeset
|
801 | dest = g_string_sized_new(src_len); |
| 6629 | 802 | |
|
28036
b9c7f979cd4f
Minor optimization when sending and receiving messages on Yahoo: only
Mark Doliner <markdoliner@pidgin.im>
parents:
28035
diff
changeset
|
803 | for (i = 0; i < src_len; i++) { |
|
28292
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
804 | if (src[i] == '<' && !no_more_gt_brackets) { |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
805 | /* The start of an HTML tag */ |
| 6629 | 806 | j = i; |
| 807 | ||
|
28292
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
808 | while (j++ < src_len) { |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
809 | if (src[j] != '>') { |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
810 | if (src[j] == '"') { |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
811 | /* We're inside a quoted attribute value. Skip to the end */ |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
812 | j++; |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
813 | while (j != src_len && src[j] != '"') |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
814 | j++; |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
815 | } else if (src[j] == '\'') { |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
816 | /* We're inside a quoted attribute value. Skip to the end */ |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
817 | j++; |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
818 | while (j != src_len && src[j] != '\'') |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
819 | j++; |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
820 | } |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
821 | if (j != src_len) |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
822 | /* Keep looking for the end of this tag */ |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
823 | continue; |
| 6629 | 824 | |
|
28292
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
825 | /* This < has no corresponding > */ |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
826 | g_string_append_c(dest, src[i]); |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
827 | no_more_gt_brackets = TRUE; |
| 6629 | 828 | break; |
| 829 | } | |
| 830 | ||
|
28292
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
831 | tag = g_strndup(src + i, j - i + 1); |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
832 | tag_name = yahoo_markup_get_tag_name(tag, &is_closing_tag); |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
833 | |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
834 | if (g_str_equal(tag_name, "a")) { |
|
28293
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
835 | const char *start; |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
836 | const char *end; |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
837 | GData *attributes; |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
838 | const char *attribute; |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
839 | |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
840 | /* |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
841 | * TODO: Ideally we would replace this: |
|
33955
55aa58076485
Use https URLs for pidgin.im and developer.pidgin.im.
Mark Doliner <mark@kingant.net>
parents:
32280
diff
changeset
|
842 | * <a href="https://pidgin.im/">Pidgin</a> |
|
28293
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
843 | * with this: |
|
33955
55aa58076485
Use https URLs for pidgin.im and developer.pidgin.im.
Mark Doliner <mark@kingant.net>
parents:
32280
diff
changeset
|
844 | * Pidgin (https://pidgin.im/) |
|
28293
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
845 | * |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
846 | * Currently we drop the text within the <a> tag and |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
847 | * just show the URL. Doing it the fancy way is |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
848 | * complicated when dealing with HTML tags within the |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
849 | * <a> tag. |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
850 | */ |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
851 | |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
852 | /* Append the URL */ |
|
35991
e6937e52930b
Fix some CWE-252 coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35258
diff
changeset
|
853 | if (!purple_markup_find_tag(tag_name, |
|
e6937e52930b
Fix some CWE-252 coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35258
diff
changeset
|
854 | tag, &start, &end, &attributes)) |
|
e6937e52930b
Fix some CWE-252 coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35258
diff
changeset
|
855 | { |
|
e6937e52930b
Fix some CWE-252 coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35258
diff
changeset
|
856 | g_warn_if_reached(); |
|
e6937e52930b
Fix some CWE-252 coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35258
diff
changeset
|
857 | i = j; |
|
e6937e52930b
Fix some CWE-252 coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35258
diff
changeset
|
858 | g_free(tag); |
|
e6937e52930b
Fix some CWE-252 coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35258
diff
changeset
|
859 | g_free(tag_name); |
|
e6937e52930b
Fix some CWE-252 coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35258
diff
changeset
|
860 | break; |
|
e6937e52930b
Fix some CWE-252 coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35258
diff
changeset
|
861 | } |
|
e6937e52930b
Fix some CWE-252 coverity warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
35258
diff
changeset
|
862 | |
|
28293
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
863 | attribute = g_datalist_get_data(&attributes, "href"); |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
864 | if (attribute != NULL) { |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
865 | if (purple_str_has_prefix(attribute, "mailto:")) |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
866 | attribute += 7; |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
867 | g_string_append(dest, attribute); |
|
28292
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
868 | } |
|
28293
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
869 | g_datalist_clear(&attributes); |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
870 | |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
871 | /* Skip past the closing </a> tag */ |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
872 | end = purple_strcasestr(src + j, "</a>"); |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
873 | if (end != NULL) |
|
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
874 | j = end - src + 3; |
|
28292
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
875 | |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
876 | } else if (g_str_equal(tag_name, "font")) { |
|
28309
656e6e3170f0
This function no longer needs these two parameters
Mark Doliner <markdoliner@pidgin.im>
parents:
28308
diff
changeset
|
877 | parse_font_tag(dest, tag_name, tag, &colors, &tags); |
|
28292
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
878 | } else if (g_str_equal(tag_name, "b")) { |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
879 | g_string_append(dest, "\033[1m"); |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
880 | current_state.bold = TRUE; |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
881 | } else if (g_str_equal(tag_name, "/b")) { |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
882 | if (current_state.bold) { |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
883 | g_string_append(dest, "\033[x1m"); |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
884 | current_state.bold = FALSE; |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
885 | } |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
886 | } else if (g_str_equal(tag_name, "i")) { |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
887 | current_state.italic = TRUE; |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
888 | g_string_append(dest, "\033[2m"); |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
889 | } else if (g_str_equal(tag_name, "/i")) { |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
890 | if (current_state.italic) { |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
891 | g_string_append(dest, "\033[x2m"); |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
892 | current_state.italic = FALSE; |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
893 | } |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
894 | } else if (g_str_equal(tag_name, "u")) { |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
895 | current_state.underline = TRUE; |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
896 | g_string_append(dest, "\033[4m"); |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
897 | } else if (g_str_equal(tag_name, "/u")) { |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
898 | if (current_state.underline) { |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
899 | g_string_append(dest, "\033[x4m"); |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
900 | current_state.underline = FALSE; |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
901 | } |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
902 | } else if (g_str_equal(tag_name, "/a")) { |
|
28293
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
903 | /* Do nothing */ |
|
28292
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
904 | } else if (g_str_equal(tag_name, "br")) { |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
905 | g_string_append_c(dest, '\n'); |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
906 | } else if (g_str_equal(tag_name, "/font")) { |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
907 | if (tags != NULL) { |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
908 | char *etag = tags->data; |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
909 | tags = g_slist_delete_link(tags, tags); |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
910 | g_string_append(dest, etag); |
|
28312
2624c0abf3ef
Fix a bug in our outgoing yahoo message formatting where messages
Mark Doliner <markdoliner@pidgin.im>
parents:
28309
diff
changeset
|
911 | if (colors != NULL) { |
|
2624c0abf3ef
Fix a bug in our outgoing yahoo message formatting where messages
Mark Doliner <markdoliner@pidgin.im>
parents:
28309
diff
changeset
|
912 | g_free(colors->data); |
|
2624c0abf3ef
Fix a bug in our outgoing yahoo message formatting where messages
Mark Doliner <markdoliner@pidgin.im>
parents:
28309
diff
changeset
|
913 | colors = g_slist_delete_link(colors, colors); |
|
16169
4aa4ec9afa9c
Stop Yahoo sending SPAN tags, fixes Yahoo part of ticket 78
Stu Tomlinson <nosnilmot@pidgin.im>
parents:
15884
diff
changeset
|
914 | } |
|
28292
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
915 | g_free(etag); |
| 6629 | 916 | } |
|
29239
d5708b46eac2
Don't send <span>...</span> on Yahoo. Fixes #11242, #10961.
Fartash Faghri <fartash.faghri@gmail.com>
parents:
28973
diff
changeset
|
917 | } else if (g_str_equal(tag_name, "span") || g_str_equal(tag_name, "/span")) { |
|
d5708b46eac2
Don't send <span>...</span> on Yahoo. Fixes #11242, #10961.
Fartash Faghri <fartash.faghri@gmail.com>
parents:
28973
diff
changeset
|
918 | /* Do nothing */ |
|
28628
c06d717eb33c
Fix sending /buzz on yahoo.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
28340
diff
changeset
|
919 | } else { |
|
c06d717eb33c
Fix sending /buzz on yahoo.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
28340
diff
changeset
|
920 | /* We don't know what the tag is. Send it unmodified. */ |
|
c06d717eb33c
Fix sending /buzz on yahoo.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
28340
diff
changeset
|
921 | g_string_append(dest, tag); |
| 6629 | 922 | } |
| 923 | ||
|
28292
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
924 | i = j; |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
925 | g_free(tag); |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
926 | g_free(tag_name); |
|
e1f21cbb9b4d
* Change yahoo_html_to_codes() a little to hopefully be more straight forward
Mark Doliner <markdoliner@pidgin.im>
parents:
28240
diff
changeset
|
927 | break; |
| 6629 | 928 | } |
| 929 | ||
| 930 | } else { | |
|
28103
3d1f5d123294
Reuse our purple_markup_unescape_entity() function instead of
Mark Doliner <markdoliner@pidgin.im>
parents:
28102
diff
changeset
|
931 | const char *entity; |
|
3d1f5d123294
Reuse our purple_markup_unescape_entity() function instead of
Mark Doliner <markdoliner@pidgin.im>
parents:
28102
diff
changeset
|
932 | int length; |
|
3d1f5d123294
Reuse our purple_markup_unescape_entity() function instead of
Mark Doliner <markdoliner@pidgin.im>
parents:
28102
diff
changeset
|
933 | |
|
3d1f5d123294
Reuse our purple_markup_unescape_entity() function instead of
Mark Doliner <markdoliner@pidgin.im>
parents:
28102
diff
changeset
|
934 | entity = purple_markup_unescape_entity(src + i, &length); |
|
3d1f5d123294
Reuse our purple_markup_unescape_entity() function instead of
Mark Doliner <markdoliner@pidgin.im>
parents:
28102
diff
changeset
|
935 | if (entity != NULL) { |
|
3d1f5d123294
Reuse our purple_markup_unescape_entity() function instead of
Mark Doliner <markdoliner@pidgin.im>
parents:
28102
diff
changeset
|
936 | /* src[i] is the start of an HTML entity */ |
|
3d1f5d123294
Reuse our purple_markup_unescape_entity() function instead of
Mark Doliner <markdoliner@pidgin.im>
parents:
28102
diff
changeset
|
937 | g_string_append(dest, entity); |
|
3d1f5d123294
Reuse our purple_markup_unescape_entity() function instead of
Mark Doliner <markdoliner@pidgin.im>
parents:
28102
diff
changeset
|
938 | i += length - 1; |
|
3d1f5d123294
Reuse our purple_markup_unescape_entity() function instead of
Mark Doliner <markdoliner@pidgin.im>
parents:
28102
diff
changeset
|
939 | } else |
|
3d1f5d123294
Reuse our purple_markup_unescape_entity() function instead of
Mark Doliner <markdoliner@pidgin.im>
parents:
28102
diff
changeset
|
940 | /* src[i] is a normal character */ |
| 8440 | 941 | g_string_append_c(dest, src[i]); |
| 6629 | 942 | } |
| 943 | } | |
| 944 | ||
| 28009 | 945 | esc = g_strescape(dest->str, NULL); |
|
28293
8f160f6f9980
Make outgoing yahoo messages with links, font color, font face or font size
Mark Doliner <markdoliner@pidgin.im>
parents:
28292
diff
changeset
|
946 | purple_debug_misc("yahoo", "yahoo_html_to_codes(%s)=%s\n", src, esc); |
| 6629 | 947 | g_free(esc); |
| 948 | ||
|
28101
b82c1e37c9a0
This is actually a stack, not a queue, so we can use a simpler data
Mark Doliner <markdoliner@pidgin.im>
parents:
28100
diff
changeset
|
949 | yahoo_htc_list_cleanup(colors); |
|
b82c1e37c9a0
This is actually a stack, not a queue, so we can use a simpler data
Mark Doliner <markdoliner@pidgin.im>
parents:
28100
diff
changeset
|
950 | yahoo_htc_list_cleanup(tags); |
| 6629 | 951 | |
| 28009 | 952 | return g_string_free(dest, FALSE); |
| 6629 | 953 | } |