src/gtkimhtml.c

changeset 9465
652dcd45db7d
parent 9337
4bd369a6e4dc
child 9467
591db7463935
--- a/src/gtkimhtml.c	Tue Jul 06 23:16:20 2004 +0000
+++ b/src/gtkimhtml.c	Wed Jul 07 01:35:27 2004 +0000
@@ -149,13 +149,44 @@
 
 static gchar *
 clipboard_win32_to_html(char *clipboard) {
+	const char *header;
 	const char *begin, *end;
+	gint start=0;
+	gint finish=0;
 	gchar *html;
-
-	begin = strstr(clipboard, "<!--StartFragment");
-	while(*begin++ != '>');
-	end = strstr(clipboard, "<!--EndFragment");
-	html = g_strstrip(g_strndup(begin, (end ? (end - begin) : strlen(begin))));
+	FILE *fd;
+
+#if 0 /* Debugging for Windows clipboard */
+	gaim_debug_info("imhtml clipboard", "from clipboard: %s\n", clipboard);
+
+	fd = fopen("e:\\gaimcb.txt", "wb");
+	fprintf(fd, "%s", clipboard);
+	fclose(fd);
+#endif
+
+	if (header = strstr(clipboard, "Version:1.0\n"))
+
+	if (!(header = strstr(clipboard, "StartFragment:")))
+		return NULL;
+
+	sscanf(header, "StartFragment:%d", &start);
+
+	header = strstr(clipboard, "EndFragment:");
+	sscanf(header, "EndFragment:%d", &finish);
+
+	begin = clipboard + start;
+
+	if (header == NULL)
+		end = clipboard + strlen(clipboard);
+	else
+		end = clipboard + finish;
+
+	html = g_strstrip(g_strndup(begin, end-begin));
+
+#if 0 /* Debugging for Windows clipboard */
+	gaim_debug_info("imhtml clipboard", "HTML fragment: %s\n", html);
+#endif
+
 	return html;
 }
 
@@ -169,16 +200,21 @@
 		return NULL;
 
 	length = strlen(html);
-	clipboard = g_string_new ("Version:0.9\r\n");
+	clipboard = g_string_new ("Version:1.0\r\n");
 	g_string_append(clipboard, "StartHTML:0000000105\r\n");
-	g_string_append(clipboard, g_strdup_printf("EndHTML:%010d\r\n", 143 + length));
-	g_string_append(clipboard, "StartFragment:0000000105\r\n");
-	g_string_append(clipboard, g_strdup_printf("EndFragment:%010d\r\n", 143 + length));
-	g_string_append(clipboard, "<!--StartFragment-->");
+	g_string_append(clipboard, g_strdup_printf("EndHTML:%010d\r\n", 147 + length));
+	g_string_append(clipboard, "StartFragment:0000000127\r\n");
+	g_string_append(clipboard, g_strdup_printf("EndFragment:%010d\r\n", 127 + length));
+	g_string_append(clipboard, "<!--StartFragment-->\r\n");
 	g_string_append(clipboard, html);
-	g_string_append(clipboard, "<!--EndFragment-->");
+	g_string_append(clipboard, "\r\n<!--EndFragment-->");
 	ret = clipboard->str;
 	g_string_free(clipboard, FALSE);
+
+#if 0 /* Debugging for Windows clipboard */
+	gaim_debug_info("imhtml clipboard", "from gaim: %s\n", ret);
+#endif
+
 	return ret;
 }
 #endif
@@ -725,7 +761,7 @@
 static void imhtml_paste_insert(GtkIMHtml *imhtml, const char *text, gboolean plaintext)
 {
 	GtkTextIter iter;
-	GtkIMHtmlOptions flags = plaintext ? 0 : GTK_IMHTML_NO_NEWLINE;
+	GtkIMHtmlOptions flags = plaintext ? 0 : (GTK_IMHTML_NO_NEWLINE | GTK_IMHTML_NO_COMMENTS);
 
 	if (gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, NULL, NULL))
 		gtk_text_buffer_delete_selection(imhtml->text_buffer, TRUE, TRUE);
@@ -2463,9 +2499,10 @@
 				case 62:	/* comment */
 					/* NEW_BIT (NEW_TEXT_BIT); */
 					ws[wpos] = '\0';
+
 					gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos);
 
-					if (imhtml->show_comments)
+					if (imhtml->show_comments && !(options & GTK_IMHTML_NO_COMMENTS))
 						wpos = g_snprintf (ws, len, "%s", tag);
 					/* NEW_BIT (NEW_COMMENT_BIT); */
 					break;

mercurial