summaryrefslogtreecommitdiff
path: root/gtk/gtk-builder-tool.c
diff options
context:
space:
mode:
authorMatthias Clasen <mclasen@redhat.com>2015-04-27 18:25:09 -0400
committerMatthias Clasen <mclasen@redhat.com>2015-04-27 19:10:10 -0400
commit169f29998fd608b19e85b0a5a0aeea6711b40a55 (patch)
tree6f9467f9eb7b42c226d47db4e2970cdb53ac6dd8 /gtk/gtk-builder-tool.c
parent8bb5a149778b90423c3f770e18e67d7b678f76d9 (diff)
downloadgtk+-169f29998fd608b19e85b0a5a0aeea6711b40a55.tar.gz
Do validation before simplification
Use GtkBuilder to parse the file first, and report any errors it finds before using our own simple-minded parser to simplify.
Diffstat (limited to 'gtk/gtk-builder-tool.c')
-rw-r--r--gtk/gtk-builder-tool.c71
1 files changed, 54 insertions, 17 deletions
diff --git a/gtk/gtk-builder-tool.c b/gtk/gtk-builder-tool.c
index 0bea932eab..45c4daa954 100644
--- a/gtk/gtk-builder-tool.c
+++ b/gtk/gtk-builder-tool.c
@@ -361,28 +361,18 @@ GMarkupParser parser = {
NULL
};
-int
-main (int argc, char *argv[])
+static gboolean
+do_simplify (const gchar *filename)
{
GMarkupParseContext *context;
GError *error = NULL;
gchar *buffer;
ParserData data;
- gtk_init (NULL, NULL);
-
- gtk_test_register_all_types ();
-
- if (argc < 2)
- {
- g_printerr ("No file given.\n");
- return 1;
- }
-
- if (!g_file_get_contents (argv[1], &buffer, NULL, &error))
+ if (!g_file_get_contents (filename, &buffer, NULL, &error))
{
- g_printerr ("Failed to read file: %s.\n", error->message);
- return 1;
+ g_printerr ("Failed to read file: %s\n", error->message);
+ return FALSE;
}
data.builder = gtk_builder_new ();
@@ -398,9 +388,56 @@ main (int argc, char *argv[])
context = g_markup_parse_context_new (&parser, G_MARKUP_TREAT_CDATA_AS_TEXT, &data, NULL);
if (!g_markup_parse_context_parse (context, buffer, -1, &error))
{
- g_printerr ("Failed to parse file: %s.\n", error->message);
- return 1;
+ g_printerr ("Failed to parse file: %s\n", error->message);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static gboolean
+do_validate (const gchar *filename)
+{
+ GtkBuilder *builder;
+ GError *error = NULL;
+ gint ret;
+
+ builder = gtk_builder_new ();
+ ret = gtk_builder_add_from_file (builder, filename, &error);
+ g_object_unref (builder);
+
+ if (ret == 0)
+ {
+ g_printerr ("%s\n", error->message);
+ return FALSE;
}
+ return TRUE;
+}
+
+static void
+usage (void)
+{
+ g_print ("Usage: gtk-builder-tool FILE\n"
+ "Validate and simplify GtkBuilder .ui files.\n");
+ exit (1);
+}
+
+int
+main (int argc, char *argv[])
+{
+ gtk_init (NULL, NULL);
+
+ gtk_test_register_all_types ();
+
+ if (argc < 2)
+ usage ();
+
+ if (!do_validate (argv[1]))
+ return 1;
+
+ if (!do_simplify (argv[1]))
+ return 1;
+
return 0;
}