pidgin.next.minor: dce1df02: Fix exporting proper HTML for tags.
sadrul at pidgin.im
sadrul at pidgin.im
Thu May 22 14:45:49 EDT 2008
-----------------------------------------------------------------
Revision: dce1df02eabf1f97260290d86d75e01d6b392a04
Ancestor: 0689b2b2e3b1be61c96a27970dc2169647cb20bd
Author: sadrul at pidgin.im
Date: 2008-05-22T17:14:48
Branch: im.pidgin.pidgin.next.minor
URL: http://d.pidgin.im/viewmtn/revision/info/dce1df02eabf1f97260290d86d75e01d6b392a04
Modified files:
pidgin/gtkimhtml.c
ChangeLog:
Fix exporting proper HTML for tags.
-------------- next part --------------
============================================================
--- pidgin/gtkimhtml.c b9e9d47d83f9cca6c68de08cc4d6b731eb4689f1
+++ pidgin/gtkimhtml.c c2cc324fb739634840486a853d8237644655be76
@@ -1574,9 +1574,11 @@ static void gtk_imhtml_init (GtkIMHtml *
gtk_text_buffer_create_tag(imhtml->text_buffer, "SUP", "rise", 5000, NULL);
gtk_text_buffer_create_tag(imhtml->text_buffer, "PRE", "family", "Monospace", NULL);
gtk_text_buffer_create_tag(imhtml->text_buffer, "search", "background", "#22ff00", "weight", "bold", NULL);
+ gtk_text_buffer_create_tag(imhtml->text_buffer, "comment", "weight", PANGO_WEIGHT_NORMAL,
#if FALSE && GTK_CHECK_VERSION(2,10,10)
- gtk_text_buffer_create_tag(imhtml->text_buffer, "comment", "invisible", FALSE, NULL);
+ "invisible", FALSE,
#endif
+ NULL);
gtk_text_buffer_create_tag(imhtml->text_buffer, "send-name", "weight", PANGO_WEIGHT_BOLD, NULL);
gtk_text_buffer_create_tag(imhtml->text_buffer, "receive-name", "weight", PANGO_WEIGHT_BOLD, NULL);
@@ -3124,7 +3126,7 @@ void gtk_imhtml_insert_html_at_iter(GtkI
#else
if (imhtml->show_comments && !(options & GTK_IMHTML_NO_COMMENTS)) {
wpos = g_snprintf (ws, len, "%s", tag);
- gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
+ gtk_text_buffer_insert_with_tags_by_name(imhtml->text_buffer, iter, ws, wpos, "comment", NULL);
}
#endif
ws[0] = '\0'; wpos = 0;
@@ -4994,7 +4996,67 @@ static const gchar *tag_to_html_start(Gt
g_snprintf(buf, sizeof(buf), "<font size=\"%s\">", &name[10]);
return buf;
} else {
- return "";
+ char *str = buf;
+ gboolean isset;
+ int ivalue = 0;
+ GdkColor *color = NULL;
+ GObject *obj = G_OBJECT(tag);
+ gboolean empty = TRUE;
+
+ str += g_snprintf(str, sizeof(buf) - (str - buf), "<font style='");
+
+ /* Weight */
+ g_object_get(obj, "weight-set", &isset, "weight", &ivalue, NULL);
+ if (isset) {
+ const char *weight = "";
+ if (ivalue >= PANGO_WEIGHT_ULTRABOLD)
+ weight = "bolder";
+ else if (ivalue >= PANGO_WEIGHT_BOLD)
+ weight = "bold";
+ else if (ivalue >= PANGO_WEIGHT_NORMAL)
+ weight = "normal";
+ else
+ weight = "lighter";
+
+ str += g_snprintf(str, sizeof(buf) - (str - buf), "font-weight: %s;", weight);
+ empty = FALSE;
+ }
+
+ /* Foreground color */
+ g_object_get(obj, "foreground-set", &isset, "foreground-gdk", &color, NULL);
+ if (isset && color) {
+ str += g_snprintf(str, sizeof(buf) - (str - buf),
+ "color: #%02x%02x%02x;",
+ color->red >> 8, color->green >> 8, color->blue >> 8);
+ gdk_color_free(color);
+ empty = FALSE;
+ }
+
+ /* Background color */
+ g_object_get(obj, "background-set", &isset, "background-gdk", &color, NULL);
+ if (isset && color) {
+ str += g_snprintf(str, sizeof(buf) - (str - buf),
+ "background: #%02x%02x%02x;",
+ color->red >> 8, color->green >> 8, color->blue >> 8);
+ gdk_color_free(color);
+ empty = FALSE;
+ }
+
+ /* Underline */
+ g_object_get(obj, "underline-set", &isset, "underline", &ivalue, NULL);
+ if (isset) {
+ switch (ivalue) {
+ case PANGO_UNDERLINE_NONE:
+ case PANGO_UNDERLINE_ERROR:
+ break;
+ default:
+ str += g_snprintf(str, sizeof(buf) - (str - buf), "text-decoration: underline;");
+ }
+ }
+
+ g_snprintf(str, sizeof(buf) - (str - buf), "'>");
+
+ return (empty ? "" : buf);
}
}
@@ -5026,6 +5088,16 @@ static const gchar *tag_to_html_end(GtkT
} else if (strncmp(name, "FONT SIZE ", 10) == 0) {
return "</font>";
} else {
+ const char *props[] = {"weight-set", "foreground-set", "background-set",
+ "size-set", "underline-set", NULL};
+ int i;
+ for (i = 0; props[i]; i++) {
+ gboolean set = FALSE;
+ g_object_get(G_OBJECT(tag), props[i], &set, NULL);
+ if (set)
+ return "</font>";
+ }
+
return "";
}
}
More information about the Commits
mailing list