src/gtkimhtml.c

Sat, 18 Jan 2003 09:19:16 +0000

author
Christian Hammond <chipx86@chipx86.com>
date
Sat, 18 Jan 2003 09:19:16 +0000
changeset 4339
c1f075815433
parent 4298
af01cbb94efe
child 4343
48ef0638639a
permissions
-rw-r--r--

[gaim-migrate @ 4603]
The \n made it difficult to translate, so we're setting wrap on the label
now. It also caused the entire preferences dialog to be too wide for some
screens.

1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1 /*
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
2 * GtkIMHtml
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
3 *
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
4 * Copyright (C) 2000, Eric Warmenhoven <warmenhoven@yahoo.com>
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
5 *
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or modify
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
7 * under the terms of the GNU General Public License as published by
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
9 * (at your option) any later version.
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
10 *
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
14 * GNU General Public License for more details.
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
15 *
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
19 *
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
20 */
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
21
2541
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
22 #ifdef HAVE_CONFIG_H
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
23 #include <config.h>
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
24 #endif
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
25 #include "gtkimhtml.h"
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
26 #include <gtk/gtk.h>
4046
3b7f7799fe5b [gaim-migrate @ 4254]
Sean Egan <seanegan@pidgin.im>
parents: 4041
diff changeset
27 #include <gdk/gdkkeysyms.h>
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
28 #include <string.h>
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
29 #include <ctype.h>
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
30 #include <stdio.h>
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
31 #include <math.h>
2541
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
32 #ifdef HAVE_LANGINFO_CODESET
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
33 #include <langinfo.h>
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
34 #include <locale.h>
0afd3aaba327 [gaim-migrate @ 2554]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2365
diff changeset
35 #endif
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
36
2349
9832b57ded64 [gaim-migrate @ 2362]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2348
diff changeset
37
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
38 /* POINT_SIZE converts from AIM font sizes to point sizes. It probably should be redone in such a
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
39 * way that it base the sizes off the default font size rather than using arbitrary font sizes. */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
40 #define MAX_FONT_SIZE 7
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
41 #define POINT_SIZE(x) (_point_sizes [MIN ((x), MAX_FONT_SIZE) - 1])
3928
28b91dfe3124 [gaim-migrate @ 4100]
Sean Egan <seanegan@pidgin.im>
parents: 3922
diff changeset
42 static gint _point_sizes [] = { 8, 10, 12, 14, 20, 30, 40 };
2349
9832b57ded64 [gaim-migrate @ 2362]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2348
diff changeset
43
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
44 /* The four elements present in a <FONT> tag contained in a struct */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
45 typedef struct _FontDetail FontDetail;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
46 struct _FontDetail {
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
47 gushort size;
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
48 gchar *face;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
49 gchar *fore;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
50 gchar *back;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
51 gchar *sml;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
52 };
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
53
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
54 struct _GtkSmileyTree {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
55 GString *values;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
56 GtkSmileyTree **children;
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
57 GtkIMHtmlSmiley *image;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
58 };
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
59
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
60 static GtkSmileyTree*
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
61 gtk_smiley_tree_new ()
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
62 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
63 return g_new0 (GtkSmileyTree, 1);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
64 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
65
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
66 static void
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
67 gtk_smiley_tree_insert (GtkSmileyTree *tree,
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
68 GtkIMHtmlSmiley *smiley)
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
69 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
70 GtkSmileyTree *t = tree;
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
71 const gchar *x = smiley->smile;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
72
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
73 if (!strlen (x))
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
74 return;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
75
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
76 while (*x) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
77 gchar *pos;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
78 gint index;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
79
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
80 if (!t->values)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
81 t->values = g_string_new ("");
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
82
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
83 pos = strchr (t->values->str, *x);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
84 if (!pos) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
85 t->values = g_string_append_c (t->values, *x);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
86 index = t->values->len - 1;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
87 t->children = g_realloc (t->children, t->values->len * sizeof (GtkSmileyTree *));
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
88 t->children [index] = g_new0 (GtkSmileyTree, 1);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
89 } else
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
90 index = (int) pos - (int) t->values->str;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
91
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
92 t = t->children [index];
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
93
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
94 x++;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
95 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
96
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
97 t->image = smiley;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
98 }
4041
6336d3d3785e [gaim-migrate @ 4249]
Sean Egan <seanegan@pidgin.im>
parents: 4032
diff changeset
99
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
100
4264
cf1229a7563c [gaim-migrate @ 4515]
Sean Egan <seanegan@pidgin.im>
parents: 4263
diff changeset
101 void gtk_smiley_tree_destroy (GtkSmileyTree *tree)
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
102 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
103 GSList *list = g_slist_append (NULL, tree);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
104
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
105 while (list) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
106 GtkSmileyTree *t = list->data;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
107 gint i;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
108 list = g_slist_remove(list, t);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
109 if (t->values) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
110 for (i = 0; i < t->values->len; i++)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
111 list = g_slist_append (list, t->children [i]);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
112 g_string_free (t->values, TRUE);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
113 g_free (t->children);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
114 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
115 g_free (t);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
116 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
117 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
118
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
119
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
120 static GtkTextViewClass *parent_class = NULL;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
121
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
122
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
123 /* GtkIMHtml has one signal--URL_CLICKED */
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
124 enum {
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
125 URL_CLICKED,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
126 LAST_SIGNAL
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
127 };
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
128 static guint signals [LAST_SIGNAL] = { 0 };
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
129
4264
cf1229a7563c [gaim-migrate @ 4515]
Sean Egan <seanegan@pidgin.im>
parents: 4263
diff changeset
130 static gboolean
cf1229a7563c [gaim-migrate @ 4515]
Sean Egan <seanegan@pidgin.im>
parents: 4263
diff changeset
131 gtk_smiley_tree_destroy_from_hash(gpointer key, gpointer value,
cf1229a7563c [gaim-migrate @ 4515]
Sean Egan <seanegan@pidgin.im>
parents: 4263
diff changeset
132 gpointer user_data)
cf1229a7563c [gaim-migrate @ 4515]
Sean Egan <seanegan@pidgin.im>
parents: 4263
diff changeset
133 {
cf1229a7563c [gaim-migrate @ 4515]
Sean Egan <seanegan@pidgin.im>
parents: 4263
diff changeset
134 gtk_smiley_tree_destroy(value);
cf1229a7563c [gaim-migrate @ 4515]
Sean Egan <seanegan@pidgin.im>
parents: 4263
diff changeset
135 return TRUE;
cf1229a7563c [gaim-migrate @ 4515]
Sean Egan <seanegan@pidgin.im>
parents: 4263
diff changeset
136 }
cf1229a7563c [gaim-migrate @ 4515]
Sean Egan <seanegan@pidgin.im>
parents: 4263
diff changeset
137
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
138 static void
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
139 gtk_imhtml_finalize (GObject *object)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
140 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
141 GtkIMHtml *imhtml = GTK_IMHTML(object);
4264
cf1229a7563c [gaim-migrate @ 4515]
Sean Egan <seanegan@pidgin.im>
parents: 4263
diff changeset
142 g_hash_table_foreach_remove(imhtml->smiley_data, gtk_smiley_tree_destroy_from_hash, NULL);
4138
727cb2d2b93c [gaim-migrate @ 4356]
Ari Pollak <ari@debian.org>
parents: 4046
diff changeset
143 g_hash_table_destroy(imhtml->smiley_data);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
144 gtk_smiley_tree_destroy(imhtml->default_smilies);
4138
727cb2d2b93c [gaim-migrate @ 4356]
Ari Pollak <ari@debian.org>
parents: 4046
diff changeset
145 gdk_cursor_unref(imhtml->hand_cursor);
727cb2d2b93c [gaim-migrate @ 4356]
Ari Pollak <ari@debian.org>
parents: 4046
diff changeset
146 gdk_cursor_unref(imhtml->arrow_cursor);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
147 G_OBJECT_CLASS(parent_class)->finalize (object);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
148 }
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
149
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
150 /* Boring GTK stuff */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
151 static void gtk_imhtml_class_init (GtkIMHtmlClass *class)
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
152 {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
153 GtkObjectClass *object_class;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
154 GObjectClass *gobject_class;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
155 object_class = (GtkObjectClass*) class;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
156 gobject_class = (GObjectClass*) class;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
157 parent_class = gtk_type_class(GTK_TYPE_TEXT_VIEW);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
158 signals[URL_CLICKED] = gtk_signal_new("url_clicked",
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
159 GTK_RUN_FIRST,
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
160 GTK_CLASS_TYPE(object_class),
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
161 GTK_SIGNAL_OFFSET(GtkIMHtmlClass, url_clicked),
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
162 gtk_marshal_NONE__POINTER,
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
163 GTK_TYPE_NONE, 1,
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
164 GTK_TYPE_POINTER);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
165 gobject_class->finalize = gtk_imhtml_finalize;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
166 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
167
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
168 static void gtk_imhtml_init (GtkIMHtml *imhtml)
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
169 {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
170 GtkTextIter iter;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
171 imhtml->text_buffer = gtk_text_buffer_new(NULL);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
172 gtk_text_buffer_get_end_iter (imhtml->text_buffer, &iter);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
173 imhtml->end = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, FALSE);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
174 gtk_text_view_set_buffer(GTK_TEXT_VIEW(imhtml), imhtml->text_buffer);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
175 gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(imhtml), GTK_WRAP_WORD);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
176 gtk_text_view_set_editable(GTK_TEXT_VIEW(imhtml), FALSE);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
177 gtk_text_view_set_pixels_below_lines(GTK_TEXT_VIEW(imhtml), 5);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
178 gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(imhtml), FALSE);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
179 /*gtk_text_view_set_justification(GTK_TEXT_VIEW(imhtml), GTK_JUSTIFY_FILL);*/
3465
12a1286832c5 [gaim-migrate @ 3515]
Sean Egan <seanegan@pidgin.im>
parents: 3460
diff changeset
180
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
181 /* These tags will be used often and can be reused--we create them on init and then apply them by name
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
182 * other tags (color, size, face, etc.) will have to be created and applied dynamically */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
183 gtk_text_buffer_create_tag(imhtml->text_buffer, "BOLD", "weight", PANGO_WEIGHT_BOLD, NULL);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
184 gtk_text_buffer_create_tag(imhtml->text_buffer, "ITALICS", "style", PANGO_STYLE_ITALIC, NULL);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
185 gtk_text_buffer_create_tag(imhtml->text_buffer, "UNDERLINE", "underline", PANGO_UNDERLINE_SINGLE, NULL);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
186 gtk_text_buffer_create_tag(imhtml->text_buffer, "STRIKE", "strikethrough", TRUE, NULL);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
187 gtk_text_buffer_create_tag(imhtml->text_buffer, "SUB", "rise", -5000, NULL);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
188 gtk_text_buffer_create_tag(imhtml->text_buffer, "SUP", "rise", 5000, NULL);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
189 gtk_text_buffer_create_tag(imhtml->text_buffer, "PRE", "family", "Monospace", NULL);
3465
12a1286832c5 [gaim-migrate @ 3515]
Sean Egan <seanegan@pidgin.im>
parents: 3460
diff changeset
190
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
191 /* When hovering over a link, we show the hand cursor--elsewhere we show the plain ol' pointer cursor */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
192 imhtml->hand_cursor = gdk_cursor_new (GDK_HAND2);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
193 imhtml->arrow_cursor = gdk_cursor_new (GDK_LEFT_PTR);
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
194
4253
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
195 imhtml->show_smileys = TRUE;
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
196 imhtml->show_comments = TRUE;
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
197
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
198 imhtml->smiley_data = g_hash_table_new (g_str_hash, g_str_equal);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
199 imhtml->default_smilies = gtk_smiley_tree_new();
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
200 }
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
201
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
202 GtkWidget *gtk_imhtml_new(void *a, void *b)
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
203 {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
204 return GTK_WIDGET(gtk_type_new(gtk_imhtml_get_type()));
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
205 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
206
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
207 GtkType gtk_imhtml_get_type()
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
208 {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
209 static guint imhtml_type = 0;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
210
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
211 if (!imhtml_type) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
212 GtkTypeInfo imhtml_info = {
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
213 "GtkIMHtml",
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
214 sizeof (GtkIMHtml),
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
215 sizeof (GtkIMHtmlClass),
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
216 (GtkClassInitFunc) gtk_imhtml_class_init,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
217 (GtkObjectInitFunc) gtk_imhtml_init,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
218 NULL,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
219 NULL
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
220 };
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
221
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
222 imhtml_type = gtk_type_unique (gtk_text_view_get_type (), &imhtml_info);
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
223 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
224
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
225 return imhtml_type;
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
226 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
227
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
228 /* The call back for an event on a link tag. */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
229 void tag_event(GtkTextTag *tag, GObject *arg1, GdkEvent *event, GtkTextIter *arg2, char *url) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
230 if (event->type == GDK_BUTTON_RELEASE) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
231 /* A link was clicked--we emit the "url_clicked" signal with the URL as the argument */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
232 // if ((GdkEventButton)(event)->button == 1)
4141
03df791352aa [gaim-migrate @ 4359]
Ari Pollak <ari@debian.org>
parents: 4140
diff changeset
233 gtk_signal_emit (GTK_OBJECT(arg1), signals[URL_CLICKED], url);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
234 } else if (event->type == GDK_ENTER_NOTIFY) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
235 /* make a hand cursor and a tooltip timeout -- if GTK worked as it should */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
236 } else if (event->type == GDK_LEAVE_NOTIFY) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
237 /* clear timeout and make an arrow cursor again --if GTK worked as it should */
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
238 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
239 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
240
4298
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4288
diff changeset
241 /* this isn't used yet
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
242 static void
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
243 gtk_smiley_tree_remove (GtkSmileyTree *tree,
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
244 GtkIMHtmlSmiley *smiley)
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
245 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
246 GtkSmileyTree *t = tree;
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
247 const gchar *x = smiley->smile;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
248 gint len = 0;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
249
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
250 while (*x) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
251 gchar *pos;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
252
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
253 if (!t->values)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
254 return;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
255
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
256 pos = strchr (t->values->str, *x);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
257 if (pos)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
258 t = t->children [(int) pos - (int) t->values->str];
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
259 else
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
260 return;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
261
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
262 x++; len++;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
263 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
264
4141
03df791352aa [gaim-migrate @ 4359]
Ari Pollak <ari@debian.org>
parents: 4140
diff changeset
265 if (t->image) {
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
266 t->image = NULL;
4141
03df791352aa [gaim-migrate @ 4359]
Ari Pollak <ari@debian.org>
parents: 4140
diff changeset
267 }
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
268 }
4298
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4288
diff changeset
269 */
af01cbb94efe [gaim-migrate @ 4552]
Sean Egan <seanegan@pidgin.im>
parents: 4288
diff changeset
270
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
271
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
272 static gint
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
273 gtk_smiley_tree_lookup (GtkSmileyTree *tree,
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
274 const gchar *text)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
275 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
276 GtkSmileyTree *t = tree;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
277 const gchar *x = text;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
278 gint len = 0;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
279
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
280 while (*x) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
281 gchar *pos;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
282
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
283 if (!t->values)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
284 break;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
285
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
286 pos = strchr (t->values->str, *x);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
287 if (pos)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
288 t = t->children [(int) pos - (int) t->values->str];
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
289 else
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
290 break;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
291
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
292 x++; len++;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
293 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
294
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
295 if (t->image)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
296 return len;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
297
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
298 return 0;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
299 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
300
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
301 void
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
302 gtk_imhtml_associate_smiley (GtkIMHtml *imhtml,
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
303 gchar *sml,
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
304 GtkIMHtmlSmiley *smiley)
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
305 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
306 GtkSmileyTree *tree;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
307 g_return_if_fail (imhtml != NULL);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
308 g_return_if_fail (GTK_IS_IMHTML (imhtml));
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
309
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
310 if (sml == NULL)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
311 tree = imhtml->default_smilies;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
312 else if ((tree = g_hash_table_lookup(imhtml->smiley_data, sml))) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
313 } else {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
314 tree = gtk_smiley_tree_new();
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
315 g_hash_table_insert(imhtml->smiley_data, sml, tree);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
316 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
317
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
318 gtk_smiley_tree_insert (tree, smiley);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
319 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
320
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
321 static gboolean
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
322 gtk_imhtml_is_smiley (GtkIMHtml *imhtml,
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
323 GSList *fonts,
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
324 const gchar *text,
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
325 gint *len)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
326 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
327 GtkSmileyTree *tree;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
328 FontDetail *font;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
329 char *sml = NULL;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
330
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
331 if (fonts) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
332 font = fonts->data;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
333 sml = font->sml;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
334 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
335
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
336 if (sml == NULL)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
337 tree = imhtml->default_smilies;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
338 else {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
339 tree = g_hash_table_lookup(imhtml->smiley_data, sml);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
340 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
341 if (tree == NULL)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
342 return FALSE;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
343
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
344 *len = gtk_smiley_tree_lookup (tree, text);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
345 return (*len > 0);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
346 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
347
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
348 GdkPixbuf*
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
349 gtk_smiley_tree_image (GtkIMHtml *imhtml,
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
350 const gchar *sml,
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
351 const gchar *text)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
352 {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
353 GtkSmileyTree *t;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
354 const gchar *x = text;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
355 if (sml == NULL)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
356 t = imhtml->default_smilies;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
357 else
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
358 t = g_hash_table_lookup(imhtml->smiley_data, sml);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
359
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
360
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
361 if (t == NULL)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
362 return sml ? gtk_smiley_tree_image(imhtml, NULL, text) : NULL;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
363
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
364 while (*x) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
365 gchar *pos;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
366
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
367 if (!t->values) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
368 return sml ? gtk_smiley_tree_image(imhtml, NULL, text) : NULL;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
369 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
370
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
371 pos = strchr (t->values->str, *x);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
372 if (pos) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
373 t = t->children [(int) pos - (int) t->values->str];
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
374 } else {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
375 return sml ? gtk_smiley_tree_image(imhtml, NULL, text) : NULL;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
376 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
377 x++;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
378 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
379
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
380 if (!t->image->icon)
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
381 t->image->icon = gdk_pixbuf_new_from_file(t->image->file, NULL);
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
382
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
383 return t->image->icon;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
384 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
385 #define VALID_TAG(x) if (!g_strncasecmp (string, x ">", strlen (x ">"))) { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
386 *tag = g_strndup (string, strlen (x)); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
387 *len = strlen (x) + 1; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
388 return TRUE; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
389 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
390 (*type)++
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
391
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
392 #define VALID_OPT_TAG(x) if (!g_strncasecmp (string, x " ", strlen (x " "))) { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
393 const gchar *c = string + strlen (x " "); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
394 gchar e = '"'; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
395 gboolean quote = FALSE; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
396 while (*c) { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
397 if (*c == '"' || *c == '\'') { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
398 if (quote && (*c == e)) \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
399 quote = !quote; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
400 else if (!quote) { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
401 quote = !quote; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
402 e = *c; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
403 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
404 } else if (!quote && (*c == '>')) \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
405 break; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
406 c++; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
407 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
408 if (*c) { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
409 *tag = g_strndup (string, c - string); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
410 *len = c - string + 1; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
411 return TRUE; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
412 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
413 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
414 (*type)++
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
415
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
416
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
417 static gboolean
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
418 gtk_imhtml_is_amp_escape (const gchar *string,
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
419 gchar *replace,
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
420 gint *length)
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
421 {
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
422 g_return_val_if_fail (string != NULL, FALSE);
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
423 g_return_val_if_fail (replace != NULL, FALSE);
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
424 g_return_val_if_fail (length != NULL, FALSE);
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
425
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
426 if (!g_strncasecmp (string, "&amp;", 5)) {
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
427 *replace = '&';
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
428 *length = 5;
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
429 } else if (!g_strncasecmp (string, "&lt;", 4)) {
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
430 *replace = '<';
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
431 *length = 4;
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
432 } else if (!g_strncasecmp (string, "&gt;", 4)) {
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
433 *replace = '>';
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
434 *length = 4;
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
435 } else if (!g_strncasecmp (string, "&nbsp;", 6)) {
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
436 *replace = ' ';
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
437 *length = 6;
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
438 } else if (!g_strncasecmp (string, "&copy;", 6)) {
3717
2fc0789e04e8 [gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents: 3705
diff changeset
439 *replace = '©'; /* was: '©' */
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
440 *length = 6;
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
441 } else if (!g_strncasecmp (string, "&quot;", 6)) {
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
442 *replace = '\"';
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
443 *length = 6;
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
444 } else if (!g_strncasecmp (string, "&reg;", 5)) {
3717
2fc0789e04e8 [gaim-migrate @ 3850]
Herman Bloggs <herman@bluedigits.com>
parents: 3705
diff changeset
445 *replace = '®'; /* was: '®' */
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
446 *length = 5;
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
447 } else if (*(string + 1) == '#') {
2022
c47ca971fd2f [gaim-migrate @ 2032]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2002
diff changeset
448 guint pound = 0;
3004
4fc45282aab6 [gaim-migrate @ 3017]
Sean Egan <seanegan@pidgin.im>
parents: 3000
diff changeset
449 if ((sscanf (string, "&#%u;", &pound) == 1) && pound != 0) {
1472
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
450 if (*(string + 3 + (gint)log10 (pound)) != ';')
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
451 return FALSE;
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
452 *replace = (gchar)pound;
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
453 *length = 2;
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
454 while (isdigit ((gint) string [*length])) (*length)++;
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
455 if (string [*length] == ';') (*length)++;
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
456 } else {
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
457 return FALSE;
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
458 }
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
459 } else {
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
460 return FALSE;
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
461 }
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
462
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
463 return TRUE;
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
464 }
ce83d12b7df9 [gaim-migrate @ 1482]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1463
diff changeset
465
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
466 static gboolean
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
467 gtk_imhtml_is_tag (const gchar *string,
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
468 gchar **tag,
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
469 gint *len,
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
470 gint *type)
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
471 {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
472 *type = 1;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
473
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
474 if (!strchr (string, '>'))
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
475 return FALSE;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
476
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
477 VALID_TAG ("B");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
478 VALID_TAG ("BOLD");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
479 VALID_TAG ("/B");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
480 VALID_TAG ("/BOLD");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
481 VALID_TAG ("I");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
482 VALID_TAG ("ITALIC");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
483 VALID_TAG ("/I");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
484 VALID_TAG ("/ITALIC");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
485 VALID_TAG ("U");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
486 VALID_TAG ("UNDERLINE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
487 VALID_TAG ("/U");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
488 VALID_TAG ("/UNDERLINE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
489 VALID_TAG ("S");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
490 VALID_TAG ("STRIKE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
491 VALID_TAG ("/S");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
492 VALID_TAG ("/STRIKE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
493 VALID_TAG ("SUB");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
494 VALID_TAG ("/SUB");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
495 VALID_TAG ("SUP");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
496 VALID_TAG ("/SUP");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
497 VALID_TAG ("PRE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
498 VALID_TAG ("/PRE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
499 VALID_TAG ("TITLE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
500 VALID_TAG ("/TITLE");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
501 VALID_TAG ("BR");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
502 VALID_TAG ("HR");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
503 VALID_TAG ("/FONT");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
504 VALID_TAG ("/A");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
505 VALID_TAG ("P");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
506 VALID_TAG ("/P");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
507 VALID_TAG ("H3");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
508 VALID_TAG ("/H3");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
509 VALID_TAG ("HTML");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
510 VALID_TAG ("/HTML");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
511 VALID_TAG ("BODY");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
512 VALID_TAG ("/BODY");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
513 VALID_TAG ("FONT");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
514 VALID_TAG ("HEAD");
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
515 VALID_TAG ("/HEAD");
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
516 VALID_TAG ("BINARY");
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
517 VALID_TAG ("/BINARY");
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
518
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
519 VALID_OPT_TAG ("HR");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
520 VALID_OPT_TAG ("FONT");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
521 VALID_OPT_TAG ("BODY");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
522 VALID_OPT_TAG ("A");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
523 VALID_OPT_TAG ("IMG");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
524 VALID_OPT_TAG ("P");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
525 VALID_OPT_TAG ("H3");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
526
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
527 if (!g_strncasecmp(string, "!--", strlen ("!--"))) {
2954
fc07d855731d [gaim-migrate @ 2967]
Christian Hammond <chipx86@chipx86.com>
parents: 2898
diff changeset
528 gchar *e = strstr (string + strlen("!--"), "-->");
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
529 if (e) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
530 *len = e - string + strlen ("-->");
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
531 *tag = g_strndup (string + strlen ("!--"), *len - strlen ("!---->"));
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
532 return TRUE;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
533 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
534 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
535
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
536 return FALSE;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
537 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
538
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
539 static gchar*
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
540 gtk_imhtml_get_html_opt (gchar *tag,
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
541 const gchar *opt)
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
542 {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
543 gchar *t = tag;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
544 gchar *e, *a;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
545
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
546 while (g_strncasecmp (t, opt, strlen (opt))) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
547 gboolean quote = FALSE;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
548 if (*t == '\0') break;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
549 while (*t && !((*t == ' ') && !quote)) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
550 if (*t == '\"')
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
551 quote = ! quote;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
552 t++;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
553 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
554 while (*t && (*t == ' ')) t++;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
555 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
556
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
557 if (!g_strncasecmp (t, opt, strlen (opt))) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
558 t += strlen (opt);
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
559 } else {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
560 return NULL;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
561 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
562
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
563 if ((*t == '\"') || (*t == '\'')) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
564 e = a = ++t;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
565 while (*e && (*e != *(t - 1))) e++;
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
566 if (*e == '\0') {
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
567 return NULL;
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
568 } else
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
569 return g_strndup (a, e - a);
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
570 } else {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
571 e = a = t;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
572 while (*e && !isspace ((gint) *e)) e++;
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
573 return g_strndup (a, e - a);
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
574 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
575 }
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
576
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
577
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
578
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
579 #define NEW_TEXT_BIT 0
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
580 #define NEW_HR_BIT 1
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
581 #define NEW_BIT(x) ws [wpos] = '\0'; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
582 mark2 = gtk_text_buffer_create_mark(imhtml->text_buffer, NULL, &iter, TRUE); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
583 gtk_text_buffer_insert(imhtml->text_buffer, &iter, ws, -1); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
584 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &iter); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
585 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &siter, mark2); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
586 gtk_text_buffer_delete_mark(imhtml->text_buffer, mark2); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
587 if (bold) \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
588 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "BOLD", &siter, &iter); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
589 if (italics) \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
590 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "ITALICS", &siter, &iter); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
591 if (underline) \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
592 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "UNDERLINE", &siter, &iter); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
593 if (strike) \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
594 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "STRIKE", &siter, &iter); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
595 if (sub) \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
596 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "SUB", &siter, &iter); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
597 if (sup) \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
598 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "SUP", &siter, &iter); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
599 if (pre) \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
600 gtk_text_buffer_apply_tag_by_name(imhtml->text_buffer, "PRE", &siter, &iter); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
601 if (bg) { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
602 texttag = gtk_text_buffer_create_tag(imhtml->text_buffer, NULL, "background", bg, NULL); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
603 gtk_text_buffer_apply_tag(imhtml->text_buffer, texttag, &siter, &iter); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
604 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
605 if (fonts) { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
606 FontDetail *fd = fonts->data; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
607 if (fd->fore) { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
608 texttag = gtk_text_buffer_create_tag(imhtml->text_buffer, NULL, "foreground", fd->fore, NULL); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
609 gtk_text_buffer_apply_tag(imhtml->text_buffer, texttag, &siter, &iter); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
610 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
611 if (fd->back) { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
612 texttag = gtk_text_buffer_create_tag(imhtml->text_buffer, NULL, "background", fd->back, NULL); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
613 gtk_text_buffer_apply_tag(imhtml->text_buffer, texttag, &siter, &iter); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
614 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
615 if (fd->face) { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
616 texttag = gtk_text_buffer_create_tag(imhtml->text_buffer, NULL, "font", fd->face, NULL); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
617 gtk_text_buffer_apply_tag(imhtml->text_buffer, texttag, &siter, &iter); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
618 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
619 if (fd->size) { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
620 texttag = gtk_text_buffer_create_tag(imhtml->text_buffer, NULL, "size-points", (double)POINT_SIZE(fd->size), NULL); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
621 gtk_text_buffer_apply_tag(imhtml->text_buffer, texttag, &siter, &iter); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
622 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
623 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
624 if (url) { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
625 texttag = gtk_text_buffer_create_tag(imhtml->text_buffer, NULL, "foreground", "blue", "underline", PANGO_UNDERLINE_SINGLE, NULL); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
626 g_signal_connect(G_OBJECT(texttag), "event", G_CALLBACK(tag_event), strdup(url)); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
627 gtk_text_buffer_apply_tag(imhtml->text_buffer, texttag, &siter, &iter); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
628 } \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
629 wpos = 0; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
630 ws[0] = 0; \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
631 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &iter); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
632
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
633
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
634 /* if (x == NEW_HR_BIT) { \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
635 sep = gtk_hseparator_new(); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
636 gtk_widget_size_request(GTK_WIDGET(imhtml), &req); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
637 gtk_widget_set_size_request(sep, 20, -1); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
638 anchor = gtk_text_buffer_create_child_anchor(imhtml->text_buffer, &iter); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
639 gtk_text_view_add_child_at_anchor(GTK_TEXT_VIEW(imhtml), sep, anchor); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
640 gtk_widget_show(sep); \
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
641 } */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
642
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
643 GString* gtk_imhtml_append_text (GtkIMHtml *imhtml,
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
644 const gchar *text,
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
645 gint len,
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
646 GtkIMHtmlOptions options)
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
647 {
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
648 gint pos = 0;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
649 GString *str = NULL;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
650 GtkTextIter iter, siter;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
651 GtkTextMark *mark, *mark2;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
652 GtkTextTag *texttag;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
653 gchar *ws;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
654 gchar *tag;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
655 gchar *url = NULL;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
656 gchar *bg = NULL;
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
657 gint tlen, smilelen, wpos=0;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
658 gint type;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
659 const gchar *c;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
660 gchar amp;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
661
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
662 guint bold = 0,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
663 italics = 0,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
664 underline = 0,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
665 strike = 0,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
666 sub = 0,
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
667 sup = 0,
1691
c8bd41036372 [gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1647
diff changeset
668 title = 0,
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
669 pre = 0;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
670
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
671 GSList *fonts = NULL;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
672
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
673 g_return_val_if_fail (imhtml != NULL, NULL);
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
674 g_return_val_if_fail (GTK_IS_IMHTML (imhtml), NULL);
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
675 g_return_val_if_fail (text != NULL, NULL);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
676 g_return_val_if_fail (len != 0, NULL);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
677
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
678 c = text;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
679 if (len == -1)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
680 len = strlen(text);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
681 ws = g_malloc(len + 1);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
682 ws[0] = 0;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
683
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
684 if (options & GTK_IMHTML_RETURN_LOG)
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
685 str = g_string_new("");
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
686
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
687 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &iter);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
688 mark = gtk_text_buffer_create_mark (imhtml->text_buffer, NULL, &iter, /* right grav */ FALSE);
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
689 while (pos < len) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
690 if (*c == '<' && gtk_imhtml_is_tag (c + 1, &tag, &tlen, &type)) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
691 c++;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
692 pos++;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
693 switch (type)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
694 {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
695 case 1: /* B */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
696 case 2: /* BOLD */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
697 NEW_BIT (NEW_TEXT_BIT);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
698 bold++;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
699 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
700 case 3: /* /B */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
701 case 4: /* /BOLD */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
702 NEW_BIT (NEW_TEXT_BIT);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
703 if (bold)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
704 bold--;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
705 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
706 case 5: /* I */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
707 case 6: /* ITALIC */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
708 NEW_BIT (NEW_TEXT_BIT);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
709 italics++;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
710 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
711 case 7: /* /I */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
712 case 8: /* /ITALIC */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
713 NEW_BIT (NEW_TEXT_BIT);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
714 if (italics)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
715 italics--;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
716 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
717 case 9: /* U */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
718 case 10: /* UNDERLINE */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
719 NEW_BIT (NEW_TEXT_BIT);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
720 underline++;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
721 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
722 case 11: /* /U */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
723 case 12: /* /UNDERLINE */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
724 NEW_BIT (NEW_TEXT_BIT);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
725 if (underline)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
726 underline--;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
727 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
728 case 13: /* S */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
729 case 14: /* STRIKE */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
730 NEW_BIT (NEW_TEXT_BIT);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
731 strike++;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
732 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
733 case 15: /* /S */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
734 case 16: /* /STRIKE */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
735 NEW_BIT (NEW_TEXT_BIT);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
736 if (strike)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
737 strike--;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
738 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
739 case 17: /* SUB */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
740 NEW_BIT (NEW_TEXT_BIT);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
741 sub++;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
742 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
743 case 18: /* /SUB */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
744 NEW_BIT (NEW_TEXT_BIT);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
745 if (sub)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
746 sub--;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
747 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
748 case 19: /* SUP */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
749 NEW_BIT (NEW_TEXT_BIT);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
750 sup++;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
751 break;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
752 case 20: /* /SUP */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
753 NEW_BIT (NEW_TEXT_BIT);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
754 if (sup)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
755 sup--;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
756 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
757 case 21: /* PRE */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
758 NEW_BIT (NEW_TEXT_BIT);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
759 pre++;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
760 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
761 case 22: /* /PRE */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
762 NEW_BIT (NEW_TEXT_BIT);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
763 if (pre)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
764 pre--;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
765 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
766 case 23: /* TITLE */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
767 NEW_BIT (NEW_TEXT_BIT);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
768 title++;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
769 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
770 case 24: /* /TITLE */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
771 if (title) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
772 if (options & GTK_IMHTML_NO_TITLE) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
773 wpos = 0;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
774 ws [wpos] = '\0';
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
775 }
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
776 title--;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
777 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
778 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
779 case 25: /* BR */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
780 ws[wpos] = '\n';
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
781 wpos++;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
782 NEW_BIT (NEW_TEXT_BIT);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
783 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
784 case 26: /* HR */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
785 case 42: /* HR (opt) */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
786 ws[wpos++] = '\n';
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
787 NEW_BIT(NEW_HR_BIT);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
788 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
789 case 27: /* /FONT */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
790 if (fonts) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
791 FontDetail *font = fonts->data;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
792 NEW_BIT (NEW_TEXT_BIT);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
793 fonts = g_slist_remove (fonts, font);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
794 if (font->face)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
795 g_free (font->face);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
796 if (font->fore)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
797 g_free (font->fore);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
798 if (font->back)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
799 g_free (font->back);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
800 if (font->sml)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
801 g_free (font->sml);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
802 g_free (font);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
803 }
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
804 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
805 case 28: /* /A */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
806 if (url) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
807 NEW_BIT(NEW_TEXT_BIT);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
808 g_free(url);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
809 url = NULL;
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
810 break;
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
811 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
812 case 29: /* P */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
813 case 30: /* /P */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
814 case 31: /* H3 */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
815 case 32: /* /H3 */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
816 case 33: /* HTML */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
817 case 34: /* /HTML */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
818 case 35: /* BODY */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
819 case 36: /* /BODY */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
820 case 37: /* FONT */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
821 case 38: /* HEAD */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
822 case 39: /* /HEAD */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
823 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
824 case 40: /* BINARY */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
825 case 41: /* /BINARY */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
826 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
827 case 43: /* FONT (opt) */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
828 {
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
829 gchar *color, *back, *face, *size, *sml;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
830 FontDetail *font, *oldfont = NULL;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
831 color = gtk_imhtml_get_html_opt (tag, "COLOR=");
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
832 back = gtk_imhtml_get_html_opt (tag, "BACK=");
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
833 face = gtk_imhtml_get_html_opt (tag, "FACE=");
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
834 size = gtk_imhtml_get_html_opt (tag, "SIZE=");
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
835 sml = gtk_imhtml_get_html_opt (tag, "SML=");
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
836 if (!(color || back || face || size || sml))
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
837 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
838
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
839 NEW_BIT (NEW_TEXT_BIT);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
840
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
841 font = g_new0 (FontDetail, 1);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
842 if (fonts)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
843 oldfont = fonts->data;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
844
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
845 if (color && !(options & GTK_IMHTML_NO_COLOURS))
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
846 font->fore = color;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
847 else if (oldfont && oldfont->fore)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
848 font->fore = g_strdup(oldfont->fore);
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
849
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
850 if (back && !(options & GTK_IMHTML_NO_COLOURS))
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
851 font->back = back;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
852 else if (oldfont && oldfont->back)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
853 font->back = g_strdup(oldfont->back);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
854
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
855 if (face && !(options & GTK_IMHTML_NO_FONTS))
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
856 font->face = face;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
857 else if (oldfont && oldfont->face)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
858 font->face = g_strdup(oldfont->face);
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
859
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
860 if (sml)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
861 font->sml = sml;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
862 else if (oldfont && oldfont->sml)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
863 font->sml = g_strdup(oldfont->sml);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
864
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
865 if (size && !(options & GTK_IMHTML_NO_SIZES)) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
866 if (*size == '+') {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
867 sscanf (size + 1, "%hd", &font->size);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
868 font->size += 3;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
869 } else if (*size == '-') {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
870 sscanf (size + 1, "%hd", &font->size);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
871 font->size = MAX (0, 3 - font->size);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
872 } else if (isdigit (*size)) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
873 sscanf (size, "%hd", &font->size);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
874 }
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
875 } else if (oldfont)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
876 font->size = oldfont->size;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
877 g_free(size);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
878 fonts = g_slist_prepend (fonts, font);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
879 }
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
880 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
881 case 44: /* BODY (opt) */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
882 if (!(options & GTK_IMHTML_NO_COLOURS)) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
883 char *bgcolor = gtk_imhtml_get_html_opt (tag, "BGCOLOR=");
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
884 if (bgcolor) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
885 NEW_BIT(NEW_TEXT_BIT);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
886 if (bg)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
887 g_free(bg);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
888 bg = bgcolor;
2885
213e2a58cbf6 [gaim-migrate @ 2898]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2871
diff changeset
889 }
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
890 }
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
891 break;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
892 case 45: /* A (opt) */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
893 {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
894 gchar *href = gtk_imhtml_get_html_opt (tag, "HREF=");
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
895 if (href) {
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
896 NEW_BIT (NEW_TEXT_BIT);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
897 if (url)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
898 g_free (url);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
899 url = href;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
900 }
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
901 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
902 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
903 case 47: /* P (opt) */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
904 case 48: /* H3 (opt) */
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
905 break;
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
906 case 49: /* comment */
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
907 NEW_BIT (NEW_TEXT_BIT);
4253
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
908 if (imhtml->show_comments)
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
909 wpos = g_snprintf (ws, len, "%s", tag);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
910 NEW_BIT (NEW_COMMENT_BIT);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
911 break;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
912 default:
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
913 break;
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
914 }
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
915 c += tlen;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
916 pos += tlen;
4138
727cb2d2b93c [gaim-migrate @ 4356]
Ari Pollak <ari@debian.org>
parents: 4046
diff changeset
917 if(tag)
727cb2d2b93c [gaim-migrate @ 4356]
Ari Pollak <ari@debian.org>
parents: 4046
diff changeset
918 g_free(tag); /* This was allocated back in VALID_TAG() */
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
919 } else if (*c == '&' && gtk_imhtml_is_amp_escape (c, &amp, &tlen)) {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
920 ws [wpos++] = amp;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
921 c += tlen;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
922 pos += tlen;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
923 } else if (*c == '\n') {
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
924 if (!(options & GTK_IMHTML_NO_NEWLINE)) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
925 ws[wpos] = '\n';
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
926 wpos++;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
927 NEW_BIT (NEW_TEXT_BIT);
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
928 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
929 c++;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
930 pos++;
4253
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
931 } else if (imhtml->show_smileys && (gtk_imhtml_is_smiley (imhtml, fonts, c, &smilelen) || gtk_imhtml_is_smiley(imhtml, NULL, c, &smilelen))) {
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
932 FontDetail *fd;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
933 gchar *sml = NULL;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
934 if (fonts) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
935 fd = fonts->data;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
936 sml = fd->sml;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
937 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
938 NEW_BIT (NEW_TEXT_BIT);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
939 wpos = g_snprintf (ws, smilelen + 1, "%s", c);
4263
054b3ea4e7c5 [gaim-migrate @ 4514]
Sean Egan <seanegan@pidgin.im>
parents: 4253
diff changeset
940 gtk_text_buffer_insert_pixbuf(imhtml->text_buffer, &iter, gtk_smiley_tree_image (imhtml, sml, ws));
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
941 c += smilelen;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
942 pos += smilelen;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
943 wpos = 0;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
944 ws[0] = 0;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
945 } else if (*c) {
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
946 ws [wpos++] = *c++;
2856
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
947 pos++;
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
948 } else {
046ed5e89321 [gaim-migrate @ 2869]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2826
diff changeset
949 break;
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
950 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
951 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
952
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
953 NEW_BIT(NEW_TEXT_BIT);
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
954 if (url) {
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
955 g_free (url);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
956 if (str)
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
957 str = g_string_append (str, "</A>");
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
958 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
959
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
960 while (fonts) {
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
961 FontDetail *font = fonts->data;
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
962 fonts = g_slist_remove (fonts, font);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
963 if (font->face)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
964 g_free (font->face);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
965 if (font->fore)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
966 g_free (font->fore);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
967 if (font->back)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
968 g_free (font->back);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
969 if (font->sml)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
970 g_free (font->sml);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
971 g_free (font);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
972 if (str)
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
973 str = g_string_append (str, "</FONT>");
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
974 }
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
975
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
976 if (str) {
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
977 while (bold) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
978 str = g_string_append (str, "</B>");
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
979 bold--;
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
980 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
981 while (italics) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
982 str = g_string_append (str, "</I>");
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
983 italics--;
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
984 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
985 while (underline) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
986 str = g_string_append (str, "</U>");
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
987 underline--;
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
988 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
989 while (strike) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
990 str = g_string_append (str, "</S>");
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
991 strike--;
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
992 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
993 while (sub) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
994 str = g_string_append (str, "</SUB>");
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
995 sub--;
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
996 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
997 while (sup) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
998 str = g_string_append (str, "</SUP>");
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
999 sup--;
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1000 }
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1001 while (title) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1002 str = g_string_append (str, "</TITLE>");
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1003 title--;
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1004 }
1691
c8bd41036372 [gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1647
diff changeset
1005 while (pre) {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1006 str = g_string_append (str, "</PRE>");
1691
c8bd41036372 [gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1647
diff changeset
1007 pre--;
c8bd41036372 [gaim-migrate @ 1701]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1647
diff changeset
1008 }
1428
c14bab2b74bb [gaim-migrate @ 1438]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents:
diff changeset
1009 }
4032
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1010 g_free (ws);
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1011 if (!(options & GTK_IMHTML_NO_SCROLL))
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1012 gtk_text_view_scroll_to_mark (GTK_TEXT_VIEW (imhtml), mark,
e93f7af4a610 [gaim-migrate @ 4238]
Sean Egan <seanegan@pidgin.im>
parents: 3941
diff changeset
1013 0, TRUE, 0.0, 1.0);
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1014 gtk_text_buffer_delete_mark (imhtml->text_buffer, mark);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1015 return str;
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1016 }
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1017
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1018 void gtk_imhtml_set_img_handler (GtkIMHtml *imhtml,
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1019 GtkIMHtmlImage handler){}
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1020
4288
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4264
diff changeset
1021 void gtk_imhtml_remove_smileys(GtkIMHtml *imhtml)
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4264
diff changeset
1022 {
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4264
diff changeset
1023 g_hash_table_destroy(imhtml->smiley_data);
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4264
diff changeset
1024 gtk_smiley_tree_destroy(imhtml->default_smilies);
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4264
diff changeset
1025 imhtml->smiley_data = g_hash_table_new (g_str_hash, g_str_equal);
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4264
diff changeset
1026 imhtml->default_smilies = gtk_smiley_tree_new();
a93533dc8be2 [gaim-migrate @ 4541]
Sean Egan <seanegan@pidgin.im>
parents: 4264
diff changeset
1027 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1028 void gtk_imhtml_show_smileys (GtkIMHtml *imhtml,
4253
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
1029 gboolean show)
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
1030 {
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
1031 imhtml->show_smileys = show;
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
1032 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1033
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1034 void gtk_imhtml_show_comments (GtkIMHtml *imhtml,
4253
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
1035 gboolean show)
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
1036 {
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
1037 imhtml->show_comments = show;
a1fa2170cb2d [gaim-migrate @ 4504]
Sean Egan <seanegan@pidgin.im>
parents: 4201
diff changeset
1038 }
1780
431333222954 [gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1738
diff changeset
1039
431333222954 [gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1738
diff changeset
1040 void
431333222954 [gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1738
diff changeset
1041 gtk_imhtml_clear (GtkIMHtml *imhtml)
431333222954 [gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1738
diff changeset
1042 {
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1043 GtkTextIter start, end;
2993
0340d0a8b810 [gaim-migrate @ 3006]
Rob Flynn <gaim@robflynn.com>
parents: 2982
diff changeset
1044
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1045 gtk_text_buffer_get_start_iter(imhtml->text_buffer, &start);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1046 gtk_text_buffer_get_end_iter(imhtml->text_buffer, &end);
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1047 gtk_text_buffer_delete(imhtml->text_buffer, &start, &end);
1780
431333222954 [gaim-migrate @ 1790]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 1738
diff changeset
1048 }
2363
0767c14d7879 [gaim-migrate @ 2376]
Eric Warmenhoven <warmenhoven@yahoo.com>
parents: 2349
diff changeset
1049
4046
3b7f7799fe5b [gaim-migrate @ 4254]
Sean Egan <seanegan@pidgin.im>
parents: 4041
diff changeset
1050 void gtk_imhtml_page_up (GtkIMHtml *imhtml)
3b7f7799fe5b [gaim-migrate @ 4254]
Sean Egan <seanegan@pidgin.im>
parents: 4041
diff changeset
1051 {
3b7f7799fe5b [gaim-migrate @ 4254]
Sean Egan <seanegan@pidgin.im>
parents: 4041
diff changeset
1052
3b7f7799fe5b [gaim-migrate @ 4254]
Sean Egan <seanegan@pidgin.im>
parents: 4041
diff changeset
1053 }
3922
61808e62e68e [gaim-migrate @ 4094]
Sean Egan <seanegan@pidgin.im>
parents: 3717
diff changeset
1054 void gtk_imhtml_page_down (GtkIMHtml *imhtml){}

mercurial