diff options
author | Matthias Clasen <mclasen@redhat.com> | 2019-12-13 14:03:20 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2020-05-30 19:26:46 -0400 |
commit | 21eac434c37c057f416aad4b1ec45152a281cd89 (patch) | |
tree | 2bf4d365415fd96f527a5dcb643a8917b41f6c57 /gtk/tools | |
parent | 2f21003064cfee165d03f4e2ab0e97cc0e9f1108 (diff) | |
download | gtk+-21eac434c37c057f416aad4b1ec45152a281cd89.tar.gz |
builder-tool: Pass through CDATA where it makes sense
This avoids a ton of escaping for
GtkBuilderListItemFactory::bytes.
Diffstat (limited to 'gtk/tools')
-rw-r--r-- | gtk/tools/gtk-builder-tool-simplify.c | 62 |
1 files changed, 42 insertions, 20 deletions
diff --git a/gtk/tools/gtk-builder-tool-simplify.c b/gtk/tools/gtk-builder-tool-simplify.c index 228912ab5f..375702e72b 100644 --- a/gtk/tools/gtk-builder-tool-simplify.c +++ b/gtk/tools/gtk-builder-tool-simplify.c @@ -265,6 +265,36 @@ keep_for_rewrite (const char *class_name, } static gboolean +has_attribute (Element *elt, + const char *name, + const char *value) +{ + int i; + + for (i = 0; elt->attribute_names[i]; i++) + { + if (strcmp (elt->attribute_names[i], name) == 0 && + (value == NULL || strcmp (elt->attribute_values[i], value) == 0)) + return TRUE; + } + + return FALSE; +} + +static gboolean +is_cdata_property (Element *element) +{ + if (g_str_equal (element->element_name, "property") && + has_attribute (element, "name", "bytes") && + element->parent != NULL && + g_str_equal (element->parent->element_name, "object") && + has_attribute (element->parent, "class", "GtkBuilderListItemFactory")) + return TRUE; + + return FALSE; +} + +static gboolean is_pcdata_element (Element *element) { /* elements that can contain text */ @@ -486,23 +516,6 @@ value_is_default (Element *element, return ret; } -static gboolean -has_attribute (Element *elt, - const char *name, - const char *value) -{ - int i; - - for (i = 0; elt->attribute_names[i]; i++) - { - if (strcmp (elt->attribute_names[i], name) == 0 && - (value == NULL || strcmp (elt->attribute_values[i], value) == 0)) - return TRUE; - } - - return FALSE; -} - static const char * get_attribute_value (Element *element, const char *name) @@ -1794,9 +1807,18 @@ dump_element (Element *element, } else { - char *escaped = g_markup_escape_text (element->data, -1); - g_fprintf (output, "%s", escaped); - g_free (escaped); + if (is_cdata_property (element)) + { + g_fprintf (output, "<![CDATA["); + g_fprintf (output, "%s", element->data); + g_fprintf (output, "]]>"); + } + else + { + char *escaped = g_markup_escape_text (element->data, -1); + g_fprintf (output, "%s", escaped); + g_free (escaped); + } } g_fprintf (output, "</%s>\n", element->element_name); } |