diff options
-rw-r--r-- | libappstream-glib/as-node.c | 27 | ||||
-rw-r--r-- | libappstream-glib/as-node.h | 2 | ||||
-rw-r--r-- | libappstream-glib/as-self-test.c | 18 |
3 files changed, 36 insertions, 11 deletions
diff --git a/libappstream-glib/as-node.c b/libappstream-glib/as-node.c index f5320ea..b1a4f41 100644 --- a/libappstream-glib/as-node.c +++ b/libappstream-glib/as-node.c @@ -303,12 +303,17 @@ as_tag_data_get_name (AsNodeData *data) * as_node_data_set_name: **/ static void -as_node_data_set_name (AsNodeData *data, const gchar *name) +as_node_data_set_name (AsNodeData *data, const gchar *name, AsNodeInsertFlags flags) { - /* only store the name if the tag is not recognised */ - data->tag = as_tag_from_string (name); - if (data->tag == AS_TAG_UNKNOWN) - data->name = g_strdup (name); + if ((flags & AS_NODE_INSERT_FLAG_MARK_TRANSLATABLE) == 0) { + /* only store the name if the tag is not recognised */ + data->tag = as_tag_from_string (name); + if (data->tag == AS_TAG_UNKNOWN) + data->name = g_strdup (name); + } else { + /* always store the translated tag */ + data->name = g_strdup_printf ("_%s", name); + } } /** @@ -494,7 +499,7 @@ as_node_start_element_cb (GMarkupParseContext *context, /* create the new node data */ data = g_slice_new0 (AsNodeData); - as_node_data_set_name (data, element_name); + as_node_data_set_name (data, element_name, AS_NODE_INSERT_FLAG_NONE); for (i = 0; attribute_names[i] != NULL; i++) { as_node_attr_insert (data, attribute_names[i], @@ -882,7 +887,7 @@ as_node_set_name (GNode *node, const gchar *name) /* overwrite */ g_free (data->name); data->name = NULL; - as_node_data_set_name (data, name); + as_node_data_set_name (data, name, AS_NODE_INSERT_FLAG_NONE); } /** @@ -1230,7 +1235,7 @@ as_node_insert (GNode *parent, va_list args; data = g_slice_new0 (AsNodeData); - as_node_data_set_name (data, name); + as_node_data_set_name (data, name, insert_flags); if (cdata != NULL) data->cdata = g_strdup (cdata); data->cdata_escaped = insert_flags & AS_NODE_INSERT_FLAG_PRE_ESCAPED; @@ -1289,7 +1294,7 @@ as_node_insert_localized (GNode *parent, if (value_c == NULL) return; data = g_slice_new0 (AsNodeData); - as_node_data_set_name (data, name); + as_node_data_set_name (data, name, insert_flags); if (insert_flags & AS_NODE_INSERT_FLAG_NO_MARKUP) { data->cdata = as_markup_convert_simple (value_c, -1, NULL); data->cdata_escaped = FALSE; @@ -1316,7 +1321,7 @@ as_node_insert_localized (GNode *parent, continue; data = g_slice_new0 (AsNodeData); as_node_attr_insert (data, "xml:lang", key); - as_node_data_set_name (data, name); + as_node_data_set_name (data, name, insert_flags); if (insert_flags & AS_NODE_INSERT_FLAG_NO_MARKUP) { data->cdata = as_markup_convert_simple (value, -1, NULL); data->cdata_escaped = FALSE; @@ -1360,7 +1365,7 @@ as_node_insert_hash (GNode *parent, key = l->data; value = g_hash_table_lookup (hash, key); data = g_slice_new0 (AsNodeData); - as_node_data_set_name (data, name); + as_node_data_set_name (data, name, insert_flags); data->cdata = g_strdup (!swapped ? value : key); data->cdata_escaped = insert_flags & AS_NODE_INSERT_FLAG_PRE_ESCAPED; if (!swapped) { diff --git a/libappstream-glib/as-node.h b/libappstream-glib/as-node.h index 092803e..c4ced19 100644 --- a/libappstream-glib/as-node.h +++ b/libappstream-glib/as-node.h @@ -77,6 +77,7 @@ typedef enum { * @AS_NODE_INSERT_FLAG_SWAPPED: The name and key should be swapped * @AS_NODE_INSERT_FLAG_NO_MARKUP: Preformat the 'description' markup * @AS_NODE_INSERT_FLAG_DEDUPE_LANG: No xml:lang keys where text matches 'C' + * @AS_NODE_INSERT_FLAG_MARK_TRANSLATABLE: Mark the tag name as translatable * * The flags to use when inserting a node. **/ @@ -86,6 +87,7 @@ typedef enum { AS_NODE_INSERT_FLAG_SWAPPED = 2, /* Since: 0.1.0 */ AS_NODE_INSERT_FLAG_NO_MARKUP = 4, /* Since: 0.1.1 */ AS_NODE_INSERT_FLAG_DEDUPE_LANG = 8, /* Since: 0.1.4 */ + AS_NODE_INSERT_FLAG_MARK_TRANSLATABLE = 16, /* Since: 0.2.1 */ /*< private >*/ AS_NODE_INSERT_FLAG_LAST } AsNodeInsertFlags; diff --git a/libappstream-glib/as-self-test.c b/libappstream-glib/as-self-test.c index 15699c1..f8f949a 100644 --- a/libappstream-glib/as-self-test.c +++ b/libappstream-glib/as-self-test.c @@ -1096,6 +1096,23 @@ as_test_node_localized_wrap_func (void) } static void +as_test_node_intltool_func (void) +{ + GNode *n; + _cleanup_node_unref_ GNode *root; + _cleanup_string_free_ GString *str; + + root = as_node_new (); + n = as_node_insert (root, "description", NULL, AS_NODE_INSERT_FLAG_NONE, NULL); + as_node_insert (n, "name", "Hello", + AS_NODE_INSERT_FLAG_MARK_TRANSLATABLE, NULL); + + /* verify that the tags get prefixed with '_' */ + str = as_node_to_xml (root, AS_NODE_TO_XML_FLAG_NONE); + g_assert_cmpstr (str->str, ==, "<description><_name>Hello</_name></description>"); +} + +static void as_test_node_localized_wrap2_func (void) { GError *error = NULL; @@ -1697,6 +1714,7 @@ main (int argc, char **argv) g_test_add_func ("/AppStream/node{localized}", as_test_node_localized_func); g_test_add_func ("/AppStream/node{localized-wrap}", as_test_node_localized_wrap_func); g_test_add_func ("/AppStream/node{localized-wrap2}", as_test_node_localized_wrap2_func); + g_test_add_func ("/AppStream/node{intltool}", as_test_node_intltool_func); g_test_add_func ("/AppStream/utils", as_test_utils_func); g_test_add_func ("/AppStream/utils{spdx-token}", as_test_utils_spdx_token_func); g_test_add_func ("/AppStream/store", as_test_store_func); |