Mercurial > pidgin
comparison src/gtkimhtml.c @ 9465:8a4797a608ae
[gaim-migrate @ 10290]
1) Fixes the parsing for Win32 clipboard format so that we more accurately
grab the right text
2) Revises our Win32 clipboard format conversion to act more like IE,
since this is as close as we will get to "the right way"
3) Makes clipboard pasting not paste HTML comments (this one effects
linux too, and fixes a problem i've seen pasting from oo.o)
committer: Tailor Script <tailor@pidgin.im>
author | Tim Ringenbach <marv@pidgin.im> |
---|---|
date | Wed, 07 Jul 2004 01:35:27 +0000 |
parents | d0380151c6d1 |
children | b6971539f7af |
comparison
equal
deleted
inserted
replaced
9464:4a69de50f11a | 9465:8a4797a608ae |
---|---|
147 */ | 147 */ |
148 static UINT win_html_fmt; | 148 static UINT win_html_fmt; |
149 | 149 |
150 static gchar * | 150 static gchar * |
151 clipboard_win32_to_html(char *clipboard) { | 151 clipboard_win32_to_html(char *clipboard) { |
152 const char *header; | |
152 const char *begin, *end; | 153 const char *begin, *end; |
154 gint start=0; | |
155 gint finish=0; | |
153 gchar *html; | 156 gchar *html; |
154 | 157 FILE *fd; |
155 begin = strstr(clipboard, "<!--StartFragment"); | 158 |
156 while(*begin++ != '>'); | 159 #if 0 /* Debugging for Windows clipboard */ |
157 end = strstr(clipboard, "<!--EndFragment"); | 160 gaim_debug_info("imhtml clipboard", "from clipboard: %s\n", clipboard); |
158 html = g_strstrip(g_strndup(begin, (end ? (end - begin) : strlen(begin)))); | 161 |
162 fd = fopen("e:\\gaimcb.txt", "wb"); | |
163 fprintf(fd, "%s", clipboard); | |
164 fclose(fd); | |
165 #endif | |
166 | |
167 if (header = strstr(clipboard, "Version:1.0\n")) | |
168 | |
169 if (!(header = strstr(clipboard, "StartFragment:"))) | |
170 return NULL; | |
171 | |
172 sscanf(header, "StartFragment:%d", &start); | |
173 | |
174 header = strstr(clipboard, "EndFragment:"); | |
175 sscanf(header, "EndFragment:%d", &finish); | |
176 | |
177 begin = clipboard + start; | |
178 | |
179 if (header == NULL) | |
180 end = clipboard + strlen(clipboard); | |
181 else | |
182 end = clipboard + finish; | |
183 | |
184 html = g_strstrip(g_strndup(begin, end-begin)); | |
185 | |
186 #if 0 /* Debugging for Windows clipboard */ | |
187 gaim_debug_info("imhtml clipboard", "HTML fragment: %s\n", html); | |
188 #endif | |
189 | |
159 return html; | 190 return html; |
160 } | 191 } |
161 | 192 |
162 static gchar * | 193 static gchar * |
163 clipboard_html_to_win32(char *html) { | 194 clipboard_html_to_win32(char *html) { |
167 | 198 |
168 if (html == NULL) | 199 if (html == NULL) |
169 return NULL; | 200 return NULL; |
170 | 201 |
171 length = strlen(html); | 202 length = strlen(html); |
172 clipboard = g_string_new ("Version:0.9\r\n"); | 203 clipboard = g_string_new ("Version:1.0\r\n"); |
173 g_string_append(clipboard, "StartHTML:0000000105\r\n"); | 204 g_string_append(clipboard, "StartHTML:0000000105\r\n"); |
174 g_string_append(clipboard, g_strdup_printf("EndHTML:%010d\r\n", 143 + length)); | 205 g_string_append(clipboard, g_strdup_printf("EndHTML:%010d\r\n", 147 + length)); |
175 g_string_append(clipboard, "StartFragment:0000000105\r\n"); | 206 g_string_append(clipboard, "StartFragment:0000000127\r\n"); |
176 g_string_append(clipboard, g_strdup_printf("EndFragment:%010d\r\n", 143 + length)); | 207 g_string_append(clipboard, g_strdup_printf("EndFragment:%010d\r\n", 127 + length)); |
177 g_string_append(clipboard, "<!--StartFragment-->"); | 208 g_string_append(clipboard, "<!--StartFragment-->\r\n"); |
178 g_string_append(clipboard, html); | 209 g_string_append(clipboard, html); |
179 g_string_append(clipboard, "<!--EndFragment-->"); | 210 g_string_append(clipboard, "\r\n<!--EndFragment-->"); |
180 ret = clipboard->str; | 211 ret = clipboard->str; |
181 g_string_free(clipboard, FALSE); | 212 g_string_free(clipboard, FALSE); |
213 | |
214 #if 0 /* Debugging for Windows clipboard */ | |
215 gaim_debug_info("imhtml clipboard", "from gaim: %s\n", ret); | |
216 #endif | |
217 | |
182 return ret; | 218 return ret; |
183 } | 219 } |
184 #endif | 220 #endif |
185 | 221 |
186 static GtkSmileyTree* | 222 static GtkSmileyTree* |
723 } | 759 } |
724 | 760 |
725 static void imhtml_paste_insert(GtkIMHtml *imhtml, const char *text, gboolean plaintext) | 761 static void imhtml_paste_insert(GtkIMHtml *imhtml, const char *text, gboolean plaintext) |
726 { | 762 { |
727 GtkTextIter iter; | 763 GtkTextIter iter; |
728 GtkIMHtmlOptions flags = plaintext ? 0 : GTK_IMHTML_NO_NEWLINE; | 764 GtkIMHtmlOptions flags = plaintext ? 0 : (GTK_IMHTML_NO_NEWLINE | GTK_IMHTML_NO_COMMENTS); |
729 | 765 |
730 if (gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, NULL, NULL)) | 766 if (gtk_text_buffer_get_selection_bounds(imhtml->text_buffer, NULL, NULL)) |
731 gtk_text_buffer_delete_selection(imhtml->text_buffer, TRUE, TRUE); | 767 gtk_text_buffer_delete_selection(imhtml->text_buffer, TRUE, TRUE); |
732 | 768 |
733 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, gtk_text_buffer_get_insert(imhtml->text_buffer)); | 769 gtk_text_buffer_get_iter_at_mark(imhtml->text_buffer, &iter, gtk_text_buffer_get_insert(imhtml->text_buffer)); |
2461 case 60: /* SPAN */ | 2497 case 60: /* SPAN */ |
2462 break; | 2498 break; |
2463 case 62: /* comment */ | 2499 case 62: /* comment */ |
2464 /* NEW_BIT (NEW_TEXT_BIT); */ | 2500 /* NEW_BIT (NEW_TEXT_BIT); */ |
2465 ws[wpos] = '\0'; | 2501 ws[wpos] = '\0'; |
2502 | |
2466 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos); | 2503 gtk_text_buffer_insert(imhtml->text_buffer, iter, ws, wpos); |
2467 | 2504 |
2468 if (imhtml->show_comments) | 2505 if (imhtml->show_comments && !(options & GTK_IMHTML_NO_COMMENTS)) |
2469 wpos = g_snprintf (ws, len, "%s", tag); | 2506 wpos = g_snprintf (ws, len, "%s", tag); |
2470 /* NEW_BIT (NEW_COMMENT_BIT); */ | 2507 /* NEW_BIT (NEW_COMMENT_BIT); */ |
2471 break; | 2508 break; |
2472 default: | 2509 default: |
2473 break; | 2510 break; |