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