diff options
author | Matthias Clasen <mclasen@redhat.com> | 2020-04-14 19:13:17 -0400 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2020-10-03 19:46:46 -0400 |
commit | 44448016e87349458e358fd2c7762ed280c01647 (patch) | |
tree | aae1ea774f15ac4aa83361313f7e6f11e6931ca6 | |
parent | a4284569c0c40b5ffcac7a1cefccf0d94f78c18a (diff) | |
download | gtk+-44448016e87349458e358fd2c7762ed280c01647.tar.gz |
emoji: Some work on the conversion tool
Document the variant format, and write out json
format if asked to.
-rw-r--r-- | gtk/emoji/convert-emoji.c | 36 |
1 files changed, 31 insertions, 5 deletions
diff --git a/gtk/emoji/convert-emoji.c b/gtk/emoji/convert-emoji.c index 92bf66b385..94060d2194 100644 --- a/gtk/emoji/convert-emoji.c +++ b/gtk/emoji/convert-emoji.c @@ -18,6 +18,15 @@ /* Build with gcc -o convert-emoji convert-emoji.c `pkg-config --cflags --libs json-glib-1.0` */ +/* The format of the generated data is: a(auss). + * Each member of the array has the following fields: + * au - sequence of unicode codepoints. If the + * sequence contains a 0, it marks the point + * where skin tone modifiers should be inserted + * s - name, e.g. "man worker" + * s - shortname, for completion. This includes + * colons to mark the ends, e.g. ":guardsman:" + */ #include <json-glib/json-glib.h> #include <string.h> @@ -70,7 +79,6 @@ main (int argc, char *argv[]) GVariantBuilder builder; GVariant *v; GString *s; - GBytes *bytes; GHashTable *names; GString *name_key; @@ -175,11 +183,29 @@ main (int argc, char *argv[]) } v = g_variant_builder_end (&builder); - bytes = g_variant_get_data_as_bytes (v); - if (!g_file_set_contents (argv[3], g_bytes_get_data (bytes, NULL), g_bytes_get_size (bytes), &error)) + if (g_str_has_suffix (argv[3], ".json")) { - g_error ("%s", error->message); - return 1; + JsonNode *node; + char *out; + + node = json_gvariant_serialize (v); + out = json_to_string (node, TRUE); + if (!g_file_set_contents (argv[3], out, -1, &error)) + { + g_error ("%s", error->message); + return 1; + } + } + else + { + GBytes *bytes; + + bytes = g_variant_get_data_as_bytes (v); + if (!g_file_set_contents (argv[3], g_bytes_get_data (bytes, NULL), g_bytes_get_size (bytes), &error)) + { + g_error ("%s", error->message); + return 1; + } } return 0; |