diff options
author | Richard Hughes <richard@hughsie.com> | 2018-05-22 09:14:38 +0100 |
---|---|---|
committer | Richard Hughes <richard@hughsie.com> | 2018-05-22 09:47:49 +0100 |
commit | c730867c1c6bd9114ba7b6b247a0a582476b7ec7 (patch) | |
tree | fc9bcbe24cc4f6b19f623413603e0c34b990f98f | |
parent | 711b1e104a5dbfc349c06584a4f721c75786d5c6 (diff) | |
download | appstream-glib-c730867c1c6bd9114ba7b6b247a0a582476b7ec7.tar.gz |
trivial: Load all XML tags using the gperf lookup table
-rw-r--r-- | libappstream-glib/as-node.c | 45 | ||||
-rw-r--r-- | libappstream-glib/as-tag.c | 9 | ||||
-rw-r--r-- | libappstream-glib/as-tag.gperf | 9 | ||||
-rw-r--r-- | libappstream-glib/as-tag.h | 9 |
4 files changed, 48 insertions, 24 deletions
diff --git a/libappstream-glib/as-node.c b/libappstream-glib/as-node.c index b98cd45..7036136 100644 --- a/libappstream-glib/as-node.c +++ b/libappstream-glib/as-node.c @@ -1793,9 +1793,7 @@ as_node_string_free (GString *string) } static void -as_node_denorm_add_to_langs (GHashTable *hash, - const gchar *data, - gboolean is_start) +as_node_denorm_add_to_langs (GHashTable *hash, AsTag tag, gboolean is_start) { GList *l; GString *str; @@ -1807,9 +1805,9 @@ as_node_denorm_add_to_langs (GHashTable *hash, xml_lang = l->data; str = g_hash_table_lookup (hash, xml_lang); if (is_start) - g_string_append_printf (str, "<%s>", data); + g_string_append_printf (str, "<%s>", as_tag_to_string (tag)); else - g_string_append_printf (str, "</%s>", data); + g_string_append_printf (str, "</%s>", as_tag_to_string (tag)); } } @@ -1865,16 +1863,15 @@ as_node_get_localized_unwrap_type_li (const AsNode *node, /* append to existing string, adding the locale if it's not * already present */ - if (g_strcmp0 (data->name, "p") == 0) { + if (data->tag == AS_TAG_P) { str = as_node_denorm_get_str_for_lang (hash, data, TRUE); as_node_cdata_to_escaped (data); g_string_append_printf (str, "<p>%s</p>", data->cdata); /* loop on the children */ - } else if (g_strcmp0 (data->name, "ul") == 0 || - g_strcmp0 (data->name, "ol") == 0) { - as_node_denorm_add_to_langs (hash, data->name, TRUE); + } else if (data->tag == AS_TAG_UL || data->tag == AS_TAG_OL) { + as_node_denorm_add_to_langs (hash, data->tag, TRUE); for (tmp_c = tmp->children; tmp_c != NULL; tmp_c = tmp_c->next) { data_c = tmp_c->data; @@ -1888,9 +1885,9 @@ as_node_get_localized_unwrap_type_li (const AsNode *node, data_c, TRUE); g_string_append_printf (str, "<%s>", - data->name); + as_tag_data_get_name (data)); } - if (g_strcmp0 (data_c->name, "li") == 0) { + if (data_c->tag == AS_TAG_LI) { as_node_cdata_to_escaped (data_c); g_string_append_printf (str, "<li>%s</li>", @@ -1901,18 +1898,19 @@ as_node_get_localized_unwrap_type_li (const AsNode *node, AS_NODE_ERROR, AS_NODE_ERROR_INVALID_MARKUP, "Tag %s in %s invalid", - data_c->name, data->name); + data_c->name, + as_tag_data_get_name (data)); return FALSE; } } - as_node_denorm_add_to_langs (hash, data->name, FALSE); + as_node_denorm_add_to_langs (hash, data->tag, FALSE); } else { /* only <p>, <ul> and <ol> is valid here */ g_set_error (error, AS_NODE_ERROR, AS_NODE_ERROR_INVALID_MARKUP, "Unknown tag '%s'", - data->name); + as_tag_data_get_name (data)); return FALSE; } } @@ -1953,20 +1951,19 @@ as_node_get_localized_unwrap_type_ul (const AsNode *node, /* append to existing string, adding the locale if it's not * already present */ - if (g_strcmp0 (data->name, "p") == 0) { + if (data->tag == AS_TAG_P) { str = as_node_denorm_get_str_for_lang (hash, data, TRUE); as_node_cdata_to_escaped (data); g_string_append_printf (str, "<p>%s</p>", data->cdata); /* loop on the children */ - } else if (g_strcmp0 (data->name, "ul") == 0 || - g_strcmp0 (data->name, "ol") == 0) { + } else if (data->tag == AS_TAG_UL || data->tag == AS_TAG_OL) { str = as_node_denorm_get_str_for_lang (hash, data, TRUE); - g_string_append_printf (str, "<%s>", data->name); + g_string_append_printf (str, "<%s>", as_tag_data_get_name (data)); for (tmp_c = tmp->children; tmp_c != NULL; tmp_c = tmp_c->next) { data_c = tmp_c->data; - if (g_strcmp0 (data_c->name, "li") == 0) { + if (data_c->tag == AS_TAG_LI) { as_node_cdata_to_escaped (data_c); g_string_append_printf (str, "<li>%s</li>", @@ -1977,18 +1974,19 @@ as_node_get_localized_unwrap_type_ul (const AsNode *node, AS_NODE_ERROR, AS_NODE_ERROR_INVALID_MARKUP, "Tag %s in %s invalid", - data_c->name, data->name); + data_c->name, + as_tag_data_get_name (data)); return FALSE; } } - g_string_append_printf (str, "</%s>", data->name); + g_string_append_printf (str, "</%s>", as_tag_data_get_name (data)); } else { /* only <p>, <ul> and <ol> is valid here */ g_set_error (error, AS_NODE_ERROR, AS_NODE_ERROR_INVALID_MARKUP, "Unknown tag '%s'", - data->name); + as_tag_data_get_name (data)); return FALSE; } } @@ -2105,8 +2103,7 @@ as_node_get_localized_unwrap (const AsNode *node, GError **error) } for (tmp = node->children; tmp != NULL; tmp = tmp->next) { data = tmp->data; - if (g_strcmp0 (data->name, "ul") == 0 || - g_strcmp0 (data->name, "ol") == 0) { + if (data->tag == AS_TAG_UL || data->tag == AS_TAG_OL) { if (as_node_attr_lookup (data, "xml:lang") != NULL) { is_li_translated = FALSE; break; diff --git a/libappstream-glib/as-tag.c b/libappstream-glib/as-tag.c index adf3a54..27ffb47 100644 --- a/libappstream-glib/as-tag.c +++ b/libappstream-glib/as-tag.c @@ -192,6 +192,15 @@ as_tag_to_string (AsTag tag) "launchable", "agreement", "agreement_section", + "p", + "li", + "ul", + "ol", + "binary", + "font", + "dbus", + "modalias", + "library", NULL }; if (tag > AS_TAG_LAST) tag = AS_TAG_LAST; diff --git a/libappstream-glib/as-tag.gperf b/libappstream-glib/as-tag.gperf index 8f70954..cffcc42 100644 --- a/libappstream-glib/as-tag.gperf +++ b/libappstream-glib/as-tag.gperf @@ -69,3 +69,12 @@ custom, AS_TAG_CUSTOM launchable, AS_TAG_LAUNCHABLE agreement, AS_TAG_AGREEMENT agreement_section, AS_TAG_AGREEMENT_SECTION +p, AS_TAG_P +li, AS_TAG_LI +ul, AS_TAG_UL +ol, AS_TAG_OL +binary, AS_TAG_BINARY +font, AS_TAG_FONT +dbus, AS_TAG_DBUS +modalias, AS_TAG_MODALIAS +library, AS_TAG_LIBRARY diff --git a/libappstream-glib/as-tag.h b/libappstream-glib/as-tag.h index 61af6b8..f7de3b8 100644 --- a/libappstream-glib/as-tag.h +++ b/libappstream-glib/as-tag.h @@ -160,6 +160,15 @@ typedef enum { AS_TAG_LAUNCHABLE, /* Since: 0.6.13 */ AS_TAG_AGREEMENT, /* Since: 0.7.8 */ AS_TAG_AGREEMENT_SECTION, /* Since: 0.7.8 */ + AS_TAG_P, /* Since: 0.7.9 */ + AS_TAG_LI, /* Since: 0.7.9 */ + AS_TAG_UL, /* Since: 0.7.9 */ + AS_TAG_OL, /* Since: 0.7.9 */ + AS_TAG_BINARY, /* Since: 0.7.9 */ + AS_TAG_FONT, /* Since: 0.7.9 */ + AS_TAG_DBUS, /* Since: 0.7.9 */ + AS_TAG_MODALIAS, /* Since: 0.7.9 */ + AS_TAG_LIBRARY, /* Since: 0.7.9 */ /*< private >*/ AS_TAG_LAST } AsTag; |