[gexiv2/wip/58] wip: Fix ordering of XMP tags
- From: Jens Georg <jensgeorg src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gexiv2/wip/58] wip: Fix ordering of XMP tags
- Date: Sat, 14 Nov 2020 13:58:03 +0000 (UTC)
commit d284d3a090d18f0b64f8308d53e9b456285961ed
Author: Jens Georg <mail jensge org>
Date: Sat Nov 14 14:57:15 2020 +0100
wip: Fix ordering of XMP tags
gexiv2/NaturalCollate.c | 589 +++++++++++++++++++++++++++++++++++++++++
gexiv2/gexiv2-metadata-xmp.cpp | 10 +-
gexiv2/meson.build | 1 +
3 files changed, 597 insertions(+), 3 deletions(-)
---
diff --git a/gexiv2/NaturalCollate.c b/gexiv2/NaturalCollate.c
new file mode 100644
index 0000000..c2e51b0
--- /dev/null
+++ b/gexiv2/NaturalCollate.c
@@ -0,0 +1,589 @@
+/* NaturalCollate.c generated by valac 0.48.11, the Vala compiler
+ * generated from NaturalCollate.vala, do not modify */
+
+#include <glib.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define _g_free0(var) (var = (g_free(var), NULL))
+#define _vala_assert(expr, msg)
\
+ if G_LIKELY (expr)
\
+ ;
\
+ else
\
+ g_assertion_message_expr(G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+#define _vala_return_if_fail(expr, msg)
\
+ if G_LIKELY (expr)
\
+ ;
\
+ else {
\
+ g_return_if_fail_warning(G_LOG_DOMAIN, G_STRFUNC, msg);
\
+ return;
\
+ }
+#define _vala_return_val_if_fail(expr, msg, val)
\
+ if G_LIKELY (expr)
\
+ ;
\
+ else {
\
+ g_return_if_fail_warning(G_LOG_DOMAIN, G_STRFUNC, msg);
\
+ return val;
\
+ }
+#define _vala_warn_if_fail(expr, msg)
\
+ if G_LIKELY (expr)
\
+ ;
\
+ else
\
+ g_warn_message(G_LOG_DOMAIN, __FILE__, __LINE__, G_STRFUNC, msg);
+
+#define NATURAL_COLLATE_SUPERDIGIT ((gunichar) ':')
+#define NATURAL_COLLATE_NUM_SENTINEL ((gunichar) 0x2)
+#define NATURAL_COLLATE_COLLATION_SENTINEL "\x01\x01\x01"
+gint natural_collate_read_number(gchar* s, glong* byte_index);
+gint natural_collate_compare(const gchar* str1, const gchar* str2);
+gchar* natural_collate_collate_key(gchar* str);
+
+static gunichar string_get_char(const gchar* self, glong index) {
+ gunichar result = 0U;
+#line 1262 "glib-2.0.vapi"
+ g_return_val_if_fail(self != NULL, 0U);
+#line 1263 "glib-2.0.vapi"
+ result = g_utf8_get_char(((gchar*) self) + index);
+#line 1263 "glib-2.0.vapi"
+ return result;
+#line 35 "NaturalCollate.c"
+}
+
+static gint string_index_of_nth_char(const gchar* self, glong c) {
+ gchar* _tmp0_;
+ gint result = 0;
+#line 1282 "glib-2.0.vapi"
+ g_return_val_if_fail(self != NULL, 0);
+#line 1283 "glib-2.0.vapi"
+ _tmp0_ = g_utf8_offset_to_pointer(self, c);
+#line 1283 "glib-2.0.vapi"
+ result = (gint)(_tmp0_ - ((gchar*) self));
+#line 1283 "glib-2.0.vapi"
+ return result;
+#line 52 "NaturalCollate.c"
+}
+
+static glong string_strnlen(gchar* str, glong maxlen) {
+ gchar* end = NULL;
+ gchar* _tmp0_;
+ gchar* _tmp1_;
+ glong result = 0L;
+#line 1447 "glib-2.0.vapi"
+ _tmp0_ = memchr(str, 0, (gsize) maxlen);
+#line 1447 "glib-2.0.vapi"
+ end = _tmp0_;
+#line 1448 "glib-2.0.vapi"
+ _tmp1_ = end;
+#line 1448 "glib-2.0.vapi"
+ if (_tmp1_ == NULL) {
+#line 1449 "glib-2.0.vapi"
+ result = maxlen;
+#line 1449 "glib-2.0.vapi"
+ return result;
+#line 75 "NaturalCollate.c"
+ } else {
+ gchar* _tmp2_;
+#line 1451 "glib-2.0.vapi"
+ _tmp2_ = end;
+#line 1451 "glib-2.0.vapi"
+ result = (glong)(_tmp2_ - str);
+#line 1451 "glib-2.0.vapi"
+ return result;
+#line 84 "NaturalCollate.c"
+ }
+}
+
+static gchar* string_substring(const gchar* self, glong offset, glong len) {
+ glong string_length = 0L;
+ gboolean _tmp0_ = FALSE;
+ gchar* _tmp3_;
+ gchar* result = NULL;
+#line 1458 "glib-2.0.vapi"
+ g_return_val_if_fail(self != NULL, NULL);
+#line 1460 "glib-2.0.vapi"
+ if (offset >= ((glong) 0)) {
+#line 1460 "glib-2.0.vapi"
+ _tmp0_ = len >= ((glong) 0);
+#line 103 "NaturalCollate.c"
+ } else {
+#line 1460 "glib-2.0.vapi"
+ _tmp0_ = FALSE;
+#line 107 "NaturalCollate.c"
+ }
+#line 1460 "glib-2.0.vapi"
+ if (_tmp0_) {
+#line 1462 "glib-2.0.vapi"
+ string_length = string_strnlen((gchar*) self, offset + len);
+#line 113 "NaturalCollate.c"
+ } else {
+ gint _tmp1_;
+ gint _tmp2_;
+#line 1464 "glib-2.0.vapi"
+ _tmp1_ = strlen(self);
+#line 1464 "glib-2.0.vapi"
+ _tmp2_ = _tmp1_;
+#line 1464 "glib-2.0.vapi"
+ string_length = (glong) _tmp2_;
+#line 123 "NaturalCollate.c"
+ }
+#line 1467 "glib-2.0.vapi"
+ if (offset < ((glong) 0)) {
+#line 1468 "glib-2.0.vapi"
+ offset = string_length + offset;
+#line 1469 "glib-2.0.vapi"
+ g_return_val_if_fail(offset >= ((glong) 0), NULL);
+#line 131 "NaturalCollate.c"
+ } else {
+#line 1471 "glib-2.0.vapi"
+ g_return_val_if_fail(offset <= string_length, NULL);
+#line 135 "NaturalCollate.c"
+ }
+#line 1473 "glib-2.0.vapi"
+ if (len < ((glong) 0)) {
+#line 1474 "glib-2.0.vapi"
+ len = string_length - offset;
+#line 141 "NaturalCollate.c"
+ }
+#line 1476 "glib-2.0.vapi"
+ g_return_val_if_fail((offset + len) <= string_length, NULL);
+#line 1477 "glib-2.0.vapi"
+ _tmp3_ = g_strndup(((gchar*) self) + offset, (gsize) len);
+#line 1477 "glib-2.0.vapi"
+ result = _tmp3_;
+#line 1477 "glib-2.0.vapi"
+ return result;
+#line 151 "NaturalCollate.c"
+}
+
+gint natural_collate_read_number(gchar* s, glong* byte_index) {
+ gint number = 0;
+ gint result = 0;
+#line 23 "../test/NaturalCollate.vala"
+ g_return_val_if_fail(s != NULL, 0);
+#line 31 "../test/NaturalCollate.vala"
+ number = 0;
+#line 33 "../test/NaturalCollate.vala"
+ while (TRUE) {
+#line 166 "NaturalCollate.c"
+ gboolean _tmp0_ = FALSE;
+ gint _tmp1_;
+ gint _tmp2_;
+ gint second_char = 0;
+ gchar* _tmp3_;
+#line 33 "../test/NaturalCollate.vala"
+ _tmp1_ = strlen(s);
+#line 33 "../test/NaturalCollate.vala"
+ _tmp2_ = _tmp1_;
+#line 33 "../test/NaturalCollate.vala"
+ if (_tmp2_ != 0) {
+#line 33 "../test/NaturalCollate.vala"
+ _tmp0_ = g_unichar_isdigit(string_get_char(s, (glong) 0));
+#line 180 "NaturalCollate.c"
+ } else {
+#line 33 "../test/NaturalCollate.vala"
+ _tmp0_ = FALSE;
+#line 184 "NaturalCollate.c"
+ }
+#line 33 "../test/NaturalCollate.vala"
+ if (!_tmp0_) {
+#line 33 "../test/NaturalCollate.vala"
+ break;
+#line 190 "NaturalCollate.c"
+ }
+#line 34 "../test/NaturalCollate.vala"
+ number = number * 10;
+#line 35 "../test/NaturalCollate.vala"
+ number += g_unichar_digit_value(string_get_char(s, (glong) 0));
+#line 36 "../test/NaturalCollate.vala"
+ second_char = string_index_of_nth_char(s, (glong) 1);
+#line 37 "../test/NaturalCollate.vala"
+ _tmp3_ = string_substring(s, (glong) second_char, (glong) -1);
+#line 37 "../test/NaturalCollate.vala"
+ _g_free0(s);
+#line 37 "../test/NaturalCollate.vala"
+ s = _tmp3_;
+#line 38 "../test/NaturalCollate.vala"
+ *byte_index = (*byte_index) + second_char;
+#line 206 "NaturalCollate.c"
+ }
+#line 40 "../test/NaturalCollate.vala"
+ result = number;
+#line 40 "../test/NaturalCollate.vala"
+ _g_free0(s);
+#line 40 "../test/NaturalCollate.vala"
+ return result;
+#line 214 "NaturalCollate.c"
+}
+
+gint natural_collate_compare(const gchar* str1, const gchar* str2) {
+ GCompareFunc _tmp0_;
+ gchar* _tmp1_;
+ gchar* _tmp2_;
+ gchar* _tmp3_;
+ gchar* _tmp4_;
+ gchar* _tmp5_;
+ gchar* _tmp6_;
+ gint _tmp7_;
+ gint result = 0;
+#line 43 "../test/NaturalCollate.vala"
+ g_return_val_if_fail(str1 != NULL, 0);
+#line 43 "../test/NaturalCollate.vala"
+ g_return_val_if_fail(str2 != NULL, 0);
+#line 44 "../test/NaturalCollate.vala"
+ _tmp0_ = ((GCompareFunc) g_strcmp0);
+#line 44 "../test/NaturalCollate.vala"
+ _tmp1_ = g_strdup(str1);
+#line 44 "../test/NaturalCollate.vala"
+ _tmp2_ = natural_collate_collate_key(_tmp1_);
+#line 44 "../test/NaturalCollate.vala"
+ _tmp3_ = _tmp2_;
+#line 44 "../test/NaturalCollate.vala"
+ _tmp4_ = g_strdup(str2);
+#line 44 "../test/NaturalCollate.vala"
+ _tmp5_ = natural_collate_collate_key(_tmp4_);
+#line 44 "../test/NaturalCollate.vala"
+ _tmp6_ = _tmp5_;
+#line 44 "../test/NaturalCollate.vala"
+ _tmp7_ = _tmp0_(_tmp3_, _tmp6_);
+#line 44 "../test/NaturalCollate.vala"
+ _g_free0(_tmp6_);
+#line 44 "../test/NaturalCollate.vala"
+ _g_free0(_tmp3_);
+#line 44 "../test/NaturalCollate.vala"
+ result = _tmp7_;
+#line 44 "../test/NaturalCollate.vala"
+ return result;
+#line 258 "NaturalCollate.c"
+}
+
+static gboolean string_contains(const gchar* self, const gchar* needle) {
+ gchar* _tmp0_;
+ gboolean result = FALSE;
+#line 1530 "glib-2.0.vapi"
+ g_return_val_if_fail(self != NULL, FALSE);
+#line 1530 "glib-2.0.vapi"
+ g_return_val_if_fail(needle != NULL, FALSE);
+#line 1531 "glib-2.0.vapi"
+ _tmp0_ = strstr((gchar*) self, (gchar*) needle);
+#line 1531 "glib-2.0.vapi"
+ result = _tmp0_ != NULL;
+#line 1531 "glib-2.0.vapi"
+ return result;
+#line 277 "NaturalCollate.c"
+}
+
+static gchar* g_unichar_to_string(gunichar self) {
+ gchar* str = NULL;
+ gchar* _tmp0_;
+ gchar* result = NULL;
+#line 1071 "glib-2.0.vapi"
+ _tmp0_ = g_new0(gchar, 7);
+#line 1071 "glib-2.0.vapi"
+ str = (gchar*) _tmp0_;
+#line 1072 "glib-2.0.vapi"
+ g_unichar_to_utf8(self, str);
+#line 1073 "glib-2.0.vapi"
+ result = str;
+#line 1073 "glib-2.0.vapi"
+ return result;
+#line 296 "NaturalCollate.c"
+}
+
+gchar* natural_collate_collate_key(gchar* str) {
+ gchar* _result_ = NULL;
+ gchar* _tmp0_;
+ gboolean eos = FALSE;
+ gint _tmp1_;
+ gint _tmp2_;
+ const gchar* _tmp46_;
+ gchar* _tmp47_;
+ gchar* _tmp48_;
+ gchar* _tmp49_;
+ gchar* result = NULL;
+#line 47 "../test/NaturalCollate.vala"
+ g_return_val_if_fail(str != NULL, NULL);
+#line 53 "../test/NaturalCollate.vala"
+ _vala_assert(g_utf8_validate(str, (gssize) -1, NULL), "str.validate()");
+#line 54 "../test/NaturalCollate.vala"
+ _tmp0_ = g_strdup("");
+#line 54 "../test/NaturalCollate.vala"
+ _result_ = _tmp0_;
+#line 55 "../test/NaturalCollate.vala"
+ _tmp1_ = strlen(str);
+#line 55 "../test/NaturalCollate.vala"
+ _tmp2_ = _tmp1_;
+#line 55 "../test/NaturalCollate.vala"
+ eos = _tmp2_ == 0;
+#line 57 "../test/NaturalCollate.vala"
+ while (TRUE) {
+#line 328 "NaturalCollate.c"
+ glong position = 0L;
+ const gchar* _tmp7_;
+ gchar* _tmp8_;
+ gchar* _tmp9_;
+ gchar* _tmp10_;
+ gchar* _tmp11_;
+ gchar* _tmp12_;
+ gchar* _tmp13_;
+ gint _tmp14_;
+ gint _tmp15_;
+ gint _tmp44_;
+ gint _tmp45_;
+#line 57 "../test/NaturalCollate.vala"
+ if (!(!eos)) {
+#line 57 "../test/NaturalCollate.vala"
+ break;
+#line 345 "NaturalCollate.c"
+ }
+#line 58 "../test/NaturalCollate.vala"
+ _vala_assert(g_utf8_validate(str, (gssize) -1, NULL), "str.validate()");
+#line 59 "../test/NaturalCollate.vala"
+ position = 0L;
+#line 60 "../test/NaturalCollate.vala"
+ while (TRUE) {
+#line 353 "NaturalCollate.c"
+ gchar* _tmp3_;
+ gchar* _tmp4_;
+ gboolean _tmp5_;
+ glong _tmp6_;
+#line 60 "../test/NaturalCollate.vala"
+ _tmp3_ = g_unichar_to_string(string_get_char(str, position));
+#line 60 "../test/NaturalCollate.vala"
+ _tmp4_ = _tmp3_;
+#line 60 "../test/NaturalCollate.vala"
+ _tmp5_ = !(!string_contains("0123456789", _tmp4_));
+#line 60 "../test/NaturalCollate.vala"
+ _g_free0(_tmp4_);
+#line 60 "../test/NaturalCollate.vala"
+ if (_tmp5_) {
+#line 60 "../test/NaturalCollate.vala"
+ break;
+#line 370 "NaturalCollate.c"
+ }
+#line 62 "../test/NaturalCollate.vala"
+ _tmp6_ = position;
+#line 62 "../test/NaturalCollate.vala"
+ position = _tmp6_ + 1;
+#line 376 "NaturalCollate.c"
+ }
+#line 66 "../test/NaturalCollate.vala"
+ _tmp7_ = _result_;
+#line 66 "../test/NaturalCollate.vala"
+ _tmp8_ = string_substring(str, (glong) 0, position);
+#line 66 "../test/NaturalCollate.vala"
+ _tmp9_ = _tmp8_;
+#line 66 "../test/NaturalCollate.vala"
+ _tmp10_ = g_utf8_collate_key(_tmp9_, (gssize) -1);
+#line 66 "../test/NaturalCollate.vala"
+ _tmp11_ = _tmp10_;
+#line 66 "../test/NaturalCollate.vala"
+ _tmp12_ = g_strconcat(_tmp7_, _tmp11_, NULL);
+#line 66 "../test/NaturalCollate.vala"
+ _g_free0(_result_);
+#line 66 "../test/NaturalCollate.vala"
+ _result_ = _tmp12_;
+#line 66 "../test/NaturalCollate.vala"
+ _g_free0(_tmp11_);
+#line 66 "../test/NaturalCollate.vala"
+ _g_free0(_tmp9_);
+#line 69 "../test/NaturalCollate.vala"
+ _tmp13_ = string_substring(str, position, (glong) -1);
+#line 69 "../test/NaturalCollate.vala"
+ _g_free0(str);
+#line 69 "../test/NaturalCollate.vala"
+ str = _tmp13_;
+#line 71 "../test/NaturalCollate.vala"
+ _tmp14_ = strlen(str);
+#line 71 "../test/NaturalCollate.vala"
+ _tmp15_ = _tmp14_;
+#line 71 "../test/NaturalCollate.vala"
+ eos = _tmp15_ == 0;
+#line 72 "../test/NaturalCollate.vala"
+ position = 0L;
+#line 74 "../test/NaturalCollate.vala"
+ if (!eos) {
+#line 414 "NaturalCollate.c"
+ gint number = 0;
+ gchar* _tmp16_;
+ gint _tmp17_;
+ gchar* _tmp18_;
+ gint number_of_superdigits = 0;
+ gchar* _tmp19_;
+ gchar* _tmp20_;
+ gint _tmp21_;
+ gint _tmp22_;
+ gint _tmp23_;
+ gchar* to_append = NULL;
+ gchar* _tmp24_;
+ const gchar* _tmp31_;
+ gchar* _tmp32_;
+ gchar* _tmp33_;
+ gchar* _tmp34_;
+ const gchar* _tmp35_;
+ gchar* _tmp36_;
+ gchar* _tmp37_;
+ gchar* _tmp38_;
+ gchar* _tmp39_;
+ gchar* _tmp40_;
+ gchar* _tmp41_;
+ const gchar* _tmp42_;
+ gchar* _tmp43_;
+#line 76 "../test/NaturalCollate.vala"
+ _tmp16_ = g_strdup(str);
+#line 76 "../test/NaturalCollate.vala"
+ _tmp17_ = natural_collate_read_number(_tmp16_, &position);
+#line 76 "../test/NaturalCollate.vala"
+ number = _tmp17_;
+#line 77 "../test/NaturalCollate.vala"
+ _tmp18_ = string_substring(str, position, (glong) -1);
+#line 77 "../test/NaturalCollate.vala"
+ _g_free0(str);
+#line 77 "../test/NaturalCollate.vala"
+ str = _tmp18_;
+#line 78 "../test/NaturalCollate.vala"
+ _tmp19_ = g_strdup_printf("%i", number);
+#line 78 "../test/NaturalCollate.vala"
+ _tmp20_ = _tmp19_;
+#line 78 "../test/NaturalCollate.vala"
+ _tmp21_ = strlen(_tmp20_);
+#line 78 "../test/NaturalCollate.vala"
+ _tmp22_ = _tmp21_;
+#line 78 "../test/NaturalCollate.vala"
+ _tmp23_ = _tmp22_;
+#line 78 "../test/NaturalCollate.vala"
+ _g_free0(_tmp20_);
+#line 78 "../test/NaturalCollate.vala"
+ number_of_superdigits = _tmp23_;
+#line 79 "../test/NaturalCollate.vala"
+ _tmp24_ = g_strdup("");
+#line 79 "../test/NaturalCollate.vala"
+ to_append = _tmp24_;
+#line 470 "NaturalCollate.c"
+ {
+ gint i = 0;
+#line 80 "../test/NaturalCollate.vala"
+ i = 1;
+#line 475 "NaturalCollate.c"
+ {
+ gboolean _tmp25_ = FALSE;
+#line 80 "../test/NaturalCollate.vala"
+ _tmp25_ = TRUE;
+#line 80 "../test/NaturalCollate.vala"
+ while (TRUE) {
+#line 482 "NaturalCollate.c"
+ const gchar* _tmp27_;
+ gchar* _tmp28_;
+ gchar* _tmp29_;
+ gchar* _tmp30_;
+#line 80 "../test/NaturalCollate.vala"
+ if (!_tmp25_) {
+#line 489 "NaturalCollate.c"
+ gint _tmp26_;
+#line 80 "../test/NaturalCollate.vala"
+ _tmp26_ = i;
+#line 80 "../test/NaturalCollate.vala"
+ i = _tmp26_ + 1;
+#line 495 "NaturalCollate.c"
+ }
+#line 80 "../test/NaturalCollate.vala"
+ _tmp25_ = FALSE;
+#line 80 "../test/NaturalCollate.vala"
+ if (!(i < number_of_superdigits)) {
+#line 80 "../test/NaturalCollate.vala"
+ break;
+#line 503 "NaturalCollate.c"
+ }
+#line 82 "../test/NaturalCollate.vala"
+ _tmp27_ = to_append;
+#line 82 "../test/NaturalCollate.vala"
+ _tmp28_ = g_unichar_to_string(NATURAL_COLLATE_SUPERDIGIT);
+#line 82 "../test/NaturalCollate.vala"
+ _tmp29_ = _tmp28_;
+#line 82 "../test/NaturalCollate.vala"
+ _tmp30_ = g_strconcat(_tmp27_, _tmp29_, NULL);
+#line 82 "../test/NaturalCollate.vala"
+ _g_free0(to_append);
+#line 82 "../test/NaturalCollate.vala"
+ to_append = _tmp30_;
+#line 82 "../test/NaturalCollate.vala"
+ _g_free0(_tmp29_);
+#line 519 "NaturalCollate.c"
+ }
+ }
+ }
+#line 84 "../test/NaturalCollate.vala"
+ _tmp31_ = to_append;
+#line 84 "../test/NaturalCollate.vala"
+ _tmp32_ = g_strdup_printf("%i", number);
+#line 84 "../test/NaturalCollate.vala"
+ _tmp33_ = _tmp32_;
+#line 84 "../test/NaturalCollate.vala"
+ _tmp34_ = g_strconcat(_tmp31_, _tmp33_, NULL);
+#line 84 "../test/NaturalCollate.vala"
+ _g_free0(to_append);
+#line 84 "../test/NaturalCollate.vala"
+ to_append = _tmp34_;
+#line 84 "../test/NaturalCollate.vala"
+ _g_free0(_tmp33_);
+#line 85 "../test/NaturalCollate.vala"
+ _tmp35_ = _result_;
+#line 85 "../test/NaturalCollate.vala"
+ _tmp36_ = g_strconcat(_tmp35_, NATURAL_COLLATE_COLLATION_SENTINEL, NULL);
+#line 85 "../test/NaturalCollate.vala"
+ _tmp37_ = _tmp36_;
+#line 85 "../test/NaturalCollate.vala"
+ _tmp38_ = g_unichar_to_string(NATURAL_COLLATE_NUM_SENTINEL);
+#line 85 "../test/NaturalCollate.vala"
+ _tmp39_ = _tmp38_;
+#line 85 "../test/NaturalCollate.vala"
+ _tmp40_ = g_strconcat(_tmp37_, _tmp39_, NULL);
+#line 85 "../test/NaturalCollate.vala"
+ _tmp41_ = _tmp40_;
+#line 85 "../test/NaturalCollate.vala"
+ _tmp42_ = to_append;
+#line 85 "../test/NaturalCollate.vala"
+ _tmp43_ = g_strconcat(_tmp41_, _tmp42_, NULL);
+#line 85 "../test/NaturalCollate.vala"
+ _g_free0(_result_);
+#line 85 "../test/NaturalCollate.vala"
+ _result_ = _tmp43_;
+#line 85 "../test/NaturalCollate.vala"
+ _g_free0(_tmp41_);
+#line 85 "../test/NaturalCollate.vala"
+ _g_free0(_tmp39_);
+#line 85 "../test/NaturalCollate.vala"
+ _g_free0(_tmp37_);
+#line 74 "../test/NaturalCollate.vala"
+ _g_free0(to_append);
+#line 567 "NaturalCollate.c"
+ }
+#line 90 "../test/NaturalCollate.vala"
+ _tmp44_ = strlen(str);
+#line 90 "../test/NaturalCollate.vala"
+ _tmp45_ = _tmp44_;
+#line 90 "../test/NaturalCollate.vala"
+ eos = _tmp45_ == 0;
+#line 575 "NaturalCollate.c"
+ }
+#line 93 "../test/NaturalCollate.vala"
+ _tmp46_ = _result_;
+#line 93 "../test/NaturalCollate.vala"
+ _tmp47_ = g_unichar_to_string(NATURAL_COLLATE_NUM_SENTINEL);
+#line 93 "../test/NaturalCollate.vala"
+ _tmp48_ = _tmp47_;
+#line 93 "../test/NaturalCollate.vala"
+ _tmp49_ = g_strconcat(_tmp46_, _tmp48_, NULL);
+#line 93 "../test/NaturalCollate.vala"
+ _g_free0(_result_);
+#line 93 "../test/NaturalCollate.vala"
+ _result_ = _tmp49_;
+#line 93 "../test/NaturalCollate.vala"
+ _g_free0(_tmp48_);
+#line 96 "../test/NaturalCollate.vala"
+ result = _result_;
+#line 96 "../test/NaturalCollate.vala"
+ _g_free0(str);
+#line 96 "../test/NaturalCollate.vala"
+ return result;
+#line 597 "NaturalCollate.c"
+}
diff --git a/gexiv2/gexiv2-metadata-xmp.cpp b/gexiv2/gexiv2-metadata-xmp.cpp
index 784ad86..55e4a43 100644
--- a/gexiv2/gexiv2-metadata-xmp.cpp
+++ b/gexiv2/gexiv2-metadata-xmp.cpp
@@ -96,14 +96,15 @@ gboolean gexiv2_metadata_clear_xmp_tag(GExiv2Metadata *self, const gchar* tag) {
return erased;
}
+gint natural_collate_compare(const gchar* str1, const gchar* str2);
+
gchar** gexiv2_metadata_get_xmp_tags (GExiv2Metadata *self) {
g_return_val_if_fail(GEXIV2_IS_METADATA (self), NULL);
g_return_val_if_fail(self->priv->image.get() != NULL, NULL);
// get a copy of the original XmpData and sort it by key, preserving the original
Exiv2::XmpData xmp_data = Exiv2::XmpData(self->priv->image->xmpData());
- xmp_data.sortByKey ();
-
+
GSList *list = NULL;
GSList *list_iter;
gchar** data;
@@ -115,7 +116,10 @@ gchar** gexiv2_metadata_get_xmp_tags (GExiv2Metadata *self) {
count++;
}
}
-
+
+ list = g_slist_sort(list, reinterpret_cast<GCompareFunc>(natural_collate_compare));
+ list = g_slist_reverse(list);
+
data = g_new (gchar*, count + 1);
data[count --] = NULL;
for (list_iter = list; list_iter != NULL; list_iter = list_iter->next)
diff --git a/gexiv2/meson.build b/gexiv2/meson.build
index 12abf92..c737431 100644
--- a/gexiv2/meson.build
+++ b/gexiv2/meson.build
@@ -54,6 +54,7 @@ gexiv2 = library('gexiv2',
'gexiv2-log-private.h',
'gexiv2-metadata-private.h',
'gexiv2-stream-io.h',
+ 'NaturalCollate.c',
'gexiv2-preview-properties-private.h',
'gexiv2-preview-image-private.h'] +
gexiv2_headers +
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]