gtkhtml r8718 - branches/mbarnes-composer/components/editor



Author: mbarnes
Date: Tue Feb  5 23:59:05 2008
New Revision: 8718
URL: http://svn.gnome.org/viewvc/gtkhtml?rev=8718&view=rev

Log:
New public functions:

gtkhtml_editor_get_text_html()
gtkhtml_editor_get_text_plain()
gtkhtml_editor_set_text_html()


Modified:
   branches/mbarnes-composer/components/editor/gtkhtml-editor-actions.h
   branches/mbarnes-composer/components/editor/gtkhtml-editor.c
   branches/mbarnes-composer/components/editor/gtkhtml-editor.h

Modified: branches/mbarnes-composer/components/editor/gtkhtml-editor-actions.h
==============================================================================
--- branches/mbarnes-composer/components/editor/gtkhtml-editor-actions.h	(original)
+++ branches/mbarnes-composer/components/editor/gtkhtml-editor-actions.h	Tue Feb  5 23:59:05 2008
@@ -22,7 +22,7 @@
 #define GTKHTML_EDITOR_ACTIONS_H
 
 #define GTKHTML_EDITOR_ACTION(editor, name) \
-	(gtkhtml_editor_get_action ((editor), (name)))
+	(gtkhtml_editor_get_action (GTKHTML_EDITOR (editor), (name)))
 
 #define GTKHTML_EDITOR_ACTION_BOLD(editor) \
 	GTKHTML_EDITOR_ACTION ((editor), "bold")

Modified: branches/mbarnes-composer/components/editor/gtkhtml-editor.c
==============================================================================
--- branches/mbarnes-composer/components/editor/gtkhtml-editor.c	(original)
+++ branches/mbarnes-composer/components/editor/gtkhtml-editor.c	Tue Feb  5 23:59:05 2008
@@ -803,7 +803,7 @@
 	g_object_notify (G_OBJECT (editor), "current-folder");
 }
 
-/* Helper for gtkhtml_editor_save() */
+/* Helper for gtkhtml_editor_get_text_[html/plain]() */
 static gboolean
 editor_save_receiver (HTMLEngine *engine,
                       const gchar *data,
@@ -815,28 +815,93 @@
 	return TRUE;
 }
 
+gchar *
+gtkhtml_editor_get_text_html (GtkhtmlEditor *editor,
+                              gsize *length)
+{
+	GString *string;
+
+	g_return_val_if_fail (GTKHTML_IS_EDITOR (editor), NULL);
+
+	string = g_string_sized_new (4096);
+
+	gtk_html_export (
+		gtkhtml_editor_get_html (editor), "text/html",
+		(GtkHTMLSaveReceiverFn) editor_save_receiver, string);
+
+	if (length != NULL)
+		*length = string->len;
+
+	return g_string_free (string, FALSE);
+}
+
+gchar *
+gtkhtml_editor_get_text_plain (GtkhtmlEditor *editor,
+                               gsize *length)
+{
+	GString *string;
+
+	g_return_val_if_fail (GTKHTML_IS_EDITOR (editor), NULL);
+
+	string = g_string_sized_new (4096);
+
+	gtk_html_export (
+		gtkhtml_editor_get_html (editor), "text/plain",
+		(GtkHTMLSaveReceiverFn) editor_save_receiver, string);
+
+	if (length != NULL)
+		*length = string->len;
+
+	return g_string_free (string, FALSE);
+}
+
+void
+gtkhtml_editor_set_text_html (GtkhtmlEditor *editor,
+                              const gchar *text,
+                              gssize length)
+{
+	GtkHTML *html;
+	GtkHTMLStream *stream;
+	gboolean editable;
+
+	g_return_if_fail (GTKHTML_IS_EDITOR (editor));
+	g_return_if_fail (text != NULL);
+
+	/* XXX GtkHTML should really do this. */
+	if (length < 0)
+		length = strlen (text);
+
+	html = gtkhtml_editor_get_html (editor);
+	editable = gtk_html_get_editable (html);
+	gtk_html_set_editable (html, FALSE);
+
+	stream = gtk_html_begin_content (html, "text/html; charset=utf-8");
+	gtk_html_write (html, stream, text, length);
+	gtk_html_end (html, stream, GTK_HTML_STREAM_OK);
+
+	gtk_html_set_editable (html, editable);
+}
+
 gboolean
 gtkhtml_editor_save (GtkhtmlEditor *editor,
                      const gchar *filename,
                      GError **error)
 {
-	GtkHTML *html;
-	GString *contents;
+	gchar *contents;
+	gsize length;
 	gboolean success;
 
 	g_return_val_if_fail (GTKHTML_IS_EDITOR (editor), FALSE);
 	g_return_val_if_fail (filename != NULL, FALSE);
 
-	html = gtkhtml_editor_get_html (editor);
-
-	contents = g_string_sized_new (4096);
-	gtk_html_save (
-		html, (GtkHTMLSaveReceiverFn) editor_save_receiver, contents);
-	success = g_file_set_contents (
-		filename, contents->str, contents->len, error);
-	g_string_free (contents, TRUE);
+	contents = gtkhtml_editor_get_text_html (editor, &length);
+	success = g_file_set_contents (filename, contents, length, error);
+	g_free (contents);
 
 	if (success) {
+		GtkHTML *html;
+
+		html = gtkhtml_editor_get_html (editor);
 		html->engine->saved_step_count =
 			html_undo_get_step_count (html->engine->undo);
 		gtkhtml_editor_run_command (editor, "saved");

Modified: branches/mbarnes-composer/components/editor/gtkhtml-editor.h
==============================================================================
--- branches/mbarnes-composer/components/editor/gtkhtml-editor.h	(original)
+++ branches/mbarnes-composer/components/editor/gtkhtml-editor.h	Tue Feb  5 23:59:05 2008
@@ -91,6 +91,13 @@
  * High-Level Editing Interface
  *****************************************************************************/
 
+gchar *		gtkhtml_editor_get_text_html	(GtkhtmlEditor *editor,
+						 gsize *length);
+gchar *		gtkhtml_editor_get_text_plain	(GtkhtmlEditor *editor,
+						 gsize *length);
+void		gtkhtml_editor_set_text_html	(GtkhtmlEditor *editor,
+						 const gchar *text,
+						 gssize length);
 gboolean	gtkhtml_editor_save		(GtkhtmlEditor *editor,
 						 const gchar *filename,
 						 GError **error);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]