diff options
author | Matthias Clasen <mclasen@redhat.com> | 2015-04-27 18:25:09 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2015-04-27 19:10:10 -0400 |
commit | 169f29998fd608b19e85b0a5a0aeea6711b40a55 (patch) | |
tree | 6f9467f9eb7b42c226d47db4e2970cdb53ac6dd8 /gtk/gtk-builder-tool.c | |
parent | 8bb5a149778b90423c3f770e18e67d7b678f76d9 (diff) | |
download | gtk+-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.c | 71 |
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; } |