diff options
author | Matthias Clasen <mclasen@redhat.com> | 2015-05-02 14:39:35 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2015-05-02 17:39:05 -0400 |
commit | 9ff14a818819d89d4d7b8e3be398e13dfc430cff (patch) | |
tree | a81850d30272141bfd4fb12387354a6183a8b793 /gtk/gtk-builder-tool.c | |
parent | 3b0e71cf9b831478b8392402db1337b926994adf (diff) | |
download | gtk+-9ff14a818819d89d4d7b8e3be398e13dfc430cff.tar.gz |
gtk-builder-tool: Strip placeholders
glade likes to sprinkle <child><placeholder/></child> all
over the place - get rid of it.
Diffstat (limited to 'gtk/gtk-builder-tool.c')
-rw-r--r-- | gtk/gtk-builder-tool.c | 75 |
1 files changed, 61 insertions, 14 deletions
diff --git a/gtk/gtk-builder-tool.c b/gtk/gtk-builder-tool.c index 33a9d12260..2b2009cd26 100644 --- a/gtk/gtk-builder-tool.c +++ b/gtk/gtk-builder-tool.c @@ -32,6 +32,8 @@ typedef struct { gboolean packing_started; gboolean cell_packing; gboolean cell_packing_started; + gint in_child; + gint child_started; gchar **attribute_names; gchar **attribute_values; GString *value; @@ -161,6 +163,20 @@ needs_explicit_setting (MyParserData *data, } static void +maybe_start_child (MyParserData *data) +{ + if (data->in_child > 0) + { + if (data->child_started < data->in_child) + { + g_print ("%*s<child>\n", data->indent, ""); + data->indent += 2; + data->child_started += 1; + } + } +} + +static void maybe_emit_property (MyParserData *data) { gint i; @@ -327,6 +343,15 @@ start_element (GMarkupParseContext *context, return; } + else if (strcmp (element_name, "child") == 0) + { + data->in_child += 1; + + if (attribute_names[0] == NULL) + return; + + data->child_started += 1; + } else if (strcmp (element_name, "attribute") == 0) { /* attribute in label has no content */ @@ -345,9 +370,15 @@ start_element (GMarkupParseContext *context, { data->value = g_string_new (""); } + else if (strcmp (element_name, "placeholder") == 0) + { + return; + } else if (strcmp (element_name, "object") == 0 || strcmp (element_name, "template") == 0) { + maybe_start_child (data); + for (i = 0; attribute_names[i]; i++) { if (strcmp (attribute_names[i], "class") == 0) @@ -400,17 +431,15 @@ end_element (GMarkupParseContext *context, if (!data->cell_packing_started) return; } - else if (data->value != 0) + else if (strcmp (element_name, "child") == 0) + { + data->in_child -= 1; + if (data->child_started == data->in_child) + return; + data->child_started -= 1; + } + else if (strcmp (element_name, "placeholder") == 0) { - gchar *escaped; - - escaped = g_markup_escape_text (data->value->str, -1); - g_print ("%s%s</%s>\n", data->unclosed_starttag ? ">" : "", escaped, element_name); - g_free (escaped); - g_string_free (data->value, TRUE); - data->value = NULL; - data->unclosed_starttag = FALSE; - data->indent -= 2; return; } else if (strcmp (element_name, "object") == 0 || @@ -420,13 +449,29 @@ end_element (GMarkupParseContext *context, data->classes = g_list_delete_link (data->classes, data->classes); } - data->indent -= 2; + if (data->value != NULL) + { + gchar *escaped; - if (data->unclosed_starttag) - g_print ("/>\n"); + if (data->unclosed_starttag) + g_print (">"); + + escaped = g_markup_escape_text (data->value->str, -1); + g_print ("%s</%s>\n", escaped, element_name); + g_free (escaped); + + g_string_free (data->value, TRUE); + data->value = NULL; + } else - g_print ("%*s</%s>\n", data->indent, "", element_name); + { + if (data->unclosed_starttag) + g_print ("/>\n"); + else + g_print ("%*s</%s>\n", data->indent - 2, "", element_name); + } + data->indent -= 2; data->unclosed_starttag = FALSE; } @@ -491,6 +536,8 @@ do_simplify (const gchar *filename) data.packing_started = FALSE; data.cell_packing = FALSE; data.cell_packing_started = FALSE; + data.in_child = 0; + data.child_started = 0; data.unclosed_starttag = FALSE; data.indent = 0; |