diff --git a/gtk/compose/compose-parse.c b/gtk/compose/compose-parse.c index 7a3d511132..a1ec09d00d 100644 --- a/gtk/compose/compose-parse.c +++ b/gtk/compose/compose-parse.c @@ -7,7 +7,7 @@ * character data, and definitions for the builtin compose table of GTK. * Run it like this: * - * compose-parse Compose sequences chars gtkcomposedata.h + * compose-parse Compose sequences-little-endian sequences-big-endian chars gtkcomposedata.h * * The GTK build expects the output files to be in the source tree, in * the gtk/compose directory. @@ -15,15 +15,19 @@ int main (int argc, char *argv[]) { + const guint16 *sequences_le; + const guint16 *sequences_be; + guint16 *other_sequences; GtkComposeTable *table; GError *error = NULL; GString *str; + gsize i; setlocale (LC_ALL, ""); if (argc < 5) { - g_print ("Usage: compose-parse INPUT OUTPUT1 OUTPUT2 OUTPUT3\n"); + g_print ("Usage: compose-parse INPUT SEQUENCES-LE SEQUENCES-BE CHARS HEADER\n"); exit (1); } @@ -31,11 +35,26 @@ main (int argc, char *argv[]) if (!table) g_error ("Failed to parse %s", argv[1]); +#if G_BYTE_ORDER == G_BIG_ENDIAN + sequences_le = other_sequences = g_new0 (guint16, table->data_size); + sequences_be = (const guint16 *) table->data; +#else + sequences_le = (const guint16 *) table->data; + sequences_be = other_sequences = g_new0 (guint16, table->data_size); +#endif + + for (i = 0; i < table->data_size; i++) + other_sequences[i] = GUINT16_SWAP_LE_BE (table->data[i]); + /* data_size is the size in guint16 */ - if (!g_file_set_contents (argv[2], (char *)table->data, 2 * table->data_size, &error)) + if (!g_file_set_contents (argv[2], (char *) sequences_le, 2 * table->data_size, &error)) g_error ("%s", error->message); - if (!g_file_set_contents (argv[3], table->char_data, table->n_chars + 1, &error)) + /* data_size is the size in guint16 */ + if (!g_file_set_contents (argv[3], (char *) sequences_be, 2 * table->data_size, &error)) + g_error ("%s", error->message); + + if (!g_file_set_contents (argv[4], table->char_data, table->n_chars + 1, &error)) g_error ("%s", error->message); str = g_string_new (""); @@ -55,10 +74,11 @@ main (int argc, char *argv[]) "\n" "#endif\n"); - if (!g_file_set_contents (argv[4], str->str, str->len, &error)) + if (!g_file_set_contents (argv[5], str->str, str->len, &error)) g_error ("%s", error->message); g_string_free (str, TRUE); + g_free (other_sequences); return 0; } diff --git a/gtk/compose/sequences-big-endian b/gtk/compose/sequences-big-endian new file mode 100644 index 0000000000..516577970c Binary files /dev/null and b/gtk/compose/sequences-big-endian differ diff --git a/gtk/compose/sequences b/gtk/compose/sequences-little-endian similarity index 100% rename from gtk/compose/sequences rename to gtk/compose/sequences-little-endian diff --git a/gtk/gen-gtk-gresources-xml.py b/gtk/gen-gtk-gresources-xml.py index 8a8da4254e..81c06637bc 100644 --- a/gtk/gen-gtk-gresources-xml.py +++ b/gtk/gen-gtk-gresources-xml.py @@ -21,6 +21,7 @@ def replace_if_changed(new, old): os.remove(new) srcdir = sys.argv[1] +endian = sys.argv[2] xml = ''' @@ -84,13 +85,13 @@ for f in get_files('inspector', '.ui'): xml += ''' inspector/inspector.css emoji/en.data - compose/sequences + compose/sequences-{0}-endian compose/chars -''' +'''.format(endian) -if len(sys.argv) > 2: - outfile = sys.argv[2] +if len(sys.argv) > 3: + outfile = sys.argv[3] tmpfile = outfile + '~' with open(tmpfile, 'w') as f: f.write(xml) diff --git a/gtk/meson.build b/gtk/meson.build index bfb5105fe5..5305bdfc15 100644 --- a/gtk/meson.build +++ b/gtk/meson.build @@ -836,6 +836,7 @@ gtk_gresources_xml = configure_file(output: 'gtk.gresources.xml', command: [ gen_gtk_gresources_xml, meson.current_source_dir(), + host_machine.endian(), '@OUTPUT@' ], )