[gnome-initial-setup] eula: Use the new pango stream markup parser
- From: Jasper St. Pierre <jstpierre src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-initial-setup] eula: Use the new pango stream markup parser
- Date: Fri, 14 Dec 2012 21:13:56 +0000 (UTC)
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]