[gnome-initial-setup] eula: Use the new pango stream markup parser



commit 682d10fe66a0467ff84aada9283cbcddfba291a9
Author: Jasper St. Pierre <jstpierre mecheye net>
Date:   Fri Dec 14 16:06:39 2012 -0500

    eula: Use the new pango stream markup parser

 gnome-initial-setup/pages/eulas/gis-eula-pages.c |   21 ++++--------
 gnome-initial-setup/pages/eulas/utils.c          |   38 +++++++++++++++++++++-
 gnome-initial-setup/pages/eulas/utils.h          |    7 ++--
 3 files changed, 47 insertions(+), 19 deletions(-)
---
diff --git a/gnome-initial-setup/pages/eulas/gis-eula-pages.c b/gnome-initial-setup/pages/eulas/gis-eula-pages.c
index 9987017..9b40106 100644
--- a/gnome-initial-setup/pages/eulas/gis-eula-pages.c
+++ b/gnome-initial-setup/pages/eulas/gis-eula-pages.c
@@ -61,30 +61,23 @@ build_eula_text_buffer_pango_markup (GFile   *file,
                                      GError **error_out)
 {
   GtkTextBuffer *buffer = NULL;
-  gchar *contents;
-  gsize length;
   GError *error = NULL;
-  PangoAttrList *attrlist;
-  gchar *text;
-  GtkTextIter iter;
-
-  if (!g_file_load_contents (file, NULL, &contents, &length, NULL, &error))
-    goto error_out;
+  GInputStream *input_stream = NULL;
 
-  if (!pango_parse_markup (contents, length, 0, &attrlist, &text, NULL, &error))
+  input_stream = G_INPUT_STREAM (g_file_read (file, NULL, &error));
+  if (input_stream == NULL)
     goto error_out;
 
-  g_free (contents);
-
   buffer = gtk_text_buffer_new (NULL);
-
-  gtk_text_buffer_get_end_iter (buffer, &iter);
-  text_buffer_insert_pango_text (buffer, &iter, attrlist, text);
+  if (!splice_buffer_markup (input_stream, buffer, &error))
+    goto error_out;
 
   return buffer;
 
  error_out:
   g_propagate_error (error_out, error);
+  if (buffer != NULL)
+    g_object_unref (buffer);
   return NULL;
 }
 
diff --git a/gnome-initial-setup/pages/eulas/utils.c b/gnome-initial-setup/pages/eulas/utils.c
index a4e8572..20c08ac 100644
--- a/gnome-initial-setup/pages/eulas/utils.c
+++ b/gnome-initial-setup/pages/eulas/utils.c
@@ -72,7 +72,7 @@ text_buffer_get_text_tag_from_pango (PangoAttrIterator *paiter)
   return tag;
 }
 
-void
+static void
 text_buffer_insert_pango_text (GtkTextBuffer *buffer,
                                GtkTextIter *iter,
                                PangoAttrList *attrlist,
@@ -142,3 +142,39 @@ splice_buffer_text (GInputStream  *stream,
 
   return (*error == NULL);
 }
+
+gboolean
+splice_buffer_markup (GInputStream  *stream,
+                      GtkTextBuffer *buffer,
+                      GError       **error)
+{
+  char contents[8192];
+  gssize n_read;
+  GtkTextIter iter;
+  GMarkupParseContext *context;
+  PangoAttrList *attr_list;
+  gchar *text;
+
+  context = pango_markup_parser_new (0);
+
+  while (TRUE) {
+    n_read = g_input_stream_read (stream, contents, sizeof (contents), NULL, error);
+
+    /* error or eof */
+    if (n_read <= 0)
+      break;
+
+    if (!g_markup_parse_context_parse (context, contents, n_read, error))
+      goto out;
+  }
+
+  if (!pango_markup_parser_finish (context, &attr_list, &text, NULL, error))
+    goto out;
+
+  gtk_text_buffer_get_end_iter (buffer, &iter);
+  text_buffer_insert_pango_text (buffer, &iter, attr_list, text);
+
+ out:
+  g_markup_parse_context_free (context);
+  return (*error == NULL);
+}
diff --git a/gnome-initial-setup/pages/eulas/utils.h b/gnome-initial-setup/pages/eulas/utils.h
index da7c873..ac017bb 100644
--- a/gnome-initial-setup/pages/eulas/utils.h
+++ b/gnome-initial-setup/pages/eulas/utils.h
@@ -11,10 +11,9 @@ gboolean splice_buffer_text (GInputStream  *stream,
                              GtkTextBuffer *buffer,
                              GError       **error);
 
-void text_buffer_insert_pango_text (GtkTextBuffer *buffer,
-                                    GtkTextIter *iter,
-                                    PangoAttrList *attrlist,
-                                    gchar *text);
+gboolean splice_buffer_markup (GInputStream  *stream,
+                               GtkTextBuffer *buffer,
+                               GError       **error);
 
 G_END_DECLS
 



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