libpurple/protocols/qq/char_conv.c

Sat, 27 Sep 2008 06:33:42 +0000

author
Sadrul Habib Chowdhury <sadrul@pidgin.im>
date
Sat, 27 Sep 2008 06:33:42 +0000
branch
sadrul.struct.hiding
changeset 24398
4865c2ee6ea8
parent 24314
587e97c2b707
child 24346
98c009d1f4e0
permissions
-rw-r--r--

Start hiding blist.h internals in prpls.

13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
1 /**
15087
78879d4adf13 [gaim-migrate @ 17807]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14718
diff changeset
2 * @file char_conv.c
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
3 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15540
diff changeset
4 * purple
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
5 *
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15540
diff changeset
6 * Purple is the legal property of its developers, whose names are too numerous
15087
78879d4adf13 [gaim-migrate @ 17807]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14718
diff changeset
7 * to list here. Please refer to the COPYRIGHT file distributed with this
78879d4adf13 [gaim-migrate @ 17807]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14718
diff changeset
8 * source distribution.
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
9 *
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
10 * This program is free software; you can redistribute it and/or modify
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
11 * it under the terms of the GNU General Public License as published by
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
12 * the Free Software Foundation; either version 2 of the License, or
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
13 * (at your option) any later version.
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
14 *
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
15 * This program is distributed in the hope that it will be useful,
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
18 * GNU General Public License for more details.
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
19 *
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
20 * You should have received a copy of the GNU General Public License
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
21 * 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: 15884
diff changeset
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
23 */
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
24
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
25 #include "debug.h"
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
26 #include "internal.h"
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
27
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
28 #include "char_conv.h"
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
29 #include "packet_parse.h"
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
30 #include "qq.h"
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
31 #include "utils.h"
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
32
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
33 #define QQ_SMILEY_AMOUNT 96
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
34
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
35 #define UTF8 "UTF-8"
15540
fb1766fe5155 Port [18176] from markhuetsch: Apparently GBK is old and we should be using GB18030.
Evan Schoenberg <evands@pidgin.im>
parents: 15435
diff changeset
36 #define QQ_CHARSET_ZH_CN "GB18030"
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
37 #define QQ_CHARSET_ENG "ISO-8859-1"
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
38
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
39 #define QQ_NULL_MSG "(NULL)" /* return this if conversion fails */
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
40 #define QQ_NULL_SMILEY "(Broken)" /* return this if smiley conversion fails */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
41
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
42 const gchar qq_smiley_map[QQ_SMILEY_AMOUNT] = {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
43 0x41, 0x43, 0x42, 0x44, 0x45, 0x46, 0x47, 0x48,
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
44 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x73,
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
45 0x74, 0x75, 0x76, 0x77, 0x8a, 0x8b, 0x8c, 0x8d,
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
46 0x8e, 0x8f, 0x78, 0x79, 0x7a, 0x7b, 0x90, 0x91,
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
47 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
48 0x59, 0x5a, 0x5c, 0x58, 0x57, 0x55, 0x7c, 0x7d,
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
49 0x7e, 0x7f, 0x9a, 0x9b, 0x60, 0x67, 0x9c, 0x9d,
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
50 0x9e, 0x5e, 0x9f, 0x89, 0x80, 0x81, 0x82, 0x62,
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
51 0x63, 0x64, 0x65, 0x66, 0x83, 0x68, 0x84, 0x85,
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
52 0x86, 0x87, 0x6b, 0x6e, 0x6f, 0x70, 0x88, 0xa0,
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
53 0x50, 0x51, 0x52, 0x53, 0x54, 0x56, 0x5b, 0x5d,
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
54 0x5f, 0x61, 0x69, 0x6a, 0x6c, 0x6d, 0x71, 0x72
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
55 };
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
56
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
57
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15540
diff changeset
58 const gchar *purple_smiley_map[QQ_SMILEY_AMOUNT] = {
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
59 "/jy", "/pz", "/se", "/fd", "/dy", "/ll", "/hx", "/bz",
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
60 "/shui", "/dk ", "/gg", "/fn", "/tp", "/cy", "/wx", "/ng",
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
61 "/kuk", "/feid", "/zk", "/tu", "/tx", "/ka", "/by", "/am",
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
62 "/jie", "/kun", "/jk", "/lh", "/hanx", "/db", "/fendou",
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
63 "/zhm",
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
64 "/yiw", "/xu", "/yun", "/zhem", "/shuai", "/kl", "/qiao",
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
65 "/zj",
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
66 "/shan", "/fad", "/aiq", "/tiao", "/zhao", "/mm", "/zt",
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
67 "/maom",
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
68 "/xg", "/yb", "/qianc", "/dp", "/bei", "/dg", "/shd",
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
69 "/zhd",
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
70 "/dao", "/zq", "/yy", "/bb", "/gf", "/fan", "/yw", "/mg",
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
71 "/dx", "/wen", "/xin", "/xs", "/hy", "/lw", "/dh", "/sj",
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
72 "/yj", "/ds", "/ty", "/yl", "/qiang", "/ruo", "/ws",
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
73 "/shl",
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
74 "/dd", "/mn", "/hl", "/mamao", "/qz", "/fw", "/oh", "/bj",
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
75 "/qsh", "/xig", "/xy", "/duoy", "/xr", "/xixing", "/nv",
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
76 "/nan"
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
77 };
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
78
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
79 /* these functions parse font-attr */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
80 static gchar _get_size(gchar font_attr)
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
81 {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
82 return font_attr & 0x1f;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
83 }
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
84
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
85 static gboolean _check_bold(gchar font_attr)
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
86 {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
87 return (font_attr & 0x20) ? TRUE : FALSE;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
88 }
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
89
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
90 static gboolean _check_italic(gchar font_attr)
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
91 {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
92 return (font_attr & 0x40) ? TRUE : FALSE;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
93 }
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
94
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
95 static gboolean _check_underline(gchar font_attr)
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
96 {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
97 return (font_attr & 0x80) ? TRUE : FALSE;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
98 }
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
99
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
100 /* convert a string from from_charset to to_charset, using g_convert */
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
101 static gchar *_my_convert(const gchar *str, gssize len, const gchar *to_charset, const gchar *from_charset)
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
102 {
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
103 GError *error = NULL;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
104 gchar *ret;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
105 gsize byte_read, byte_write;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
106
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
107 g_return_val_if_fail(str != NULL && to_charset != NULL && from_charset != NULL, g_strdup(QQ_NULL_MSG));
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
108
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
109 ret = g_convert(str, len, to_charset, from_charset, &byte_read, &byte_write, &error);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
110
23192
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
111 if (error == NULL) {
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
112 return ret; /* conversion is OK */
23192
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
113 }
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
114
23192
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
115 /* conversion error */
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
116 purple_debug_error("QQ_CONVERT", "%s\n", error->message);
23191
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23190
diff changeset
117
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
118 qq_hex_dump(PURPLE_DEBUG_WARNING, "QQ_CONVERT",
23192
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
119 (guint8 *) str, (len == -1) ? strlen(str) : len,
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
120 "Dump failed text");
23191
4e69ad828497 patch-03-add-qq_hex_dump
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23190
diff changeset
121
23192
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
122 g_error_free(error);
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
123 return g_strdup(QQ_NULL_MSG);
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
124 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
125
23212
a39a33c79a3f 2008.07.12 - ccpaging <ecc_hy(at)hotmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
126 /*
23194
e8c312705ee8 Sun Jun 29 22:00:12 CST 2008 csyfek@gmail.com
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23192
diff changeset
127 * take the input as a pascal string and return a converted c-string in UTF-8
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
128 * returns the number of bytes read, return -1 if fatal error
23194
e8c312705ee8 Sun Jun 29 22:00:12 CST 2008 csyfek@gmail.com
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23192
diff changeset
129 * the converted UTF-8 will be saved in ret
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
130 */
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
131 gint convert_as_pascal_string(guint8 *data, gchar **ret, const gchar *from_charset)
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
132 {
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
133 guint8 len;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
134
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
135 g_return_val_if_fail(data != NULL && from_charset != NULL, -1);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
136
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
137 len = data[0];
14120
c7e54fa6147e [gaim-migrate @ 16673]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14107
diff changeset
138 *ret = _my_convert((gchar *) (data + 1), (gssize) len, UTF8, from_charset);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
139
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
140 return len + 1;
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
141 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
142
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15540
diff changeset
143 /* convert QQ formatted msg to Purple formatted msg (and UTF-8) */
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15540
diff changeset
144 gchar *qq_encode_to_purple(guint8 *data, gint len, const gchar *msg)
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
145 {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
146 GString *encoded;
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
147 guint8 font_attr, font_size, color[3], bar;
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
148 gboolean is_bold, is_italic, is_underline;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
149 guint16 charset_code;
14409
cc26a16fb10a [gaim-migrate @ 17049]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14254
diff changeset
150 gchar *font_name, *color_code, *msg_utf8, *tmp, *ret;
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
151 gint bytes = 0;
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
152
23192
2f00b04db5cb patch-04-tcp-pending
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23191
diff changeset
153 /* checked qq_show_packet OK */
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
154 /* qq_show_packet("QQ_MESG recv for font style", data, len); */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
155
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
156 bytes += qq_get8(&font_attr, data + bytes);
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
157 bytes += qq_getdata(color, 3, data + bytes); /* red,green,blue */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
158 color_code = g_strdup_printf("#%02x%02x%02x", color[0], color[1], color[2]);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
159
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
160 bytes += qq_get8(&bar, data + bytes); /* skip, not sure of its use */
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
161 bytes += qq_get16(&charset_code, data + bytes);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
162
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
163 tmp = g_strndup((gchar *)(data + bytes), len - bytes);
14409
cc26a16fb10a [gaim-migrate @ 17049]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14254
diff changeset
164 font_name = qq_to_utf8(tmp, QQ_CHARSET_DEFAULT);
cc26a16fb10a [gaim-migrate @ 17049]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 14254
diff changeset
165 g_free(tmp);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
166
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
167 font_size = _get_size(font_attr);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
168 is_bold = _check_bold(font_attr);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
169 is_italic = _check_italic(font_attr);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
170 is_underline = _check_underline(font_attr);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
171
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
172 /* Although there is charset returned from QQ msg, it can't be used.
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
173 * For example, if a user send a Chinese message from English Windows
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
174 * the charset_code in QQ msg is 0x0000, not 0x8602.
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
175 * Therefore, it is better to use uniform conversion.
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
176 * By default, we use GBK, which includes all character of SC, TC, and EN. */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
177 msg_utf8 = qq_to_utf8(msg, QQ_CHARSET_DEFAULT);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
178 encoded = g_string_new("");
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
179
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
180 /* Henry: The range QQ sends rounds from 8 to 22, where a font size
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
181 * of 10 is equal to 3 in html font tag */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
182 g_string_append_printf(encoded,
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
183 "<font color=\"%s\"><font face=\"%s\"><font size=\"%d\">",
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
184 color_code, font_name, font_size / 3);
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
185 purple_debug_info("QQ_MESG",
23190
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
186 "recv <font color=\"%s\"><font face=\"%s\"><font size=\"%d\">\n",
ce258cadbd9e patch-02-fix-multiarch
SHiNE CsyFeK <csyfek@gmail.com>
parents: 19859
diff changeset
187 color_code, font_name, font_size / 3);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
188 g_string_append(encoded, msg_utf8);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
189
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
190 if (is_bold) {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
191 g_string_prepend(encoded, "<b>");
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
192 g_string_append(encoded, "</b>");
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
193 }
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
194 if (is_italic) {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
195 g_string_prepend(encoded, "<i>");
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
196 g_string_append(encoded, "</i>");
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
197 }
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
198 if (is_underline) {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
199 g_string_prepend(encoded, "<u>");
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
200 g_string_append(encoded, "</u>");
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
201 }
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
202
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
203 g_string_append(encoded, "</font></font></font>");
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
204 ret = encoded->str;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
205
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
206 g_free(msg_utf8);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
207 g_free(font_name);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
208 g_free(color_code);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
209 g_string_free(encoded, FALSE);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
210
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
211 return ret;
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
212 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
213
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
214 /* two convenience methods, using _my_convert */
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
215 gchar *utf8_to_qq(const gchar *str, const gchar *to_charset)
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
216 {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
217 return _my_convert(str, -1, to_charset, UTF8);
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
218 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
219
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
220 gchar *qq_to_utf8(const gchar *str, const gchar *from_charset)
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
221 {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
222 return _my_convert(str, -1, UTF8, from_charset);
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
223 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
224
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
225 /* QQ uses binary code for smiley, while purple uses strings.
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
226 * There is a mapping relation between these two. */
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15540
diff changeset
227 gchar *qq_smiley_to_purple(gchar *text)
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
228 {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
229 gint index;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
230 gchar qq_smiley, *cur_seg, **segments, *ret;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
231 GString *converted;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
232
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
233 converted = g_string_new("");
23950
a974649cdb89 2008.08.02 - csyfek <csyfek(at)gmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23212
diff changeset
234 segments = split_data((guint8 *) text, strlen(text), "\x14\x15", 0);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
235 g_string_append(converted, segments[0]);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
236
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
237 while ((*(++segments)) != NULL) {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
238 cur_seg = *segments;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
239 qq_smiley = cur_seg[0];
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
240 for (index = 0; index < QQ_SMILEY_AMOUNT; index++) {
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
241 if (qq_smiley_map[index] == qq_smiley)
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
242 break;
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
243 }
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
244 if (index >= QQ_SMILEY_AMOUNT) {
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
245 g_string_append(converted, QQ_NULL_SMILEY);
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
246 } else {
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15540
diff changeset
247 g_string_append(converted, purple_smiley_map[index]);
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
248 g_string_append(converted, (cur_seg + 1));
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
249 }
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
250 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
251
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
252 ret = converted->str;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
253 g_string_free(converted, FALSE);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
254 return ret;
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
255 }
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
256
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15540
diff changeset
257 /* convert smiley from purple style to qq binary code */
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15540
diff changeset
258 gchar *purple_smiley_to_qq(gchar *text)
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
259 {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
260 gchar *begin, *cursor, *ret;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
261 gint index;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
262 GString *converted;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
263
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
264 converted = g_string_new(text);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
265
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
266 for (index = 0; index < QQ_SMILEY_AMOUNT; index++) {
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
267 begin = cursor = converted->str;
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15540
diff changeset
268 while ((cursor = g_strstr_len(cursor, -1, purple_smiley_map[index]))) {
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15540
diff changeset
269 g_string_erase(converted, (cursor - begin), strlen(purple_smiley_map[index]));
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
270 g_string_insert_c(converted, (cursor - begin), 0x14);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
271 g_string_insert_c(converted, (cursor - begin + 1), qq_smiley_map[index]);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
272 cursor++;
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
273 }
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
274 }
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
275 g_string_append_c(converted, 0x20); /* important for last smiiley */
13932
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
276
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
277 ret = converted->str;
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
278 g_string_free(converted, FALSE);
4d131bd2b40f [gaim-migrate @ 16340]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents:
diff changeset
279 return ret;
14083
2b68bb18a66c [gaim-migrate @ 16618]
Mark Huetsch <markhuetsch@users.sourceforge.net>
parents: 13932
diff changeset
280 }
23212
a39a33c79a3f 2008.07.12 - ccpaging <ecc_hy(at)hotmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
281
a39a33c79a3f 2008.07.12 - ccpaging <ecc_hy(at)hotmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
282 void qq_filter_str(gchar *str) {
a39a33c79a3f 2008.07.12 - ccpaging <ecc_hy(at)hotmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
283 gchar *temp;
a39a33c79a3f 2008.07.12 - ccpaging <ecc_hy(at)hotmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
284 if (str == NULL) {
a39a33c79a3f 2008.07.12 - ccpaging <ecc_hy(at)hotmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
285 return;
a39a33c79a3f 2008.07.12 - ccpaging <ecc_hy(at)hotmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
286 }
a39a33c79a3f 2008.07.12 - ccpaging <ecc_hy(at)hotmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
287
a39a33c79a3f 2008.07.12 - ccpaging <ecc_hy(at)hotmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
288 for (temp = str; *temp != 0; temp++) {
24314
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
289 /*if (*temp == '\r' || *temp == '\n') *temp = ' ';*/
587e97c2b707 merge of 'd01a6b8ccfad536e692fa159a02583625596c4f5'
Daniel Atallah <datallah@pidgin.im>
parents: 24313
diff changeset
290 if (*temp > 0 && *temp < 0x20) *temp = ' ';
23212
a39a33c79a3f 2008.07.12 - ccpaging <ecc_hy(at)hotmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
291 }
a39a33c79a3f 2008.07.12 - ccpaging <ecc_hy(at)hotmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
292 g_strstrip(str);
a39a33c79a3f 2008.07.12 - ccpaging <ecc_hy(at)hotmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
293 }
a39a33c79a3f 2008.07.12 - ccpaging <ecc_hy(at)hotmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
294
a39a33c79a3f 2008.07.12 - ccpaging <ecc_hy(at)hotmail.com>
SHiNE CsyFeK <csyfek@gmail.com>
parents: 23194
diff changeset
295

mercurial