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