summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Hughes <richard@hughsie.com>2018-05-22 09:14:38 +0100
committerRichard Hughes <richard@hughsie.com>2018-05-22 09:47:49 +0100
commitc730867c1c6bd9114ba7b6b247a0a582476b7ec7 (patch)
treefc9bcbe24cc4f6b19f623413603e0c34b990f98f
parent711b1e104a5dbfc349c06584a4f721c75786d5c6 (diff)
downloadappstream-glib-c730867c1c6bd9114ba7b6b247a0a582476b7ec7.tar.gz
trivial: Load all XML tags using the gperf lookup table
-rw-r--r--libappstream-glib/as-node.c45
-rw-r--r--libappstream-glib/as-tag.c9
-rw-r--r--libappstream-glib/as-tag.gperf9
-rw-r--r--libappstream-glib/as-tag.h9
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;