From 3e3e1801a5a7916c3966c86b4deab225c3d63167 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 10 Aug 2021 13:59:46 -0600 Subject: [PATCH 01/26] [util] Small tweaks in --help output --- util/font-options.hh | 3 ++- util/text-options.hh | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/util/font-options.hh b/util/font-options.hh index 108dbd824..4584bfea0 100644 --- a/util/font-options.hh +++ b/util/font-options.hh @@ -127,6 +127,7 @@ font_options_t::get_font () const g_string_append_c (s, '/'); g_string_append (s, supported_font_funcs[i].name); } + g_string_append_c (s, '\n'); char *p = g_string_free (s, FALSE); fail (false, "Unknown font function implementation `%s'; supported values are: %s; default is %s", font_funcs, @@ -289,7 +290,7 @@ font_options_t::add_options (option_parser_t *parser) " number. For example:\n" "\n" " \"wght=500\"\n" - " \"slnt=-7.5\"\n"; + " \"slnt=-7.5\""; GOptionEntry entries2[] = { diff --git a/util/text-options.hh b/util/text-options.hh index 2ed239a07..83077ae9f 100644 --- a/util/text-options.hh +++ b/util/text-options.hh @@ -176,8 +176,8 @@ text_options_t::add_options (option_parser_t *parser) GOptionEntry entries[] = { {"text", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_text, "Set input text", "string"}, - {"text-file", 0, 0, G_OPTION_ARG_STRING, &this->text_file, "Set input text file-name\n\n If no text is provided, standard input is used for input.\n", "filename"}, - {"unicodes", 'u', 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_unicodes, "Set input Unicode codepoints", "list of hex numbers"}, + {"text-file", 0, 0, G_OPTION_ARG_STRING, &this->text_file, "Set input text file-name", "filename"}, + {"unicodes", 'u', 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_unicodes, "Set input Unicode codepoints\n\n If no text is provided, standard input is used for input.\n", "list of hex numbers"}, {"text-before", 0, 0, G_OPTION_ARG_STRING, &this->text_before, "Set text context before each line", "string"}, {"text-after", 0, 0, G_OPTION_ARG_STRING, &this->text_after, "Set text context after each line", "string"}, {nullptr} From 6905f6fa600c2565573952e9d347dfcf9f0d3770 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 10 Aug 2021 14:24:24 -0600 Subject: [PATCH 02/26] [util/hb-subset] Use templated function to parse flags directly --- util/subset-options.hh | 55 +++++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/util/subset-options.hh b/util/subset-options.hh index b202f1deb..62f5571ac 100644 --- a/util/subset-options.hh +++ b/util/subset-options.hh @@ -42,31 +42,13 @@ struct subset_options_t void add_options (option_parser_t *parser); - hb_bool_t* bool_for(hb_subset_flags_t flag) - { - for (unsigned i = 0; i < sizeof(int) * 8; i++) - { - if (1u << i == flag) - return &flags[i]; - } - return &flags[sizeof(int) * 8 - 1]; - } - hb_subset_input_t * get_input () { - hb_subset_flags_t flags_set = HB_SUBSET_FLAGS_DEFAULT; - for (unsigned i = 0; i < sizeof(int) * 8; i++) - { - if (flags[i]) - flags_set = (hb_subset_flags_t) (flags_set | (1u << i)); - } - hb_subset_input_set_flags (input, flags_set); return input; } unsigned num_iterations = 1; hb_subset_input_t *input = nullptr; - hb_bool_t flags[sizeof(int) * 8] = {0}; }; @@ -242,6 +224,21 @@ parse_name_languages (const char *name, return true; } +template +static gboolean +set_flag (const char *name, + const char *arg, + gpointer data, + GError **error G_GNUC_UNUSED) +{ + subset_options_t *subset_opts = (subset_options_t *) data; + + hb_subset_input_set_flags (subset_opts->input, + hb_subset_input_get_flags (subset_opts->input) | flag); + + return true; +} + static gboolean parse_layout_features (const char *name, const char *arg, @@ -261,9 +258,11 @@ parse_layout_features (const char *name, if (last_name_char == '-') { hb_set_clear (layout_features); - *subset_opts->bool_for (HB_SUBSET_FLAGS_RETAIN_ALL_FEATURES) = false; + hb_subset_input_set_flags (subset_opts->input, + hb_subset_input_get_flags (subset_opts->input) & ~HB_SUBSET_FLAGS_RETAIN_ALL_FEATURES); } else { - *subset_opts->bool_for (HB_SUBSET_FLAGS_RETAIN_ALL_FEATURES) = true; + hb_subset_input_set_flags (subset_opts->input, + hb_subset_input_get_flags (subset_opts->input) | HB_SUBSET_FLAGS_RETAIN_ALL_FEATURES); } return true; } @@ -333,14 +332,14 @@ subset_options_t::add_options (option_parser_t *parser) { GOptionEntry entries[] = { - {"no-hinting", 0, 0, G_OPTION_ARG_NONE, this->bool_for (HB_SUBSET_FLAGS_NO_HINTING), "Whether to drop hints", nullptr}, - {"retain-gids", 0, 0, G_OPTION_ARG_NONE, this->bool_for (HB_SUBSET_FLAGS_RETAIN_GIDS), "If set don't renumber glyph ids in the subset.", nullptr}, + {"no-hinting", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Whether to drop hints", nullptr}, + {"retain-gids", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "If set don't renumber glyph ids in the subset.", nullptr}, {"gids", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_gids, "Specify glyph IDs or ranges to include in the subset", "list of comma/whitespace-separated int numbers or ranges"}, - {"desubroutinize", 0, 0, G_OPTION_ARG_NONE, this->bool_for (HB_SUBSET_FLAGS_DESUBROUTINIZE), "Remove CFF/CFF2 use of subroutines", nullptr}, + {"desubroutinize", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Remove CFF/CFF2 use of subroutines", nullptr}, {"name-IDs", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_nameids, "Subset specified nameids", "list of int numbers"}, {"name-IDs-", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_nameids, "Subset specified nameids", "list of int numbers"}, {"name-IDs+", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_nameids, "Subset specified nameids", "list of int numbers"}, - {"name-legacy", 0, 0, G_OPTION_ARG_NONE, this->bool_for (HB_SUBSET_FLAGS_NAME_LEGACY), "Keep legacy (non-Unicode) 'name' table entries", nullptr}, + {"name-legacy", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Keep legacy (non-Unicode) 'name' table entries", nullptr}, {"name-languages", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_name_languages, "Subset nameRecords with specified language IDs", "list of int numbers"}, {"name-languages-", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_name_languages, "Subset nameRecords with specified language IDs", "list of int numbers"}, {"name-languages+", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_name_languages, "Subset nameRecords with specified language IDs", "list of int numbers"}, @@ -353,11 +352,11 @@ subset_options_t::add_options (option_parser_t *parser) {"num-iterations", 'n', 0, G_OPTION_ARG_INT, &this->num_iterations, "Run subsetter N times (default: 1)", "N"}, - {"set-overlaps-flag", 0, 0, G_OPTION_ARG_NONE, this->bool_for (HB_SUBSET_FLAGS_SET_OVERLAPS_FLAG), + {"set-overlaps-flag", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Set the overlaps flag on each glyph.", nullptr}, - {"notdef-outline", 0, 0, G_OPTION_ARG_NONE, this->bool_for (HB_SUBSET_FLAGS_NOTDEF_OUTLINE), "Keep the outline of \'.notdef\' glyph", nullptr}, - {"no-prune-unicode-ranges", 0, 0, G_OPTION_ARG_NONE, this->bool_for (HB_SUBSET_FLAGS_NO_PRUNE_UNICODE_RANGES), "Don't change the 'OS/2 ulUnicodeRange*' bits.", nullptr}, - {"glyph-names", 0, 0, G_OPTION_ARG_NONE, this->bool_for (HB_SUBSET_FLAGS_GLYPH_NAMES), "Keep PS glyph names in TT-flavored fonts. ", nullptr}, + {"notdef-outline", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Keep the outline of \'.notdef\' glyph", nullptr}, + {"no-prune-unicode-ranges", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Don't change the 'OS/2 ulUnicodeRange*' bits.", nullptr}, + {"glyph-names", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Keep PS glyph names in TT-flavored fonts. ", nullptr}, {nullptr} }; parser->add_group (entries, From 5bd463f130935df282cc2a484ef1bb6dbd047170 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Tue, 10 Aug 2021 14:26:48 -0600 Subject: [PATCH 03/26] [util/hb-subset] Access input directly --- util/hb-subset.cc | 3 --- util/subset-options.hh | 5 ----- 2 files changed, 8 deletions(-) diff --git a/util/hb-subset.cc b/util/hb-subset.cc index 789a68a58..b596752e2 100644 --- a/util/hb-subset.cc +++ b/util/hb-subset.cc @@ -50,7 +50,6 @@ struct subset_consumer_t : subset_options_t, output_options_t void init (const face_options_t *face_opts) { face = hb_face_reference (face_opts->get_face ()); - input = hb_subset_input_reference (get_input ()); } void consume_line (const char *text, @@ -117,7 +116,6 @@ struct subset_consumer_t : subset_options_t, output_options_t hb_blob_destroy (result); } - hb_subset_input_destroy (input); hb_face_destroy (new_face); hb_face_destroy (face); } @@ -126,7 +124,6 @@ struct subset_consumer_t : subset_options_t, output_options_t bool failed = false; hb_face_t *face = nullptr; - hb_subset_input_t *input = nullptr; }; int diff --git a/util/subset-options.hh b/util/subset-options.hh index 62f5571ac..f2f85c215 100644 --- a/util/subset-options.hh +++ b/util/subset-options.hh @@ -42,11 +42,6 @@ struct subset_options_t void add_options (option_parser_t *parser); - hb_subset_input_t * get_input () - { - return input; - } - unsigned num_iterations = 1; hb_subset_input_t *input = nullptr; }; From 9d8bbe3e531ded6419b2573c8b813596fff69745 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 11 Aug 2021 11:53:32 -0600 Subject: [PATCH 04/26] [util] Make main_font_text a struct again Going to move to G_OPTION_REMAINING. --- util/batch.hh | 8 ++--- util/hb-ot-shape-closure.cc | 2 +- util/hb-shape.cc | 4 +-- util/hb-subset.cc | 4 +-- util/hb-view.cc | 2 +- util/main-font-text.hh | 59 +++++++++++++++++++------------------ 6 files changed, 41 insertions(+), 38 deletions(-) diff --git a/util/batch.hh b/util/batch.hh index e3dd10fc3..2cbb12077 100644 --- a/util/batch.hh +++ b/util/batch.hh @@ -27,9 +27,9 @@ typedef int (*main_func_t) (int argc, char **argv); -template +template int -batch_main (main_func_t main_func, int argc, char **argv) +batch_main (int argc, char **argv) { if (argc == 2 && !strcmp (argv[1], "--batch")) { @@ -53,7 +53,7 @@ batch_main (main_func_t main_func, int argc, char **argv) args[argc++] = p = e; } - int result = main_func (argc, args); + int result = main_t () (argc, args); if (report_status) fprintf (stdout, result == 0 ? "success\n" : "failure\n"); @@ -64,7 +64,7 @@ batch_main (main_func_t main_func, int argc, char **argv) return ret; } - return main_func (argc, argv); + return main_t () (argc, argv); } #endif diff --git a/util/hb-ot-shape-closure.cc b/util/hb-ot-shape-closure.cc index 41d18b549..9686d1d3a 100644 --- a/util/hb-ot-shape-closure.cc +++ b/util/hb-ot-shape-closure.cc @@ -114,5 +114,5 @@ struct shape_closure_consumer_t int main (int argc, char **argv) { - return main_font_text (argc, argv); + return main_font_text () (argc, argv); } diff --git a/util/hb-shape.cc b/util/hb-shape.cc index d19e582fe..0209426ba 100644 --- a/util/hb-shape.cc +++ b/util/hb-shape.cc @@ -162,6 +162,6 @@ struct output_buffer_t : output_options_t int main (int argc, char **argv) { - auto main_func = main_font_text, font_options_t, text_options_t>; - return batch_main<> (main_func, argc, argv); + using main_t = main_font_text, font_options_t, text_options_t>; + return batch_main (argc, argv); } diff --git a/util/hb-subset.cc b/util/hb-subset.cc index b596752e2..b1a9c0d69 100644 --- a/util/hb-subset.cc +++ b/util/hb-subset.cc @@ -129,6 +129,6 @@ struct subset_consumer_t : subset_options_t, output_options_t int main (int argc, char **argv) { - auto main_func = main_font_text; - return batch_main (main_func, argc, argv); + using main_t = main_font_text; + return batch_main (argc, argv); } diff --git a/util/hb-view.cc b/util/hb-view.cc index 5d2dfe52a..3a9ecff47 100644 --- a/util/hb-view.cc +++ b/util/hb-view.cc @@ -37,5 +37,5 @@ const unsigned SUBPIXEL_BITS = 6; int main (int argc, char **argv) { - return main_font_text, font_options_t, text_options_t> (argc, argv); + return main_font_text, font_options_t, text_options_t> () (argc, argv); } diff --git a/util/main-font-text.hh b/util/main-font-text.hh index b8c023a5b..9d7e2094e 100644 --- a/util/main-font-text.hh +++ b/util/main-font-text.hh @@ -32,40 +32,43 @@ /* main() body for utilities taking font and processing text.*/ template -int -main_font_text (int argc, char **argv) +struct main_font_text : font_options_t, text_options_t, consumer_t { + void add_options (struct option_parser_t *parser) + { + font_options_t::add_options (parser); + text_options_t::add_options (parser); + consumer_t::add_options (parser); + } - font_options_t font_opts; - text_options_t input; - consumer_t consumer; + int + operator () (int argc, char **argv) + { + option_parser_t options ("[FONT-FILE] [TEXT]"); + add_options (&options); + options.parse (&argc, &argv); - option_parser_t options ("[FONT-FILE] [TEXT]"); - font_opts.add_options (&options); - input.add_options (&options); - consumer.add_options (&options); - options.parse (&argc, &argv); + argc--, argv++; + if (argc && !this->font_file) this->font_file = locale_to_utf8 (argv[0]), argc--, argv++; + if (argc && !this->text && !this->text_file) this->text = locale_to_utf8 (argv[0]), argc--, argv++; + if (argc) + fail (true, "Too many arguments on the command line"); + if (!this->font_file) + options.usage (); + if (!this->text && !this->text_file) + this->text_file = g_strdup ("-"); - argc--, argv++; - if (argc && !font_opts.font_file) font_opts.font_file = locale_to_utf8 (argv[0]), argc--, argv++; - if (argc && !input.text && !input.text_file) input.text = locale_to_utf8 (argv[0]), argc--, argv++; - if (argc) - fail (true, "Too many arguments on the command line"); - if (!font_opts.font_file) - options.usage (); - if (!input.text && !input.text_file) - input.text_file = g_strdup ("-"); + this->init (this); - consumer.init (&font_opts); + unsigned int line_len; + const char *line; + while ((line = this->get_line (&line_len))) + this->consume_line (line, line_len, this->text_before, this->text_after); - unsigned int text_len; - const char *text; - while ((text = input.get_line (&text_len))) - consumer.consume_line (text, text_len, input.text_before, input.text_after); + this->finish (this); - consumer.finish (&font_opts); - - return consumer.failed ? 1 : 0; -} + return this->failed ? 1 : 0; + } +}; #endif From 62fb102184b82ad1c7798c16fcb5f390ddf2ba91 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 11 Aug 2021 12:03:07 -0600 Subject: [PATCH 05/26] [util] Move add_main_options() invocation --- util/options.hh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/util/options.hh b/util/options.hh index ff542f4c5..824981fe5 100644 --- a/util/options.hh +++ b/util/options.hh @@ -92,9 +92,7 @@ struct option_parser_t : usage_str (usage), context (g_option_context_new (usage)), to_free (g_ptr_array_new ()) - { - add_main_options (); - } + {} static void _g_free_g_func (void *p, void * G_GNUC_UNUSED) { g_free (p); } @@ -203,6 +201,8 @@ option_parser_t::add_main_options () inline void option_parser_t::parse (int *argc, char ***argv) { + add_main_options (); + setlocale (LC_ALL, ""); GError *parse_error = nullptr; From 7e4fcf1be895b7c92d3d5e3498cf1b467708994c Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 11 Aug 2021 12:12:49 -0600 Subject: [PATCH 06/26] [util] Rename add_main_options --- util/options.hh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/util/options.hh b/util/options.hh index 824981fe5..6a729036a 100644 --- a/util/options.hh +++ b/util/options.hh @@ -103,7 +103,7 @@ struct option_parser_t g_ptr_array_free (to_free, TRUE); } - void add_main_options (); + void add_options (); static void post_parse_ (void *thiz, GError **error) {} @@ -187,7 +187,7 @@ show_version (const char *name G_GNUC_UNUSED, } inline void -option_parser_t::add_main_options () +option_parser_t::add_options () { GOptionEntry entries[] = { @@ -201,7 +201,7 @@ option_parser_t::add_main_options () inline void option_parser_t::parse (int *argc, char ***argv) { - add_main_options (); + add_options (); setlocale (LC_ALL, ""); From 9468e4699833b6f6376503d2724fa4a8abcc8ab2 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 11 Aug 2021 16:46:04 -0600 Subject: [PATCH 07/26] [util] Rename main_font_text back to main_font_text_t --- util/hb-ot-shape-closure.cc | 2 +- util/hb-shape.cc | 2 +- util/hb-subset.cc | 2 +- util/hb-view.cc | 2 +- util/main-font-text.hh | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/util/hb-ot-shape-closure.cc b/util/hb-ot-shape-closure.cc index 9686d1d3a..90f29d989 100644 --- a/util/hb-ot-shape-closure.cc +++ b/util/hb-ot-shape-closure.cc @@ -114,5 +114,5 @@ struct shape_closure_consumer_t int main (int argc, char **argv) { - return main_font_text () (argc, argv); + return main_font_text_t () (argc, argv); } diff --git a/util/hb-shape.cc b/util/hb-shape.cc index 0209426ba..62ed23346 100644 --- a/util/hb-shape.cc +++ b/util/hb-shape.cc @@ -162,6 +162,6 @@ struct output_buffer_t : output_options_t int main (int argc, char **argv) { - using main_t = main_font_text, font_options_t, text_options_t>; + using main_t = main_font_text_t, font_options_t, text_options_t>; return batch_main (argc, argv); } diff --git a/util/hb-subset.cc b/util/hb-subset.cc index b1a9c0d69..f9ecca173 100644 --- a/util/hb-subset.cc +++ b/util/hb-subset.cc @@ -129,6 +129,6 @@ struct subset_consumer_t : subset_options_t, output_options_t int main (int argc, char **argv) { - using main_t = main_font_text; + using main_t = main_font_text_t; return batch_main (argc, argv); } diff --git a/util/hb-view.cc b/util/hb-view.cc index 3a9ecff47..7ecaa3709 100644 --- a/util/hb-view.cc +++ b/util/hb-view.cc @@ -37,5 +37,5 @@ const unsigned SUBPIXEL_BITS = 6; int main (int argc, char **argv) { - return main_font_text, font_options_t, text_options_t> () (argc, argv); + return main_font_text_t, font_options_t, text_options_t> () (argc, argv); } diff --git a/util/main-font-text.hh b/util/main-font-text.hh index 9d7e2094e..6f1827606 100644 --- a/util/main-font-text.hh +++ b/util/main-font-text.hh @@ -32,7 +32,7 @@ /* main() body for utilities taking font and processing text.*/ template -struct main_font_text : font_options_t, text_options_t, consumer_t +struct main_font_text_t : font_options_t, text_options_t, consumer_t { void add_options (struct option_parser_t *parser) { From c0ea4e2d33e613eb4936a9cce85453a6b7a43ae5 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 11 Aug 2021 18:30:08 -0600 Subject: [PATCH 08/26] [util] Use post_parse to validate --- util/face-options.hh | 21 +++++++++--- util/font-options.hh | 1 - util/main-font-text.hh | 72 ++++++++++++++++++++++++++++-------------- util/options.hh | 33 ++++++++----------- util/text-options.hh | 3 ++ 5 files changed, 81 insertions(+), 49 deletions(-) diff --git a/util/face-options.hh b/util/face-options.hh index 12cfd3023..229c40e97 100644 --- a/util/face-options.hh +++ b/util/face-options.hh @@ -31,8 +31,20 @@ struct face_options_t { + ~face_options_t () + { + g_free (font_file); + } + void add_options (option_parser_t *parser); + void post_parse (GError **error) + { + if (!this->font_file) + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + "No font file set"); + } + hb_blob_t *get_blob () const; hb_face_t *get_face () const; @@ -40,12 +52,12 @@ struct face_options_t { ~cache_t () { - free ((void *) font_path); + g_free (font_path); hb_blob_destroy (blob); hb_face_destroy (face); } - const char *font_path = nullptr; + char *font_path = nullptr; hb_blob_t *blob = nullptr; unsigned face_index = (unsigned) -1; hb_face_t *face = nullptr; @@ -73,8 +85,7 @@ face_options_t::get_face () const if (face) return face; - if (!font_file) - fail (true, "No font file set"); + assert (font_file); const char *font_path = font_file; @@ -94,7 +105,7 @@ face_options_t::get_face () const cache.blob = hb_blob_create_from_file_or_fail (font_path); free ((char *) cache.font_path); - cache.font_path = strdup (font_path); + cache.font_path = g_strdup (font_path); if (!cache.blob) fail (false, "%s: Failed reading file", font_path); diff --git a/util/font-options.hh b/util/font-options.hh index 4584bfea0..36bdd85f9 100644 --- a/util/font-options.hh +++ b/util/font-options.hh @@ -44,7 +44,6 @@ struct font_options_t : face_options_t { ~font_options_t () { - g_free (font_file); free (variations); g_free (font_funcs); hb_font_destroy (font); diff --git a/util/main-font-text.hh b/util/main-font-text.hh index 6f1827606..a2a439170 100644 --- a/util/main-font-text.hh +++ b/util/main-font-text.hh @@ -32,31 +32,12 @@ /* main() body for utilities taking font and processing text.*/ template -struct main_font_text_t : font_options_t, text_options_t, consumer_t +struct main_font_text_t : option_parser_t, font_options_t, text_options_t, consumer_t { - void add_options (struct option_parser_t *parser) + int operator () (int argc, char **argv) { - font_options_t::add_options (parser); - text_options_t::add_options (parser); - consumer_t::add_options (parser); - } - - int - operator () (int argc, char **argv) - { - option_parser_t options ("[FONT-FILE] [TEXT]"); - add_options (&options); - options.parse (&argc, &argv); - - argc--, argv++; - if (argc && !this->font_file) this->font_file = locale_to_utf8 (argv[0]), argc--, argv++; - if (argc && !this->text && !this->text_file) this->text = locale_to_utf8 (argv[0]), argc--, argv++; - if (argc) - fail (true, "Too many arguments on the command line"); - if (!this->font_file) - options.usage (); - if (!this->text && !this->text_file) - this->text_file = g_strdup ("-"); + add_options (); + parse (&argc, &argv); this->init (this); @@ -69,6 +50,51 @@ struct main_font_text_t : font_options_t, text_options_t, consumer_t return this->failed ? 1 : 0; } + + protected: + + void add_options () + { + font_options_t::add_options (this); + text_options_t::add_options (this); + consumer_t::add_options (this); + + GOptionEntry entries[] = + { + {G_OPTION_REMAINING, 0, G_OPTION_FLAG_IN_MAIN, + G_OPTION_ARG_CALLBACK, (gpointer) &collect_rest, nullptr, "[FONT-FILE] [TEXT]"}, + {nullptr} + }; + add_main_group (entries, this); + option_parser_t::add_options (); + } + + private: + + static gboolean + collect_rest (const char *name G_GNUC_UNUSED, + const char *arg, + gpointer data, + GError **error) + { + main_font_text_t *thiz = (main_font_text_t *) data; + + if (!thiz->font_file) + { + thiz->font_file = g_strdup (arg); + return true; + } + + if (!thiz->text && !thiz->text_file) + { + thiz->text = g_strdup (arg); + return true; + } + + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + "Too many arguments on the command line"); + return false; + } }; #endif diff --git a/util/options.hh b/util/options.hh index 6a729036a..e9e82e722 100644 --- a/util/options.hh +++ b/util/options.hh @@ -70,25 +70,9 @@ fail (hb_bool_t suggest_help, const char *format, ...) exit (1); } -static inline char * -locale_to_utf8 (char *s) -{ - char *t; - GError *error = nullptr; - - t = g_locale_to_utf8 (s, -1, nullptr, nullptr, &error); - if (!t) - { - fail (true, "Failed converting text to UTF-8"); - } - - return t; -} - - struct option_parser_t { - option_parser_t (const char *usage) + option_parser_t (const char *usage = nullptr) : usage_str (usage), context (g_option_context_new (usage)), to_free (g_ptr_array_new ()) @@ -136,6 +120,17 @@ struct option_parser_t g_option_context_add_group (context, group); } + template + void add_main_group (GOptionEntry *entries, + Type *closure) + { + GOptionGroup *group = g_option_group_new (nullptr, nullptr, nullptr, + static_cast(closure), nullptr); + g_option_group_add_entries (group, entries); + g_option_group_set_parse_hooks (group, nullptr, post_parse); + g_option_context_set_main_group (context, group); + } + void free_later (char *p) { g_ptr_array_add (to_free, p); } @@ -147,7 +142,7 @@ struct option_parser_t exit (1); } - private: + protected: const char *usage_str; GOptionContext *context; GPtrArray *to_free; @@ -201,8 +196,6 @@ option_parser_t::add_options () inline void option_parser_t::parse (int *argc, char ***argv) { - add_options (); - setlocale (LC_ALL, ""); GError *parse_error = nullptr; diff --git a/util/text-options.hh b/util/text-options.hh index 83077ae9f..c9b04cb9a 100644 --- a/util/text-options.hh +++ b/util/text-options.hh @@ -17,6 +17,9 @@ struct text_options_t void post_parse (GError **error G_GNUC_UNUSED) { + if (!this->text && !this->text_file) + this->text_file = g_strdup ("-"); + if (text && text_file) g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, From e4b33d9d360eeb80f7d841f7ad8921aa16836027 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 11 Aug 2021 18:35:11 -0600 Subject: [PATCH 09/26] [util] Use post_parse in face_options_t --- util/face-options.hh | 37 ++++++++++++------------------------- util/font-options.hh | 2 -- util/hb-subset.cc | 2 +- util/helper-cairo.hh | 2 +- 4 files changed, 14 insertions(+), 29 deletions(-) diff --git a/util/face-options.hh b/util/face-options.hh index 229c40e97..3ac366404 100644 --- a/util/face-options.hh +++ b/util/face-options.hh @@ -38,15 +38,7 @@ struct face_options_t void add_options (option_parser_t *parser); - void post_parse (GError **error) - { - if (!this->font_file) - g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, - "No font file set"); - } - - hb_blob_t *get_blob () const; - hb_face_t *get_face () const; + void post_parse (GError **error); static struct cache_t { @@ -65,25 +57,20 @@ struct face_options_t char *font_file = nullptr; unsigned face_index = 0; - private: - mutable hb_face_t *face = nullptr; + + hb_blob_t *blob = nullptr; + hb_face_t *face = nullptr; }; face_options_t::cache_t face_options_t::cache {}; -hb_blob_t * -face_options_t::get_blob () const +void +face_options_t::post_parse (GError **error) { - // XXX This does the job for now; will move to post_parse. - return cache.blob; -} - -hb_face_t * -face_options_t::get_face () const -{ - if (face) - return face; + if (!font_file) + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + "No font file set"); assert (font_file); @@ -108,7 +95,8 @@ face_options_t::get_face () const cache.font_path = g_strdup (font_path); if (!cache.blob) - fail (false, "%s: Failed reading file", font_path); + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + "%s: Failed reading file", font_path); hb_face_destroy (cache.face); cache.face = nullptr; @@ -122,9 +110,8 @@ face_options_t::get_face () const cache.face_index = face_index; } + blob = cache.blob; face = cache.face; - - return face; } void diff --git a/util/font-options.hh b/util/font-options.hh index 36bdd85f9..fd63a3ceb 100644 --- a/util/font-options.hh +++ b/util/font-options.hh @@ -86,8 +86,6 @@ font_options_t::get_font () const if (font) return font; - auto *face = get_face (); - font = hb_font_create (face); if (font_size_x == FONT_SIZE_UPEM) diff --git a/util/hb-subset.cc b/util/hb-subset.cc index f9ecca173..6664ed48c 100644 --- a/util/hb-subset.cc +++ b/util/hb-subset.cc @@ -49,7 +49,7 @@ struct subset_consumer_t : subset_options_t, output_options_t void init (const face_options_t *face_opts) { - face = hb_face_reference (face_opts->get_face ()); + face = hb_face_reference (face_opts->face); } void consume_line (const char *text, diff --git a/util/helper-cairo.hh b/util/helper-cairo.hh index e219e646b..19651b23b 100644 --- a/util/helper-cairo.hh +++ b/util/helper-cairo.hh @@ -97,7 +97,7 @@ helper_cairo_create_scaled_font (const font_options_t *font_opts) } unsigned int blob_length; - const char *blob_data = hb_blob_get_data (font_opts->get_blob (), &blob_length); + const char *blob_data = hb_blob_get_data (font_opts->blob, &blob_length); if (FT_New_Memory_Face (ft_library, (const FT_Byte *) blob_data, From e0d7060f80f8c4b9b8241c3a4d8faa33f48da86d Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 11 Aug 2021 18:43:21 -0600 Subject: [PATCH 10/26] [test] Rename shaping/ to shape/ --- configure.ac | 10 +++++----- test/Makefile.am | 2 +- test/meson.build | 4 ++-- test/{shaping => shape}/Makefile.am | 0 test/{shaping => shape}/README.md | 0 test/{shaping => shape}/data/Makefile.am | 0 test/{shaping => shape}/data/aots/COPYING | 0 test/{shaping => shape}/data/aots/Makefile.am | 0 test/{shaping => shape}/data/aots/Makefile.sources | 0 .../data/aots/fonts/classdef1_font1.otf | Bin .../data/aots/fonts/classdef1_font2.otf | Bin .../data/aots/fonts/classdef1_font3.otf | Bin .../data/aots/fonts/classdef1_font4.otf | Bin .../data/aots/fonts/classdef2_font1.otf | Bin .../data/aots/fonts/classdef2_font2.otf | Bin .../data/aots/fonts/classdef2_font3.otf | Bin .../data/aots/fonts/classdef2_font4.otf | Bin .../data/aots/fonts/cmap0_font1.otf | Bin .../data/aots/fonts/cmap10_font1.otf | Bin .../data/aots/fonts/cmap10_font2.otf | Bin .../data/aots/fonts/cmap12_font1.otf | Bin .../data/aots/fonts/cmap14_font1.otf | Bin .../data/aots/fonts/cmap2_font1.otf | Bin .../data/aots/fonts/cmap4_font1.otf | Bin .../data/aots/fonts/cmap4_font2.otf | Bin .../data/aots/fonts/cmap4_font3.otf | Bin .../data/aots/fonts/cmap4_font4.otf | Bin .../data/aots/fonts/cmap6_font1.otf | Bin .../data/aots/fonts/cmap6_font2.otf | Bin .../data/aots/fonts/cmap8_font1.otf | Bin .../data/aots/fonts/cmap_composition_font1.otf | Bin .../aots/fonts/cmap_subtableselection_font1.otf | Bin .../aots/fonts/cmap_subtableselection_font2.otf | Bin .../aots/fonts/cmap_subtableselection_font3.otf | Bin .../aots/fonts/cmap_subtableselection_font4.otf | Bin .../aots/fonts/cmap_subtableselection_font5.otf | Bin .../data/aots/fonts/gpos1_1_lookupflag_f1.otf | Bin .../data/aots/fonts/gpos1_1_simple_f1.otf | Bin .../data/aots/fonts/gpos1_1_simple_f2.otf | Bin .../data/aots/fonts/gpos1_1_simple_f3.otf | Bin .../data/aots/fonts/gpos1_1_simple_f4.otf | Bin .../data/aots/fonts/gpos1_2_font1.otf | Bin .../data/aots/fonts/gpos1_2_font2.otf | Bin .../data/aots/fonts/gpos2_1_font6.otf | Bin .../data/aots/fonts/gpos2_1_font7.otf | Bin .../data/aots/fonts/gpos2_1_lookupflag_f1.otf | Bin .../data/aots/fonts/gpos2_1_lookupflag_f2.otf | Bin .../data/aots/fonts/gpos2_1_next_glyph_f1.otf | Bin .../data/aots/fonts/gpos2_1_next_glyph_f2.otf | Bin .../data/aots/fonts/gpos2_1_simple_f1.otf | Bin .../data/aots/fonts/gpos2_2_font1.otf | Bin .../data/aots/fonts/gpos2_2_font2.otf | Bin .../data/aots/fonts/gpos2_2_font3.otf | Bin .../data/aots/fonts/gpos2_2_font4.otf | Bin .../data/aots/fonts/gpos2_2_font5.otf | Bin .../data/aots/fonts/gpos3_font1.otf | Bin .../data/aots/fonts/gpos3_font2.otf | Bin .../data/aots/fonts/gpos3_font3.otf | Bin .../data/aots/fonts/gpos4_lookupflag_f1.otf | Bin .../data/aots/fonts/gpos4_lookupflag_f2.otf | Bin .../data/aots/fonts/gpos4_multiple_anchors_1.otf | Bin .../data/aots/fonts/gpos4_simple_1.otf | Bin .../data/aots/fonts/gpos5_font1.otf | Bin .../data/aots/fonts/gpos6_font1.otf | Bin .../data/aots/fonts/gpos7_1_font1.otf | Bin .../data/aots/fonts/gpos9_font1.otf | Bin .../data/aots/fonts/gpos9_font2.otf | Bin .../data/aots/fonts/gpos_chaining1_boundary_f1.otf | Bin .../data/aots/fonts/gpos_chaining1_boundary_f2.otf | Bin .../data/aots/fonts/gpos_chaining1_boundary_f3.otf | Bin .../data/aots/fonts/gpos_chaining1_boundary_f4.otf | Bin .../aots/fonts/gpos_chaining1_lookupflag_f1.otf | Bin .../fonts/gpos_chaining1_multiple_subrules_f1.otf | Bin .../fonts/gpos_chaining1_multiple_subrules_f2.otf | Bin .../aots/fonts/gpos_chaining1_next_glyph_f1.otf | Bin .../data/aots/fonts/gpos_chaining1_simple_f1.otf | Bin .../data/aots/fonts/gpos_chaining1_simple_f2.otf | Bin .../aots/fonts/gpos_chaining1_successive_f1.otf | Bin .../data/aots/fonts/gpos_chaining2_boundary_f1.otf | Bin .../data/aots/fonts/gpos_chaining2_boundary_f2.otf | Bin .../data/aots/fonts/gpos_chaining2_boundary_f3.otf | Bin .../data/aots/fonts/gpos_chaining2_boundary_f4.otf | Bin .../aots/fonts/gpos_chaining2_lookupflag_f1.otf | Bin .../fonts/gpos_chaining2_multiple_subrules_f1.otf | Bin .../fonts/gpos_chaining2_multiple_subrules_f2.otf | Bin .../aots/fonts/gpos_chaining2_next_glyph_f1.otf | Bin .../data/aots/fonts/gpos_chaining2_simple_f1.otf | Bin .../data/aots/fonts/gpos_chaining2_simple_f2.otf | Bin .../aots/fonts/gpos_chaining2_successive_f1.otf | Bin .../data/aots/fonts/gpos_chaining3_boundary_f1.otf | Bin .../data/aots/fonts/gpos_chaining3_boundary_f2.otf | Bin .../data/aots/fonts/gpos_chaining3_boundary_f3.otf | Bin .../data/aots/fonts/gpos_chaining3_boundary_f4.otf | Bin .../aots/fonts/gpos_chaining3_lookupflag_f1.otf | Bin .../aots/fonts/gpos_chaining3_next_glyph_f1.otf | Bin .../data/aots/fonts/gpos_chaining3_simple_f1.otf | Bin .../data/aots/fonts/gpos_chaining3_simple_f2.otf | Bin .../aots/fonts/gpos_chaining3_successive_f1.otf | Bin .../data/aots/fonts/gpos_context1_boundary_f1.otf | Bin .../data/aots/fonts/gpos_context1_boundary_f2.otf | Bin .../data/aots/fonts/gpos_context1_expansion_f1.otf | Bin .../data/aots/fonts/gpos_context1_lookupflag_f1.otf | Bin .../data/aots/fonts/gpos_context1_lookupflag_f2.otf | Bin .../fonts/gpos_context1_multiple_subrules_f1.otf | Bin .../fonts/gpos_context1_multiple_subrules_f2.otf | Bin .../data/aots/fonts/gpos_context1_next_glyph_f1.otf | Bin .../data/aots/fonts/gpos_context1_simple_f1.otf | Bin .../data/aots/fonts/gpos_context1_simple_f2.otf | Bin .../data/aots/fonts/gpos_context1_successive_f1.otf | Bin .../data/aots/fonts/gpos_context2_boundary_f1.otf | Bin .../data/aots/fonts/gpos_context2_boundary_f2.otf | Bin .../data/aots/fonts/gpos_context2_classes_f1.otf | Bin .../data/aots/fonts/gpos_context2_classes_f2.otf | Bin .../data/aots/fonts/gpos_context2_expansion_f1.otf | Bin .../data/aots/fonts/gpos_context2_lookupflag_f1.otf | Bin .../data/aots/fonts/gpos_context2_lookupflag_f2.otf | Bin .../fonts/gpos_context2_multiple_subrules_f1.otf | Bin .../fonts/gpos_context2_multiple_subrules_f2.otf | Bin .../data/aots/fonts/gpos_context2_next_glyph_f1.otf | Bin .../data/aots/fonts/gpos_context2_simple_f1.otf | Bin .../data/aots/fonts/gpos_context2_simple_f2.otf | Bin .../data/aots/fonts/gpos_context2_successive_f1.otf | Bin .../data/aots/fonts/gpos_context3_boundary_f1.otf | Bin .../data/aots/fonts/gpos_context3_boundary_f2.otf | Bin .../data/aots/fonts/gpos_context3_lookupflag_f1.otf | Bin .../data/aots/fonts/gpos_context3_lookupflag_f2.otf | Bin .../data/aots/fonts/gpos_context3_next_glyph_f1.otf | Bin .../data/aots/fonts/gpos_context3_simple_f1.otf | Bin .../data/aots/fonts/gpos_context3_successive_f1.otf | Bin .../data/aots/fonts/gsub1_1_lookupflag_f1.otf | Bin .../data/aots/fonts/gsub1_1_modulo_f1.otf | Bin .../data/aots/fonts/gsub1_1_simple_f1.otf | Bin .../data/aots/fonts/gsub1_2_lookupflag_f1.otf | Bin .../data/aots/fonts/gsub1_2_simple_f1.otf | Bin .../data/aots/fonts/gsub2_1_lookupflag_f1.otf | Bin .../aots/fonts/gsub2_1_multiple_sequences_f1.otf | Bin .../data/aots/fonts/gsub2_1_simple_f1.otf | Bin .../data/aots/fonts/gsub3_1_lookupflag_f1.otf | Bin .../data/aots/fonts/gsub3_1_multiple_f1.otf | Bin .../data/aots/fonts/gsub3_1_simple_f1.otf | Bin .../data/aots/fonts/gsub4_1_lookupflag_f1.otf | Bin .../aots/fonts/gsub4_1_multiple_ligatures_f1.otf | Bin .../aots/fonts/gsub4_1_multiple_ligatures_f2.otf | Bin .../data/aots/fonts/gsub4_1_multiple_ligsets_f1.otf | Bin .../data/aots/fonts/gsub4_1_simple_f1.otf | Bin .../data/aots/fonts/gsub7_font1.otf | Bin .../data/aots/fonts/gsub7_font2.otf | Bin .../data/aots/fonts/gsub_chaining1_boundary_f1.otf | Bin .../data/aots/fonts/gsub_chaining1_boundary_f2.otf | Bin .../data/aots/fonts/gsub_chaining1_boundary_f3.otf | Bin .../data/aots/fonts/gsub_chaining1_boundary_f4.otf | Bin .../aots/fonts/gsub_chaining1_lookupflag_f1.otf | Bin .../fonts/gsub_chaining1_multiple_subrules_f1.otf | Bin .../fonts/gsub_chaining1_multiple_subrules_f2.otf | Bin .../aots/fonts/gsub_chaining1_next_glyph_f1.otf | Bin .../data/aots/fonts/gsub_chaining1_simple_f1.otf | Bin .../data/aots/fonts/gsub_chaining1_simple_f2.otf | Bin .../aots/fonts/gsub_chaining1_successive_f1.otf | Bin .../data/aots/fonts/gsub_chaining2_boundary_f1.otf | Bin .../data/aots/fonts/gsub_chaining2_boundary_f2.otf | Bin .../data/aots/fonts/gsub_chaining2_boundary_f3.otf | Bin .../data/aots/fonts/gsub_chaining2_boundary_f4.otf | Bin .../aots/fonts/gsub_chaining2_lookupflag_f1.otf | Bin .../fonts/gsub_chaining2_multiple_subrules_f1.otf | Bin .../fonts/gsub_chaining2_multiple_subrules_f2.otf | Bin .../aots/fonts/gsub_chaining2_next_glyph_f1.otf | Bin .../data/aots/fonts/gsub_chaining2_simple_f1.otf | Bin .../data/aots/fonts/gsub_chaining2_simple_f2.otf | Bin .../aots/fonts/gsub_chaining2_successive_f1.otf | Bin .../data/aots/fonts/gsub_chaining3_boundary_f1.otf | Bin .../data/aots/fonts/gsub_chaining3_boundary_f2.otf | Bin .../data/aots/fonts/gsub_chaining3_boundary_f3.otf | Bin .../data/aots/fonts/gsub_chaining3_boundary_f4.otf | Bin .../aots/fonts/gsub_chaining3_lookupflag_f1.otf | Bin .../aots/fonts/gsub_chaining3_next_glyph_f1.otf | Bin .../data/aots/fonts/gsub_chaining3_simple_f1.otf | Bin .../data/aots/fonts/gsub_chaining3_simple_f2.otf | Bin .../aots/fonts/gsub_chaining3_successive_f1.otf | Bin .../data/aots/fonts/gsub_context1_boundary_f1.otf | Bin .../data/aots/fonts/gsub_context1_boundary_f2.otf | Bin .../data/aots/fonts/gsub_context1_expansion_f1.otf | Bin .../data/aots/fonts/gsub_context1_lookupflag_f1.otf | Bin .../data/aots/fonts/gsub_context1_lookupflag_f2.otf | Bin .../fonts/gsub_context1_multiple_subrules_f1.otf | Bin .../fonts/gsub_context1_multiple_subrules_f2.otf | Bin .../data/aots/fonts/gsub_context1_next_glyph_f1.otf | Bin .../data/aots/fonts/gsub_context1_simple_f1.otf | Bin .../data/aots/fonts/gsub_context1_simple_f2.otf | Bin .../data/aots/fonts/gsub_context1_successive_f1.otf | Bin .../data/aots/fonts/gsub_context2_boundary_f1.otf | Bin .../data/aots/fonts/gsub_context2_boundary_f2.otf | Bin .../data/aots/fonts/gsub_context2_classes_f1.otf | Bin .../data/aots/fonts/gsub_context2_classes_f2.otf | Bin .../data/aots/fonts/gsub_context2_expansion_f1.otf | Bin .../data/aots/fonts/gsub_context2_lookupflag_f1.otf | Bin .../data/aots/fonts/gsub_context2_lookupflag_f2.otf | Bin .../fonts/gsub_context2_multiple_subrules_f1.otf | Bin .../fonts/gsub_context2_multiple_subrules_f2.otf | Bin .../data/aots/fonts/gsub_context2_next_glyph_f1.otf | Bin .../data/aots/fonts/gsub_context2_simple_f1.otf | Bin .../data/aots/fonts/gsub_context2_simple_f2.otf | Bin .../data/aots/fonts/gsub_context2_successive_f1.otf | Bin .../data/aots/fonts/gsub_context3_boundary_f1.otf | Bin .../data/aots/fonts/gsub_context3_boundary_f2.otf | Bin .../data/aots/fonts/gsub_context3_lookupflag_f1.otf | Bin .../data/aots/fonts/gsub_context3_lookupflag_f2.otf | Bin .../data/aots/fonts/gsub_context3_next_glyph_f1.otf | Bin .../data/aots/fonts/gsub_context3_simple_f1.otf | Bin .../data/aots/fonts/gsub_context3_successive_f1.otf | Bin .../data/aots/fonts/lookupflag_ignore_attach_f1.otf | Bin .../data/aots/fonts/lookupflag_ignore_base_f1.otf | Bin .../aots/fonts/lookupflag_ignore_combination_f1.otf | Bin .../aots/fonts/lookupflag_ignore_ligatures_f1.otf | Bin .../data/aots/fonts/lookupflag_ignore_marks_f1.otf | Bin .../{shaping => shape}/data/aots/hb-aots-tester.cpp | 0 test/{shaping => shape}/data/aots/meson.build | 0 .../data/aots/tests/classdef1.tests | 0 .../data/aots/tests/classdef1_empty.tests | 0 .../data/aots/tests/classdef1_multiple.tests | 0 .../data/aots/tests/classdef1_single.tests | 0 .../data/aots/tests/classdef2.tests | 0 .../data/aots/tests/classdef2_empty.tests | 0 .../data/aots/tests/classdef2_multiple.tests | 0 .../data/aots/tests/classdef2_single.tests | 0 test/{shaping => shape}/data/aots/tests/cmap0.tests | 0 .../{shaping => shape}/data/aots/tests/cmap10.tests | 0 .../{shaping => shape}/data/aots/tests/cmap12.tests | 0 test/{shaping => shape}/data/aots/tests/cmap2.tests | 0 test/{shaping => shape}/data/aots/tests/cmap4.tests | 0 test/{shaping => shape}/data/aots/tests/cmap6.tests | 0 test/{shaping => shape}/data/aots/tests/cmap8.tests | 0 .../data/aots/tests/gpos1_1_lookupflag.tests | 0 .../data/aots/tests/gpos1_1_simple.tests | 0 .../data/aots/tests/gpos1_2.tests | 0 .../data/aots/tests/gpos1_2_lookupflag.tests | 0 .../data/aots/tests/gpos2_1.tests | 0 .../data/aots/tests/gpos2_1_lookupflag.tests | 0 .../data/aots/tests/gpos2_1_next_glyph.tests | 0 .../data/aots/tests/gpos2_1_simple.tests | 0 .../data/aots/tests/gpos2_2.tests | 0 test/{shaping => shape}/data/aots/tests/gpos3.tests | 0 .../data/aots/tests/gpos3_lookupflag.tests | 0 .../data/aots/tests/gpos4_lookupflag.tests | 0 .../data/aots/tests/gpos4_multiple_anchors.tests | 0 .../data/aots/tests/gpos4_simple.tests | 0 test/{shaping => shape}/data/aots/tests/gpos5.tests | 0 test/{shaping => shape}/data/aots/tests/gpos6.tests | 0 .../data/aots/tests/gpos7_1.tests | 0 test/{shaping => shape}/data/aots/tests/gpos9.tests | 0 .../data/aots/tests/gpos_chaining1_boundary.tests | 0 .../data/aots/tests/gpos_chaining1_lookupflag.tests | 0 .../tests/gpos_chaining1_multiple_subrules.tests | 0 .../data/aots/tests/gpos_chaining1_next_glyph.tests | 0 .../data/aots/tests/gpos_chaining1_simple.tests | 0 .../data/aots/tests/gpos_chaining1_successive.tests | 0 .../data/aots/tests/gpos_chaining2_boundary.tests | 0 .../data/aots/tests/gpos_chaining2_lookupflag.tests | 0 .../tests/gpos_chaining2_multiple_subrules.tests | 0 .../data/aots/tests/gpos_chaining2_next_glyph.tests | 0 .../data/aots/tests/gpos_chaining2_simple.tests | 0 .../data/aots/tests/gpos_chaining2_successive.tests | 0 .../data/aots/tests/gpos_chaining3_boundary.tests | 0 .../data/aots/tests/gpos_chaining3_lookupflag.tests | 0 .../data/aots/tests/gpos_chaining3_next_glyph.tests | 0 .../data/aots/tests/gpos_chaining3_simple.tests | 0 .../data/aots/tests/gpos_chaining3_successive.tests | 0 .../data/aots/tests/gpos_context1_boundary.tests | 0 .../data/aots/tests/gpos_context1_expansion.tests | 0 .../data/aots/tests/gpos_context1_lookupflag.tests | 0 .../tests/gpos_context1_multiple_subrules.tests | 0 .../data/aots/tests/gpos_context1_next_glyph.tests | 0 .../data/aots/tests/gpos_context1_simple.tests | 0 .../data/aots/tests/gpos_context1_successive.tests | 0 .../data/aots/tests/gpos_context2_boundary.tests | 0 .../data/aots/tests/gpos_context2_classes.tests | 0 .../data/aots/tests/gpos_context2_expansion.tests | 0 .../data/aots/tests/gpos_context2_lookupflag.tests | 0 .../tests/gpos_context2_multiple_subrules.tests | 0 .../data/aots/tests/gpos_context2_next_glyph.tests | 0 .../data/aots/tests/gpos_context2_simple.tests | 0 .../data/aots/tests/gpos_context2_successive.tests | 0 .../data/aots/tests/gpos_context3_boundary.tests | 0 .../data/aots/tests/gpos_context3_lookupflag.tests | 0 .../data/aots/tests/gpos_context3_next_glyph.tests | 0 .../data/aots/tests/gpos_context3_simple.tests | 0 .../data/aots/tests/gpos_context3_successive.tests | 0 .../data/aots/tests/gsub1_1_lookupflag.tests | 0 .../data/aots/tests/gsub1_1_modulo.tests | 0 .../data/aots/tests/gsub1_1_simple.tests | 0 .../data/aots/tests/gsub1_2_lookupflag.tests | 0 .../data/aots/tests/gsub1_2_simple.tests | 0 .../data/aots/tests/gsub2_1_lookupflag.tests | 0 .../aots/tests/gsub2_1_multiple_sequences.tests | 0 .../data/aots/tests/gsub2_1_simple.tests | 0 .../data/aots/tests/gsub3_1_lookupflag.tests | 0 .../data/aots/tests/gsub3_1_multiple.tests | 0 .../data/aots/tests/gsub3_1_simple.tests | 0 .../data/aots/tests/gsub4_1_lookupflag.tests | 0 .../aots/tests/gsub4_1_multiple_ligatures.tests | 0 .../data/aots/tests/gsub4_1_multiple_ligsets.tests | 0 .../data/aots/tests/gsub4_1_simple.tests | 0 test/{shaping => shape}/data/aots/tests/gsub7.tests | 0 .../data/aots/tests/gsub_chaining1_boundary.tests | 0 .../data/aots/tests/gsub_chaining1_lookupflag.tests | 0 .../tests/gsub_chaining1_multiple_subrules.tests | 0 .../data/aots/tests/gsub_chaining1_next_glyph.tests | 0 .../data/aots/tests/gsub_chaining1_simple.tests | 0 .../data/aots/tests/gsub_chaining1_successive.tests | 0 .../data/aots/tests/gsub_chaining2_boundary.tests | 0 .../data/aots/tests/gsub_chaining2_lookupflag.tests | 0 .../tests/gsub_chaining2_multiple_subrules.tests | 0 .../data/aots/tests/gsub_chaining2_next_glyph.tests | 0 .../data/aots/tests/gsub_chaining2_simple.tests | 0 .../data/aots/tests/gsub_chaining2_successive.tests | 0 .../data/aots/tests/gsub_chaining3_boundary.tests | 0 .../data/aots/tests/gsub_chaining3_lookupflag.tests | 0 .../data/aots/tests/gsub_chaining3_next_glyph.tests | 0 .../data/aots/tests/gsub_chaining3_simple.tests | 0 .../data/aots/tests/gsub_chaining3_successive.tests | 0 .../data/aots/tests/gsub_context1_boundary.tests | 0 .../data/aots/tests/gsub_context1_expansion.tests | 0 .../data/aots/tests/gsub_context1_lookupflag.tests | 0 .../tests/gsub_context1_multiple_subrules.tests | 0 .../data/aots/tests/gsub_context1_next_glyph.tests | 0 .../data/aots/tests/gsub_context1_simple.tests | 0 .../data/aots/tests/gsub_context1_successive.tests | 0 .../data/aots/tests/gsub_context2_boundary.tests | 0 .../data/aots/tests/gsub_context2_classes.tests | 0 .../data/aots/tests/gsub_context2_expansion.tests | 0 .../data/aots/tests/gsub_context2_lookupflag.tests | 0 .../tests/gsub_context2_multiple_subrules.tests | 0 .../data/aots/tests/gsub_context2_next_glyph.tests | 0 .../data/aots/tests/gsub_context2_simple.tests | 0 .../data/aots/tests/gsub_context2_successive.tests | 0 .../data/aots/tests/gsub_context3_boundary.tests | 0 .../data/aots/tests/gsub_context3_lookupflag.tests | 0 .../data/aots/tests/gsub_context3_next_glyph.tests | 0 .../data/aots/tests/gsub_context3_simple.tests | 0 .../data/aots/tests/gsub_context3_successive.tests | 0 .../data/aots/tests/lookupflag_ignore_attach.tests | 0 .../data/aots/tests/lookupflag_ignore_base.tests | 0 .../aots/tests/lookupflag_ignore_combination.tests | 0 .../aots/tests/lookupflag_ignore_ligatures.tests | 0 .../data/aots/tests/lookupflag_ignore_marks.tests | 0 test/{shaping => shape}/data/aots/update.py | 0 test/{shaping => shape}/data/in-house/COPYING | 0 test/{shaping => shape}/data/in-house/Makefile.am | 0 .../data/in-house/Makefile.sources | 0 .../03e3f463c3a985bc42096620cc415342818454fb.ttf | Bin .../051d92f8bc6ff724511b296c27623f824de256e9.ttf | Bin .../065b01e54f35f0d849fd43bd5b936212739a50cb.ttf | Bin .../074a5ae6b19de8f29772fdd5df2d3d833f81f5e6.ttf | Bin .../07f054357ff8638bac3711b422a1e31180bba863.ttf | Bin .../08b4b136f418add748dc641eb4a83033476f1170.ttf | Bin .../15dfc433a135a658b9f4b1a861b5cdd9658ccbb9.ttf | Bin .../1735326da89f0818cd8c51a0600e9789812c0f94.ttf | Bin .../191826b9643e3f124d865d617ae609db6a2ce203.ttf | Bin .../1a3d8f381387dd29be1e897e4b5100ac8b4829e1.ttf | Bin .../1a5face3fcbd929d228235c2f72bbd6f8eb37424.ttf | Bin .../1c04a16f32a39c26c851b7fc014d2e8d298ba2b8.ttf | Bin .../1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf | Bin .../1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf | Bin .../1ed7e9064f008f62de6ff0207bb4dd29409597a5.ttf | Bin .../21b7fb9c1eeae260473809fbc1fe330f66a507cd.ttf | Bin .../226bc2deab3846f1a682085f70c67d0421014144.ttf | Bin .../24b8d24d00ae86f49791b746da4c9d3f717a51a8.ttf | Bin .../2681c1c72d6484ed3410417f521b1b819b4e2392.ttf | Bin .../270b89df543a7e48e206a2d830c0e10e5265c630.ttf | Bin .../28f497629c04ceb15546c9a70e0730125ed6698d.ttf | Bin .../298c9e1d955f10f6f72c6915c3c6ff9bf9695cec.ttf | Bin .../2a670df15b73a5dc75a5cc491bde5ac93c5077dc.ttf | Bin .../2c25beb56d9c556622d56b0b5d02b4670c034f89.ttf | Bin .../2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf | Bin .../341421e629668b1a1242245d39238ca48432d35d.ttf | Bin .../3493e92eaded2661cadde752a39f9d58b11f0326.ttf | Bin .../37033cc5cf37bb223d7355153016b6ccece93b28.ttf | Bin .../373e67bf41ca264e260a9716162b71a23549e885.ttf | Bin .../3998336402905b8be8301ef7f47cf7e050cbb1bd.ttf | Bin .../3b791518a9ba89675df02f1eefbc9026a50648a6.ttf | Bin .../3c96e7a303c58475a8c750bf4289bbe73784f37d.ttf | Bin .../3cae6bfe5b57c07ba81ddbd54c02fe4f3a1e3bf6.ttf | Bin .../3cc01fede4debd4b7794ccb1b16cdb9987ea7571.ttf | Bin .../3cf6f8ac6d647473a43a3100e7494b202b2cfafe.ttf | Bin .../3d0b77a2360aa6faa1385aaa510509ab70dfbeff.ttf | Bin .../43ef465752be9af900745f72fe29cb853a1401a5.ttf | Bin .../45855bc8d46332b39c4ab9e2ee1a26b1f896da6b.ttf | Bin .../46669c8860cbfea13562a6ca0d83130ee571137b.ttf | Bin .../49c9f7485c1392fa09a1b801bc2ffea79275f22e.ttf | Bin .../4afb0e8b9a86bb9bd73a1247de4e33fbe3c1fd93.ttf | Bin .../4cbbc461be066fccc611dcc634af6e8cb2705537.ttf | Bin .../4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf | Bin .../4d4206e30b2dbf1c1ef492a8eae1c9e7829ebad8.ttf | Bin .../4fac3929fc3332834e93673780ec0fe94342d193.ttf | Bin .../5028afb650b1bb718ed2131e872fbcce57828fff.ttf | Bin .../53374c7ca3657be37efde7ed02ae34229a56ae1f.ttf | Bin .../53a91c20e33a596f2be17fb68b382d6b7eb85d5c.ttf | Bin .../54674a3111d209fb6be0ed31745314b7a8d2c244.ttf | Bin .../55c88ebbe938680b08f92c3de20713183e0c7481.ttf | Bin .../56cfd0e18d07f41c38e9598545a6d369127fc6f9.ttf | Bin .../573d3a3177c9a8646e94c8a0d7b224334340946a.ttf | Bin .../57a9d9f83020155cbb1d2be1f43d82388cbecc88.ttf | Bin .../59a585a63b3df608fbeef00956c8c108deec7de6.ttf | Bin .../5af5361ed4d1e8305780b100e1730cb09132f8d1.ttf | Bin .../5bb74492f5e0ffa1fbb72e4c881be035120b6513.ttf | Bin .../5dfad7735c6a67085f1b90d4d497e32907db4c78.ttf | Bin .../604026ae5aaca83c49cd8416909d71ba3e1c1194.ttf | Bin .../641ca9d7808b01cafa9a666c13811c9b56eb9c52.ttf | Bin .../663aef6b019dbf45ffd74089e2b5f2496ceceb18.ttf | Bin .../6677074106f94a2644da6aaaacd5bbd48cbdc7de.ttf | Bin .../6991b13ce889466be6de3f66e891de2bc0f117ee.ttf | Bin .../6f36d056bad6d478fc0bf7397bd52dc3bd197d5f.ttf | Bin .../6ff0fbead4462d9f229167b4e6839eceb8465058.ttf | Bin .../706c5d7b625f207bc0d874c67237aad6f1e9cd6f.ttf | Bin .../738d9f3b8c2dfd03875bf35a61d28fd78faf17c8.ttf | Bin .../73e84dac2fc6a2d1bc9250d1414353661088937d.ttf | Bin .../757ebd573617a24aa9dfbf0b885c54875c6fe06b.ttf | Bin .../7a37dc4d5bf018456aea291cee06daf004c0221c.ttf | Bin .../7d18685e1529e4ceaad5b6095dfab2f9789e5bce.ttf | Bin .../7e14e7883ed152baa158b80e207b66114c823a8b.ttf | Bin .../8099955657a54e9ee38a6ba1d6f950ce58e3cc25.ttf | Bin .../8116e5d8fedfbec74e45dc350d2416d810bed8c4.ttf | Bin .../813c2f8e5512187fd982417a7fb4286728e6f4a8.ttf | Bin .../81c368a33816fb20e9f647e8f24e2180f4720263.ttf | Bin .../8228d035fcd65d62ec9728fb34f42c63be93a5d3.ttf | Bin .../82f4f3b57bb55344e72e70231380202a52af5805.ttf | Bin .../8454d22037f892e76614e1645d066689a0200e61.ttf | Bin .../85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf | Bin .../856ff9562451293cbeff6f396d4e3877c4f0a436.ttf | Bin .../85fe0be440c64ac77699e21c2f1bd933a919167e.ttf | Bin .../86cdd983c4e4c4d7f27dd405d6ceb7d4b9ed3d35.ttf | Bin .../87f85d17d26f1fe9ad28d7365101958edaefb967.ttf | Bin .../881642af1667ae30a54e58de8be904566d00508f.ttf | Bin .../8a9fea2a7384f2116e5b84a9b31f83be7850ce21.ttf | Bin .../8d9c4b193808b8bde94389ba7831c1fc6f9e794e.ttf | Bin .../932ad5132c2761297c74e9976fe25b08e5ffa10b.ttf | Bin .../94a5d6fb15a27521fba9ea4aee9cb39b2d03322a.ttf | Bin .../96490dd2ff81233b335a650e7eb660e0e7b2eeea.ttf | Bin .../98b7887cff91f722b92a8ff800120954606354f9.ttf | Bin .../9fc3e6960b3520e5304033ef5fd540285f72f14d.ttf | Bin .../data/in-house/fonts/AdobeBlank2.ttf | Bin .../data/in-house/fonts/DFONT.dfont | Bin .../data/in-house/fonts/HBTest-VF.ttf | Bin .../data/in-house/fonts/MORXTwentyeight.ttf | Bin .../{shaping => shape}/data/in-house/fonts/TRAK.ttf | Bin test/{shaping => shape}/data/in-house/fonts/TTC.ttc | Bin .../a014549f766436cf55b2ceb40e462038938ee899.ttf | Bin .../a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf | Bin .../a34a7b00f22ffb5fd7eef6933b81c7e71bc2cdfb.ttf | Bin .../a6b17da98b9f1565ba428719777bbf94a66403c1.ttf | Bin .../a6c76d1bafde4a0b1026ebcc932d2e5c6fd02442.ttf | Bin .../a706511c65fb278fda87eaf2180ca6684a80f423.ttf | Bin .../a919b33197965846f21074b24e30250d67277bce.ttf | Bin .../a98e908e2ed21b22228ea59ebcc0f05034c86f2e.ttf | Bin .../ab14b4eb9d7a67e293f51d30d719add06c9d6e06.ttf | Bin .../ab40c89624a6104e5d0a2308e448a989302f515b.ttf | Bin .../ad01ab2ea1cb1a4d3a2783e2675112ef11ae6404.ttf | Bin .../af3086380b743099c54a3b11b96766039ea62fcd.ttf | Bin .../af85624080af5627fb050f570d148a62f04fda74.ttf | Bin .../b082211be29a3e2cf91f0fd43497e40b2a27b344.ttf | Bin .../b121d4306b2e3add5abbaad21d95fcf04aacbd64.ttf | Bin .../b151cfcdaa77585d77f17a42158e0873fc8e2633.ttf | Bin .../b3075ca42b27dde7341c2d0ae16703c5b6640df0.ttf | Bin .../b31e6c52a31edadc16f1bec9efe6019e2d59824a.ttf | Bin .../b6031119874ae9ff1dd65383a335e361c0962220.ttf | Bin .../b722a7d09e60421f3efbc706ad348ab47b88567b.ttf | Bin .../bb0c53752e85c3d28973ebc913287b8987d3dfe8.ttf | Bin .../bb9473d2403488714043bcfb946c9f78b86ad627.ttf | Bin .../bf39b0e91ef9807f15a9e283a21a14a209fd2cfc.ttf | Bin .../bf962d3202883a820aed019d9b5c1838c2ff69c6.ttf | Bin .../c4e48b0886ef460f532fb49f00047ec92c432ec0.ttf | Bin .../cc5f3d2d717fb6bd4dfae1c16d48a2cb8e12233b.ttf | Bin .../d23d76ea0909c14972796937ba072b5a40c1e257.ttf | Bin .../d3129450fafe5e5c98cfc25a4e71809b1b4d2855.ttf | Bin .../d629e7fedc0b350222d7987345fe61613fa3929a.ttf | Bin .../d9b8bc10985f24796826c29f7ccba3d0ae11ec02.ttf | Bin .../dcf774ca21062e7439f98658b18974ea8b956d0c.ttf | Bin .../df768b9c257e0c9c35786c47cae15c46571d56be.ttf | Bin .../e207635780b42f898d58654b65098763e340f5c7.ttf | Bin .../e39391c77a6321c2ac7a2d644de0396470cd4bfe.ttf | Bin .../e5ff44940364c2247abed50bdda30d2ef5aedfe4.ttf | Bin .../e68a88939e0f06e34d2bc911f09b70890289c8fd.ttf | Bin .../e8691822f6a705e3e9fb48a0405c645b1a036590.ttf | Bin .../ea3f63620511b2097200d23774ffef197e829e69.ttf | Bin .../ee39587d13b2afa5499cc79e45780aa79293bbd4.ttf | Bin .../ef86fe710cfea877bbe0dbb6946a1f88d0661031.ttf | Bin .../f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf | Bin .../f443753e8ffe8e8aae606cfba158e00334b6efb1.ttf | Bin .../f499fbc23865022234775c43503bba2e63978fe1.ttf | Bin .../f518eb6f6b5eec2946c9fbbbde44e45d46f5e2ac.ttf | Bin .../f75c4b05a0a4d67c1a808081ae3d74a9c66509e8.ttf | Bin .../f79eb71df4e4c9c273b67b89a06e5ff9e3c1f834.ttf | Bin .../f9b1dd4dcb515e757789a22cb4241107746fd3d0.ttf | Bin .../fbb6c84c9e1fe0c39e152fbe845e51fd81f6748e.ttf | Bin .../fcbaa518d3cce441ed37ae3b1fed6a19e9b54efd.ttf | Bin .../fcdcffbdf1c4c97c05308d7600e4c283eb47dbca.ttf | Bin .../fcea341ba6489536390384d8403ce5287ba71a4a.ttf | Bin .../fd07ea46e4d8368ada1776208c07fd596f727852.ttf | Bin .../ffa0f5d2d9025486d8469d8b1fdd983e7632499b.ttf | Bin test/{shaping => shape}/data/in-house/meson.build | 0 .../data/in-house/tests/aat-morx.tests | 0 .../data/in-house/tests/aat-trak.tests | 0 .../in-house/tests/arabic-fallback-shaping.tests | 0 .../data/in-house/tests/arabic-feature-order.tests | 0 .../data/in-house/tests/arabic-like-joining.tests | 0 .../data/in-house/tests/arabic-mark-attach.tests | 0 .../data/in-house/tests/arabic-mark-order.tests | 0 .../data/in-house/tests/arabic-stch.tests | 0 .../data/in-house/tests/automatic-fractions.tests | 0 .../data/in-house/tests/cluster.tests | 0 .../data/in-house/tests/collections.tests | 0 .../data/in-house/tests/color-fonts.tests | 0 .../data/in-house/tests/context-matching.tests | 0 .../data/in-house/tests/cursive-positioning.tests | 0 .../data/in-house/tests/default-ignorables.tests | 0 .../data/in-house/tests/digits.tests | 0 .../data/in-house/tests/emoji-clusters.tests | 0 .../data/in-house/tests/emoji.tests | 0 .../data/in-house/tests/fallback-positioning.tests | 0 .../data/in-house/tests/hangul-jamo.tests | 0 .../data/in-house/tests/hyphens.tests | 0 .../tests/indic-consonant-with-stacker.tests | 0 .../data/in-house/tests/indic-decompose.tests | 0 .../data/in-house/tests/indic-init.tests | 0 .../in-house/tests/indic-joiner-candrabindu.tests | 0 .../data/in-house/tests/indic-joiners.tests | 0 .../data/in-house/tests/indic-old-spec.tests | 0 .../data/in-house/tests/indic-pref-blocking.tests | 0 .../in-house/tests/indic-script-extensions.tests | 0 .../data/in-house/tests/indic-special-cases.tests | 0 .../data/in-house/tests/indic-syllable.tests | 0 .../tests/indic-vowel-letter-spoofing.tests | 0 .../data/in-house/tests/kern-format2.tests | 0 .../data/in-house/tests/khmer-mark-order.tests | 0 .../data/in-house/tests/khmer-misc.tests | 0 .../data/in-house/tests/language-tags.tests | 0 .../data/in-house/tests/ligature-id.tests | 0 .../data/in-house/tests/macos.tests | 0 .../data/in-house/tests/mark-attachment.tests | 0 .../data/in-house/tests/mark-filtering-sets.tests | 0 .../tests/mongolian-variation-selector.tests | 0 .../data/in-house/tests/myanmar-misc.tests | 0 .../data/in-house/tests/myanmar-syllable.tests | 0 .../data/in-house/tests/myanmar-zawgyi.tests | 0 .../data/in-house/tests/none-directional.tests | 0 .../data/in-house/tests/positioning-features.tests | 0 .../data/in-house/tests/rand.tests | 0 .../data/in-house/tests/reverse-sub.tests | 0 .../data/in-house/tests/rotation.tests | 0 .../data/in-house/tests/simple.tests | 0 .../data/in-house/tests/sinhala.tests | 0 .../data/in-house/tests/spaces.tests | 0 .../in-house/tests/tibetan-contractions-1.tests | 0 .../in-house/tests/tibetan-contractions-2.tests | 0 .../data/in-house/tests/tibetan-vowels.tests | 0 .../data/in-house/tests/tt-kern-gpos.tests | 0 .../data/in-house/tests/use-indic3.tests | 0 .../data/in-house/tests/use-marchen.tests | 0 .../data/in-house/tests/use-syllable.tests | 0 .../in-house/tests/use-vowel-letter-spoofing.tests | 0 .../data/in-house/tests/use.tests | 0 .../data/in-house/tests/variations-rvrn.tests | 0 .../data/in-house/tests/variations.tests | 0 .../data/in-house/tests/vertical.tests | 0 .../data/in-house/tests/zero-width-marks.tests | 0 .../data/text-rendering-tests/COPYING | 0 .../data/text-rendering-tests/DISABLED | 0 .../data/text-rendering-tests/Makefile.am | 0 .../data/text-rendering-tests/Makefile.sources | 0 .../data/text-rendering-tests/README | 0 .../fonts/AdobeVFPrototype-Subset.otf | Bin .../text-rendering-tests/fonts/FDArrayTest257.otf | Bin .../text-rendering-tests/fonts/FDArrayTest65535.otf | Bin .../fonts/NotoSansBalinese-Regular.ttf | Bin .../fonts/NotoSansKannada-Regular.ttf | Bin .../fonts/NotoSerifKannada-Regular.ttf | Bin .../text-rendering-tests/fonts/Selawik-README.md | 0 .../text-rendering-tests/fonts/Selawik-variable.ttf | Bin .../data/text-rendering-tests/fonts/TestAVAR.ttf | Bin .../data/text-rendering-tests/fonts/TestCMAP14.otf | Bin .../fonts/TestCMAPMacTurkish.ttf | Bin .../text-rendering-tests/fonts/TestCVARGVAROne.ttf | Bin .../text-rendering-tests/fonts/TestCVARGVARTwo.ttf | Bin .../data/text-rendering-tests/fonts/TestGLYFOne.ttf | Bin .../text-rendering-tests/fonts/TestGPOSFour.ttf | Bin .../data/text-rendering-tests/fonts/TestGPOSOne.ttf | Bin .../text-rendering-tests/fonts/TestGPOSThree.ttf | Bin .../data/text-rendering-tests/fonts/TestGPOSTwo.otf | Bin .../data/text-rendering-tests/fonts/TestGSUBOne.otf | Bin .../text-rendering-tests/fonts/TestGSUBThree.ttf | Bin .../fonts/TestGVAR-Composite-0.ttf | Bin .../fonts/TestGVAR-Composite-Missing.ttf | Bin .../text-rendering-tests/fonts/TestGVAREight.ttf | Bin .../text-rendering-tests/fonts/TestGVARFour.ttf | Bin .../text-rendering-tests/fonts/TestGVARNine.ttf | Bin .../data/text-rendering-tests/fonts/TestGVAROne.ttf | Bin .../text-rendering-tests/fonts/TestGVARThree.ttf | Bin .../data/text-rendering-tests/fonts/TestGVARTwo.ttf | Bin .../data/text-rendering-tests/fonts/TestHVAROne.otf | Bin .../data/text-rendering-tests/fonts/TestHVARTwo.ttf | Bin .../data/text-rendering-tests/fonts/TestKERNOne.otf | Bin .../text-rendering-tests/fonts/TestMORXEight.ttf | Bin .../text-rendering-tests/fonts/TestMORXEighteen.ttf | Bin .../text-rendering-tests/fonts/TestMORXEleven.ttf | Bin .../text-rendering-tests/fonts/TestMORXForty.ttf | Bin .../text-rendering-tests/fonts/TestMORXFour.ttf | Bin .../text-rendering-tests/fonts/TestMORXFourteen.ttf | Bin .../fonts/TestMORXFourtyone.ttf | Bin .../text-rendering-tests/fonts/TestMORXNine.ttf | Bin .../data/text-rendering-tests/fonts/TestMORXOne.ttf | Bin .../fonts/TestMORXSeventeen.ttf | Bin .../text-rendering-tests/fonts/TestMORXSixteen.ttf | Bin .../data/text-rendering-tests/fonts/TestMORXTen.ttf | Bin .../text-rendering-tests/fonts/TestMORXThirteen.ttf | Bin .../fonts/TestMORXThirtyeight.ttf | Bin .../fonts/TestMORXThirtyfive.ttf | Bin .../fonts/TestMORXThirtyfour.ttf | Bin .../fonts/TestMORXThirtynine.ttf | Bin .../fonts/TestMORXThirtyone.ttf | Bin .../fonts/TestMORXThirtyseven.ttf | Bin .../fonts/TestMORXThirtysix.ttf | Bin .../fonts/TestMORXThirtythree.ttf | Bin .../fonts/TestMORXThirtytwo.ttf | Bin .../text-rendering-tests/fonts/TestMORXThree.ttf | Bin .../text-rendering-tests/fonts/TestMORXTwelve.ttf | Bin .../text-rendering-tests/fonts/TestMORXTwenty.ttf | Bin .../fonts/TestMORXTwentyeight.ttf | Bin .../fonts/TestMORXTwentyfive.ttf | Bin .../fonts/TestMORXTwentyfour.ttf | Bin .../fonts/TestMORXTwentynine.ttf | Bin .../fonts/TestMORXTwentyone.ttf | Bin .../fonts/TestMORXTwentyseven.ttf | Bin .../fonts/TestMORXTwentysix.ttf | Bin .../fonts/TestMORXTwentythree.ttf | Bin .../fonts/TestMORXTwentytwo.ttf | Bin .../data/text-rendering-tests/fonts/TestMORXTwo.ttf | Bin .../data/text-rendering-tests/fonts/TestSFNTOne.otf | Bin .../data/text-rendering-tests/fonts/TestSFNTTwo.ttf | Bin .../fonts/TestSVGgradientTransform.otf | Bin .../data/text-rendering-tests/fonts/TestSVGgzip.otf | Bin .../fonts/TestSVGmultiGlyphs.otf | Bin .../text-rendering-tests/fonts/TestShapeAran.ttf | Bin .../text-rendering-tests/fonts/TestShapeEthi.ttf | Bin .../text-rendering-tests/fonts/TestShapeKndaV3.ttf | Bin .../text-rendering-tests/fonts/TestShapeLana.ttf | Bin .../data/text-rendering-tests/fonts/TestTRAKOne.ttf | Bin .../data/text-rendering-tests/fonts/Zycon.ttf | Bin .../data/text-rendering-tests/meson.build | 0 .../data/text-rendering-tests/tests/AVAR-1.tests | 0 .../data/text-rendering-tests/tests/CFF-1.tests | 0 .../data/text-rendering-tests/tests/CFF-2.tests | 0 .../data/text-rendering-tests/tests/CFF2-1.tests | 0 .../data/text-rendering-tests/tests/CMAP-1.tests | 0 .../data/text-rendering-tests/tests/CMAP-2.tests | 0 .../data/text-rendering-tests/tests/CMAP-3.tests | 0 .../data/text-rendering-tests/tests/CVAR-1.tests | 0 .../data/text-rendering-tests/tests/CVAR-2.tests | 0 .../data/text-rendering-tests/tests/GLYF-1.tests | 0 .../data/text-rendering-tests/tests/GPOS-1.tests | 0 .../data/text-rendering-tests/tests/GPOS-2.tests | 0 .../data/text-rendering-tests/tests/GPOS-3.tests | 0 .../data/text-rendering-tests/tests/GPOS-4.tests | 0 .../data/text-rendering-tests/tests/GPOS-5.tests | 0 .../data/text-rendering-tests/tests/GSUB-1.tests | 0 .../data/text-rendering-tests/tests/GSUB-2.tests | 0 .../data/text-rendering-tests/tests/GSUB-3.tests | 0 .../data/text-rendering-tests/tests/GVAR-1.tests | 0 .../data/text-rendering-tests/tests/GVAR-2.tests | 0 .../data/text-rendering-tests/tests/GVAR-3.tests | 0 .../data/text-rendering-tests/tests/GVAR-4.tests | 0 .../data/text-rendering-tests/tests/GVAR-5.tests | 0 .../data/text-rendering-tests/tests/GVAR-6.tests | 0 .../data/text-rendering-tests/tests/GVAR-7.tests | 0 .../data/text-rendering-tests/tests/GVAR-8.tests | 0 .../data/text-rendering-tests/tests/GVAR-9.tests | 0 .../data/text-rendering-tests/tests/HVAR-1.tests | 0 .../data/text-rendering-tests/tests/HVAR-2.tests | 0 .../data/text-rendering-tests/tests/KERN-1.tests | 0 .../data/text-rendering-tests/tests/KERN-2.tests | 0 .../data/text-rendering-tests/tests/MORX-1.tests | 0 .../data/text-rendering-tests/tests/MORX-10.tests | 0 .../data/text-rendering-tests/tests/MORX-11.tests | 0 .../data/text-rendering-tests/tests/MORX-12.tests | 0 .../data/text-rendering-tests/tests/MORX-13.tests | 0 .../data/text-rendering-tests/tests/MORX-14.tests | 0 .../data/text-rendering-tests/tests/MORX-16.tests | 0 .../data/text-rendering-tests/tests/MORX-17.tests | 0 .../data/text-rendering-tests/tests/MORX-18.tests | 0 .../data/text-rendering-tests/tests/MORX-19.tests | 0 .../data/text-rendering-tests/tests/MORX-2.tests | 0 .../data/text-rendering-tests/tests/MORX-20.tests | 0 .../data/text-rendering-tests/tests/MORX-21.tests | 0 .../data/text-rendering-tests/tests/MORX-22.tests | 0 .../data/text-rendering-tests/tests/MORX-23.tests | 0 .../data/text-rendering-tests/tests/MORX-24.tests | 0 .../data/text-rendering-tests/tests/MORX-25.tests | 0 .../data/text-rendering-tests/tests/MORX-26.tests | 0 .../data/text-rendering-tests/tests/MORX-27.tests | 0 .../data/text-rendering-tests/tests/MORX-28.tests | 0 .../data/text-rendering-tests/tests/MORX-29.tests | 0 .../data/text-rendering-tests/tests/MORX-3.tests | 0 .../data/text-rendering-tests/tests/MORX-30.tests | 0 .../data/text-rendering-tests/tests/MORX-31.tests | 0 .../data/text-rendering-tests/tests/MORX-32.tests | 0 .../data/text-rendering-tests/tests/MORX-33.tests | 0 .../data/text-rendering-tests/tests/MORX-34.tests | 0 .../data/text-rendering-tests/tests/MORX-35.tests | 0 .../data/text-rendering-tests/tests/MORX-36.tests | 0 .../data/text-rendering-tests/tests/MORX-37.tests | 0 .../data/text-rendering-tests/tests/MORX-38.tests | 0 .../data/text-rendering-tests/tests/MORX-39.tests | 0 .../data/text-rendering-tests/tests/MORX-4.tests | 0 .../data/text-rendering-tests/tests/MORX-40.tests | 0 .../data/text-rendering-tests/tests/MORX-41.tests | 0 .../data/text-rendering-tests/tests/MORX-5.tests | 0 .../data/text-rendering-tests/tests/MORX-6.tests | 0 .../data/text-rendering-tests/tests/MORX-7.tests | 0 .../data/text-rendering-tests/tests/MORX-8.tests | 0 .../data/text-rendering-tests/tests/MORX-9.tests | 0 .../data/text-rendering-tests/tests/SFNT-1.tests | 0 .../data/text-rendering-tests/tests/SFNT-2.tests | 0 .../data/text-rendering-tests/tests/SHARAN-1.tests | 0 .../data/text-rendering-tests/tests/SHBALI-1.tests | 0 .../data/text-rendering-tests/tests/SHBALI-2.tests | 0 .../data/text-rendering-tests/tests/SHBALI-3.tests | 0 .../data/text-rendering-tests/tests/SHKNDA-1.tests | 0 .../data/text-rendering-tests/tests/SHKNDA-2.tests | 0 .../data/text-rendering-tests/tests/SHKNDA-3.tests | 0 .../data/text-rendering-tests/tests/SHLANA-1.tests | 0 .../data/text-rendering-tests/tests/SHLANA-10.tests | 0 .../data/text-rendering-tests/tests/SHLANA-2.tests | 0 .../data/text-rendering-tests/tests/SHLANA-3.tests | 0 .../data/text-rendering-tests/tests/SHLANA-4.tests | 0 .../data/text-rendering-tests/tests/SHLANA-5.tests | 0 .../data/text-rendering-tests/tests/SHLANA-6.tests | 0 .../data/text-rendering-tests/tests/SHLANA-7.tests | 0 .../data/text-rendering-tests/tests/SHLANA-8.tests | 0 .../data/text-rendering-tests/tests/SHLANA-9.tests | 0 .../data/text-rendering-tests/update.py | 0 test/{shaping => shape}/hb-diff | 0 test/{shaping => shape}/hb-diff-colorize | 0 test/{shaping => shape}/hb-diff-filter-failures | 0 test/{shaping => shape}/hb-diff-stat | 0 test/{shaping => shape}/hb-unicode-decode | 0 test/{shaping => shape}/hb-unicode-encode | 0 test/{shaping => shape}/hb-unicode-prettyname | 0 test/{shaping => shape}/hb_test_tools.py | 0 test/{shaping => shape}/meson.build | 0 test/{shaping => shape}/record-test.sh | 0 test/{shaping => shape}/run-tests.py | 0 .../script-arabic/language-persian/mehran.txt | 0 .../language-urdu/crulp/ligatures/2grams.txt | 0 .../language-urdu/crulp/ligatures/3grams.txt | 0 .../language-urdu/crulp/ligatures/4grams.txt | 0 .../language-urdu/crulp/ligatures/5grams.txt | 0 .../language-urdu/crulp/ligatures/6grams.txt | 0 .../language-urdu/crulp/ligatures/7grams.txt | 0 .../language-urdu/crulp/ligatures/8grams.txt | 0 .../language-urdu/crulp/ligatures/LICENSE | 0 .../language-urdu/crulp/ligatures/README | 0 .../language-urdu/crulp/ligatures/SOURCES | 0 .../script-arabic/misc/diacritics/lam-alef.txt | 0 .../misc/diacritics/language-arabic.txt | 0 .../misc/diacritics/language-persian.txt | 0 .../script-arabic/misc/diacritics/language-urdu.txt | 0 .../misc/diacritics/ligature-components.txt | 0 .../misc/diacritics/ligature-diacritics.txt | 0 .../script-arabic/misc/diacritics/mark-skipping.txt | 0 .../shaper-arabic/script-mongolian/misc/misc.txt | 0 .../script-mongolian/misc/non-joining.txt | 0 .../shaper-arabic/script-mongolian/misc/poem.txt | 0 .../script-mongolian/misc/variation-selectors.txt | 0 .../in-house/shaper-arabic/script-nko/misc/misc.txt | 0 .../shaper-arabic/script-phags-pa/misc/misc.txt | 0 .../script-syriac/misc/abbreviation-mark.txt | 0 .../shaper-arabic/script-syriac/misc/alaph.txt | 0 .../shaper-default/script-ethiopic/misc/misc.txt | 0 .../shaper-default/script-han/misc/cjk-compat.txt | 0 .../script-hiragana/misc/kazuraki-liga-lines.txt | 0 .../script-hiragana/misc/kazuraki-liga.txt | 0 .../shaper-default/script-linear-b/misc/misc.txt | 0 .../shaper-default/script-tifinagh/misc/misc.txt | 0 .../shaper-hangul/script-hangul/misc/misc.txt | 0 .../shaper-hebrew/script-hebrew/misc/diacritics.txt | 0 .../shaper-indic/script-assamese/utrrs/LICENSE | 0 .../shaper-indic/script-assamese/utrrs/README | 0 .../shaper-indic/script-assamese/utrrs/SOURCES | 0 .../IndicFontFeatureCodepoint-AdditionalVowels.txt | 0 .../IndicFontFeatureCodepoint-Consonants.txt | 0 .../IndicFontFeatureCodepoint-DependentVowels.txt | 0 .../codepoint/IndicFontFeatureCodepoint-Digits.txt | 0 .../IndicFontFeatureCodepoint-IndependentVowels.txt | 0 .../IndicFontFeatureCodepoint-Reserved.txt | 0 .../IndicFontFeatureCodepoint-VariousSigns.txt | 0 .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt | 0 .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt | 0 .../utrrs/gsub/IndicFontFeatureGSUB.txt | 0 .../script-bengali/bengali-vowel-letters.txt | 0 .../shaper-indic/script-bengali/misc/misc.txt | 0 .../shaper-indic/script-bengali/misc/reph.txt | 0 .../shaper-indic/script-bengali/utrrs/LICENSE | 0 .../shaper-indic/script-bengali/utrrs/README | 0 .../shaper-indic/script-bengali/utrrs/SOURCES | 0 .../IndicFontFeatureCodepoint-AdditionalVowels.txt | 0 .../IndicFontFeatureCodepoint-Consonants.txt | 0 .../IndicFontFeatureCodepoint-DependentVowels.txt | 0 .../codepoint/IndicFontFeatureCodepoint-Digits.txt | 0 .../IndicFontFeatureCodepoint-IndependentVowels.txt | 0 .../IndicFontFeatureCodepoint-Reserved.txt | 0 .../IndicFontFeatureCodepoint-VariousSigns.txt | 0 .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt | 0 .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt | 0 .../utrrs/gsub/IndicFontFeatureGSUB.txt | 0 .../devanagari-atomic-consonants.txt | 0 .../script-devanagari/devanagari-vowel-letters.txt | 0 .../script-devanagari/misc/dottedcircle.txt | 0 .../shaper-indic/script-devanagari/misc/eyelash.txt | 0 .../shaper-indic/script-devanagari/misc/joiners.txt | 0 .../shaper-indic/script-devanagari/misc/misc.txt | 0 .../script-devanagari/misc/spec-deviations.txt | 0 .../script-devanagari/misc/tricky-reordering.txt | 0 .../shaper-indic/script-devanagari/utrrs/LICENSE | 0 .../shaper-indic/script-devanagari/utrrs/README | 0 .../shaper-indic/script-devanagari/utrrs/SOURCES | 0 ...dicFontFeatureCodepoint-AdditionalConsonants.txt | 0 .../IndicFontFeatureCodepoint-AdditionalVowels.txt | 0 .../IndicFontFeatureCodepoint-Consonants.txt | 0 .../IndicFontFeatureCodepoint-DependentVowels.txt | 0 ...ntFeatureCodepoint-DevnagariSpecificAddition.txt | 0 .../codepoint/IndicFontFeatureCodepoint-Digits.txt | 0 ...IndicFontFeatureCodepoint-GenericPunctuation.txt | 0 .../IndicFontFeatureCodepoint-IndependentVowels.txt | 0 .../IndicFontFeatureCodepoint-VariousSigns.txt | 0 .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt | 0 .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt | 0 .../utrrs/gsub/IndicFontFeatureGSUB.txt | 0 .../script-gujarati/gujarati-vowel-letters.txt | 0 .../shaper-indic/script-gujarati/utrrs/LICENSE | 0 .../shaper-indic/script-gujarati/utrrs/README | 0 .../shaper-indic/script-gujarati/utrrs/SOURCES | 0 .../IndicFontFeatureCodepoint-AdditionalVowels.txt | 0 .../IndicFontFeatureCodepoint-Consonants.txt | 0 .../IndicFontFeatureCodepoint-DependentVowels.txt | 0 .../codepoint/IndicFontFeatureCodepoint-Digits.txt | 0 .../IndicFontFeatureCodepoint-IndependentVowels.txt | 0 .../IndicFontFeatureCodepoint-Reserved.txt | 0 .../IndicFontFeatureCodepoint-VariousSigns.txt | 0 .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt | 0 .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt | 0 .../utrrs/gsub/IndicFontFeatureGSUB.txt | 0 .../script-gurmukhi/gurmukhi-vowel-letters.txt | 0 .../shaper-indic/script-gurmukhi/misc/misc.txt | 0 .../shaper-indic/script-gurmukhi/utrrs/LICENSE | 0 .../shaper-indic/script-gurmukhi/utrrs/README | 0 .../shaper-indic/script-gurmukhi/utrrs/SOURCES | 0 .../IndicFontFeatureCodepoint-Consonants.txt | 0 .../IndicFontFeatureCodepoint-DependentVowels.txt | 0 .../codepoint/IndicFontFeatureCodepoint-Digits.txt | 0 .../IndicFontFeatureCodepoint-GurmukhiSpecific.txt | 0 .../IndicFontFeatureCodepoint-IndependentVowels.txt | 0 .../IndicFontFeatureCodepoint-Reserved.txt | 0 .../IndicFontFeatureCodepoint-VariousSigns.txt | 0 .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt | 0 .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt | 0 .../utrrs/gsub/IndicFontFeatureGSUB.txt | 0 .../script-kannada/kannada-vowel-letters.txt | 0 .../shaper-indic/script-kannada/misc/misc.txt | 0 .../script-kannada/misc/right-matras.txt | 0 .../shaper-indic/script-kannada/utrrs/LICENSE | 0 .../shaper-indic/script-kannada/utrrs/README | 0 .../shaper-indic/script-kannada/utrrs/SOURCES | 0 ...dicFontFeatureCodepoint-AdditionalConsonants.txt | 0 .../IndicFontFeatureCodepoint-AdditionalVowels.txt | 0 .../IndicFontFeatureCodepoint-Consonants.txt | 0 .../IndicFontFeatureCodepoint-DependentVowels.txt | 0 .../codepoint/IndicFontFeatureCodepoint-Digits.txt | 0 .../IndicFontFeatureCodepoint-IndependentVowels.txt | 0 .../IndicFontFeatureCodepoint-Reserved.txt | 0 .../IndicFontFeatureCodepoint-VariousSigns.txt | 0 .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt | 0 .../utrrs/gsub/IndicFontFeatureGSUB.txt | 0 .../script-malayalam/malayalam-vowel-letters.txt | 0 .../shaper-indic/script-malayalam/misc/cibu.txt | 0 .../shaper-indic/script-malayalam/misc/dot-reph.txt | 0 .../shaper-indic/script-malayalam/misc/misc.txt | 0 .../shaper-indic/script-malayalam/utrrs/LICENSE | 0 .../shaper-indic/script-malayalam/utrrs/README | 0 .../shaper-indic/script-malayalam/utrrs/SOURCES | 0 .../IndicFontFeatureCodepoint-AdditionalVowels.txt | 0 .../IndicFontFeatureCodepoint-Consonants.txt | 0 .../IndicFontFeatureCodepoint-DependentVowels.txt | 0 .../codepoint/IndicFontFeatureCodepoint-Digits.txt | 0 .../IndicFontFeatureCodepoint-IndependentVowels.txt | 0 .../IndicFontFeatureCodepoint-Reserved.txt | 0 .../IndicFontFeatureCodepoint-VariousSigns.txt | 0 .../utrrs/gsub/IndicFontFeatureGSUB.txt | 0 .../shaper-indic/script-oriya/misc/bindu.txt | 0 .../shaper-indic/script-oriya/misc/misc.txt | 0 .../script-oriya/oriya-vowel-letters.txt | 0 .../shaper-indic/script-oriya/utrrs/LICENSE | 0 .../in-house/shaper-indic/script-oriya/utrrs/README | 0 .../shaper-indic/script-oriya/utrrs/SOURCES | 0 ...dicFontFeatureCodepoint-AdditionalConsonants.txt | 0 .../IndicFontFeatureCodepoint-AdditionalVowels.txt | 0 .../IndicFontFeatureCodepoint-Consonants.txt | 0 .../IndicFontFeatureCodepoint-DependentVowels.txt | 0 .../codepoint/IndicFontFeatureCodepoint-Digits.txt | 0 .../IndicFontFeatureCodepoint-IndependentVowels.txt | 0 .../IndicFontFeatureCodepoint-OriyaSpecific.txt | 0 .../IndicFontFeatureCodepoint-Reserved.txt | 0 .../IndicFontFeatureCodepoint-VariousSigns.txt | 0 .../utrrs/gsub/IndicFontFeatureGSUB.txt | 0 .../shaper-indic/script-sinhala/misc/extensive.txt | 0 .../shaper-indic/script-sinhala/misc/misc.txt | 0 .../shaper-indic/script-sinhala/misc/reph.txt | 0 .../script-sinhala/misc/split-matras.txt | 0 .../shaper-indic/script-sinhala/utrrs/LICENSE | 0 .../shaper-indic/script-sinhala/utrrs/README | 0 .../shaper-indic/script-sinhala/utrrs/SOURCES | 0 .../IndicFontFeatureCodepoint-Consonants.txt | 0 .../IndicFontFeatureCodepoint-DependentVowels.txt | 0 .../IndicFontFeatureCodepoint-IndependentVowels.txt | 0 .../IndicFontFeatureCodepoint-Punctuation.txt | 0 .../IndicFontFeatureCodepoint-VariousSigns.txt | 0 .../utrrs/gpos/IndicFontFeatureGPOS.txt | 0 .../utrrs/gsub/IndicFontFeatureGSUB-Conjunct.txt | 0 .../gsub/IndicFontFeatureGSUB-Rakaaraansaya.txt | 0 .../utrrs/gsub/IndicFontFeatureGSUB-Repaya.txt | 0 .../gsub/IndicFontFeatureGSUB-Special-Cases.txt | 0 .../gsub/IndicFontFeatureGSUB-TouchingLetters.txt | 0 .../utrrs/gsub/IndicFontFeatureGSUB-Yansaya.txt | 0 .../utrrs/gsub/IndicFontFeatureGSUB.txt | 0 .../shaper-indic/script-tamil/misc/misc.txt | 0 .../shaper-indic/script-tamil/utrrs/LICENSE | 0 .../in-house/shaper-indic/script-tamil/utrrs/README | 0 .../shaper-indic/script-tamil/utrrs/SOURCES | 0 .../IndicFontFeatureCodepoint-Consonants.txt | 0 .../IndicFontFeatureCodepoint-CurrencySymbols.txt | 0 .../IndicFontFeatureCodepoint-DependentVowels.txt | 0 .../codepoint/IndicFontFeatureCodepoint-Digits.txt | 0 .../IndicFontFeatureCodepoint-IndependentVowels.txt | 0 .../IndicFontFeatureCodepoint-Numerics.txt | 0 .../IndicFontFeatureCodepoint-Reserved.txt | 0 .../codepoint/IndicFontFeatureCodepoint-Symbols.txt | 0 .../IndicFontFeatureCodepoint-TamilSymbol.txt | 0 .../IndicFontFeatureCodepoint-VariousSigns.txt | 0 .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt | 0 .../utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt | 0 .../utrrs/gsub/IndicFontFeatureGSUB.txt | 0 .../shaper-indic/script-telugu/misc/misc.txt | 0 .../script-telugu/telugu-vowel-letters.txt | 0 .../shaper-indic/script-telugu/utrrs/LICENSE | 0 .../shaper-indic/script-telugu/utrrs/README | 0 .../shaper-indic/script-telugu/utrrs/SOURCES | 0 .../IndicFontFeatureCodepoint-AdditionalVowels.txt | 0 .../IndicFontFeatureCodepoint-Consonants.txt | 0 .../IndicFontFeatureCodepoint-DependentVowels.txt | 0 .../codepoint/IndicFontFeatureCodepoint-Digits.txt | 0 .../IndicFontFeatureCodepoint-IndependentVowels.txt | 0 .../IndicFontFeatureCodepoint-Reserved.txt | 0 .../IndicFontFeatureCodepoint-VariousSigns.txt | 0 .../utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt | 0 .../utrrs/gsub/IndicFontFeatureGSUB.txt | 0 .../texts/in-house/shaper-khmer/misc.txt | 0 .../in-house/shaper-khmer/other-marks-invalid.txt | 0 .../texts/in-house/shaper-khmer/other-marks.txt | 0 .../shaper-myanmar/script-myanmar/misc/misc.txt | 0 .../shaper-myanmar/script-myanmar/misc/otspec.txt | 0 .../shaper-myanmar/script-myanmar/misc/utn11.txt | 0 .../shaper-thai/script-lao/misc/sara-am.txt | 0 .../in-house/shaper-thai/script-thai/misc/misc.txt | 0 .../shaper-thai/script-thai/misc/phinthu.txt | 0 .../shaper-thai/script-thai/misc/pua-shaping.txt | 0 .../shaper-thai/script-thai/misc/sara-am.txt | 0 .../script-tibetan/misc/contractions.txt | 0 .../shaper-tibetan/script-tibetan/misc/misc.txt | 0 .../texts/in-house/shaper-use/script-batak/misc.txt | 0 .../in-house/shaper-use/script-buginese/misc.txt | 0 .../texts/in-house/shaper-use/script-cham/misc.txt | 0 .../in-house/shaper-use/script-javanese/misc.txt | 0 .../in-house/shaper-use/script-kaithi/misc.txt | 0 .../in-house/shaper-use/script-kharoshti/misc.txt | 0 .../in-house/shaper-use/script-tai-tham/misc.txt | 0 .../in-house/shaper-use/script-tai-tham/torture.txt | 0 983 files changed, 8 insertions(+), 8 deletions(-) rename test/{shaping => shape}/Makefile.am (100%) rename test/{shaping => shape}/README.md (100%) rename test/{shaping => shape}/data/Makefile.am (100%) rename test/{shaping => shape}/data/aots/COPYING (100%) rename test/{shaping => shape}/data/aots/Makefile.am (100%) rename test/{shaping => shape}/data/aots/Makefile.sources (100%) rename test/{shaping => shape}/data/aots/fonts/classdef1_font1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/classdef1_font2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/classdef1_font3.otf (100%) rename test/{shaping => shape}/data/aots/fonts/classdef1_font4.otf (100%) rename test/{shaping => shape}/data/aots/fonts/classdef2_font1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/classdef2_font2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/classdef2_font3.otf (100%) rename test/{shaping => shape}/data/aots/fonts/classdef2_font4.otf (100%) rename test/{shaping => shape}/data/aots/fonts/cmap0_font1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/cmap10_font1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/cmap10_font2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/cmap12_font1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/cmap14_font1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/cmap2_font1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/cmap4_font1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/cmap4_font2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/cmap4_font3.otf (100%) rename test/{shaping => shape}/data/aots/fonts/cmap4_font4.otf (100%) rename test/{shaping => shape}/data/aots/fonts/cmap6_font1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/cmap6_font2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/cmap8_font1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/cmap_composition_font1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/cmap_subtableselection_font1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/cmap_subtableselection_font2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/cmap_subtableselection_font3.otf (100%) rename test/{shaping => shape}/data/aots/fonts/cmap_subtableselection_font4.otf (100%) rename test/{shaping => shape}/data/aots/fonts/cmap_subtableselection_font5.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos1_1_lookupflag_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos1_1_simple_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos1_1_simple_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos1_1_simple_f3.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos1_1_simple_f4.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos1_2_font1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos1_2_font2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos2_1_font6.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos2_1_font7.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos2_1_lookupflag_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos2_1_lookupflag_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos2_1_next_glyph_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos2_1_next_glyph_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos2_1_simple_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos2_2_font1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos2_2_font2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos2_2_font3.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos2_2_font4.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos2_2_font5.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos3_font1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos3_font2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos3_font3.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos4_lookupflag_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos4_lookupflag_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos4_multiple_anchors_1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos4_simple_1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos5_font1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos6_font1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos7_1_font1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos9_font1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos9_font2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining1_boundary_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining1_boundary_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining1_boundary_f3.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining1_boundary_f4.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining1_lookupflag_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining1_multiple_subrules_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining1_multiple_subrules_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining1_next_glyph_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining1_simple_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining1_simple_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining1_successive_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining2_boundary_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining2_boundary_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining2_boundary_f3.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining2_boundary_f4.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining2_lookupflag_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining2_multiple_subrules_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining2_multiple_subrules_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining2_next_glyph_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining2_simple_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining2_simple_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining2_successive_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining3_boundary_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining3_boundary_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining3_boundary_f3.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining3_boundary_f4.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining3_lookupflag_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining3_next_glyph_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining3_simple_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining3_simple_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_chaining3_successive_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context1_boundary_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context1_boundary_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context1_expansion_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context1_lookupflag_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context1_lookupflag_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context1_multiple_subrules_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context1_multiple_subrules_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context1_next_glyph_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context1_simple_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context1_simple_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context1_successive_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context2_boundary_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context2_boundary_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context2_classes_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context2_classes_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context2_expansion_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context2_lookupflag_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context2_lookupflag_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context2_multiple_subrules_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context2_multiple_subrules_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context2_next_glyph_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context2_simple_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context2_simple_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context2_successive_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context3_boundary_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context3_boundary_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context3_lookupflag_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context3_lookupflag_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context3_next_glyph_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context3_simple_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gpos_context3_successive_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub1_1_lookupflag_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub1_1_modulo_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub1_1_simple_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub1_2_lookupflag_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub1_2_simple_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub2_1_lookupflag_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub2_1_multiple_sequences_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub2_1_simple_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub3_1_lookupflag_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub3_1_multiple_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub3_1_simple_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub4_1_lookupflag_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub4_1_multiple_ligatures_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub4_1_multiple_ligatures_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub4_1_multiple_ligsets_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub4_1_simple_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub7_font1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub7_font2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining1_boundary_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining1_boundary_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining1_boundary_f3.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining1_boundary_f4.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining1_lookupflag_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining1_multiple_subrules_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining1_multiple_subrules_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining1_next_glyph_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining1_simple_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining1_simple_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining1_successive_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining2_boundary_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining2_boundary_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining2_boundary_f3.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining2_boundary_f4.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining2_lookupflag_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining2_multiple_subrules_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining2_multiple_subrules_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining2_next_glyph_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining2_simple_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining2_simple_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining2_successive_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining3_boundary_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining3_boundary_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining3_boundary_f3.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining3_boundary_f4.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining3_lookupflag_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining3_next_glyph_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining3_simple_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining3_simple_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_chaining3_successive_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context1_boundary_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context1_boundary_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context1_expansion_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context1_lookupflag_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context1_lookupflag_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context1_multiple_subrules_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context1_multiple_subrules_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context1_next_glyph_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context1_simple_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context1_simple_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context1_successive_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context2_boundary_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context2_boundary_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context2_classes_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context2_classes_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context2_expansion_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context2_lookupflag_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context2_lookupflag_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context2_multiple_subrules_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context2_multiple_subrules_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context2_next_glyph_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context2_simple_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context2_simple_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context2_successive_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context3_boundary_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context3_boundary_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context3_lookupflag_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context3_lookupflag_f2.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context3_next_glyph_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context3_simple_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/gsub_context3_successive_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/lookupflag_ignore_attach_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/lookupflag_ignore_base_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/lookupflag_ignore_combination_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/lookupflag_ignore_ligatures_f1.otf (100%) rename test/{shaping => shape}/data/aots/fonts/lookupflag_ignore_marks_f1.otf (100%) rename test/{shaping => shape}/data/aots/hb-aots-tester.cpp (100%) rename test/{shaping => shape}/data/aots/meson.build (100%) rename test/{shaping => shape}/data/aots/tests/classdef1.tests (100%) rename test/{shaping => shape}/data/aots/tests/classdef1_empty.tests (100%) rename test/{shaping => shape}/data/aots/tests/classdef1_multiple.tests (100%) rename test/{shaping => shape}/data/aots/tests/classdef1_single.tests (100%) rename test/{shaping => shape}/data/aots/tests/classdef2.tests (100%) rename test/{shaping => shape}/data/aots/tests/classdef2_empty.tests (100%) rename test/{shaping => shape}/data/aots/tests/classdef2_multiple.tests (100%) rename test/{shaping => shape}/data/aots/tests/classdef2_single.tests (100%) rename test/{shaping => shape}/data/aots/tests/cmap0.tests (100%) rename test/{shaping => shape}/data/aots/tests/cmap10.tests (100%) rename test/{shaping => shape}/data/aots/tests/cmap12.tests (100%) rename test/{shaping => shape}/data/aots/tests/cmap2.tests (100%) rename test/{shaping => shape}/data/aots/tests/cmap4.tests (100%) rename test/{shaping => shape}/data/aots/tests/cmap6.tests (100%) rename test/{shaping => shape}/data/aots/tests/cmap8.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos1_1_lookupflag.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos1_1_simple.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos1_2.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos1_2_lookupflag.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos2_1.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos2_1_lookupflag.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos2_1_next_glyph.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos2_1_simple.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos2_2.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos3.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos3_lookupflag.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos4_lookupflag.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos4_multiple_anchors.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos4_simple.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos5.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos6.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos7_1.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos9.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_chaining1_boundary.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_chaining1_lookupflag.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_chaining1_multiple_subrules.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_chaining1_next_glyph.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_chaining1_simple.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_chaining1_successive.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_chaining2_boundary.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_chaining2_lookupflag.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_chaining2_multiple_subrules.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_chaining2_next_glyph.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_chaining2_simple.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_chaining2_successive.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_chaining3_boundary.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_chaining3_lookupflag.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_chaining3_next_glyph.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_chaining3_simple.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_chaining3_successive.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_context1_boundary.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_context1_expansion.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_context1_lookupflag.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_context1_multiple_subrules.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_context1_next_glyph.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_context1_simple.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_context1_successive.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_context2_boundary.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_context2_classes.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_context2_expansion.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_context2_lookupflag.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_context2_multiple_subrules.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_context2_next_glyph.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_context2_simple.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_context2_successive.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_context3_boundary.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_context3_lookupflag.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_context3_next_glyph.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_context3_simple.tests (100%) rename test/{shaping => shape}/data/aots/tests/gpos_context3_successive.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub1_1_lookupflag.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub1_1_modulo.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub1_1_simple.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub1_2_lookupflag.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub1_2_simple.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub2_1_lookupflag.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub2_1_multiple_sequences.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub2_1_simple.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub3_1_lookupflag.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub3_1_multiple.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub3_1_simple.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub4_1_lookupflag.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub4_1_multiple_ligatures.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub4_1_multiple_ligsets.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub4_1_simple.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub7.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_chaining1_boundary.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_chaining1_lookupflag.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_chaining1_multiple_subrules.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_chaining1_next_glyph.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_chaining1_simple.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_chaining1_successive.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_chaining2_boundary.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_chaining2_lookupflag.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_chaining2_multiple_subrules.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_chaining2_next_glyph.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_chaining2_simple.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_chaining2_successive.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_chaining3_boundary.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_chaining3_lookupflag.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_chaining3_next_glyph.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_chaining3_simple.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_chaining3_successive.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_context1_boundary.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_context1_expansion.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_context1_lookupflag.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_context1_multiple_subrules.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_context1_next_glyph.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_context1_simple.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_context1_successive.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_context2_boundary.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_context2_classes.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_context2_expansion.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_context2_lookupflag.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_context2_multiple_subrules.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_context2_next_glyph.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_context2_simple.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_context2_successive.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_context3_boundary.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_context3_lookupflag.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_context3_next_glyph.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_context3_simple.tests (100%) rename test/{shaping => shape}/data/aots/tests/gsub_context3_successive.tests (100%) rename test/{shaping => shape}/data/aots/tests/lookupflag_ignore_attach.tests (100%) rename test/{shaping => shape}/data/aots/tests/lookupflag_ignore_base.tests (100%) rename test/{shaping => shape}/data/aots/tests/lookupflag_ignore_combination.tests (100%) rename test/{shaping => shape}/data/aots/tests/lookupflag_ignore_ligatures.tests (100%) rename test/{shaping => shape}/data/aots/tests/lookupflag_ignore_marks.tests (100%) rename test/{shaping => shape}/data/aots/update.py (100%) rename test/{shaping => shape}/data/in-house/COPYING (100%) rename test/{shaping => shape}/data/in-house/Makefile.am (100%) rename test/{shaping => shape}/data/in-house/Makefile.sources (100%) rename test/{shaping => shape}/data/in-house/fonts/03e3f463c3a985bc42096620cc415342818454fb.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/051d92f8bc6ff724511b296c27623f824de256e9.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/065b01e54f35f0d849fd43bd5b936212739a50cb.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/074a5ae6b19de8f29772fdd5df2d3d833f81f5e6.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/07f054357ff8638bac3711b422a1e31180bba863.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/08b4b136f418add748dc641eb4a83033476f1170.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/15dfc433a135a658b9f4b1a861b5cdd9658ccbb9.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/1735326da89f0818cd8c51a0600e9789812c0f94.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/191826b9643e3f124d865d617ae609db6a2ce203.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/1a3d8f381387dd29be1e897e4b5100ac8b4829e1.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/1a5face3fcbd929d228235c2f72bbd6f8eb37424.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/1c04a16f32a39c26c851b7fc014d2e8d298ba2b8.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/1ed7e9064f008f62de6ff0207bb4dd29409597a5.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/21b7fb9c1eeae260473809fbc1fe330f66a507cd.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/226bc2deab3846f1a682085f70c67d0421014144.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/24b8d24d00ae86f49791b746da4c9d3f717a51a8.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/2681c1c72d6484ed3410417f521b1b819b4e2392.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/270b89df543a7e48e206a2d830c0e10e5265c630.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/28f497629c04ceb15546c9a70e0730125ed6698d.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/298c9e1d955f10f6f72c6915c3c6ff9bf9695cec.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/2a670df15b73a5dc75a5cc491bde5ac93c5077dc.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/2c25beb56d9c556622d56b0b5d02b4670c034f89.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/341421e629668b1a1242245d39238ca48432d35d.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/3493e92eaded2661cadde752a39f9d58b11f0326.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/37033cc5cf37bb223d7355153016b6ccece93b28.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/373e67bf41ca264e260a9716162b71a23549e885.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/3998336402905b8be8301ef7f47cf7e050cbb1bd.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/3b791518a9ba89675df02f1eefbc9026a50648a6.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/3c96e7a303c58475a8c750bf4289bbe73784f37d.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/3cae6bfe5b57c07ba81ddbd54c02fe4f3a1e3bf6.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/3cc01fede4debd4b7794ccb1b16cdb9987ea7571.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/3cf6f8ac6d647473a43a3100e7494b202b2cfafe.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/3d0b77a2360aa6faa1385aaa510509ab70dfbeff.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/43ef465752be9af900745f72fe29cb853a1401a5.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/45855bc8d46332b39c4ab9e2ee1a26b1f896da6b.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/46669c8860cbfea13562a6ca0d83130ee571137b.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/49c9f7485c1392fa09a1b801bc2ffea79275f22e.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/4afb0e8b9a86bb9bd73a1247de4e33fbe3c1fd93.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/4cbbc461be066fccc611dcc634af6e8cb2705537.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/4d4206e30b2dbf1c1ef492a8eae1c9e7829ebad8.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/4fac3929fc3332834e93673780ec0fe94342d193.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/5028afb650b1bb718ed2131e872fbcce57828fff.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/53374c7ca3657be37efde7ed02ae34229a56ae1f.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/53a91c20e33a596f2be17fb68b382d6b7eb85d5c.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/54674a3111d209fb6be0ed31745314b7a8d2c244.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/55c88ebbe938680b08f92c3de20713183e0c7481.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/56cfd0e18d07f41c38e9598545a6d369127fc6f9.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/573d3a3177c9a8646e94c8a0d7b224334340946a.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/57a9d9f83020155cbb1d2be1f43d82388cbecc88.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/59a585a63b3df608fbeef00956c8c108deec7de6.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/5af5361ed4d1e8305780b100e1730cb09132f8d1.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/5bb74492f5e0ffa1fbb72e4c881be035120b6513.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/5dfad7735c6a67085f1b90d4d497e32907db4c78.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/604026ae5aaca83c49cd8416909d71ba3e1c1194.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/641ca9d7808b01cafa9a666c13811c9b56eb9c52.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/663aef6b019dbf45ffd74089e2b5f2496ceceb18.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/6677074106f94a2644da6aaaacd5bbd48cbdc7de.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/6f36d056bad6d478fc0bf7397bd52dc3bd197d5f.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/6ff0fbead4462d9f229167b4e6839eceb8465058.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/706c5d7b625f207bc0d874c67237aad6f1e9cd6f.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/738d9f3b8c2dfd03875bf35a61d28fd78faf17c8.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/73e84dac2fc6a2d1bc9250d1414353661088937d.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/757ebd573617a24aa9dfbf0b885c54875c6fe06b.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/7a37dc4d5bf018456aea291cee06daf004c0221c.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/7d18685e1529e4ceaad5b6095dfab2f9789e5bce.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/7e14e7883ed152baa158b80e207b66114c823a8b.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/8099955657a54e9ee38a6ba1d6f950ce58e3cc25.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/8116e5d8fedfbec74e45dc350d2416d810bed8c4.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/813c2f8e5512187fd982417a7fb4286728e6f4a8.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/81c368a33816fb20e9f647e8f24e2180f4720263.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/8228d035fcd65d62ec9728fb34f42c63be93a5d3.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/82f4f3b57bb55344e72e70231380202a52af5805.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/8454d22037f892e76614e1645d066689a0200e61.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/856ff9562451293cbeff6f396d4e3877c4f0a436.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/85fe0be440c64ac77699e21c2f1bd933a919167e.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/86cdd983c4e4c4d7f27dd405d6ceb7d4b9ed3d35.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/87f85d17d26f1fe9ad28d7365101958edaefb967.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/881642af1667ae30a54e58de8be904566d00508f.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/8a9fea2a7384f2116e5b84a9b31f83be7850ce21.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/8d9c4b193808b8bde94389ba7831c1fc6f9e794e.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/932ad5132c2761297c74e9976fe25b08e5ffa10b.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/94a5d6fb15a27521fba9ea4aee9cb39b2d03322a.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/96490dd2ff81233b335a650e7eb660e0e7b2eeea.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/98b7887cff91f722b92a8ff800120954606354f9.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/9fc3e6960b3520e5304033ef5fd540285f72f14d.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/AdobeBlank2.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/DFONT.dfont (100%) rename test/{shaping => shape}/data/in-house/fonts/HBTest-VF.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/MORXTwentyeight.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/TRAK.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/TTC.ttc (100%) rename test/{shaping => shape}/data/in-house/fonts/a014549f766436cf55b2ceb40e462038938ee899.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/a34a7b00f22ffb5fd7eef6933b81c7e71bc2cdfb.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/a6b17da98b9f1565ba428719777bbf94a66403c1.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/a6c76d1bafde4a0b1026ebcc932d2e5c6fd02442.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/a706511c65fb278fda87eaf2180ca6684a80f423.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/a919b33197965846f21074b24e30250d67277bce.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/a98e908e2ed21b22228ea59ebcc0f05034c86f2e.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/ab14b4eb9d7a67e293f51d30d719add06c9d6e06.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/ab40c89624a6104e5d0a2308e448a989302f515b.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/ad01ab2ea1cb1a4d3a2783e2675112ef11ae6404.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/af3086380b743099c54a3b11b96766039ea62fcd.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/af85624080af5627fb050f570d148a62f04fda74.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/b082211be29a3e2cf91f0fd43497e40b2a27b344.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/b121d4306b2e3add5abbaad21d95fcf04aacbd64.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/b151cfcdaa77585d77f17a42158e0873fc8e2633.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/b3075ca42b27dde7341c2d0ae16703c5b6640df0.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/b31e6c52a31edadc16f1bec9efe6019e2d59824a.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/b6031119874ae9ff1dd65383a335e361c0962220.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/b722a7d09e60421f3efbc706ad348ab47b88567b.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/bb0c53752e85c3d28973ebc913287b8987d3dfe8.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/bb9473d2403488714043bcfb946c9f78b86ad627.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/bf39b0e91ef9807f15a9e283a21a14a209fd2cfc.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/bf962d3202883a820aed019d9b5c1838c2ff69c6.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/c4e48b0886ef460f532fb49f00047ec92c432ec0.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/cc5f3d2d717fb6bd4dfae1c16d48a2cb8e12233b.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/d3129450fafe5e5c98cfc25a4e71809b1b4d2855.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/d629e7fedc0b350222d7987345fe61613fa3929a.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/d9b8bc10985f24796826c29f7ccba3d0ae11ec02.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/dcf774ca21062e7439f98658b18974ea8b956d0c.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/df768b9c257e0c9c35786c47cae15c46571d56be.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/e207635780b42f898d58654b65098763e340f5c7.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/e39391c77a6321c2ac7a2d644de0396470cd4bfe.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/e5ff44940364c2247abed50bdda30d2ef5aedfe4.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/e68a88939e0f06e34d2bc911f09b70890289c8fd.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/e8691822f6a705e3e9fb48a0405c645b1a036590.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/ea3f63620511b2097200d23774ffef197e829e69.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/ee39587d13b2afa5499cc79e45780aa79293bbd4.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/ef86fe710cfea877bbe0dbb6946a1f88d0661031.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/f443753e8ffe8e8aae606cfba158e00334b6efb1.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/f499fbc23865022234775c43503bba2e63978fe1.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/f518eb6f6b5eec2946c9fbbbde44e45d46f5e2ac.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/f75c4b05a0a4d67c1a808081ae3d74a9c66509e8.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/f79eb71df4e4c9c273b67b89a06e5ff9e3c1f834.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/f9b1dd4dcb515e757789a22cb4241107746fd3d0.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/fbb6c84c9e1fe0c39e152fbe845e51fd81f6748e.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/fcbaa518d3cce441ed37ae3b1fed6a19e9b54efd.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/fcdcffbdf1c4c97c05308d7600e4c283eb47dbca.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/fcea341ba6489536390384d8403ce5287ba71a4a.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/fd07ea46e4d8368ada1776208c07fd596f727852.ttf (100%) rename test/{shaping => shape}/data/in-house/fonts/ffa0f5d2d9025486d8469d8b1fdd983e7632499b.ttf (100%) rename test/{shaping => shape}/data/in-house/meson.build (100%) rename test/{shaping => shape}/data/in-house/tests/aat-morx.tests (100%) rename test/{shaping => shape}/data/in-house/tests/aat-trak.tests (100%) rename test/{shaping => shape}/data/in-house/tests/arabic-fallback-shaping.tests (100%) rename test/{shaping => shape}/data/in-house/tests/arabic-feature-order.tests (100%) rename test/{shaping => shape}/data/in-house/tests/arabic-like-joining.tests (100%) rename test/{shaping => shape}/data/in-house/tests/arabic-mark-attach.tests (100%) rename test/{shaping => shape}/data/in-house/tests/arabic-mark-order.tests (100%) rename test/{shaping => shape}/data/in-house/tests/arabic-stch.tests (100%) rename test/{shaping => shape}/data/in-house/tests/automatic-fractions.tests (100%) rename test/{shaping => shape}/data/in-house/tests/cluster.tests (100%) rename test/{shaping => shape}/data/in-house/tests/collections.tests (100%) rename test/{shaping => shape}/data/in-house/tests/color-fonts.tests (100%) rename test/{shaping => shape}/data/in-house/tests/context-matching.tests (100%) rename test/{shaping => shape}/data/in-house/tests/cursive-positioning.tests (100%) rename test/{shaping => shape}/data/in-house/tests/default-ignorables.tests (100%) rename test/{shaping => shape}/data/in-house/tests/digits.tests (100%) rename test/{shaping => shape}/data/in-house/tests/emoji-clusters.tests (100%) rename test/{shaping => shape}/data/in-house/tests/emoji.tests (100%) rename test/{shaping => shape}/data/in-house/tests/fallback-positioning.tests (100%) rename test/{shaping => shape}/data/in-house/tests/hangul-jamo.tests (100%) rename test/{shaping => shape}/data/in-house/tests/hyphens.tests (100%) rename test/{shaping => shape}/data/in-house/tests/indic-consonant-with-stacker.tests (100%) rename test/{shaping => shape}/data/in-house/tests/indic-decompose.tests (100%) rename test/{shaping => shape}/data/in-house/tests/indic-init.tests (100%) rename test/{shaping => shape}/data/in-house/tests/indic-joiner-candrabindu.tests (100%) rename test/{shaping => shape}/data/in-house/tests/indic-joiners.tests (100%) rename test/{shaping => shape}/data/in-house/tests/indic-old-spec.tests (100%) rename test/{shaping => shape}/data/in-house/tests/indic-pref-blocking.tests (100%) rename test/{shaping => shape}/data/in-house/tests/indic-script-extensions.tests (100%) rename test/{shaping => shape}/data/in-house/tests/indic-special-cases.tests (100%) rename test/{shaping => shape}/data/in-house/tests/indic-syllable.tests (100%) rename test/{shaping => shape}/data/in-house/tests/indic-vowel-letter-spoofing.tests (100%) rename test/{shaping => shape}/data/in-house/tests/kern-format2.tests (100%) rename test/{shaping => shape}/data/in-house/tests/khmer-mark-order.tests (100%) rename test/{shaping => shape}/data/in-house/tests/khmer-misc.tests (100%) rename test/{shaping => shape}/data/in-house/tests/language-tags.tests (100%) rename test/{shaping => shape}/data/in-house/tests/ligature-id.tests (100%) rename test/{shaping => shape}/data/in-house/tests/macos.tests (100%) rename test/{shaping => shape}/data/in-house/tests/mark-attachment.tests (100%) rename test/{shaping => shape}/data/in-house/tests/mark-filtering-sets.tests (100%) rename test/{shaping => shape}/data/in-house/tests/mongolian-variation-selector.tests (100%) rename test/{shaping => shape}/data/in-house/tests/myanmar-misc.tests (100%) rename test/{shaping => shape}/data/in-house/tests/myanmar-syllable.tests (100%) rename test/{shaping => shape}/data/in-house/tests/myanmar-zawgyi.tests (100%) rename test/{shaping => shape}/data/in-house/tests/none-directional.tests (100%) rename test/{shaping => shape}/data/in-house/tests/positioning-features.tests (100%) rename test/{shaping => shape}/data/in-house/tests/rand.tests (100%) rename test/{shaping => shape}/data/in-house/tests/reverse-sub.tests (100%) rename test/{shaping => shape}/data/in-house/tests/rotation.tests (100%) rename test/{shaping => shape}/data/in-house/tests/simple.tests (100%) rename test/{shaping => shape}/data/in-house/tests/sinhala.tests (100%) rename test/{shaping => shape}/data/in-house/tests/spaces.tests (100%) rename test/{shaping => shape}/data/in-house/tests/tibetan-contractions-1.tests (100%) rename test/{shaping => shape}/data/in-house/tests/tibetan-contractions-2.tests (100%) rename test/{shaping => shape}/data/in-house/tests/tibetan-vowels.tests (100%) rename test/{shaping => shape}/data/in-house/tests/tt-kern-gpos.tests (100%) rename test/{shaping => shape}/data/in-house/tests/use-indic3.tests (100%) rename test/{shaping => shape}/data/in-house/tests/use-marchen.tests (100%) rename test/{shaping => shape}/data/in-house/tests/use-syllable.tests (100%) rename test/{shaping => shape}/data/in-house/tests/use-vowel-letter-spoofing.tests (100%) rename test/{shaping => shape}/data/in-house/tests/use.tests (100%) rename test/{shaping => shape}/data/in-house/tests/variations-rvrn.tests (100%) rename test/{shaping => shape}/data/in-house/tests/variations.tests (100%) rename test/{shaping => shape}/data/in-house/tests/vertical.tests (100%) rename test/{shaping => shape}/data/in-house/tests/zero-width-marks.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/COPYING (100%) rename test/{shaping => shape}/data/text-rendering-tests/DISABLED (100%) rename test/{shaping => shape}/data/text-rendering-tests/Makefile.am (100%) rename test/{shaping => shape}/data/text-rendering-tests/Makefile.sources (100%) rename test/{shaping => shape}/data/text-rendering-tests/README (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/AdobeVFPrototype-Subset.otf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/FDArrayTest257.otf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/FDArrayTest65535.otf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/NotoSansBalinese-Regular.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/NotoSansKannada-Regular.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/NotoSerifKannada-Regular.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/Selawik-README.md (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/Selawik-variable.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestAVAR.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestCMAP14.otf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestCMAPMacTurkish.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestCVARGVAROne.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestCVARGVARTwo.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestGLYFOne.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestGPOSFour.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestGPOSOne.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestGPOSThree.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestGPOSTwo.otf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestGSUBOne.otf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestGSUBThree.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestGVAR-Composite-0.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestGVAR-Composite-Missing.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestGVAREight.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestGVARFour.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestGVARNine.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestGVAROne.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestGVARThree.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestGVARTwo.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestHVAROne.otf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestHVARTwo.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestKERNOne.otf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXEight.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXEighteen.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXEleven.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXForty.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXFour.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXFourteen.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXFourtyone.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXNine.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXOne.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXSeventeen.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXSixteen.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXTen.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXThirteen.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXThirtyeight.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXThirtyfive.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXThirtyfour.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXThirtynine.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXThirtyone.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXThirtyseven.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXThirtysix.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXThirtythree.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXThirtytwo.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXThree.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXTwelve.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXTwenty.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXTwentyeight.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXTwentyfive.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXTwentyfour.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXTwentynine.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXTwentyone.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXTwentyseven.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXTwentysix.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXTwentythree.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXTwentytwo.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestMORXTwo.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestSFNTOne.otf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestSFNTTwo.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestSVGgradientTransform.otf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestSVGgzip.otf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestSVGmultiGlyphs.otf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestShapeAran.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestShapeEthi.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestShapeKndaV3.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestShapeLana.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/TestTRAKOne.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/fonts/Zycon.ttf (100%) rename test/{shaping => shape}/data/text-rendering-tests/meson.build (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/AVAR-1.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/CFF-1.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/CFF-2.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/CFF2-1.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/CMAP-1.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/CMAP-2.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/CMAP-3.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/CVAR-1.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/CVAR-2.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/GLYF-1.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/GPOS-1.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/GPOS-2.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/GPOS-3.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/GPOS-4.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/GPOS-5.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/GSUB-1.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/GSUB-2.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/GSUB-3.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/GVAR-1.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/GVAR-2.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/GVAR-3.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/GVAR-4.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/GVAR-5.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/GVAR-6.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/GVAR-7.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/GVAR-8.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/GVAR-9.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/HVAR-1.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/HVAR-2.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/KERN-1.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/KERN-2.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-1.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-10.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-11.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-12.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-13.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-14.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-16.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-17.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-18.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-19.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-2.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-20.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-21.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-22.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-23.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-24.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-25.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-26.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-27.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-28.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-29.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-3.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-30.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-31.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-32.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-33.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-34.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-35.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-36.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-37.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-38.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-39.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-4.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-40.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-41.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-5.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-6.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-7.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-8.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/MORX-9.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/SFNT-1.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/SFNT-2.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/SHARAN-1.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/SHBALI-1.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/SHBALI-2.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/SHBALI-3.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/SHKNDA-1.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/SHKNDA-2.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/SHKNDA-3.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/SHLANA-1.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/SHLANA-10.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/SHLANA-2.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/SHLANA-3.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/SHLANA-4.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/SHLANA-5.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/SHLANA-6.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/SHLANA-7.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/SHLANA-8.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/tests/SHLANA-9.tests (100%) rename test/{shaping => shape}/data/text-rendering-tests/update.py (100%) rename test/{shaping => shape}/hb-diff (100%) rename test/{shaping => shape}/hb-diff-colorize (100%) rename test/{shaping => shape}/hb-diff-filter-failures (100%) rename test/{shaping => shape}/hb-diff-stat (100%) rename test/{shaping => shape}/hb-unicode-decode (100%) rename test/{shaping => shape}/hb-unicode-encode (100%) rename test/{shaping => shape}/hb-unicode-prettyname (100%) rename test/{shaping => shape}/hb_test_tools.py (100%) rename test/{shaping => shape}/meson.build (100%) rename test/{shaping => shape}/record-test.sh (100%) rename test/{shaping => shape}/run-tests.py (100%) rename test/{shaping => shape}/texts/in-house/shaper-arabic/script-arabic/language-persian/mehran.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/2grams.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/3grams.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/4grams.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/5grams.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/6grams.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/7grams.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/8grams.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/LICENSE (100%) rename test/{shaping => shape}/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/README (100%) rename test/{shaping => shape}/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/SOURCES (100%) rename test/{shaping => shape}/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/lam-alef.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-arabic.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-persian.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-urdu.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/ligature-components.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/ligature-diacritics.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/mark-skipping.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-arabic/script-mongolian/misc/misc.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-arabic/script-mongolian/misc/non-joining.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-arabic/script-mongolian/misc/poem.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-arabic/script-mongolian/misc/variation-selectors.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-arabic/script-nko/misc/misc.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-arabic/script-phags-pa/misc/misc.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-arabic/script-syriac/misc/abbreviation-mark.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-arabic/script-syriac/misc/alaph.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-default/script-ethiopic/misc/misc.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-default/script-han/misc/cjk-compat.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-default/script-hiragana/misc/kazuraki-liga-lines.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-default/script-hiragana/misc/kazuraki-liga.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-default/script-linear-b/misc/misc.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-default/script-tifinagh/misc/misc.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-hangul/script-hangul/misc/misc.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-hebrew/script-hebrew/misc/diacritics.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-assamese/utrrs/LICENSE (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-assamese/utrrs/README (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-assamese/utrrs/SOURCES (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-assamese/utrrs/gsub/IndicFontFeatureGSUB.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-bengali/bengali-vowel-letters.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-bengali/misc/misc.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-bengali/misc/reph.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-bengali/utrrs/LICENSE (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-bengali/utrrs/README (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-bengali/utrrs/SOURCES (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-bengali/utrrs/gsub/IndicFontFeatureGSUB.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-devanagari/devanagari-atomic-consonants.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-devanagari/devanagari-vowel-letters.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-devanagari/misc/dottedcircle.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-devanagari/misc/eyelash.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-devanagari/misc/joiners.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-devanagari/misc/misc.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-devanagari/misc/spec-deviations.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-devanagari/misc/tricky-reordering.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-devanagari/utrrs/LICENSE (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-devanagari/utrrs/README (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-devanagari/utrrs/SOURCES (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DevnagariSpecificAddition.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-GenericPunctuation.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-devanagari/utrrs/gsub/IndicFontFeatureGSUB.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gujarati/gujarati-vowel-letters.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gujarati/utrrs/LICENSE (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gujarati/utrrs/README (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gujarati/utrrs/SOURCES (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gujarati/utrrs/gsub/IndicFontFeatureGSUB.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gurmukhi/gurmukhi-vowel-letters.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gurmukhi/misc/misc.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gurmukhi/utrrs/LICENSE (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gurmukhi/utrrs/README (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gurmukhi/utrrs/SOURCES (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-GurmukhiSpecific.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-gurmukhi/utrrs/gsub/IndicFontFeatureGSUB.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-kannada/kannada-vowel-letters.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-kannada/misc/misc.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-kannada/misc/right-matras.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-kannada/utrrs/LICENSE (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-kannada/utrrs/README (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-kannada/utrrs/SOURCES (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-kannada/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-kannada/utrrs/gsub/IndicFontFeatureGSUB.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-malayalam/malayalam-vowel-letters.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-malayalam/misc/cibu.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-malayalam/misc/dot-reph.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-malayalam/misc/misc.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-malayalam/utrrs/LICENSE (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-malayalam/utrrs/README (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-malayalam/utrrs/SOURCES (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-malayalam/utrrs/gsub/IndicFontFeatureGSUB.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-oriya/misc/bindu.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-oriya/misc/misc.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-oriya/oriya-vowel-letters.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-oriya/utrrs/LICENSE (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-oriya/utrrs/README (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-oriya/utrrs/SOURCES (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-OriyaSpecific.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-oriya/utrrs/gsub/IndicFontFeatureGSUB.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-sinhala/misc/extensive.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-sinhala/misc/misc.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-sinhala/misc/reph.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-sinhala/misc/split-matras.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-sinhala/utrrs/LICENSE (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-sinhala/utrrs/README (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-sinhala/utrrs/SOURCES (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Punctuation.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-sinhala/utrrs/gpos/IndicFontFeatureGPOS.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Conjunct.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Rakaaraansaya.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Repaya.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Special-Cases.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-TouchingLetters.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Yansaya.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-tamil/misc/misc.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-tamil/utrrs/LICENSE (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-tamil/utrrs/README (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-tamil/utrrs/SOURCES (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-CurrencySymbols.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Numerics.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Symbols.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-TamilSymbol.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-tamil/utrrs/gsub/IndicFontFeatureGSUB.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-telugu/misc/misc.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-telugu/telugu-vowel-letters.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-telugu/utrrs/LICENSE (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-telugu/utrrs/README (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-telugu/utrrs/SOURCES (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-telugu/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-indic/script-telugu/utrrs/gsub/IndicFontFeatureGSUB.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-khmer/misc.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-khmer/other-marks-invalid.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-khmer/other-marks.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-myanmar/script-myanmar/misc/misc.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-myanmar/script-myanmar/misc/otspec.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-myanmar/script-myanmar/misc/utn11.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-thai/script-lao/misc/sara-am.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-thai/script-thai/misc/misc.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-thai/script-thai/misc/phinthu.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-thai/script-thai/misc/pua-shaping.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-thai/script-thai/misc/sara-am.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-tibetan/script-tibetan/misc/contractions.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-tibetan/script-tibetan/misc/misc.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-use/script-batak/misc.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-use/script-buginese/misc.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-use/script-cham/misc.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-use/script-javanese/misc.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-use/script-kaithi/misc.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-use/script-kharoshti/misc.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-use/script-tai-tham/misc.txt (100%) rename test/{shaping => shape}/texts/in-house/shaper-use/script-tai-tham/torture.txt (100%) diff --git a/configure.ac b/configure.ac index 1f7194ed8..f68640881 100644 --- a/configure.ac +++ b/configure.ac @@ -425,11 +425,11 @@ util/Makefile test/Makefile test/api/Makefile test/fuzzing/Makefile -test/shaping/Makefile -test/shaping/data/Makefile -test/shaping/data/aots/Makefile -test/shaping/data/in-house/Makefile -test/shaping/data/text-rendering-tests/Makefile +test/shape/Makefile +test/shape/data/Makefile +test/shape/data/aots/Makefile +test/shape/data/in-house/Makefile +test/shape/data/text-rendering-tests/Makefile test/subset/Makefile test/subset/data/Makefile test/subset/data/repack_tests/Makefile diff --git a/test/Makefile.am b/test/Makefile.am index b67d707b0..01d542a00 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -2,7 +2,7 @@ NULL = EXTRA_DIST = -SUBDIRS = api shaping fuzzing subset +SUBDIRS = api shape subset fuzzing EXTRA_DIST += \ meson.build \ diff --git a/test/meson.build b/test/meson.build index c3a2002fd..8b4b83f78 100644 --- a/test/meson.build +++ b/test/meson.build @@ -1,4 +1,4 @@ subdir('api') -subdir('fuzzing') -subdir('shaping') +subdir('shape') subdir('subset') +subdir('fuzzing') diff --git a/test/shaping/Makefile.am b/test/shape/Makefile.am similarity index 100% rename from test/shaping/Makefile.am rename to test/shape/Makefile.am diff --git a/test/shaping/README.md b/test/shape/README.md similarity index 100% rename from test/shaping/README.md rename to test/shape/README.md diff --git a/test/shaping/data/Makefile.am b/test/shape/data/Makefile.am similarity index 100% rename from test/shaping/data/Makefile.am rename to test/shape/data/Makefile.am diff --git a/test/shaping/data/aots/COPYING b/test/shape/data/aots/COPYING similarity index 100% rename from test/shaping/data/aots/COPYING rename to test/shape/data/aots/COPYING diff --git a/test/shaping/data/aots/Makefile.am b/test/shape/data/aots/Makefile.am similarity index 100% rename from test/shaping/data/aots/Makefile.am rename to test/shape/data/aots/Makefile.am diff --git a/test/shaping/data/aots/Makefile.sources b/test/shape/data/aots/Makefile.sources similarity index 100% rename from test/shaping/data/aots/Makefile.sources rename to test/shape/data/aots/Makefile.sources diff --git a/test/shaping/data/aots/fonts/classdef1_font1.otf b/test/shape/data/aots/fonts/classdef1_font1.otf similarity index 100% rename from test/shaping/data/aots/fonts/classdef1_font1.otf rename to test/shape/data/aots/fonts/classdef1_font1.otf diff --git a/test/shaping/data/aots/fonts/classdef1_font2.otf b/test/shape/data/aots/fonts/classdef1_font2.otf similarity index 100% rename from test/shaping/data/aots/fonts/classdef1_font2.otf rename to test/shape/data/aots/fonts/classdef1_font2.otf diff --git a/test/shaping/data/aots/fonts/classdef1_font3.otf b/test/shape/data/aots/fonts/classdef1_font3.otf similarity index 100% rename from test/shaping/data/aots/fonts/classdef1_font3.otf rename to test/shape/data/aots/fonts/classdef1_font3.otf diff --git a/test/shaping/data/aots/fonts/classdef1_font4.otf b/test/shape/data/aots/fonts/classdef1_font4.otf similarity index 100% rename from test/shaping/data/aots/fonts/classdef1_font4.otf rename to test/shape/data/aots/fonts/classdef1_font4.otf diff --git a/test/shaping/data/aots/fonts/classdef2_font1.otf b/test/shape/data/aots/fonts/classdef2_font1.otf similarity index 100% rename from test/shaping/data/aots/fonts/classdef2_font1.otf rename to test/shape/data/aots/fonts/classdef2_font1.otf diff --git a/test/shaping/data/aots/fonts/classdef2_font2.otf b/test/shape/data/aots/fonts/classdef2_font2.otf similarity index 100% rename from test/shaping/data/aots/fonts/classdef2_font2.otf rename to test/shape/data/aots/fonts/classdef2_font2.otf diff --git a/test/shaping/data/aots/fonts/classdef2_font3.otf b/test/shape/data/aots/fonts/classdef2_font3.otf similarity index 100% rename from test/shaping/data/aots/fonts/classdef2_font3.otf rename to test/shape/data/aots/fonts/classdef2_font3.otf diff --git a/test/shaping/data/aots/fonts/classdef2_font4.otf b/test/shape/data/aots/fonts/classdef2_font4.otf similarity index 100% rename from test/shaping/data/aots/fonts/classdef2_font4.otf rename to test/shape/data/aots/fonts/classdef2_font4.otf diff --git a/test/shaping/data/aots/fonts/cmap0_font1.otf b/test/shape/data/aots/fonts/cmap0_font1.otf similarity index 100% rename from test/shaping/data/aots/fonts/cmap0_font1.otf rename to test/shape/data/aots/fonts/cmap0_font1.otf diff --git a/test/shaping/data/aots/fonts/cmap10_font1.otf b/test/shape/data/aots/fonts/cmap10_font1.otf similarity index 100% rename from test/shaping/data/aots/fonts/cmap10_font1.otf rename to test/shape/data/aots/fonts/cmap10_font1.otf diff --git a/test/shaping/data/aots/fonts/cmap10_font2.otf b/test/shape/data/aots/fonts/cmap10_font2.otf similarity index 100% rename from test/shaping/data/aots/fonts/cmap10_font2.otf rename to test/shape/data/aots/fonts/cmap10_font2.otf diff --git a/test/shaping/data/aots/fonts/cmap12_font1.otf b/test/shape/data/aots/fonts/cmap12_font1.otf similarity index 100% rename from test/shaping/data/aots/fonts/cmap12_font1.otf rename to test/shape/data/aots/fonts/cmap12_font1.otf diff --git a/test/shaping/data/aots/fonts/cmap14_font1.otf b/test/shape/data/aots/fonts/cmap14_font1.otf similarity index 100% rename from test/shaping/data/aots/fonts/cmap14_font1.otf rename to test/shape/data/aots/fonts/cmap14_font1.otf diff --git a/test/shaping/data/aots/fonts/cmap2_font1.otf b/test/shape/data/aots/fonts/cmap2_font1.otf similarity index 100% rename from test/shaping/data/aots/fonts/cmap2_font1.otf rename to test/shape/data/aots/fonts/cmap2_font1.otf diff --git a/test/shaping/data/aots/fonts/cmap4_font1.otf b/test/shape/data/aots/fonts/cmap4_font1.otf similarity index 100% rename from test/shaping/data/aots/fonts/cmap4_font1.otf rename to test/shape/data/aots/fonts/cmap4_font1.otf diff --git a/test/shaping/data/aots/fonts/cmap4_font2.otf b/test/shape/data/aots/fonts/cmap4_font2.otf similarity index 100% rename from test/shaping/data/aots/fonts/cmap4_font2.otf rename to test/shape/data/aots/fonts/cmap4_font2.otf diff --git a/test/shaping/data/aots/fonts/cmap4_font3.otf b/test/shape/data/aots/fonts/cmap4_font3.otf similarity index 100% rename from test/shaping/data/aots/fonts/cmap4_font3.otf rename to test/shape/data/aots/fonts/cmap4_font3.otf diff --git a/test/shaping/data/aots/fonts/cmap4_font4.otf b/test/shape/data/aots/fonts/cmap4_font4.otf similarity index 100% rename from test/shaping/data/aots/fonts/cmap4_font4.otf rename to test/shape/data/aots/fonts/cmap4_font4.otf diff --git a/test/shaping/data/aots/fonts/cmap6_font1.otf b/test/shape/data/aots/fonts/cmap6_font1.otf similarity index 100% rename from test/shaping/data/aots/fonts/cmap6_font1.otf rename to test/shape/data/aots/fonts/cmap6_font1.otf diff --git a/test/shaping/data/aots/fonts/cmap6_font2.otf b/test/shape/data/aots/fonts/cmap6_font2.otf similarity index 100% rename from test/shaping/data/aots/fonts/cmap6_font2.otf rename to test/shape/data/aots/fonts/cmap6_font2.otf diff --git a/test/shaping/data/aots/fonts/cmap8_font1.otf b/test/shape/data/aots/fonts/cmap8_font1.otf similarity index 100% rename from test/shaping/data/aots/fonts/cmap8_font1.otf rename to test/shape/data/aots/fonts/cmap8_font1.otf diff --git a/test/shaping/data/aots/fonts/cmap_composition_font1.otf b/test/shape/data/aots/fonts/cmap_composition_font1.otf similarity index 100% rename from test/shaping/data/aots/fonts/cmap_composition_font1.otf rename to test/shape/data/aots/fonts/cmap_composition_font1.otf diff --git a/test/shaping/data/aots/fonts/cmap_subtableselection_font1.otf b/test/shape/data/aots/fonts/cmap_subtableselection_font1.otf similarity index 100% rename from test/shaping/data/aots/fonts/cmap_subtableselection_font1.otf rename to test/shape/data/aots/fonts/cmap_subtableselection_font1.otf diff --git a/test/shaping/data/aots/fonts/cmap_subtableselection_font2.otf b/test/shape/data/aots/fonts/cmap_subtableselection_font2.otf similarity index 100% rename from test/shaping/data/aots/fonts/cmap_subtableselection_font2.otf rename to test/shape/data/aots/fonts/cmap_subtableselection_font2.otf diff --git a/test/shaping/data/aots/fonts/cmap_subtableselection_font3.otf b/test/shape/data/aots/fonts/cmap_subtableselection_font3.otf similarity index 100% rename from test/shaping/data/aots/fonts/cmap_subtableselection_font3.otf rename to test/shape/data/aots/fonts/cmap_subtableselection_font3.otf diff --git a/test/shaping/data/aots/fonts/cmap_subtableselection_font4.otf b/test/shape/data/aots/fonts/cmap_subtableselection_font4.otf similarity index 100% rename from test/shaping/data/aots/fonts/cmap_subtableselection_font4.otf rename to test/shape/data/aots/fonts/cmap_subtableselection_font4.otf diff --git a/test/shaping/data/aots/fonts/cmap_subtableselection_font5.otf b/test/shape/data/aots/fonts/cmap_subtableselection_font5.otf similarity index 100% rename from test/shaping/data/aots/fonts/cmap_subtableselection_font5.otf rename to test/shape/data/aots/fonts/cmap_subtableselection_font5.otf diff --git a/test/shaping/data/aots/fonts/gpos1_1_lookupflag_f1.otf b/test/shape/data/aots/fonts/gpos1_1_lookupflag_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos1_1_lookupflag_f1.otf rename to test/shape/data/aots/fonts/gpos1_1_lookupflag_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos1_1_simple_f1.otf b/test/shape/data/aots/fonts/gpos1_1_simple_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos1_1_simple_f1.otf rename to test/shape/data/aots/fonts/gpos1_1_simple_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos1_1_simple_f2.otf b/test/shape/data/aots/fonts/gpos1_1_simple_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos1_1_simple_f2.otf rename to test/shape/data/aots/fonts/gpos1_1_simple_f2.otf diff --git a/test/shaping/data/aots/fonts/gpos1_1_simple_f3.otf b/test/shape/data/aots/fonts/gpos1_1_simple_f3.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos1_1_simple_f3.otf rename to test/shape/data/aots/fonts/gpos1_1_simple_f3.otf diff --git a/test/shaping/data/aots/fonts/gpos1_1_simple_f4.otf b/test/shape/data/aots/fonts/gpos1_1_simple_f4.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos1_1_simple_f4.otf rename to test/shape/data/aots/fonts/gpos1_1_simple_f4.otf diff --git a/test/shaping/data/aots/fonts/gpos1_2_font1.otf b/test/shape/data/aots/fonts/gpos1_2_font1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos1_2_font1.otf rename to test/shape/data/aots/fonts/gpos1_2_font1.otf diff --git a/test/shaping/data/aots/fonts/gpos1_2_font2.otf b/test/shape/data/aots/fonts/gpos1_2_font2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos1_2_font2.otf rename to test/shape/data/aots/fonts/gpos1_2_font2.otf diff --git a/test/shaping/data/aots/fonts/gpos2_1_font6.otf b/test/shape/data/aots/fonts/gpos2_1_font6.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos2_1_font6.otf rename to test/shape/data/aots/fonts/gpos2_1_font6.otf diff --git a/test/shaping/data/aots/fonts/gpos2_1_font7.otf b/test/shape/data/aots/fonts/gpos2_1_font7.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos2_1_font7.otf rename to test/shape/data/aots/fonts/gpos2_1_font7.otf diff --git a/test/shaping/data/aots/fonts/gpos2_1_lookupflag_f1.otf b/test/shape/data/aots/fonts/gpos2_1_lookupflag_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos2_1_lookupflag_f1.otf rename to test/shape/data/aots/fonts/gpos2_1_lookupflag_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos2_1_lookupflag_f2.otf b/test/shape/data/aots/fonts/gpos2_1_lookupflag_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos2_1_lookupflag_f2.otf rename to test/shape/data/aots/fonts/gpos2_1_lookupflag_f2.otf diff --git a/test/shaping/data/aots/fonts/gpos2_1_next_glyph_f1.otf b/test/shape/data/aots/fonts/gpos2_1_next_glyph_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos2_1_next_glyph_f1.otf rename to test/shape/data/aots/fonts/gpos2_1_next_glyph_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos2_1_next_glyph_f2.otf b/test/shape/data/aots/fonts/gpos2_1_next_glyph_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos2_1_next_glyph_f2.otf rename to test/shape/data/aots/fonts/gpos2_1_next_glyph_f2.otf diff --git a/test/shaping/data/aots/fonts/gpos2_1_simple_f1.otf b/test/shape/data/aots/fonts/gpos2_1_simple_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos2_1_simple_f1.otf rename to test/shape/data/aots/fonts/gpos2_1_simple_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos2_2_font1.otf b/test/shape/data/aots/fonts/gpos2_2_font1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos2_2_font1.otf rename to test/shape/data/aots/fonts/gpos2_2_font1.otf diff --git a/test/shaping/data/aots/fonts/gpos2_2_font2.otf b/test/shape/data/aots/fonts/gpos2_2_font2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos2_2_font2.otf rename to test/shape/data/aots/fonts/gpos2_2_font2.otf diff --git a/test/shaping/data/aots/fonts/gpos2_2_font3.otf b/test/shape/data/aots/fonts/gpos2_2_font3.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos2_2_font3.otf rename to test/shape/data/aots/fonts/gpos2_2_font3.otf diff --git a/test/shaping/data/aots/fonts/gpos2_2_font4.otf b/test/shape/data/aots/fonts/gpos2_2_font4.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos2_2_font4.otf rename to test/shape/data/aots/fonts/gpos2_2_font4.otf diff --git a/test/shaping/data/aots/fonts/gpos2_2_font5.otf b/test/shape/data/aots/fonts/gpos2_2_font5.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos2_2_font5.otf rename to test/shape/data/aots/fonts/gpos2_2_font5.otf diff --git a/test/shaping/data/aots/fonts/gpos3_font1.otf b/test/shape/data/aots/fonts/gpos3_font1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos3_font1.otf rename to test/shape/data/aots/fonts/gpos3_font1.otf diff --git a/test/shaping/data/aots/fonts/gpos3_font2.otf b/test/shape/data/aots/fonts/gpos3_font2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos3_font2.otf rename to test/shape/data/aots/fonts/gpos3_font2.otf diff --git a/test/shaping/data/aots/fonts/gpos3_font3.otf b/test/shape/data/aots/fonts/gpos3_font3.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos3_font3.otf rename to test/shape/data/aots/fonts/gpos3_font3.otf diff --git a/test/shaping/data/aots/fonts/gpos4_lookupflag_f1.otf b/test/shape/data/aots/fonts/gpos4_lookupflag_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos4_lookupflag_f1.otf rename to test/shape/data/aots/fonts/gpos4_lookupflag_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos4_lookupflag_f2.otf b/test/shape/data/aots/fonts/gpos4_lookupflag_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos4_lookupflag_f2.otf rename to test/shape/data/aots/fonts/gpos4_lookupflag_f2.otf diff --git a/test/shaping/data/aots/fonts/gpos4_multiple_anchors_1.otf b/test/shape/data/aots/fonts/gpos4_multiple_anchors_1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos4_multiple_anchors_1.otf rename to test/shape/data/aots/fonts/gpos4_multiple_anchors_1.otf diff --git a/test/shaping/data/aots/fonts/gpos4_simple_1.otf b/test/shape/data/aots/fonts/gpos4_simple_1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos4_simple_1.otf rename to test/shape/data/aots/fonts/gpos4_simple_1.otf diff --git a/test/shaping/data/aots/fonts/gpos5_font1.otf b/test/shape/data/aots/fonts/gpos5_font1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos5_font1.otf rename to test/shape/data/aots/fonts/gpos5_font1.otf diff --git a/test/shaping/data/aots/fonts/gpos6_font1.otf b/test/shape/data/aots/fonts/gpos6_font1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos6_font1.otf rename to test/shape/data/aots/fonts/gpos6_font1.otf diff --git a/test/shaping/data/aots/fonts/gpos7_1_font1.otf b/test/shape/data/aots/fonts/gpos7_1_font1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos7_1_font1.otf rename to test/shape/data/aots/fonts/gpos7_1_font1.otf diff --git a/test/shaping/data/aots/fonts/gpos9_font1.otf b/test/shape/data/aots/fonts/gpos9_font1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos9_font1.otf rename to test/shape/data/aots/fonts/gpos9_font1.otf diff --git a/test/shaping/data/aots/fonts/gpos9_font2.otf b/test/shape/data/aots/fonts/gpos9_font2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos9_font2.otf rename to test/shape/data/aots/fonts/gpos9_font2.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining1_boundary_f1.otf b/test/shape/data/aots/fonts/gpos_chaining1_boundary_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining1_boundary_f1.otf rename to test/shape/data/aots/fonts/gpos_chaining1_boundary_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining1_boundary_f2.otf b/test/shape/data/aots/fonts/gpos_chaining1_boundary_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining1_boundary_f2.otf rename to test/shape/data/aots/fonts/gpos_chaining1_boundary_f2.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining1_boundary_f3.otf b/test/shape/data/aots/fonts/gpos_chaining1_boundary_f3.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining1_boundary_f3.otf rename to test/shape/data/aots/fonts/gpos_chaining1_boundary_f3.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining1_boundary_f4.otf b/test/shape/data/aots/fonts/gpos_chaining1_boundary_f4.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining1_boundary_f4.otf rename to test/shape/data/aots/fonts/gpos_chaining1_boundary_f4.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining1_lookupflag_f1.otf b/test/shape/data/aots/fonts/gpos_chaining1_lookupflag_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining1_lookupflag_f1.otf rename to test/shape/data/aots/fonts/gpos_chaining1_lookupflag_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining1_multiple_subrules_f1.otf b/test/shape/data/aots/fonts/gpos_chaining1_multiple_subrules_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining1_multiple_subrules_f1.otf rename to test/shape/data/aots/fonts/gpos_chaining1_multiple_subrules_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining1_multiple_subrules_f2.otf b/test/shape/data/aots/fonts/gpos_chaining1_multiple_subrules_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining1_multiple_subrules_f2.otf rename to test/shape/data/aots/fonts/gpos_chaining1_multiple_subrules_f2.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining1_next_glyph_f1.otf b/test/shape/data/aots/fonts/gpos_chaining1_next_glyph_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining1_next_glyph_f1.otf rename to test/shape/data/aots/fonts/gpos_chaining1_next_glyph_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining1_simple_f1.otf b/test/shape/data/aots/fonts/gpos_chaining1_simple_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining1_simple_f1.otf rename to test/shape/data/aots/fonts/gpos_chaining1_simple_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining1_simple_f2.otf b/test/shape/data/aots/fonts/gpos_chaining1_simple_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining1_simple_f2.otf rename to test/shape/data/aots/fonts/gpos_chaining1_simple_f2.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining1_successive_f1.otf b/test/shape/data/aots/fonts/gpos_chaining1_successive_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining1_successive_f1.otf rename to test/shape/data/aots/fonts/gpos_chaining1_successive_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining2_boundary_f1.otf b/test/shape/data/aots/fonts/gpos_chaining2_boundary_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining2_boundary_f1.otf rename to test/shape/data/aots/fonts/gpos_chaining2_boundary_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining2_boundary_f2.otf b/test/shape/data/aots/fonts/gpos_chaining2_boundary_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining2_boundary_f2.otf rename to test/shape/data/aots/fonts/gpos_chaining2_boundary_f2.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining2_boundary_f3.otf b/test/shape/data/aots/fonts/gpos_chaining2_boundary_f3.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining2_boundary_f3.otf rename to test/shape/data/aots/fonts/gpos_chaining2_boundary_f3.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining2_boundary_f4.otf b/test/shape/data/aots/fonts/gpos_chaining2_boundary_f4.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining2_boundary_f4.otf rename to test/shape/data/aots/fonts/gpos_chaining2_boundary_f4.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining2_lookupflag_f1.otf b/test/shape/data/aots/fonts/gpos_chaining2_lookupflag_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining2_lookupflag_f1.otf rename to test/shape/data/aots/fonts/gpos_chaining2_lookupflag_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining2_multiple_subrules_f1.otf b/test/shape/data/aots/fonts/gpos_chaining2_multiple_subrules_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining2_multiple_subrules_f1.otf rename to test/shape/data/aots/fonts/gpos_chaining2_multiple_subrules_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining2_multiple_subrules_f2.otf b/test/shape/data/aots/fonts/gpos_chaining2_multiple_subrules_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining2_multiple_subrules_f2.otf rename to test/shape/data/aots/fonts/gpos_chaining2_multiple_subrules_f2.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining2_next_glyph_f1.otf b/test/shape/data/aots/fonts/gpos_chaining2_next_glyph_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining2_next_glyph_f1.otf rename to test/shape/data/aots/fonts/gpos_chaining2_next_glyph_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining2_simple_f1.otf b/test/shape/data/aots/fonts/gpos_chaining2_simple_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining2_simple_f1.otf rename to test/shape/data/aots/fonts/gpos_chaining2_simple_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining2_simple_f2.otf b/test/shape/data/aots/fonts/gpos_chaining2_simple_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining2_simple_f2.otf rename to test/shape/data/aots/fonts/gpos_chaining2_simple_f2.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining2_successive_f1.otf b/test/shape/data/aots/fonts/gpos_chaining2_successive_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining2_successive_f1.otf rename to test/shape/data/aots/fonts/gpos_chaining2_successive_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining3_boundary_f1.otf b/test/shape/data/aots/fonts/gpos_chaining3_boundary_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining3_boundary_f1.otf rename to test/shape/data/aots/fonts/gpos_chaining3_boundary_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining3_boundary_f2.otf b/test/shape/data/aots/fonts/gpos_chaining3_boundary_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining3_boundary_f2.otf rename to test/shape/data/aots/fonts/gpos_chaining3_boundary_f2.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining3_boundary_f3.otf b/test/shape/data/aots/fonts/gpos_chaining3_boundary_f3.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining3_boundary_f3.otf rename to test/shape/data/aots/fonts/gpos_chaining3_boundary_f3.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining3_boundary_f4.otf b/test/shape/data/aots/fonts/gpos_chaining3_boundary_f4.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining3_boundary_f4.otf rename to test/shape/data/aots/fonts/gpos_chaining3_boundary_f4.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining3_lookupflag_f1.otf b/test/shape/data/aots/fonts/gpos_chaining3_lookupflag_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining3_lookupflag_f1.otf rename to test/shape/data/aots/fonts/gpos_chaining3_lookupflag_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining3_next_glyph_f1.otf b/test/shape/data/aots/fonts/gpos_chaining3_next_glyph_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining3_next_glyph_f1.otf rename to test/shape/data/aots/fonts/gpos_chaining3_next_glyph_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining3_simple_f1.otf b/test/shape/data/aots/fonts/gpos_chaining3_simple_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining3_simple_f1.otf rename to test/shape/data/aots/fonts/gpos_chaining3_simple_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining3_simple_f2.otf b/test/shape/data/aots/fonts/gpos_chaining3_simple_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining3_simple_f2.otf rename to test/shape/data/aots/fonts/gpos_chaining3_simple_f2.otf diff --git a/test/shaping/data/aots/fonts/gpos_chaining3_successive_f1.otf b/test/shape/data/aots/fonts/gpos_chaining3_successive_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_chaining3_successive_f1.otf rename to test/shape/data/aots/fonts/gpos_chaining3_successive_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_context1_boundary_f1.otf b/test/shape/data/aots/fonts/gpos_context1_boundary_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context1_boundary_f1.otf rename to test/shape/data/aots/fonts/gpos_context1_boundary_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_context1_boundary_f2.otf b/test/shape/data/aots/fonts/gpos_context1_boundary_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context1_boundary_f2.otf rename to test/shape/data/aots/fonts/gpos_context1_boundary_f2.otf diff --git a/test/shaping/data/aots/fonts/gpos_context1_expansion_f1.otf b/test/shape/data/aots/fonts/gpos_context1_expansion_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context1_expansion_f1.otf rename to test/shape/data/aots/fonts/gpos_context1_expansion_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_context1_lookupflag_f1.otf b/test/shape/data/aots/fonts/gpos_context1_lookupflag_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context1_lookupflag_f1.otf rename to test/shape/data/aots/fonts/gpos_context1_lookupflag_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_context1_lookupflag_f2.otf b/test/shape/data/aots/fonts/gpos_context1_lookupflag_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context1_lookupflag_f2.otf rename to test/shape/data/aots/fonts/gpos_context1_lookupflag_f2.otf diff --git a/test/shaping/data/aots/fonts/gpos_context1_multiple_subrules_f1.otf b/test/shape/data/aots/fonts/gpos_context1_multiple_subrules_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context1_multiple_subrules_f1.otf rename to test/shape/data/aots/fonts/gpos_context1_multiple_subrules_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_context1_multiple_subrules_f2.otf b/test/shape/data/aots/fonts/gpos_context1_multiple_subrules_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context1_multiple_subrules_f2.otf rename to test/shape/data/aots/fonts/gpos_context1_multiple_subrules_f2.otf diff --git a/test/shaping/data/aots/fonts/gpos_context1_next_glyph_f1.otf b/test/shape/data/aots/fonts/gpos_context1_next_glyph_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context1_next_glyph_f1.otf rename to test/shape/data/aots/fonts/gpos_context1_next_glyph_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_context1_simple_f1.otf b/test/shape/data/aots/fonts/gpos_context1_simple_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context1_simple_f1.otf rename to test/shape/data/aots/fonts/gpos_context1_simple_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_context1_simple_f2.otf b/test/shape/data/aots/fonts/gpos_context1_simple_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context1_simple_f2.otf rename to test/shape/data/aots/fonts/gpos_context1_simple_f2.otf diff --git a/test/shaping/data/aots/fonts/gpos_context1_successive_f1.otf b/test/shape/data/aots/fonts/gpos_context1_successive_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context1_successive_f1.otf rename to test/shape/data/aots/fonts/gpos_context1_successive_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_context2_boundary_f1.otf b/test/shape/data/aots/fonts/gpos_context2_boundary_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context2_boundary_f1.otf rename to test/shape/data/aots/fonts/gpos_context2_boundary_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_context2_boundary_f2.otf b/test/shape/data/aots/fonts/gpos_context2_boundary_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context2_boundary_f2.otf rename to test/shape/data/aots/fonts/gpos_context2_boundary_f2.otf diff --git a/test/shaping/data/aots/fonts/gpos_context2_classes_f1.otf b/test/shape/data/aots/fonts/gpos_context2_classes_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context2_classes_f1.otf rename to test/shape/data/aots/fonts/gpos_context2_classes_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_context2_classes_f2.otf b/test/shape/data/aots/fonts/gpos_context2_classes_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context2_classes_f2.otf rename to test/shape/data/aots/fonts/gpos_context2_classes_f2.otf diff --git a/test/shaping/data/aots/fonts/gpos_context2_expansion_f1.otf b/test/shape/data/aots/fonts/gpos_context2_expansion_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context2_expansion_f1.otf rename to test/shape/data/aots/fonts/gpos_context2_expansion_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_context2_lookupflag_f1.otf b/test/shape/data/aots/fonts/gpos_context2_lookupflag_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context2_lookupflag_f1.otf rename to test/shape/data/aots/fonts/gpos_context2_lookupflag_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_context2_lookupflag_f2.otf b/test/shape/data/aots/fonts/gpos_context2_lookupflag_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context2_lookupflag_f2.otf rename to test/shape/data/aots/fonts/gpos_context2_lookupflag_f2.otf diff --git a/test/shaping/data/aots/fonts/gpos_context2_multiple_subrules_f1.otf b/test/shape/data/aots/fonts/gpos_context2_multiple_subrules_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context2_multiple_subrules_f1.otf rename to test/shape/data/aots/fonts/gpos_context2_multiple_subrules_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_context2_multiple_subrules_f2.otf b/test/shape/data/aots/fonts/gpos_context2_multiple_subrules_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context2_multiple_subrules_f2.otf rename to test/shape/data/aots/fonts/gpos_context2_multiple_subrules_f2.otf diff --git a/test/shaping/data/aots/fonts/gpos_context2_next_glyph_f1.otf b/test/shape/data/aots/fonts/gpos_context2_next_glyph_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context2_next_glyph_f1.otf rename to test/shape/data/aots/fonts/gpos_context2_next_glyph_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_context2_simple_f1.otf b/test/shape/data/aots/fonts/gpos_context2_simple_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context2_simple_f1.otf rename to test/shape/data/aots/fonts/gpos_context2_simple_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_context2_simple_f2.otf b/test/shape/data/aots/fonts/gpos_context2_simple_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context2_simple_f2.otf rename to test/shape/data/aots/fonts/gpos_context2_simple_f2.otf diff --git a/test/shaping/data/aots/fonts/gpos_context2_successive_f1.otf b/test/shape/data/aots/fonts/gpos_context2_successive_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context2_successive_f1.otf rename to test/shape/data/aots/fonts/gpos_context2_successive_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_context3_boundary_f1.otf b/test/shape/data/aots/fonts/gpos_context3_boundary_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context3_boundary_f1.otf rename to test/shape/data/aots/fonts/gpos_context3_boundary_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_context3_boundary_f2.otf b/test/shape/data/aots/fonts/gpos_context3_boundary_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context3_boundary_f2.otf rename to test/shape/data/aots/fonts/gpos_context3_boundary_f2.otf diff --git a/test/shaping/data/aots/fonts/gpos_context3_lookupflag_f1.otf b/test/shape/data/aots/fonts/gpos_context3_lookupflag_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context3_lookupflag_f1.otf rename to test/shape/data/aots/fonts/gpos_context3_lookupflag_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_context3_lookupflag_f2.otf b/test/shape/data/aots/fonts/gpos_context3_lookupflag_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context3_lookupflag_f2.otf rename to test/shape/data/aots/fonts/gpos_context3_lookupflag_f2.otf diff --git a/test/shaping/data/aots/fonts/gpos_context3_next_glyph_f1.otf b/test/shape/data/aots/fonts/gpos_context3_next_glyph_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context3_next_glyph_f1.otf rename to test/shape/data/aots/fonts/gpos_context3_next_glyph_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_context3_simple_f1.otf b/test/shape/data/aots/fonts/gpos_context3_simple_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context3_simple_f1.otf rename to test/shape/data/aots/fonts/gpos_context3_simple_f1.otf diff --git a/test/shaping/data/aots/fonts/gpos_context3_successive_f1.otf b/test/shape/data/aots/fonts/gpos_context3_successive_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gpos_context3_successive_f1.otf rename to test/shape/data/aots/fonts/gpos_context3_successive_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub1_1_lookupflag_f1.otf b/test/shape/data/aots/fonts/gsub1_1_lookupflag_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub1_1_lookupflag_f1.otf rename to test/shape/data/aots/fonts/gsub1_1_lookupflag_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub1_1_modulo_f1.otf b/test/shape/data/aots/fonts/gsub1_1_modulo_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub1_1_modulo_f1.otf rename to test/shape/data/aots/fonts/gsub1_1_modulo_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub1_1_simple_f1.otf b/test/shape/data/aots/fonts/gsub1_1_simple_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub1_1_simple_f1.otf rename to test/shape/data/aots/fonts/gsub1_1_simple_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub1_2_lookupflag_f1.otf b/test/shape/data/aots/fonts/gsub1_2_lookupflag_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub1_2_lookupflag_f1.otf rename to test/shape/data/aots/fonts/gsub1_2_lookupflag_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub1_2_simple_f1.otf b/test/shape/data/aots/fonts/gsub1_2_simple_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub1_2_simple_f1.otf rename to test/shape/data/aots/fonts/gsub1_2_simple_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub2_1_lookupflag_f1.otf b/test/shape/data/aots/fonts/gsub2_1_lookupflag_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub2_1_lookupflag_f1.otf rename to test/shape/data/aots/fonts/gsub2_1_lookupflag_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub2_1_multiple_sequences_f1.otf b/test/shape/data/aots/fonts/gsub2_1_multiple_sequences_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub2_1_multiple_sequences_f1.otf rename to test/shape/data/aots/fonts/gsub2_1_multiple_sequences_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub2_1_simple_f1.otf b/test/shape/data/aots/fonts/gsub2_1_simple_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub2_1_simple_f1.otf rename to test/shape/data/aots/fonts/gsub2_1_simple_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub3_1_lookupflag_f1.otf b/test/shape/data/aots/fonts/gsub3_1_lookupflag_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub3_1_lookupflag_f1.otf rename to test/shape/data/aots/fonts/gsub3_1_lookupflag_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub3_1_multiple_f1.otf b/test/shape/data/aots/fonts/gsub3_1_multiple_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub3_1_multiple_f1.otf rename to test/shape/data/aots/fonts/gsub3_1_multiple_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub3_1_simple_f1.otf b/test/shape/data/aots/fonts/gsub3_1_simple_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub3_1_simple_f1.otf rename to test/shape/data/aots/fonts/gsub3_1_simple_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub4_1_lookupflag_f1.otf b/test/shape/data/aots/fonts/gsub4_1_lookupflag_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub4_1_lookupflag_f1.otf rename to test/shape/data/aots/fonts/gsub4_1_lookupflag_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub4_1_multiple_ligatures_f1.otf b/test/shape/data/aots/fonts/gsub4_1_multiple_ligatures_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub4_1_multiple_ligatures_f1.otf rename to test/shape/data/aots/fonts/gsub4_1_multiple_ligatures_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub4_1_multiple_ligatures_f2.otf b/test/shape/data/aots/fonts/gsub4_1_multiple_ligatures_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub4_1_multiple_ligatures_f2.otf rename to test/shape/data/aots/fonts/gsub4_1_multiple_ligatures_f2.otf diff --git a/test/shaping/data/aots/fonts/gsub4_1_multiple_ligsets_f1.otf b/test/shape/data/aots/fonts/gsub4_1_multiple_ligsets_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub4_1_multiple_ligsets_f1.otf rename to test/shape/data/aots/fonts/gsub4_1_multiple_ligsets_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub4_1_simple_f1.otf b/test/shape/data/aots/fonts/gsub4_1_simple_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub4_1_simple_f1.otf rename to test/shape/data/aots/fonts/gsub4_1_simple_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub7_font1.otf b/test/shape/data/aots/fonts/gsub7_font1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub7_font1.otf rename to test/shape/data/aots/fonts/gsub7_font1.otf diff --git a/test/shaping/data/aots/fonts/gsub7_font2.otf b/test/shape/data/aots/fonts/gsub7_font2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub7_font2.otf rename to test/shape/data/aots/fonts/gsub7_font2.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining1_boundary_f1.otf b/test/shape/data/aots/fonts/gsub_chaining1_boundary_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining1_boundary_f1.otf rename to test/shape/data/aots/fonts/gsub_chaining1_boundary_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining1_boundary_f2.otf b/test/shape/data/aots/fonts/gsub_chaining1_boundary_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining1_boundary_f2.otf rename to test/shape/data/aots/fonts/gsub_chaining1_boundary_f2.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining1_boundary_f3.otf b/test/shape/data/aots/fonts/gsub_chaining1_boundary_f3.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining1_boundary_f3.otf rename to test/shape/data/aots/fonts/gsub_chaining1_boundary_f3.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining1_boundary_f4.otf b/test/shape/data/aots/fonts/gsub_chaining1_boundary_f4.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining1_boundary_f4.otf rename to test/shape/data/aots/fonts/gsub_chaining1_boundary_f4.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining1_lookupflag_f1.otf b/test/shape/data/aots/fonts/gsub_chaining1_lookupflag_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining1_lookupflag_f1.otf rename to test/shape/data/aots/fonts/gsub_chaining1_lookupflag_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining1_multiple_subrules_f1.otf b/test/shape/data/aots/fonts/gsub_chaining1_multiple_subrules_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining1_multiple_subrules_f1.otf rename to test/shape/data/aots/fonts/gsub_chaining1_multiple_subrules_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining1_multiple_subrules_f2.otf b/test/shape/data/aots/fonts/gsub_chaining1_multiple_subrules_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining1_multiple_subrules_f2.otf rename to test/shape/data/aots/fonts/gsub_chaining1_multiple_subrules_f2.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining1_next_glyph_f1.otf b/test/shape/data/aots/fonts/gsub_chaining1_next_glyph_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining1_next_glyph_f1.otf rename to test/shape/data/aots/fonts/gsub_chaining1_next_glyph_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining1_simple_f1.otf b/test/shape/data/aots/fonts/gsub_chaining1_simple_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining1_simple_f1.otf rename to test/shape/data/aots/fonts/gsub_chaining1_simple_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining1_simple_f2.otf b/test/shape/data/aots/fonts/gsub_chaining1_simple_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining1_simple_f2.otf rename to test/shape/data/aots/fonts/gsub_chaining1_simple_f2.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining1_successive_f1.otf b/test/shape/data/aots/fonts/gsub_chaining1_successive_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining1_successive_f1.otf rename to test/shape/data/aots/fonts/gsub_chaining1_successive_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining2_boundary_f1.otf b/test/shape/data/aots/fonts/gsub_chaining2_boundary_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining2_boundary_f1.otf rename to test/shape/data/aots/fonts/gsub_chaining2_boundary_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining2_boundary_f2.otf b/test/shape/data/aots/fonts/gsub_chaining2_boundary_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining2_boundary_f2.otf rename to test/shape/data/aots/fonts/gsub_chaining2_boundary_f2.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining2_boundary_f3.otf b/test/shape/data/aots/fonts/gsub_chaining2_boundary_f3.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining2_boundary_f3.otf rename to test/shape/data/aots/fonts/gsub_chaining2_boundary_f3.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining2_boundary_f4.otf b/test/shape/data/aots/fonts/gsub_chaining2_boundary_f4.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining2_boundary_f4.otf rename to test/shape/data/aots/fonts/gsub_chaining2_boundary_f4.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining2_lookupflag_f1.otf b/test/shape/data/aots/fonts/gsub_chaining2_lookupflag_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining2_lookupflag_f1.otf rename to test/shape/data/aots/fonts/gsub_chaining2_lookupflag_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining2_multiple_subrules_f1.otf b/test/shape/data/aots/fonts/gsub_chaining2_multiple_subrules_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining2_multiple_subrules_f1.otf rename to test/shape/data/aots/fonts/gsub_chaining2_multiple_subrules_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining2_multiple_subrules_f2.otf b/test/shape/data/aots/fonts/gsub_chaining2_multiple_subrules_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining2_multiple_subrules_f2.otf rename to test/shape/data/aots/fonts/gsub_chaining2_multiple_subrules_f2.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining2_next_glyph_f1.otf b/test/shape/data/aots/fonts/gsub_chaining2_next_glyph_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining2_next_glyph_f1.otf rename to test/shape/data/aots/fonts/gsub_chaining2_next_glyph_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining2_simple_f1.otf b/test/shape/data/aots/fonts/gsub_chaining2_simple_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining2_simple_f1.otf rename to test/shape/data/aots/fonts/gsub_chaining2_simple_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining2_simple_f2.otf b/test/shape/data/aots/fonts/gsub_chaining2_simple_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining2_simple_f2.otf rename to test/shape/data/aots/fonts/gsub_chaining2_simple_f2.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining2_successive_f1.otf b/test/shape/data/aots/fonts/gsub_chaining2_successive_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining2_successive_f1.otf rename to test/shape/data/aots/fonts/gsub_chaining2_successive_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining3_boundary_f1.otf b/test/shape/data/aots/fonts/gsub_chaining3_boundary_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining3_boundary_f1.otf rename to test/shape/data/aots/fonts/gsub_chaining3_boundary_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining3_boundary_f2.otf b/test/shape/data/aots/fonts/gsub_chaining3_boundary_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining3_boundary_f2.otf rename to test/shape/data/aots/fonts/gsub_chaining3_boundary_f2.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining3_boundary_f3.otf b/test/shape/data/aots/fonts/gsub_chaining3_boundary_f3.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining3_boundary_f3.otf rename to test/shape/data/aots/fonts/gsub_chaining3_boundary_f3.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining3_boundary_f4.otf b/test/shape/data/aots/fonts/gsub_chaining3_boundary_f4.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining3_boundary_f4.otf rename to test/shape/data/aots/fonts/gsub_chaining3_boundary_f4.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining3_lookupflag_f1.otf b/test/shape/data/aots/fonts/gsub_chaining3_lookupflag_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining3_lookupflag_f1.otf rename to test/shape/data/aots/fonts/gsub_chaining3_lookupflag_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining3_next_glyph_f1.otf b/test/shape/data/aots/fonts/gsub_chaining3_next_glyph_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining3_next_glyph_f1.otf rename to test/shape/data/aots/fonts/gsub_chaining3_next_glyph_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining3_simple_f1.otf b/test/shape/data/aots/fonts/gsub_chaining3_simple_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining3_simple_f1.otf rename to test/shape/data/aots/fonts/gsub_chaining3_simple_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining3_simple_f2.otf b/test/shape/data/aots/fonts/gsub_chaining3_simple_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining3_simple_f2.otf rename to test/shape/data/aots/fonts/gsub_chaining3_simple_f2.otf diff --git a/test/shaping/data/aots/fonts/gsub_chaining3_successive_f1.otf b/test/shape/data/aots/fonts/gsub_chaining3_successive_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_chaining3_successive_f1.otf rename to test/shape/data/aots/fonts/gsub_chaining3_successive_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_context1_boundary_f1.otf b/test/shape/data/aots/fonts/gsub_context1_boundary_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context1_boundary_f1.otf rename to test/shape/data/aots/fonts/gsub_context1_boundary_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_context1_boundary_f2.otf b/test/shape/data/aots/fonts/gsub_context1_boundary_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context1_boundary_f2.otf rename to test/shape/data/aots/fonts/gsub_context1_boundary_f2.otf diff --git a/test/shaping/data/aots/fonts/gsub_context1_expansion_f1.otf b/test/shape/data/aots/fonts/gsub_context1_expansion_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context1_expansion_f1.otf rename to test/shape/data/aots/fonts/gsub_context1_expansion_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_context1_lookupflag_f1.otf b/test/shape/data/aots/fonts/gsub_context1_lookupflag_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context1_lookupflag_f1.otf rename to test/shape/data/aots/fonts/gsub_context1_lookupflag_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_context1_lookupflag_f2.otf b/test/shape/data/aots/fonts/gsub_context1_lookupflag_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context1_lookupflag_f2.otf rename to test/shape/data/aots/fonts/gsub_context1_lookupflag_f2.otf diff --git a/test/shaping/data/aots/fonts/gsub_context1_multiple_subrules_f1.otf b/test/shape/data/aots/fonts/gsub_context1_multiple_subrules_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context1_multiple_subrules_f1.otf rename to test/shape/data/aots/fonts/gsub_context1_multiple_subrules_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_context1_multiple_subrules_f2.otf b/test/shape/data/aots/fonts/gsub_context1_multiple_subrules_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context1_multiple_subrules_f2.otf rename to test/shape/data/aots/fonts/gsub_context1_multiple_subrules_f2.otf diff --git a/test/shaping/data/aots/fonts/gsub_context1_next_glyph_f1.otf b/test/shape/data/aots/fonts/gsub_context1_next_glyph_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context1_next_glyph_f1.otf rename to test/shape/data/aots/fonts/gsub_context1_next_glyph_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_context1_simple_f1.otf b/test/shape/data/aots/fonts/gsub_context1_simple_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context1_simple_f1.otf rename to test/shape/data/aots/fonts/gsub_context1_simple_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_context1_simple_f2.otf b/test/shape/data/aots/fonts/gsub_context1_simple_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context1_simple_f2.otf rename to test/shape/data/aots/fonts/gsub_context1_simple_f2.otf diff --git a/test/shaping/data/aots/fonts/gsub_context1_successive_f1.otf b/test/shape/data/aots/fonts/gsub_context1_successive_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context1_successive_f1.otf rename to test/shape/data/aots/fonts/gsub_context1_successive_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_context2_boundary_f1.otf b/test/shape/data/aots/fonts/gsub_context2_boundary_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context2_boundary_f1.otf rename to test/shape/data/aots/fonts/gsub_context2_boundary_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_context2_boundary_f2.otf b/test/shape/data/aots/fonts/gsub_context2_boundary_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context2_boundary_f2.otf rename to test/shape/data/aots/fonts/gsub_context2_boundary_f2.otf diff --git a/test/shaping/data/aots/fonts/gsub_context2_classes_f1.otf b/test/shape/data/aots/fonts/gsub_context2_classes_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context2_classes_f1.otf rename to test/shape/data/aots/fonts/gsub_context2_classes_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_context2_classes_f2.otf b/test/shape/data/aots/fonts/gsub_context2_classes_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context2_classes_f2.otf rename to test/shape/data/aots/fonts/gsub_context2_classes_f2.otf diff --git a/test/shaping/data/aots/fonts/gsub_context2_expansion_f1.otf b/test/shape/data/aots/fonts/gsub_context2_expansion_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context2_expansion_f1.otf rename to test/shape/data/aots/fonts/gsub_context2_expansion_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_context2_lookupflag_f1.otf b/test/shape/data/aots/fonts/gsub_context2_lookupflag_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context2_lookupflag_f1.otf rename to test/shape/data/aots/fonts/gsub_context2_lookupflag_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_context2_lookupflag_f2.otf b/test/shape/data/aots/fonts/gsub_context2_lookupflag_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context2_lookupflag_f2.otf rename to test/shape/data/aots/fonts/gsub_context2_lookupflag_f2.otf diff --git a/test/shaping/data/aots/fonts/gsub_context2_multiple_subrules_f1.otf b/test/shape/data/aots/fonts/gsub_context2_multiple_subrules_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context2_multiple_subrules_f1.otf rename to test/shape/data/aots/fonts/gsub_context2_multiple_subrules_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_context2_multiple_subrules_f2.otf b/test/shape/data/aots/fonts/gsub_context2_multiple_subrules_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context2_multiple_subrules_f2.otf rename to test/shape/data/aots/fonts/gsub_context2_multiple_subrules_f2.otf diff --git a/test/shaping/data/aots/fonts/gsub_context2_next_glyph_f1.otf b/test/shape/data/aots/fonts/gsub_context2_next_glyph_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context2_next_glyph_f1.otf rename to test/shape/data/aots/fonts/gsub_context2_next_glyph_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_context2_simple_f1.otf b/test/shape/data/aots/fonts/gsub_context2_simple_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context2_simple_f1.otf rename to test/shape/data/aots/fonts/gsub_context2_simple_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_context2_simple_f2.otf b/test/shape/data/aots/fonts/gsub_context2_simple_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context2_simple_f2.otf rename to test/shape/data/aots/fonts/gsub_context2_simple_f2.otf diff --git a/test/shaping/data/aots/fonts/gsub_context2_successive_f1.otf b/test/shape/data/aots/fonts/gsub_context2_successive_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context2_successive_f1.otf rename to test/shape/data/aots/fonts/gsub_context2_successive_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_context3_boundary_f1.otf b/test/shape/data/aots/fonts/gsub_context3_boundary_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context3_boundary_f1.otf rename to test/shape/data/aots/fonts/gsub_context3_boundary_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_context3_boundary_f2.otf b/test/shape/data/aots/fonts/gsub_context3_boundary_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context3_boundary_f2.otf rename to test/shape/data/aots/fonts/gsub_context3_boundary_f2.otf diff --git a/test/shaping/data/aots/fonts/gsub_context3_lookupflag_f1.otf b/test/shape/data/aots/fonts/gsub_context3_lookupflag_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context3_lookupflag_f1.otf rename to test/shape/data/aots/fonts/gsub_context3_lookupflag_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_context3_lookupflag_f2.otf b/test/shape/data/aots/fonts/gsub_context3_lookupflag_f2.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context3_lookupflag_f2.otf rename to test/shape/data/aots/fonts/gsub_context3_lookupflag_f2.otf diff --git a/test/shaping/data/aots/fonts/gsub_context3_next_glyph_f1.otf b/test/shape/data/aots/fonts/gsub_context3_next_glyph_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context3_next_glyph_f1.otf rename to test/shape/data/aots/fonts/gsub_context3_next_glyph_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_context3_simple_f1.otf b/test/shape/data/aots/fonts/gsub_context3_simple_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context3_simple_f1.otf rename to test/shape/data/aots/fonts/gsub_context3_simple_f1.otf diff --git a/test/shaping/data/aots/fonts/gsub_context3_successive_f1.otf b/test/shape/data/aots/fonts/gsub_context3_successive_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/gsub_context3_successive_f1.otf rename to test/shape/data/aots/fonts/gsub_context3_successive_f1.otf diff --git a/test/shaping/data/aots/fonts/lookupflag_ignore_attach_f1.otf b/test/shape/data/aots/fonts/lookupflag_ignore_attach_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/lookupflag_ignore_attach_f1.otf rename to test/shape/data/aots/fonts/lookupflag_ignore_attach_f1.otf diff --git a/test/shaping/data/aots/fonts/lookupflag_ignore_base_f1.otf b/test/shape/data/aots/fonts/lookupflag_ignore_base_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/lookupflag_ignore_base_f1.otf rename to test/shape/data/aots/fonts/lookupflag_ignore_base_f1.otf diff --git a/test/shaping/data/aots/fonts/lookupflag_ignore_combination_f1.otf b/test/shape/data/aots/fonts/lookupflag_ignore_combination_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/lookupflag_ignore_combination_f1.otf rename to test/shape/data/aots/fonts/lookupflag_ignore_combination_f1.otf diff --git a/test/shaping/data/aots/fonts/lookupflag_ignore_ligatures_f1.otf b/test/shape/data/aots/fonts/lookupflag_ignore_ligatures_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/lookupflag_ignore_ligatures_f1.otf rename to test/shape/data/aots/fonts/lookupflag_ignore_ligatures_f1.otf diff --git a/test/shaping/data/aots/fonts/lookupflag_ignore_marks_f1.otf b/test/shape/data/aots/fonts/lookupflag_ignore_marks_f1.otf similarity index 100% rename from test/shaping/data/aots/fonts/lookupflag_ignore_marks_f1.otf rename to test/shape/data/aots/fonts/lookupflag_ignore_marks_f1.otf diff --git a/test/shaping/data/aots/hb-aots-tester.cpp b/test/shape/data/aots/hb-aots-tester.cpp similarity index 100% rename from test/shaping/data/aots/hb-aots-tester.cpp rename to test/shape/data/aots/hb-aots-tester.cpp diff --git a/test/shaping/data/aots/meson.build b/test/shape/data/aots/meson.build similarity index 100% rename from test/shaping/data/aots/meson.build rename to test/shape/data/aots/meson.build diff --git a/test/shaping/data/aots/tests/classdef1.tests b/test/shape/data/aots/tests/classdef1.tests similarity index 100% rename from test/shaping/data/aots/tests/classdef1.tests rename to test/shape/data/aots/tests/classdef1.tests diff --git a/test/shaping/data/aots/tests/classdef1_empty.tests b/test/shape/data/aots/tests/classdef1_empty.tests similarity index 100% rename from test/shaping/data/aots/tests/classdef1_empty.tests rename to test/shape/data/aots/tests/classdef1_empty.tests diff --git a/test/shaping/data/aots/tests/classdef1_multiple.tests b/test/shape/data/aots/tests/classdef1_multiple.tests similarity index 100% rename from test/shaping/data/aots/tests/classdef1_multiple.tests rename to test/shape/data/aots/tests/classdef1_multiple.tests diff --git a/test/shaping/data/aots/tests/classdef1_single.tests b/test/shape/data/aots/tests/classdef1_single.tests similarity index 100% rename from test/shaping/data/aots/tests/classdef1_single.tests rename to test/shape/data/aots/tests/classdef1_single.tests diff --git a/test/shaping/data/aots/tests/classdef2.tests b/test/shape/data/aots/tests/classdef2.tests similarity index 100% rename from test/shaping/data/aots/tests/classdef2.tests rename to test/shape/data/aots/tests/classdef2.tests diff --git a/test/shaping/data/aots/tests/classdef2_empty.tests b/test/shape/data/aots/tests/classdef2_empty.tests similarity index 100% rename from test/shaping/data/aots/tests/classdef2_empty.tests rename to test/shape/data/aots/tests/classdef2_empty.tests diff --git a/test/shaping/data/aots/tests/classdef2_multiple.tests b/test/shape/data/aots/tests/classdef2_multiple.tests similarity index 100% rename from test/shaping/data/aots/tests/classdef2_multiple.tests rename to test/shape/data/aots/tests/classdef2_multiple.tests diff --git a/test/shaping/data/aots/tests/classdef2_single.tests b/test/shape/data/aots/tests/classdef2_single.tests similarity index 100% rename from test/shaping/data/aots/tests/classdef2_single.tests rename to test/shape/data/aots/tests/classdef2_single.tests diff --git a/test/shaping/data/aots/tests/cmap0.tests b/test/shape/data/aots/tests/cmap0.tests similarity index 100% rename from test/shaping/data/aots/tests/cmap0.tests rename to test/shape/data/aots/tests/cmap0.tests diff --git a/test/shaping/data/aots/tests/cmap10.tests b/test/shape/data/aots/tests/cmap10.tests similarity index 100% rename from test/shaping/data/aots/tests/cmap10.tests rename to test/shape/data/aots/tests/cmap10.tests diff --git a/test/shaping/data/aots/tests/cmap12.tests b/test/shape/data/aots/tests/cmap12.tests similarity index 100% rename from test/shaping/data/aots/tests/cmap12.tests rename to test/shape/data/aots/tests/cmap12.tests diff --git a/test/shaping/data/aots/tests/cmap2.tests b/test/shape/data/aots/tests/cmap2.tests similarity index 100% rename from test/shaping/data/aots/tests/cmap2.tests rename to test/shape/data/aots/tests/cmap2.tests diff --git a/test/shaping/data/aots/tests/cmap4.tests b/test/shape/data/aots/tests/cmap4.tests similarity index 100% rename from test/shaping/data/aots/tests/cmap4.tests rename to test/shape/data/aots/tests/cmap4.tests diff --git a/test/shaping/data/aots/tests/cmap6.tests b/test/shape/data/aots/tests/cmap6.tests similarity index 100% rename from test/shaping/data/aots/tests/cmap6.tests rename to test/shape/data/aots/tests/cmap6.tests diff --git a/test/shaping/data/aots/tests/cmap8.tests b/test/shape/data/aots/tests/cmap8.tests similarity index 100% rename from test/shaping/data/aots/tests/cmap8.tests rename to test/shape/data/aots/tests/cmap8.tests diff --git a/test/shaping/data/aots/tests/gpos1_1_lookupflag.tests b/test/shape/data/aots/tests/gpos1_1_lookupflag.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos1_1_lookupflag.tests rename to test/shape/data/aots/tests/gpos1_1_lookupflag.tests diff --git a/test/shaping/data/aots/tests/gpos1_1_simple.tests b/test/shape/data/aots/tests/gpos1_1_simple.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos1_1_simple.tests rename to test/shape/data/aots/tests/gpos1_1_simple.tests diff --git a/test/shaping/data/aots/tests/gpos1_2.tests b/test/shape/data/aots/tests/gpos1_2.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos1_2.tests rename to test/shape/data/aots/tests/gpos1_2.tests diff --git a/test/shaping/data/aots/tests/gpos1_2_lookupflag.tests b/test/shape/data/aots/tests/gpos1_2_lookupflag.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos1_2_lookupflag.tests rename to test/shape/data/aots/tests/gpos1_2_lookupflag.tests diff --git a/test/shaping/data/aots/tests/gpos2_1.tests b/test/shape/data/aots/tests/gpos2_1.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos2_1.tests rename to test/shape/data/aots/tests/gpos2_1.tests diff --git a/test/shaping/data/aots/tests/gpos2_1_lookupflag.tests b/test/shape/data/aots/tests/gpos2_1_lookupflag.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos2_1_lookupflag.tests rename to test/shape/data/aots/tests/gpos2_1_lookupflag.tests diff --git a/test/shaping/data/aots/tests/gpos2_1_next_glyph.tests b/test/shape/data/aots/tests/gpos2_1_next_glyph.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos2_1_next_glyph.tests rename to test/shape/data/aots/tests/gpos2_1_next_glyph.tests diff --git a/test/shaping/data/aots/tests/gpos2_1_simple.tests b/test/shape/data/aots/tests/gpos2_1_simple.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos2_1_simple.tests rename to test/shape/data/aots/tests/gpos2_1_simple.tests diff --git a/test/shaping/data/aots/tests/gpos2_2.tests b/test/shape/data/aots/tests/gpos2_2.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos2_2.tests rename to test/shape/data/aots/tests/gpos2_2.tests diff --git a/test/shaping/data/aots/tests/gpos3.tests b/test/shape/data/aots/tests/gpos3.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos3.tests rename to test/shape/data/aots/tests/gpos3.tests diff --git a/test/shaping/data/aots/tests/gpos3_lookupflag.tests b/test/shape/data/aots/tests/gpos3_lookupflag.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos3_lookupflag.tests rename to test/shape/data/aots/tests/gpos3_lookupflag.tests diff --git a/test/shaping/data/aots/tests/gpos4_lookupflag.tests b/test/shape/data/aots/tests/gpos4_lookupflag.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos4_lookupflag.tests rename to test/shape/data/aots/tests/gpos4_lookupflag.tests diff --git a/test/shaping/data/aots/tests/gpos4_multiple_anchors.tests b/test/shape/data/aots/tests/gpos4_multiple_anchors.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos4_multiple_anchors.tests rename to test/shape/data/aots/tests/gpos4_multiple_anchors.tests diff --git a/test/shaping/data/aots/tests/gpos4_simple.tests b/test/shape/data/aots/tests/gpos4_simple.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos4_simple.tests rename to test/shape/data/aots/tests/gpos4_simple.tests diff --git a/test/shaping/data/aots/tests/gpos5.tests b/test/shape/data/aots/tests/gpos5.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos5.tests rename to test/shape/data/aots/tests/gpos5.tests diff --git a/test/shaping/data/aots/tests/gpos6.tests b/test/shape/data/aots/tests/gpos6.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos6.tests rename to test/shape/data/aots/tests/gpos6.tests diff --git a/test/shaping/data/aots/tests/gpos7_1.tests b/test/shape/data/aots/tests/gpos7_1.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos7_1.tests rename to test/shape/data/aots/tests/gpos7_1.tests diff --git a/test/shaping/data/aots/tests/gpos9.tests b/test/shape/data/aots/tests/gpos9.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos9.tests rename to test/shape/data/aots/tests/gpos9.tests diff --git a/test/shaping/data/aots/tests/gpos_chaining1_boundary.tests b/test/shape/data/aots/tests/gpos_chaining1_boundary.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_chaining1_boundary.tests rename to test/shape/data/aots/tests/gpos_chaining1_boundary.tests diff --git a/test/shaping/data/aots/tests/gpos_chaining1_lookupflag.tests b/test/shape/data/aots/tests/gpos_chaining1_lookupflag.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_chaining1_lookupflag.tests rename to test/shape/data/aots/tests/gpos_chaining1_lookupflag.tests diff --git a/test/shaping/data/aots/tests/gpos_chaining1_multiple_subrules.tests b/test/shape/data/aots/tests/gpos_chaining1_multiple_subrules.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_chaining1_multiple_subrules.tests rename to test/shape/data/aots/tests/gpos_chaining1_multiple_subrules.tests diff --git a/test/shaping/data/aots/tests/gpos_chaining1_next_glyph.tests b/test/shape/data/aots/tests/gpos_chaining1_next_glyph.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_chaining1_next_glyph.tests rename to test/shape/data/aots/tests/gpos_chaining1_next_glyph.tests diff --git a/test/shaping/data/aots/tests/gpos_chaining1_simple.tests b/test/shape/data/aots/tests/gpos_chaining1_simple.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_chaining1_simple.tests rename to test/shape/data/aots/tests/gpos_chaining1_simple.tests diff --git a/test/shaping/data/aots/tests/gpos_chaining1_successive.tests b/test/shape/data/aots/tests/gpos_chaining1_successive.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_chaining1_successive.tests rename to test/shape/data/aots/tests/gpos_chaining1_successive.tests diff --git a/test/shaping/data/aots/tests/gpos_chaining2_boundary.tests b/test/shape/data/aots/tests/gpos_chaining2_boundary.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_chaining2_boundary.tests rename to test/shape/data/aots/tests/gpos_chaining2_boundary.tests diff --git a/test/shaping/data/aots/tests/gpos_chaining2_lookupflag.tests b/test/shape/data/aots/tests/gpos_chaining2_lookupflag.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_chaining2_lookupflag.tests rename to test/shape/data/aots/tests/gpos_chaining2_lookupflag.tests diff --git a/test/shaping/data/aots/tests/gpos_chaining2_multiple_subrules.tests b/test/shape/data/aots/tests/gpos_chaining2_multiple_subrules.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_chaining2_multiple_subrules.tests rename to test/shape/data/aots/tests/gpos_chaining2_multiple_subrules.tests diff --git a/test/shaping/data/aots/tests/gpos_chaining2_next_glyph.tests b/test/shape/data/aots/tests/gpos_chaining2_next_glyph.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_chaining2_next_glyph.tests rename to test/shape/data/aots/tests/gpos_chaining2_next_glyph.tests diff --git a/test/shaping/data/aots/tests/gpos_chaining2_simple.tests b/test/shape/data/aots/tests/gpos_chaining2_simple.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_chaining2_simple.tests rename to test/shape/data/aots/tests/gpos_chaining2_simple.tests diff --git a/test/shaping/data/aots/tests/gpos_chaining2_successive.tests b/test/shape/data/aots/tests/gpos_chaining2_successive.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_chaining2_successive.tests rename to test/shape/data/aots/tests/gpos_chaining2_successive.tests diff --git a/test/shaping/data/aots/tests/gpos_chaining3_boundary.tests b/test/shape/data/aots/tests/gpos_chaining3_boundary.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_chaining3_boundary.tests rename to test/shape/data/aots/tests/gpos_chaining3_boundary.tests diff --git a/test/shaping/data/aots/tests/gpos_chaining3_lookupflag.tests b/test/shape/data/aots/tests/gpos_chaining3_lookupflag.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_chaining3_lookupflag.tests rename to test/shape/data/aots/tests/gpos_chaining3_lookupflag.tests diff --git a/test/shaping/data/aots/tests/gpos_chaining3_next_glyph.tests b/test/shape/data/aots/tests/gpos_chaining3_next_glyph.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_chaining3_next_glyph.tests rename to test/shape/data/aots/tests/gpos_chaining3_next_glyph.tests diff --git a/test/shaping/data/aots/tests/gpos_chaining3_simple.tests b/test/shape/data/aots/tests/gpos_chaining3_simple.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_chaining3_simple.tests rename to test/shape/data/aots/tests/gpos_chaining3_simple.tests diff --git a/test/shaping/data/aots/tests/gpos_chaining3_successive.tests b/test/shape/data/aots/tests/gpos_chaining3_successive.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_chaining3_successive.tests rename to test/shape/data/aots/tests/gpos_chaining3_successive.tests diff --git a/test/shaping/data/aots/tests/gpos_context1_boundary.tests b/test/shape/data/aots/tests/gpos_context1_boundary.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_context1_boundary.tests rename to test/shape/data/aots/tests/gpos_context1_boundary.tests diff --git a/test/shaping/data/aots/tests/gpos_context1_expansion.tests b/test/shape/data/aots/tests/gpos_context1_expansion.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_context1_expansion.tests rename to test/shape/data/aots/tests/gpos_context1_expansion.tests diff --git a/test/shaping/data/aots/tests/gpos_context1_lookupflag.tests b/test/shape/data/aots/tests/gpos_context1_lookupflag.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_context1_lookupflag.tests rename to test/shape/data/aots/tests/gpos_context1_lookupflag.tests diff --git a/test/shaping/data/aots/tests/gpos_context1_multiple_subrules.tests b/test/shape/data/aots/tests/gpos_context1_multiple_subrules.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_context1_multiple_subrules.tests rename to test/shape/data/aots/tests/gpos_context1_multiple_subrules.tests diff --git a/test/shaping/data/aots/tests/gpos_context1_next_glyph.tests b/test/shape/data/aots/tests/gpos_context1_next_glyph.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_context1_next_glyph.tests rename to test/shape/data/aots/tests/gpos_context1_next_glyph.tests diff --git a/test/shaping/data/aots/tests/gpos_context1_simple.tests b/test/shape/data/aots/tests/gpos_context1_simple.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_context1_simple.tests rename to test/shape/data/aots/tests/gpos_context1_simple.tests diff --git a/test/shaping/data/aots/tests/gpos_context1_successive.tests b/test/shape/data/aots/tests/gpos_context1_successive.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_context1_successive.tests rename to test/shape/data/aots/tests/gpos_context1_successive.tests diff --git a/test/shaping/data/aots/tests/gpos_context2_boundary.tests b/test/shape/data/aots/tests/gpos_context2_boundary.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_context2_boundary.tests rename to test/shape/data/aots/tests/gpos_context2_boundary.tests diff --git a/test/shaping/data/aots/tests/gpos_context2_classes.tests b/test/shape/data/aots/tests/gpos_context2_classes.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_context2_classes.tests rename to test/shape/data/aots/tests/gpos_context2_classes.tests diff --git a/test/shaping/data/aots/tests/gpos_context2_expansion.tests b/test/shape/data/aots/tests/gpos_context2_expansion.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_context2_expansion.tests rename to test/shape/data/aots/tests/gpos_context2_expansion.tests diff --git a/test/shaping/data/aots/tests/gpos_context2_lookupflag.tests b/test/shape/data/aots/tests/gpos_context2_lookupflag.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_context2_lookupflag.tests rename to test/shape/data/aots/tests/gpos_context2_lookupflag.tests diff --git a/test/shaping/data/aots/tests/gpos_context2_multiple_subrules.tests b/test/shape/data/aots/tests/gpos_context2_multiple_subrules.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_context2_multiple_subrules.tests rename to test/shape/data/aots/tests/gpos_context2_multiple_subrules.tests diff --git a/test/shaping/data/aots/tests/gpos_context2_next_glyph.tests b/test/shape/data/aots/tests/gpos_context2_next_glyph.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_context2_next_glyph.tests rename to test/shape/data/aots/tests/gpos_context2_next_glyph.tests diff --git a/test/shaping/data/aots/tests/gpos_context2_simple.tests b/test/shape/data/aots/tests/gpos_context2_simple.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_context2_simple.tests rename to test/shape/data/aots/tests/gpos_context2_simple.tests diff --git a/test/shaping/data/aots/tests/gpos_context2_successive.tests b/test/shape/data/aots/tests/gpos_context2_successive.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_context2_successive.tests rename to test/shape/data/aots/tests/gpos_context2_successive.tests diff --git a/test/shaping/data/aots/tests/gpos_context3_boundary.tests b/test/shape/data/aots/tests/gpos_context3_boundary.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_context3_boundary.tests rename to test/shape/data/aots/tests/gpos_context3_boundary.tests diff --git a/test/shaping/data/aots/tests/gpos_context3_lookupflag.tests b/test/shape/data/aots/tests/gpos_context3_lookupflag.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_context3_lookupflag.tests rename to test/shape/data/aots/tests/gpos_context3_lookupflag.tests diff --git a/test/shaping/data/aots/tests/gpos_context3_next_glyph.tests b/test/shape/data/aots/tests/gpos_context3_next_glyph.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_context3_next_glyph.tests rename to test/shape/data/aots/tests/gpos_context3_next_glyph.tests diff --git a/test/shaping/data/aots/tests/gpos_context3_simple.tests b/test/shape/data/aots/tests/gpos_context3_simple.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_context3_simple.tests rename to test/shape/data/aots/tests/gpos_context3_simple.tests diff --git a/test/shaping/data/aots/tests/gpos_context3_successive.tests b/test/shape/data/aots/tests/gpos_context3_successive.tests similarity index 100% rename from test/shaping/data/aots/tests/gpos_context3_successive.tests rename to test/shape/data/aots/tests/gpos_context3_successive.tests diff --git a/test/shaping/data/aots/tests/gsub1_1_lookupflag.tests b/test/shape/data/aots/tests/gsub1_1_lookupflag.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub1_1_lookupflag.tests rename to test/shape/data/aots/tests/gsub1_1_lookupflag.tests diff --git a/test/shaping/data/aots/tests/gsub1_1_modulo.tests b/test/shape/data/aots/tests/gsub1_1_modulo.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub1_1_modulo.tests rename to test/shape/data/aots/tests/gsub1_1_modulo.tests diff --git a/test/shaping/data/aots/tests/gsub1_1_simple.tests b/test/shape/data/aots/tests/gsub1_1_simple.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub1_1_simple.tests rename to test/shape/data/aots/tests/gsub1_1_simple.tests diff --git a/test/shaping/data/aots/tests/gsub1_2_lookupflag.tests b/test/shape/data/aots/tests/gsub1_2_lookupflag.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub1_2_lookupflag.tests rename to test/shape/data/aots/tests/gsub1_2_lookupflag.tests diff --git a/test/shaping/data/aots/tests/gsub1_2_simple.tests b/test/shape/data/aots/tests/gsub1_2_simple.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub1_2_simple.tests rename to test/shape/data/aots/tests/gsub1_2_simple.tests diff --git a/test/shaping/data/aots/tests/gsub2_1_lookupflag.tests b/test/shape/data/aots/tests/gsub2_1_lookupflag.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub2_1_lookupflag.tests rename to test/shape/data/aots/tests/gsub2_1_lookupflag.tests diff --git a/test/shaping/data/aots/tests/gsub2_1_multiple_sequences.tests b/test/shape/data/aots/tests/gsub2_1_multiple_sequences.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub2_1_multiple_sequences.tests rename to test/shape/data/aots/tests/gsub2_1_multiple_sequences.tests diff --git a/test/shaping/data/aots/tests/gsub2_1_simple.tests b/test/shape/data/aots/tests/gsub2_1_simple.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub2_1_simple.tests rename to test/shape/data/aots/tests/gsub2_1_simple.tests diff --git a/test/shaping/data/aots/tests/gsub3_1_lookupflag.tests b/test/shape/data/aots/tests/gsub3_1_lookupflag.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub3_1_lookupflag.tests rename to test/shape/data/aots/tests/gsub3_1_lookupflag.tests diff --git a/test/shaping/data/aots/tests/gsub3_1_multiple.tests b/test/shape/data/aots/tests/gsub3_1_multiple.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub3_1_multiple.tests rename to test/shape/data/aots/tests/gsub3_1_multiple.tests diff --git a/test/shaping/data/aots/tests/gsub3_1_simple.tests b/test/shape/data/aots/tests/gsub3_1_simple.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub3_1_simple.tests rename to test/shape/data/aots/tests/gsub3_1_simple.tests diff --git a/test/shaping/data/aots/tests/gsub4_1_lookupflag.tests b/test/shape/data/aots/tests/gsub4_1_lookupflag.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub4_1_lookupflag.tests rename to test/shape/data/aots/tests/gsub4_1_lookupflag.tests diff --git a/test/shaping/data/aots/tests/gsub4_1_multiple_ligatures.tests b/test/shape/data/aots/tests/gsub4_1_multiple_ligatures.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub4_1_multiple_ligatures.tests rename to test/shape/data/aots/tests/gsub4_1_multiple_ligatures.tests diff --git a/test/shaping/data/aots/tests/gsub4_1_multiple_ligsets.tests b/test/shape/data/aots/tests/gsub4_1_multiple_ligsets.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub4_1_multiple_ligsets.tests rename to test/shape/data/aots/tests/gsub4_1_multiple_ligsets.tests diff --git a/test/shaping/data/aots/tests/gsub4_1_simple.tests b/test/shape/data/aots/tests/gsub4_1_simple.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub4_1_simple.tests rename to test/shape/data/aots/tests/gsub4_1_simple.tests diff --git a/test/shaping/data/aots/tests/gsub7.tests b/test/shape/data/aots/tests/gsub7.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub7.tests rename to test/shape/data/aots/tests/gsub7.tests diff --git a/test/shaping/data/aots/tests/gsub_chaining1_boundary.tests b/test/shape/data/aots/tests/gsub_chaining1_boundary.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_chaining1_boundary.tests rename to test/shape/data/aots/tests/gsub_chaining1_boundary.tests diff --git a/test/shaping/data/aots/tests/gsub_chaining1_lookupflag.tests b/test/shape/data/aots/tests/gsub_chaining1_lookupflag.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_chaining1_lookupflag.tests rename to test/shape/data/aots/tests/gsub_chaining1_lookupflag.tests diff --git a/test/shaping/data/aots/tests/gsub_chaining1_multiple_subrules.tests b/test/shape/data/aots/tests/gsub_chaining1_multiple_subrules.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_chaining1_multiple_subrules.tests rename to test/shape/data/aots/tests/gsub_chaining1_multiple_subrules.tests diff --git a/test/shaping/data/aots/tests/gsub_chaining1_next_glyph.tests b/test/shape/data/aots/tests/gsub_chaining1_next_glyph.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_chaining1_next_glyph.tests rename to test/shape/data/aots/tests/gsub_chaining1_next_glyph.tests diff --git a/test/shaping/data/aots/tests/gsub_chaining1_simple.tests b/test/shape/data/aots/tests/gsub_chaining1_simple.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_chaining1_simple.tests rename to test/shape/data/aots/tests/gsub_chaining1_simple.tests diff --git a/test/shaping/data/aots/tests/gsub_chaining1_successive.tests b/test/shape/data/aots/tests/gsub_chaining1_successive.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_chaining1_successive.tests rename to test/shape/data/aots/tests/gsub_chaining1_successive.tests diff --git a/test/shaping/data/aots/tests/gsub_chaining2_boundary.tests b/test/shape/data/aots/tests/gsub_chaining2_boundary.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_chaining2_boundary.tests rename to test/shape/data/aots/tests/gsub_chaining2_boundary.tests diff --git a/test/shaping/data/aots/tests/gsub_chaining2_lookupflag.tests b/test/shape/data/aots/tests/gsub_chaining2_lookupflag.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_chaining2_lookupflag.tests rename to test/shape/data/aots/tests/gsub_chaining2_lookupflag.tests diff --git a/test/shaping/data/aots/tests/gsub_chaining2_multiple_subrules.tests b/test/shape/data/aots/tests/gsub_chaining2_multiple_subrules.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_chaining2_multiple_subrules.tests rename to test/shape/data/aots/tests/gsub_chaining2_multiple_subrules.tests diff --git a/test/shaping/data/aots/tests/gsub_chaining2_next_glyph.tests b/test/shape/data/aots/tests/gsub_chaining2_next_glyph.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_chaining2_next_glyph.tests rename to test/shape/data/aots/tests/gsub_chaining2_next_glyph.tests diff --git a/test/shaping/data/aots/tests/gsub_chaining2_simple.tests b/test/shape/data/aots/tests/gsub_chaining2_simple.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_chaining2_simple.tests rename to test/shape/data/aots/tests/gsub_chaining2_simple.tests diff --git a/test/shaping/data/aots/tests/gsub_chaining2_successive.tests b/test/shape/data/aots/tests/gsub_chaining2_successive.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_chaining2_successive.tests rename to test/shape/data/aots/tests/gsub_chaining2_successive.tests diff --git a/test/shaping/data/aots/tests/gsub_chaining3_boundary.tests b/test/shape/data/aots/tests/gsub_chaining3_boundary.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_chaining3_boundary.tests rename to test/shape/data/aots/tests/gsub_chaining3_boundary.tests diff --git a/test/shaping/data/aots/tests/gsub_chaining3_lookupflag.tests b/test/shape/data/aots/tests/gsub_chaining3_lookupflag.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_chaining3_lookupflag.tests rename to test/shape/data/aots/tests/gsub_chaining3_lookupflag.tests diff --git a/test/shaping/data/aots/tests/gsub_chaining3_next_glyph.tests b/test/shape/data/aots/tests/gsub_chaining3_next_glyph.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_chaining3_next_glyph.tests rename to test/shape/data/aots/tests/gsub_chaining3_next_glyph.tests diff --git a/test/shaping/data/aots/tests/gsub_chaining3_simple.tests b/test/shape/data/aots/tests/gsub_chaining3_simple.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_chaining3_simple.tests rename to test/shape/data/aots/tests/gsub_chaining3_simple.tests diff --git a/test/shaping/data/aots/tests/gsub_chaining3_successive.tests b/test/shape/data/aots/tests/gsub_chaining3_successive.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_chaining3_successive.tests rename to test/shape/data/aots/tests/gsub_chaining3_successive.tests diff --git a/test/shaping/data/aots/tests/gsub_context1_boundary.tests b/test/shape/data/aots/tests/gsub_context1_boundary.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_context1_boundary.tests rename to test/shape/data/aots/tests/gsub_context1_boundary.tests diff --git a/test/shaping/data/aots/tests/gsub_context1_expansion.tests b/test/shape/data/aots/tests/gsub_context1_expansion.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_context1_expansion.tests rename to test/shape/data/aots/tests/gsub_context1_expansion.tests diff --git a/test/shaping/data/aots/tests/gsub_context1_lookupflag.tests b/test/shape/data/aots/tests/gsub_context1_lookupflag.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_context1_lookupflag.tests rename to test/shape/data/aots/tests/gsub_context1_lookupflag.tests diff --git a/test/shaping/data/aots/tests/gsub_context1_multiple_subrules.tests b/test/shape/data/aots/tests/gsub_context1_multiple_subrules.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_context1_multiple_subrules.tests rename to test/shape/data/aots/tests/gsub_context1_multiple_subrules.tests diff --git a/test/shaping/data/aots/tests/gsub_context1_next_glyph.tests b/test/shape/data/aots/tests/gsub_context1_next_glyph.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_context1_next_glyph.tests rename to test/shape/data/aots/tests/gsub_context1_next_glyph.tests diff --git a/test/shaping/data/aots/tests/gsub_context1_simple.tests b/test/shape/data/aots/tests/gsub_context1_simple.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_context1_simple.tests rename to test/shape/data/aots/tests/gsub_context1_simple.tests diff --git a/test/shaping/data/aots/tests/gsub_context1_successive.tests b/test/shape/data/aots/tests/gsub_context1_successive.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_context1_successive.tests rename to test/shape/data/aots/tests/gsub_context1_successive.tests diff --git a/test/shaping/data/aots/tests/gsub_context2_boundary.tests b/test/shape/data/aots/tests/gsub_context2_boundary.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_context2_boundary.tests rename to test/shape/data/aots/tests/gsub_context2_boundary.tests diff --git a/test/shaping/data/aots/tests/gsub_context2_classes.tests b/test/shape/data/aots/tests/gsub_context2_classes.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_context2_classes.tests rename to test/shape/data/aots/tests/gsub_context2_classes.tests diff --git a/test/shaping/data/aots/tests/gsub_context2_expansion.tests b/test/shape/data/aots/tests/gsub_context2_expansion.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_context2_expansion.tests rename to test/shape/data/aots/tests/gsub_context2_expansion.tests diff --git a/test/shaping/data/aots/tests/gsub_context2_lookupflag.tests b/test/shape/data/aots/tests/gsub_context2_lookupflag.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_context2_lookupflag.tests rename to test/shape/data/aots/tests/gsub_context2_lookupflag.tests diff --git a/test/shaping/data/aots/tests/gsub_context2_multiple_subrules.tests b/test/shape/data/aots/tests/gsub_context2_multiple_subrules.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_context2_multiple_subrules.tests rename to test/shape/data/aots/tests/gsub_context2_multiple_subrules.tests diff --git a/test/shaping/data/aots/tests/gsub_context2_next_glyph.tests b/test/shape/data/aots/tests/gsub_context2_next_glyph.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_context2_next_glyph.tests rename to test/shape/data/aots/tests/gsub_context2_next_glyph.tests diff --git a/test/shaping/data/aots/tests/gsub_context2_simple.tests b/test/shape/data/aots/tests/gsub_context2_simple.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_context2_simple.tests rename to test/shape/data/aots/tests/gsub_context2_simple.tests diff --git a/test/shaping/data/aots/tests/gsub_context2_successive.tests b/test/shape/data/aots/tests/gsub_context2_successive.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_context2_successive.tests rename to test/shape/data/aots/tests/gsub_context2_successive.tests diff --git a/test/shaping/data/aots/tests/gsub_context3_boundary.tests b/test/shape/data/aots/tests/gsub_context3_boundary.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_context3_boundary.tests rename to test/shape/data/aots/tests/gsub_context3_boundary.tests diff --git a/test/shaping/data/aots/tests/gsub_context3_lookupflag.tests b/test/shape/data/aots/tests/gsub_context3_lookupflag.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_context3_lookupflag.tests rename to test/shape/data/aots/tests/gsub_context3_lookupflag.tests diff --git a/test/shaping/data/aots/tests/gsub_context3_next_glyph.tests b/test/shape/data/aots/tests/gsub_context3_next_glyph.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_context3_next_glyph.tests rename to test/shape/data/aots/tests/gsub_context3_next_glyph.tests diff --git a/test/shaping/data/aots/tests/gsub_context3_simple.tests b/test/shape/data/aots/tests/gsub_context3_simple.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_context3_simple.tests rename to test/shape/data/aots/tests/gsub_context3_simple.tests diff --git a/test/shaping/data/aots/tests/gsub_context3_successive.tests b/test/shape/data/aots/tests/gsub_context3_successive.tests similarity index 100% rename from test/shaping/data/aots/tests/gsub_context3_successive.tests rename to test/shape/data/aots/tests/gsub_context3_successive.tests diff --git a/test/shaping/data/aots/tests/lookupflag_ignore_attach.tests b/test/shape/data/aots/tests/lookupflag_ignore_attach.tests similarity index 100% rename from test/shaping/data/aots/tests/lookupflag_ignore_attach.tests rename to test/shape/data/aots/tests/lookupflag_ignore_attach.tests diff --git a/test/shaping/data/aots/tests/lookupflag_ignore_base.tests b/test/shape/data/aots/tests/lookupflag_ignore_base.tests similarity index 100% rename from test/shaping/data/aots/tests/lookupflag_ignore_base.tests rename to test/shape/data/aots/tests/lookupflag_ignore_base.tests diff --git a/test/shaping/data/aots/tests/lookupflag_ignore_combination.tests b/test/shape/data/aots/tests/lookupflag_ignore_combination.tests similarity index 100% rename from test/shaping/data/aots/tests/lookupflag_ignore_combination.tests rename to test/shape/data/aots/tests/lookupflag_ignore_combination.tests diff --git a/test/shaping/data/aots/tests/lookupflag_ignore_ligatures.tests b/test/shape/data/aots/tests/lookupflag_ignore_ligatures.tests similarity index 100% rename from test/shaping/data/aots/tests/lookupflag_ignore_ligatures.tests rename to test/shape/data/aots/tests/lookupflag_ignore_ligatures.tests diff --git a/test/shaping/data/aots/tests/lookupflag_ignore_marks.tests b/test/shape/data/aots/tests/lookupflag_ignore_marks.tests similarity index 100% rename from test/shaping/data/aots/tests/lookupflag_ignore_marks.tests rename to test/shape/data/aots/tests/lookupflag_ignore_marks.tests diff --git a/test/shaping/data/aots/update.py b/test/shape/data/aots/update.py similarity index 100% rename from test/shaping/data/aots/update.py rename to test/shape/data/aots/update.py diff --git a/test/shaping/data/in-house/COPYING b/test/shape/data/in-house/COPYING similarity index 100% rename from test/shaping/data/in-house/COPYING rename to test/shape/data/in-house/COPYING diff --git a/test/shaping/data/in-house/Makefile.am b/test/shape/data/in-house/Makefile.am similarity index 100% rename from test/shaping/data/in-house/Makefile.am rename to test/shape/data/in-house/Makefile.am diff --git a/test/shaping/data/in-house/Makefile.sources b/test/shape/data/in-house/Makefile.sources similarity index 100% rename from test/shaping/data/in-house/Makefile.sources rename to test/shape/data/in-house/Makefile.sources diff --git a/test/shaping/data/in-house/fonts/03e3f463c3a985bc42096620cc415342818454fb.ttf b/test/shape/data/in-house/fonts/03e3f463c3a985bc42096620cc415342818454fb.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/03e3f463c3a985bc42096620cc415342818454fb.ttf rename to test/shape/data/in-house/fonts/03e3f463c3a985bc42096620cc415342818454fb.ttf diff --git a/test/shaping/data/in-house/fonts/051d92f8bc6ff724511b296c27623f824de256e9.ttf b/test/shape/data/in-house/fonts/051d92f8bc6ff724511b296c27623f824de256e9.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/051d92f8bc6ff724511b296c27623f824de256e9.ttf rename to test/shape/data/in-house/fonts/051d92f8bc6ff724511b296c27623f824de256e9.ttf diff --git a/test/shaping/data/in-house/fonts/065b01e54f35f0d849fd43bd5b936212739a50cb.ttf b/test/shape/data/in-house/fonts/065b01e54f35f0d849fd43bd5b936212739a50cb.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/065b01e54f35f0d849fd43bd5b936212739a50cb.ttf rename to test/shape/data/in-house/fonts/065b01e54f35f0d849fd43bd5b936212739a50cb.ttf diff --git a/test/shaping/data/in-house/fonts/074a5ae6b19de8f29772fdd5df2d3d833f81f5e6.ttf b/test/shape/data/in-house/fonts/074a5ae6b19de8f29772fdd5df2d3d833f81f5e6.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/074a5ae6b19de8f29772fdd5df2d3d833f81f5e6.ttf rename to test/shape/data/in-house/fonts/074a5ae6b19de8f29772fdd5df2d3d833f81f5e6.ttf diff --git a/test/shaping/data/in-house/fonts/07f054357ff8638bac3711b422a1e31180bba863.ttf b/test/shape/data/in-house/fonts/07f054357ff8638bac3711b422a1e31180bba863.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/07f054357ff8638bac3711b422a1e31180bba863.ttf rename to test/shape/data/in-house/fonts/07f054357ff8638bac3711b422a1e31180bba863.ttf diff --git a/test/shaping/data/in-house/fonts/08b4b136f418add748dc641eb4a83033476f1170.ttf b/test/shape/data/in-house/fonts/08b4b136f418add748dc641eb4a83033476f1170.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/08b4b136f418add748dc641eb4a83033476f1170.ttf rename to test/shape/data/in-house/fonts/08b4b136f418add748dc641eb4a83033476f1170.ttf diff --git a/test/shaping/data/in-house/fonts/15dfc433a135a658b9f4b1a861b5cdd9658ccbb9.ttf b/test/shape/data/in-house/fonts/15dfc433a135a658b9f4b1a861b5cdd9658ccbb9.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/15dfc433a135a658b9f4b1a861b5cdd9658ccbb9.ttf rename to test/shape/data/in-house/fonts/15dfc433a135a658b9f4b1a861b5cdd9658ccbb9.ttf diff --git a/test/shaping/data/in-house/fonts/1735326da89f0818cd8c51a0600e9789812c0f94.ttf b/test/shape/data/in-house/fonts/1735326da89f0818cd8c51a0600e9789812c0f94.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/1735326da89f0818cd8c51a0600e9789812c0f94.ttf rename to test/shape/data/in-house/fonts/1735326da89f0818cd8c51a0600e9789812c0f94.ttf diff --git a/test/shaping/data/in-house/fonts/191826b9643e3f124d865d617ae609db6a2ce203.ttf b/test/shape/data/in-house/fonts/191826b9643e3f124d865d617ae609db6a2ce203.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/191826b9643e3f124d865d617ae609db6a2ce203.ttf rename to test/shape/data/in-house/fonts/191826b9643e3f124d865d617ae609db6a2ce203.ttf diff --git a/test/shaping/data/in-house/fonts/1a3d8f381387dd29be1e897e4b5100ac8b4829e1.ttf b/test/shape/data/in-house/fonts/1a3d8f381387dd29be1e897e4b5100ac8b4829e1.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/1a3d8f381387dd29be1e897e4b5100ac8b4829e1.ttf rename to test/shape/data/in-house/fonts/1a3d8f381387dd29be1e897e4b5100ac8b4829e1.ttf diff --git a/test/shaping/data/in-house/fonts/1a5face3fcbd929d228235c2f72bbd6f8eb37424.ttf b/test/shape/data/in-house/fonts/1a5face3fcbd929d228235c2f72bbd6f8eb37424.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/1a5face3fcbd929d228235c2f72bbd6f8eb37424.ttf rename to test/shape/data/in-house/fonts/1a5face3fcbd929d228235c2f72bbd6f8eb37424.ttf diff --git a/test/shaping/data/in-house/fonts/1c04a16f32a39c26c851b7fc014d2e8d298ba2b8.ttf b/test/shape/data/in-house/fonts/1c04a16f32a39c26c851b7fc014d2e8d298ba2b8.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/1c04a16f32a39c26c851b7fc014d2e8d298ba2b8.ttf rename to test/shape/data/in-house/fonts/1c04a16f32a39c26c851b7fc014d2e8d298ba2b8.ttf diff --git a/test/shaping/data/in-house/fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf b/test/shape/data/in-house/fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf rename to test/shape/data/in-house/fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf diff --git a/test/shaping/data/in-house/fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf b/test/shape/data/in-house/fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf rename to test/shape/data/in-house/fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf diff --git a/test/shaping/data/in-house/fonts/1ed7e9064f008f62de6ff0207bb4dd29409597a5.ttf b/test/shape/data/in-house/fonts/1ed7e9064f008f62de6ff0207bb4dd29409597a5.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/1ed7e9064f008f62de6ff0207bb4dd29409597a5.ttf rename to test/shape/data/in-house/fonts/1ed7e9064f008f62de6ff0207bb4dd29409597a5.ttf diff --git a/test/shaping/data/in-house/fonts/21b7fb9c1eeae260473809fbc1fe330f66a507cd.ttf b/test/shape/data/in-house/fonts/21b7fb9c1eeae260473809fbc1fe330f66a507cd.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/21b7fb9c1eeae260473809fbc1fe330f66a507cd.ttf rename to test/shape/data/in-house/fonts/21b7fb9c1eeae260473809fbc1fe330f66a507cd.ttf diff --git a/test/shaping/data/in-house/fonts/226bc2deab3846f1a682085f70c67d0421014144.ttf b/test/shape/data/in-house/fonts/226bc2deab3846f1a682085f70c67d0421014144.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/226bc2deab3846f1a682085f70c67d0421014144.ttf rename to test/shape/data/in-house/fonts/226bc2deab3846f1a682085f70c67d0421014144.ttf diff --git a/test/shaping/data/in-house/fonts/24b8d24d00ae86f49791b746da4c9d3f717a51a8.ttf b/test/shape/data/in-house/fonts/24b8d24d00ae86f49791b746da4c9d3f717a51a8.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/24b8d24d00ae86f49791b746da4c9d3f717a51a8.ttf rename to test/shape/data/in-house/fonts/24b8d24d00ae86f49791b746da4c9d3f717a51a8.ttf diff --git a/test/shaping/data/in-house/fonts/2681c1c72d6484ed3410417f521b1b819b4e2392.ttf b/test/shape/data/in-house/fonts/2681c1c72d6484ed3410417f521b1b819b4e2392.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/2681c1c72d6484ed3410417f521b1b819b4e2392.ttf rename to test/shape/data/in-house/fonts/2681c1c72d6484ed3410417f521b1b819b4e2392.ttf diff --git a/test/shaping/data/in-house/fonts/270b89df543a7e48e206a2d830c0e10e5265c630.ttf b/test/shape/data/in-house/fonts/270b89df543a7e48e206a2d830c0e10e5265c630.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/270b89df543a7e48e206a2d830c0e10e5265c630.ttf rename to test/shape/data/in-house/fonts/270b89df543a7e48e206a2d830c0e10e5265c630.ttf diff --git a/test/shaping/data/in-house/fonts/28f497629c04ceb15546c9a70e0730125ed6698d.ttf b/test/shape/data/in-house/fonts/28f497629c04ceb15546c9a70e0730125ed6698d.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/28f497629c04ceb15546c9a70e0730125ed6698d.ttf rename to test/shape/data/in-house/fonts/28f497629c04ceb15546c9a70e0730125ed6698d.ttf diff --git a/test/shaping/data/in-house/fonts/298c9e1d955f10f6f72c6915c3c6ff9bf9695cec.ttf b/test/shape/data/in-house/fonts/298c9e1d955f10f6f72c6915c3c6ff9bf9695cec.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/298c9e1d955f10f6f72c6915c3c6ff9bf9695cec.ttf rename to test/shape/data/in-house/fonts/298c9e1d955f10f6f72c6915c3c6ff9bf9695cec.ttf diff --git a/test/shaping/data/in-house/fonts/2a670df15b73a5dc75a5cc491bde5ac93c5077dc.ttf b/test/shape/data/in-house/fonts/2a670df15b73a5dc75a5cc491bde5ac93c5077dc.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/2a670df15b73a5dc75a5cc491bde5ac93c5077dc.ttf rename to test/shape/data/in-house/fonts/2a670df15b73a5dc75a5cc491bde5ac93c5077dc.ttf diff --git a/test/shaping/data/in-house/fonts/2c25beb56d9c556622d56b0b5d02b4670c034f89.ttf b/test/shape/data/in-house/fonts/2c25beb56d9c556622d56b0b5d02b4670c034f89.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/2c25beb56d9c556622d56b0b5d02b4670c034f89.ttf rename to test/shape/data/in-house/fonts/2c25beb56d9c556622d56b0b5d02b4670c034f89.ttf diff --git a/test/shaping/data/in-house/fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf b/test/shape/data/in-house/fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf rename to test/shape/data/in-house/fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf diff --git a/test/shaping/data/in-house/fonts/341421e629668b1a1242245d39238ca48432d35d.ttf b/test/shape/data/in-house/fonts/341421e629668b1a1242245d39238ca48432d35d.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/341421e629668b1a1242245d39238ca48432d35d.ttf rename to test/shape/data/in-house/fonts/341421e629668b1a1242245d39238ca48432d35d.ttf diff --git a/test/shaping/data/in-house/fonts/3493e92eaded2661cadde752a39f9d58b11f0326.ttf b/test/shape/data/in-house/fonts/3493e92eaded2661cadde752a39f9d58b11f0326.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/3493e92eaded2661cadde752a39f9d58b11f0326.ttf rename to test/shape/data/in-house/fonts/3493e92eaded2661cadde752a39f9d58b11f0326.ttf diff --git a/test/shaping/data/in-house/fonts/37033cc5cf37bb223d7355153016b6ccece93b28.ttf b/test/shape/data/in-house/fonts/37033cc5cf37bb223d7355153016b6ccece93b28.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/37033cc5cf37bb223d7355153016b6ccece93b28.ttf rename to test/shape/data/in-house/fonts/37033cc5cf37bb223d7355153016b6ccece93b28.ttf diff --git a/test/shaping/data/in-house/fonts/373e67bf41ca264e260a9716162b71a23549e885.ttf b/test/shape/data/in-house/fonts/373e67bf41ca264e260a9716162b71a23549e885.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/373e67bf41ca264e260a9716162b71a23549e885.ttf rename to test/shape/data/in-house/fonts/373e67bf41ca264e260a9716162b71a23549e885.ttf diff --git a/test/shaping/data/in-house/fonts/3998336402905b8be8301ef7f47cf7e050cbb1bd.ttf b/test/shape/data/in-house/fonts/3998336402905b8be8301ef7f47cf7e050cbb1bd.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/3998336402905b8be8301ef7f47cf7e050cbb1bd.ttf rename to test/shape/data/in-house/fonts/3998336402905b8be8301ef7f47cf7e050cbb1bd.ttf diff --git a/test/shaping/data/in-house/fonts/3b791518a9ba89675df02f1eefbc9026a50648a6.ttf b/test/shape/data/in-house/fonts/3b791518a9ba89675df02f1eefbc9026a50648a6.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/3b791518a9ba89675df02f1eefbc9026a50648a6.ttf rename to test/shape/data/in-house/fonts/3b791518a9ba89675df02f1eefbc9026a50648a6.ttf diff --git a/test/shaping/data/in-house/fonts/3c96e7a303c58475a8c750bf4289bbe73784f37d.ttf b/test/shape/data/in-house/fonts/3c96e7a303c58475a8c750bf4289bbe73784f37d.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/3c96e7a303c58475a8c750bf4289bbe73784f37d.ttf rename to test/shape/data/in-house/fonts/3c96e7a303c58475a8c750bf4289bbe73784f37d.ttf diff --git a/test/shaping/data/in-house/fonts/3cae6bfe5b57c07ba81ddbd54c02fe4f3a1e3bf6.ttf b/test/shape/data/in-house/fonts/3cae6bfe5b57c07ba81ddbd54c02fe4f3a1e3bf6.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/3cae6bfe5b57c07ba81ddbd54c02fe4f3a1e3bf6.ttf rename to test/shape/data/in-house/fonts/3cae6bfe5b57c07ba81ddbd54c02fe4f3a1e3bf6.ttf diff --git a/test/shaping/data/in-house/fonts/3cc01fede4debd4b7794ccb1b16cdb9987ea7571.ttf b/test/shape/data/in-house/fonts/3cc01fede4debd4b7794ccb1b16cdb9987ea7571.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/3cc01fede4debd4b7794ccb1b16cdb9987ea7571.ttf rename to test/shape/data/in-house/fonts/3cc01fede4debd4b7794ccb1b16cdb9987ea7571.ttf diff --git a/test/shaping/data/in-house/fonts/3cf6f8ac6d647473a43a3100e7494b202b2cfafe.ttf b/test/shape/data/in-house/fonts/3cf6f8ac6d647473a43a3100e7494b202b2cfafe.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/3cf6f8ac6d647473a43a3100e7494b202b2cfafe.ttf rename to test/shape/data/in-house/fonts/3cf6f8ac6d647473a43a3100e7494b202b2cfafe.ttf diff --git a/test/shaping/data/in-house/fonts/3d0b77a2360aa6faa1385aaa510509ab70dfbeff.ttf b/test/shape/data/in-house/fonts/3d0b77a2360aa6faa1385aaa510509ab70dfbeff.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/3d0b77a2360aa6faa1385aaa510509ab70dfbeff.ttf rename to test/shape/data/in-house/fonts/3d0b77a2360aa6faa1385aaa510509ab70dfbeff.ttf diff --git a/test/shaping/data/in-house/fonts/43ef465752be9af900745f72fe29cb853a1401a5.ttf b/test/shape/data/in-house/fonts/43ef465752be9af900745f72fe29cb853a1401a5.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/43ef465752be9af900745f72fe29cb853a1401a5.ttf rename to test/shape/data/in-house/fonts/43ef465752be9af900745f72fe29cb853a1401a5.ttf diff --git a/test/shaping/data/in-house/fonts/45855bc8d46332b39c4ab9e2ee1a26b1f896da6b.ttf b/test/shape/data/in-house/fonts/45855bc8d46332b39c4ab9e2ee1a26b1f896da6b.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/45855bc8d46332b39c4ab9e2ee1a26b1f896da6b.ttf rename to test/shape/data/in-house/fonts/45855bc8d46332b39c4ab9e2ee1a26b1f896da6b.ttf diff --git a/test/shaping/data/in-house/fonts/46669c8860cbfea13562a6ca0d83130ee571137b.ttf b/test/shape/data/in-house/fonts/46669c8860cbfea13562a6ca0d83130ee571137b.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/46669c8860cbfea13562a6ca0d83130ee571137b.ttf rename to test/shape/data/in-house/fonts/46669c8860cbfea13562a6ca0d83130ee571137b.ttf diff --git a/test/shaping/data/in-house/fonts/49c9f7485c1392fa09a1b801bc2ffea79275f22e.ttf b/test/shape/data/in-house/fonts/49c9f7485c1392fa09a1b801bc2ffea79275f22e.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/49c9f7485c1392fa09a1b801bc2ffea79275f22e.ttf rename to test/shape/data/in-house/fonts/49c9f7485c1392fa09a1b801bc2ffea79275f22e.ttf diff --git a/test/shaping/data/in-house/fonts/4afb0e8b9a86bb9bd73a1247de4e33fbe3c1fd93.ttf b/test/shape/data/in-house/fonts/4afb0e8b9a86bb9bd73a1247de4e33fbe3c1fd93.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/4afb0e8b9a86bb9bd73a1247de4e33fbe3c1fd93.ttf rename to test/shape/data/in-house/fonts/4afb0e8b9a86bb9bd73a1247de4e33fbe3c1fd93.ttf diff --git a/test/shaping/data/in-house/fonts/4cbbc461be066fccc611dcc634af6e8cb2705537.ttf b/test/shape/data/in-house/fonts/4cbbc461be066fccc611dcc634af6e8cb2705537.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/4cbbc461be066fccc611dcc634af6e8cb2705537.ttf rename to test/shape/data/in-house/fonts/4cbbc461be066fccc611dcc634af6e8cb2705537.ttf diff --git a/test/shaping/data/in-house/fonts/4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf b/test/shape/data/in-house/fonts/4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf rename to test/shape/data/in-house/fonts/4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf diff --git a/test/shaping/data/in-house/fonts/4d4206e30b2dbf1c1ef492a8eae1c9e7829ebad8.ttf b/test/shape/data/in-house/fonts/4d4206e30b2dbf1c1ef492a8eae1c9e7829ebad8.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/4d4206e30b2dbf1c1ef492a8eae1c9e7829ebad8.ttf rename to test/shape/data/in-house/fonts/4d4206e30b2dbf1c1ef492a8eae1c9e7829ebad8.ttf diff --git a/test/shaping/data/in-house/fonts/4fac3929fc3332834e93673780ec0fe94342d193.ttf b/test/shape/data/in-house/fonts/4fac3929fc3332834e93673780ec0fe94342d193.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/4fac3929fc3332834e93673780ec0fe94342d193.ttf rename to test/shape/data/in-house/fonts/4fac3929fc3332834e93673780ec0fe94342d193.ttf diff --git a/test/shaping/data/in-house/fonts/5028afb650b1bb718ed2131e872fbcce57828fff.ttf b/test/shape/data/in-house/fonts/5028afb650b1bb718ed2131e872fbcce57828fff.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/5028afb650b1bb718ed2131e872fbcce57828fff.ttf rename to test/shape/data/in-house/fonts/5028afb650b1bb718ed2131e872fbcce57828fff.ttf diff --git a/test/shaping/data/in-house/fonts/53374c7ca3657be37efde7ed02ae34229a56ae1f.ttf b/test/shape/data/in-house/fonts/53374c7ca3657be37efde7ed02ae34229a56ae1f.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/53374c7ca3657be37efde7ed02ae34229a56ae1f.ttf rename to test/shape/data/in-house/fonts/53374c7ca3657be37efde7ed02ae34229a56ae1f.ttf diff --git a/test/shaping/data/in-house/fonts/53a91c20e33a596f2be17fb68b382d6b7eb85d5c.ttf b/test/shape/data/in-house/fonts/53a91c20e33a596f2be17fb68b382d6b7eb85d5c.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/53a91c20e33a596f2be17fb68b382d6b7eb85d5c.ttf rename to test/shape/data/in-house/fonts/53a91c20e33a596f2be17fb68b382d6b7eb85d5c.ttf diff --git a/test/shaping/data/in-house/fonts/54674a3111d209fb6be0ed31745314b7a8d2c244.ttf b/test/shape/data/in-house/fonts/54674a3111d209fb6be0ed31745314b7a8d2c244.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/54674a3111d209fb6be0ed31745314b7a8d2c244.ttf rename to test/shape/data/in-house/fonts/54674a3111d209fb6be0ed31745314b7a8d2c244.ttf diff --git a/test/shaping/data/in-house/fonts/55c88ebbe938680b08f92c3de20713183e0c7481.ttf b/test/shape/data/in-house/fonts/55c88ebbe938680b08f92c3de20713183e0c7481.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/55c88ebbe938680b08f92c3de20713183e0c7481.ttf rename to test/shape/data/in-house/fonts/55c88ebbe938680b08f92c3de20713183e0c7481.ttf diff --git a/test/shaping/data/in-house/fonts/56cfd0e18d07f41c38e9598545a6d369127fc6f9.ttf b/test/shape/data/in-house/fonts/56cfd0e18d07f41c38e9598545a6d369127fc6f9.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/56cfd0e18d07f41c38e9598545a6d369127fc6f9.ttf rename to test/shape/data/in-house/fonts/56cfd0e18d07f41c38e9598545a6d369127fc6f9.ttf diff --git a/test/shaping/data/in-house/fonts/573d3a3177c9a8646e94c8a0d7b224334340946a.ttf b/test/shape/data/in-house/fonts/573d3a3177c9a8646e94c8a0d7b224334340946a.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/573d3a3177c9a8646e94c8a0d7b224334340946a.ttf rename to test/shape/data/in-house/fonts/573d3a3177c9a8646e94c8a0d7b224334340946a.ttf diff --git a/test/shaping/data/in-house/fonts/57a9d9f83020155cbb1d2be1f43d82388cbecc88.ttf b/test/shape/data/in-house/fonts/57a9d9f83020155cbb1d2be1f43d82388cbecc88.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/57a9d9f83020155cbb1d2be1f43d82388cbecc88.ttf rename to test/shape/data/in-house/fonts/57a9d9f83020155cbb1d2be1f43d82388cbecc88.ttf diff --git a/test/shaping/data/in-house/fonts/59a585a63b3df608fbeef00956c8c108deec7de6.ttf b/test/shape/data/in-house/fonts/59a585a63b3df608fbeef00956c8c108deec7de6.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/59a585a63b3df608fbeef00956c8c108deec7de6.ttf rename to test/shape/data/in-house/fonts/59a585a63b3df608fbeef00956c8c108deec7de6.ttf diff --git a/test/shaping/data/in-house/fonts/5af5361ed4d1e8305780b100e1730cb09132f8d1.ttf b/test/shape/data/in-house/fonts/5af5361ed4d1e8305780b100e1730cb09132f8d1.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/5af5361ed4d1e8305780b100e1730cb09132f8d1.ttf rename to test/shape/data/in-house/fonts/5af5361ed4d1e8305780b100e1730cb09132f8d1.ttf diff --git a/test/shaping/data/in-house/fonts/5bb74492f5e0ffa1fbb72e4c881be035120b6513.ttf b/test/shape/data/in-house/fonts/5bb74492f5e0ffa1fbb72e4c881be035120b6513.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/5bb74492f5e0ffa1fbb72e4c881be035120b6513.ttf rename to test/shape/data/in-house/fonts/5bb74492f5e0ffa1fbb72e4c881be035120b6513.ttf diff --git a/test/shaping/data/in-house/fonts/5dfad7735c6a67085f1b90d4d497e32907db4c78.ttf b/test/shape/data/in-house/fonts/5dfad7735c6a67085f1b90d4d497e32907db4c78.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/5dfad7735c6a67085f1b90d4d497e32907db4c78.ttf rename to test/shape/data/in-house/fonts/5dfad7735c6a67085f1b90d4d497e32907db4c78.ttf diff --git a/test/shaping/data/in-house/fonts/604026ae5aaca83c49cd8416909d71ba3e1c1194.ttf b/test/shape/data/in-house/fonts/604026ae5aaca83c49cd8416909d71ba3e1c1194.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/604026ae5aaca83c49cd8416909d71ba3e1c1194.ttf rename to test/shape/data/in-house/fonts/604026ae5aaca83c49cd8416909d71ba3e1c1194.ttf diff --git a/test/shaping/data/in-house/fonts/641ca9d7808b01cafa9a666c13811c9b56eb9c52.ttf b/test/shape/data/in-house/fonts/641ca9d7808b01cafa9a666c13811c9b56eb9c52.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/641ca9d7808b01cafa9a666c13811c9b56eb9c52.ttf rename to test/shape/data/in-house/fonts/641ca9d7808b01cafa9a666c13811c9b56eb9c52.ttf diff --git a/test/shaping/data/in-house/fonts/663aef6b019dbf45ffd74089e2b5f2496ceceb18.ttf b/test/shape/data/in-house/fonts/663aef6b019dbf45ffd74089e2b5f2496ceceb18.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/663aef6b019dbf45ffd74089e2b5f2496ceceb18.ttf rename to test/shape/data/in-house/fonts/663aef6b019dbf45ffd74089e2b5f2496ceceb18.ttf diff --git a/test/shaping/data/in-house/fonts/6677074106f94a2644da6aaaacd5bbd48cbdc7de.ttf b/test/shape/data/in-house/fonts/6677074106f94a2644da6aaaacd5bbd48cbdc7de.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/6677074106f94a2644da6aaaacd5bbd48cbdc7de.ttf rename to test/shape/data/in-house/fonts/6677074106f94a2644da6aaaacd5bbd48cbdc7de.ttf diff --git a/test/shaping/data/in-house/fonts/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf b/test/shape/data/in-house/fonts/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf rename to test/shape/data/in-house/fonts/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf diff --git a/test/shaping/data/in-house/fonts/6f36d056bad6d478fc0bf7397bd52dc3bd197d5f.ttf b/test/shape/data/in-house/fonts/6f36d056bad6d478fc0bf7397bd52dc3bd197d5f.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/6f36d056bad6d478fc0bf7397bd52dc3bd197d5f.ttf rename to test/shape/data/in-house/fonts/6f36d056bad6d478fc0bf7397bd52dc3bd197d5f.ttf diff --git a/test/shaping/data/in-house/fonts/6ff0fbead4462d9f229167b4e6839eceb8465058.ttf b/test/shape/data/in-house/fonts/6ff0fbead4462d9f229167b4e6839eceb8465058.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/6ff0fbead4462d9f229167b4e6839eceb8465058.ttf rename to test/shape/data/in-house/fonts/6ff0fbead4462d9f229167b4e6839eceb8465058.ttf diff --git a/test/shaping/data/in-house/fonts/706c5d7b625f207bc0d874c67237aad6f1e9cd6f.ttf b/test/shape/data/in-house/fonts/706c5d7b625f207bc0d874c67237aad6f1e9cd6f.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/706c5d7b625f207bc0d874c67237aad6f1e9cd6f.ttf rename to test/shape/data/in-house/fonts/706c5d7b625f207bc0d874c67237aad6f1e9cd6f.ttf diff --git a/test/shaping/data/in-house/fonts/738d9f3b8c2dfd03875bf35a61d28fd78faf17c8.ttf b/test/shape/data/in-house/fonts/738d9f3b8c2dfd03875bf35a61d28fd78faf17c8.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/738d9f3b8c2dfd03875bf35a61d28fd78faf17c8.ttf rename to test/shape/data/in-house/fonts/738d9f3b8c2dfd03875bf35a61d28fd78faf17c8.ttf diff --git a/test/shaping/data/in-house/fonts/73e84dac2fc6a2d1bc9250d1414353661088937d.ttf b/test/shape/data/in-house/fonts/73e84dac2fc6a2d1bc9250d1414353661088937d.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/73e84dac2fc6a2d1bc9250d1414353661088937d.ttf rename to test/shape/data/in-house/fonts/73e84dac2fc6a2d1bc9250d1414353661088937d.ttf diff --git a/test/shaping/data/in-house/fonts/757ebd573617a24aa9dfbf0b885c54875c6fe06b.ttf b/test/shape/data/in-house/fonts/757ebd573617a24aa9dfbf0b885c54875c6fe06b.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/757ebd573617a24aa9dfbf0b885c54875c6fe06b.ttf rename to test/shape/data/in-house/fonts/757ebd573617a24aa9dfbf0b885c54875c6fe06b.ttf diff --git a/test/shaping/data/in-house/fonts/7a37dc4d5bf018456aea291cee06daf004c0221c.ttf b/test/shape/data/in-house/fonts/7a37dc4d5bf018456aea291cee06daf004c0221c.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/7a37dc4d5bf018456aea291cee06daf004c0221c.ttf rename to test/shape/data/in-house/fonts/7a37dc4d5bf018456aea291cee06daf004c0221c.ttf diff --git a/test/shaping/data/in-house/fonts/7d18685e1529e4ceaad5b6095dfab2f9789e5bce.ttf b/test/shape/data/in-house/fonts/7d18685e1529e4ceaad5b6095dfab2f9789e5bce.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/7d18685e1529e4ceaad5b6095dfab2f9789e5bce.ttf rename to test/shape/data/in-house/fonts/7d18685e1529e4ceaad5b6095dfab2f9789e5bce.ttf diff --git a/test/shaping/data/in-house/fonts/7e14e7883ed152baa158b80e207b66114c823a8b.ttf b/test/shape/data/in-house/fonts/7e14e7883ed152baa158b80e207b66114c823a8b.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/7e14e7883ed152baa158b80e207b66114c823a8b.ttf rename to test/shape/data/in-house/fonts/7e14e7883ed152baa158b80e207b66114c823a8b.ttf diff --git a/test/shaping/data/in-house/fonts/8099955657a54e9ee38a6ba1d6f950ce58e3cc25.ttf b/test/shape/data/in-house/fonts/8099955657a54e9ee38a6ba1d6f950ce58e3cc25.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/8099955657a54e9ee38a6ba1d6f950ce58e3cc25.ttf rename to test/shape/data/in-house/fonts/8099955657a54e9ee38a6ba1d6f950ce58e3cc25.ttf diff --git a/test/shaping/data/in-house/fonts/8116e5d8fedfbec74e45dc350d2416d810bed8c4.ttf b/test/shape/data/in-house/fonts/8116e5d8fedfbec74e45dc350d2416d810bed8c4.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/8116e5d8fedfbec74e45dc350d2416d810bed8c4.ttf rename to test/shape/data/in-house/fonts/8116e5d8fedfbec74e45dc350d2416d810bed8c4.ttf diff --git a/test/shaping/data/in-house/fonts/813c2f8e5512187fd982417a7fb4286728e6f4a8.ttf b/test/shape/data/in-house/fonts/813c2f8e5512187fd982417a7fb4286728e6f4a8.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/813c2f8e5512187fd982417a7fb4286728e6f4a8.ttf rename to test/shape/data/in-house/fonts/813c2f8e5512187fd982417a7fb4286728e6f4a8.ttf diff --git a/test/shaping/data/in-house/fonts/81c368a33816fb20e9f647e8f24e2180f4720263.ttf b/test/shape/data/in-house/fonts/81c368a33816fb20e9f647e8f24e2180f4720263.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/81c368a33816fb20e9f647e8f24e2180f4720263.ttf rename to test/shape/data/in-house/fonts/81c368a33816fb20e9f647e8f24e2180f4720263.ttf diff --git a/test/shaping/data/in-house/fonts/8228d035fcd65d62ec9728fb34f42c63be93a5d3.ttf b/test/shape/data/in-house/fonts/8228d035fcd65d62ec9728fb34f42c63be93a5d3.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/8228d035fcd65d62ec9728fb34f42c63be93a5d3.ttf rename to test/shape/data/in-house/fonts/8228d035fcd65d62ec9728fb34f42c63be93a5d3.ttf diff --git a/test/shaping/data/in-house/fonts/82f4f3b57bb55344e72e70231380202a52af5805.ttf b/test/shape/data/in-house/fonts/82f4f3b57bb55344e72e70231380202a52af5805.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/82f4f3b57bb55344e72e70231380202a52af5805.ttf rename to test/shape/data/in-house/fonts/82f4f3b57bb55344e72e70231380202a52af5805.ttf diff --git a/test/shaping/data/in-house/fonts/8454d22037f892e76614e1645d066689a0200e61.ttf b/test/shape/data/in-house/fonts/8454d22037f892e76614e1645d066689a0200e61.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/8454d22037f892e76614e1645d066689a0200e61.ttf rename to test/shape/data/in-house/fonts/8454d22037f892e76614e1645d066689a0200e61.ttf diff --git a/test/shaping/data/in-house/fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf b/test/shape/data/in-house/fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf rename to test/shape/data/in-house/fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf diff --git a/test/shaping/data/in-house/fonts/856ff9562451293cbeff6f396d4e3877c4f0a436.ttf b/test/shape/data/in-house/fonts/856ff9562451293cbeff6f396d4e3877c4f0a436.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/856ff9562451293cbeff6f396d4e3877c4f0a436.ttf rename to test/shape/data/in-house/fonts/856ff9562451293cbeff6f396d4e3877c4f0a436.ttf diff --git a/test/shaping/data/in-house/fonts/85fe0be440c64ac77699e21c2f1bd933a919167e.ttf b/test/shape/data/in-house/fonts/85fe0be440c64ac77699e21c2f1bd933a919167e.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/85fe0be440c64ac77699e21c2f1bd933a919167e.ttf rename to test/shape/data/in-house/fonts/85fe0be440c64ac77699e21c2f1bd933a919167e.ttf diff --git a/test/shaping/data/in-house/fonts/86cdd983c4e4c4d7f27dd405d6ceb7d4b9ed3d35.ttf b/test/shape/data/in-house/fonts/86cdd983c4e4c4d7f27dd405d6ceb7d4b9ed3d35.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/86cdd983c4e4c4d7f27dd405d6ceb7d4b9ed3d35.ttf rename to test/shape/data/in-house/fonts/86cdd983c4e4c4d7f27dd405d6ceb7d4b9ed3d35.ttf diff --git a/test/shaping/data/in-house/fonts/87f85d17d26f1fe9ad28d7365101958edaefb967.ttf b/test/shape/data/in-house/fonts/87f85d17d26f1fe9ad28d7365101958edaefb967.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/87f85d17d26f1fe9ad28d7365101958edaefb967.ttf rename to test/shape/data/in-house/fonts/87f85d17d26f1fe9ad28d7365101958edaefb967.ttf diff --git a/test/shaping/data/in-house/fonts/881642af1667ae30a54e58de8be904566d00508f.ttf b/test/shape/data/in-house/fonts/881642af1667ae30a54e58de8be904566d00508f.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/881642af1667ae30a54e58de8be904566d00508f.ttf rename to test/shape/data/in-house/fonts/881642af1667ae30a54e58de8be904566d00508f.ttf diff --git a/test/shaping/data/in-house/fonts/8a9fea2a7384f2116e5b84a9b31f83be7850ce21.ttf b/test/shape/data/in-house/fonts/8a9fea2a7384f2116e5b84a9b31f83be7850ce21.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/8a9fea2a7384f2116e5b84a9b31f83be7850ce21.ttf rename to test/shape/data/in-house/fonts/8a9fea2a7384f2116e5b84a9b31f83be7850ce21.ttf diff --git a/test/shaping/data/in-house/fonts/8d9c4b193808b8bde94389ba7831c1fc6f9e794e.ttf b/test/shape/data/in-house/fonts/8d9c4b193808b8bde94389ba7831c1fc6f9e794e.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/8d9c4b193808b8bde94389ba7831c1fc6f9e794e.ttf rename to test/shape/data/in-house/fonts/8d9c4b193808b8bde94389ba7831c1fc6f9e794e.ttf diff --git a/test/shaping/data/in-house/fonts/932ad5132c2761297c74e9976fe25b08e5ffa10b.ttf b/test/shape/data/in-house/fonts/932ad5132c2761297c74e9976fe25b08e5ffa10b.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/932ad5132c2761297c74e9976fe25b08e5ffa10b.ttf rename to test/shape/data/in-house/fonts/932ad5132c2761297c74e9976fe25b08e5ffa10b.ttf diff --git a/test/shaping/data/in-house/fonts/94a5d6fb15a27521fba9ea4aee9cb39b2d03322a.ttf b/test/shape/data/in-house/fonts/94a5d6fb15a27521fba9ea4aee9cb39b2d03322a.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/94a5d6fb15a27521fba9ea4aee9cb39b2d03322a.ttf rename to test/shape/data/in-house/fonts/94a5d6fb15a27521fba9ea4aee9cb39b2d03322a.ttf diff --git a/test/shaping/data/in-house/fonts/96490dd2ff81233b335a650e7eb660e0e7b2eeea.ttf b/test/shape/data/in-house/fonts/96490dd2ff81233b335a650e7eb660e0e7b2eeea.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/96490dd2ff81233b335a650e7eb660e0e7b2eeea.ttf rename to test/shape/data/in-house/fonts/96490dd2ff81233b335a650e7eb660e0e7b2eeea.ttf diff --git a/test/shaping/data/in-house/fonts/98b7887cff91f722b92a8ff800120954606354f9.ttf b/test/shape/data/in-house/fonts/98b7887cff91f722b92a8ff800120954606354f9.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/98b7887cff91f722b92a8ff800120954606354f9.ttf rename to test/shape/data/in-house/fonts/98b7887cff91f722b92a8ff800120954606354f9.ttf diff --git a/test/shaping/data/in-house/fonts/9fc3e6960b3520e5304033ef5fd540285f72f14d.ttf b/test/shape/data/in-house/fonts/9fc3e6960b3520e5304033ef5fd540285f72f14d.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/9fc3e6960b3520e5304033ef5fd540285f72f14d.ttf rename to test/shape/data/in-house/fonts/9fc3e6960b3520e5304033ef5fd540285f72f14d.ttf diff --git a/test/shaping/data/in-house/fonts/AdobeBlank2.ttf b/test/shape/data/in-house/fonts/AdobeBlank2.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/AdobeBlank2.ttf rename to test/shape/data/in-house/fonts/AdobeBlank2.ttf diff --git a/test/shaping/data/in-house/fonts/DFONT.dfont b/test/shape/data/in-house/fonts/DFONT.dfont similarity index 100% rename from test/shaping/data/in-house/fonts/DFONT.dfont rename to test/shape/data/in-house/fonts/DFONT.dfont diff --git a/test/shaping/data/in-house/fonts/HBTest-VF.ttf b/test/shape/data/in-house/fonts/HBTest-VF.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/HBTest-VF.ttf rename to test/shape/data/in-house/fonts/HBTest-VF.ttf diff --git a/test/shaping/data/in-house/fonts/MORXTwentyeight.ttf b/test/shape/data/in-house/fonts/MORXTwentyeight.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/MORXTwentyeight.ttf rename to test/shape/data/in-house/fonts/MORXTwentyeight.ttf diff --git a/test/shaping/data/in-house/fonts/TRAK.ttf b/test/shape/data/in-house/fonts/TRAK.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/TRAK.ttf rename to test/shape/data/in-house/fonts/TRAK.ttf diff --git a/test/shaping/data/in-house/fonts/TTC.ttc b/test/shape/data/in-house/fonts/TTC.ttc similarity index 100% rename from test/shaping/data/in-house/fonts/TTC.ttc rename to test/shape/data/in-house/fonts/TTC.ttc diff --git a/test/shaping/data/in-house/fonts/a014549f766436cf55b2ceb40e462038938ee899.ttf b/test/shape/data/in-house/fonts/a014549f766436cf55b2ceb40e462038938ee899.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/a014549f766436cf55b2ceb40e462038938ee899.ttf rename to test/shape/data/in-house/fonts/a014549f766436cf55b2ceb40e462038938ee899.ttf diff --git a/test/shaping/data/in-house/fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf b/test/shape/data/in-house/fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf rename to test/shape/data/in-house/fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf diff --git a/test/shaping/data/in-house/fonts/a34a7b00f22ffb5fd7eef6933b81c7e71bc2cdfb.ttf b/test/shape/data/in-house/fonts/a34a7b00f22ffb5fd7eef6933b81c7e71bc2cdfb.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/a34a7b00f22ffb5fd7eef6933b81c7e71bc2cdfb.ttf rename to test/shape/data/in-house/fonts/a34a7b00f22ffb5fd7eef6933b81c7e71bc2cdfb.ttf diff --git a/test/shaping/data/in-house/fonts/a6b17da98b9f1565ba428719777bbf94a66403c1.ttf b/test/shape/data/in-house/fonts/a6b17da98b9f1565ba428719777bbf94a66403c1.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/a6b17da98b9f1565ba428719777bbf94a66403c1.ttf rename to test/shape/data/in-house/fonts/a6b17da98b9f1565ba428719777bbf94a66403c1.ttf diff --git a/test/shaping/data/in-house/fonts/a6c76d1bafde4a0b1026ebcc932d2e5c6fd02442.ttf b/test/shape/data/in-house/fonts/a6c76d1bafde4a0b1026ebcc932d2e5c6fd02442.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/a6c76d1bafde4a0b1026ebcc932d2e5c6fd02442.ttf rename to test/shape/data/in-house/fonts/a6c76d1bafde4a0b1026ebcc932d2e5c6fd02442.ttf diff --git a/test/shaping/data/in-house/fonts/a706511c65fb278fda87eaf2180ca6684a80f423.ttf b/test/shape/data/in-house/fonts/a706511c65fb278fda87eaf2180ca6684a80f423.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/a706511c65fb278fda87eaf2180ca6684a80f423.ttf rename to test/shape/data/in-house/fonts/a706511c65fb278fda87eaf2180ca6684a80f423.ttf diff --git a/test/shaping/data/in-house/fonts/a919b33197965846f21074b24e30250d67277bce.ttf b/test/shape/data/in-house/fonts/a919b33197965846f21074b24e30250d67277bce.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/a919b33197965846f21074b24e30250d67277bce.ttf rename to test/shape/data/in-house/fonts/a919b33197965846f21074b24e30250d67277bce.ttf diff --git a/test/shaping/data/in-house/fonts/a98e908e2ed21b22228ea59ebcc0f05034c86f2e.ttf b/test/shape/data/in-house/fonts/a98e908e2ed21b22228ea59ebcc0f05034c86f2e.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/a98e908e2ed21b22228ea59ebcc0f05034c86f2e.ttf rename to test/shape/data/in-house/fonts/a98e908e2ed21b22228ea59ebcc0f05034c86f2e.ttf diff --git a/test/shaping/data/in-house/fonts/ab14b4eb9d7a67e293f51d30d719add06c9d6e06.ttf b/test/shape/data/in-house/fonts/ab14b4eb9d7a67e293f51d30d719add06c9d6e06.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/ab14b4eb9d7a67e293f51d30d719add06c9d6e06.ttf rename to test/shape/data/in-house/fonts/ab14b4eb9d7a67e293f51d30d719add06c9d6e06.ttf diff --git a/test/shaping/data/in-house/fonts/ab40c89624a6104e5d0a2308e448a989302f515b.ttf b/test/shape/data/in-house/fonts/ab40c89624a6104e5d0a2308e448a989302f515b.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/ab40c89624a6104e5d0a2308e448a989302f515b.ttf rename to test/shape/data/in-house/fonts/ab40c89624a6104e5d0a2308e448a989302f515b.ttf diff --git a/test/shaping/data/in-house/fonts/ad01ab2ea1cb1a4d3a2783e2675112ef11ae6404.ttf b/test/shape/data/in-house/fonts/ad01ab2ea1cb1a4d3a2783e2675112ef11ae6404.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/ad01ab2ea1cb1a4d3a2783e2675112ef11ae6404.ttf rename to test/shape/data/in-house/fonts/ad01ab2ea1cb1a4d3a2783e2675112ef11ae6404.ttf diff --git a/test/shaping/data/in-house/fonts/af3086380b743099c54a3b11b96766039ea62fcd.ttf b/test/shape/data/in-house/fonts/af3086380b743099c54a3b11b96766039ea62fcd.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/af3086380b743099c54a3b11b96766039ea62fcd.ttf rename to test/shape/data/in-house/fonts/af3086380b743099c54a3b11b96766039ea62fcd.ttf diff --git a/test/shaping/data/in-house/fonts/af85624080af5627fb050f570d148a62f04fda74.ttf b/test/shape/data/in-house/fonts/af85624080af5627fb050f570d148a62f04fda74.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/af85624080af5627fb050f570d148a62f04fda74.ttf rename to test/shape/data/in-house/fonts/af85624080af5627fb050f570d148a62f04fda74.ttf diff --git a/test/shaping/data/in-house/fonts/b082211be29a3e2cf91f0fd43497e40b2a27b344.ttf b/test/shape/data/in-house/fonts/b082211be29a3e2cf91f0fd43497e40b2a27b344.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/b082211be29a3e2cf91f0fd43497e40b2a27b344.ttf rename to test/shape/data/in-house/fonts/b082211be29a3e2cf91f0fd43497e40b2a27b344.ttf diff --git a/test/shaping/data/in-house/fonts/b121d4306b2e3add5abbaad21d95fcf04aacbd64.ttf b/test/shape/data/in-house/fonts/b121d4306b2e3add5abbaad21d95fcf04aacbd64.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/b121d4306b2e3add5abbaad21d95fcf04aacbd64.ttf rename to test/shape/data/in-house/fonts/b121d4306b2e3add5abbaad21d95fcf04aacbd64.ttf diff --git a/test/shaping/data/in-house/fonts/b151cfcdaa77585d77f17a42158e0873fc8e2633.ttf b/test/shape/data/in-house/fonts/b151cfcdaa77585d77f17a42158e0873fc8e2633.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/b151cfcdaa77585d77f17a42158e0873fc8e2633.ttf rename to test/shape/data/in-house/fonts/b151cfcdaa77585d77f17a42158e0873fc8e2633.ttf diff --git a/test/shaping/data/in-house/fonts/b3075ca42b27dde7341c2d0ae16703c5b6640df0.ttf b/test/shape/data/in-house/fonts/b3075ca42b27dde7341c2d0ae16703c5b6640df0.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/b3075ca42b27dde7341c2d0ae16703c5b6640df0.ttf rename to test/shape/data/in-house/fonts/b3075ca42b27dde7341c2d0ae16703c5b6640df0.ttf diff --git a/test/shaping/data/in-house/fonts/b31e6c52a31edadc16f1bec9efe6019e2d59824a.ttf b/test/shape/data/in-house/fonts/b31e6c52a31edadc16f1bec9efe6019e2d59824a.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/b31e6c52a31edadc16f1bec9efe6019e2d59824a.ttf rename to test/shape/data/in-house/fonts/b31e6c52a31edadc16f1bec9efe6019e2d59824a.ttf diff --git a/test/shaping/data/in-house/fonts/b6031119874ae9ff1dd65383a335e361c0962220.ttf b/test/shape/data/in-house/fonts/b6031119874ae9ff1dd65383a335e361c0962220.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/b6031119874ae9ff1dd65383a335e361c0962220.ttf rename to test/shape/data/in-house/fonts/b6031119874ae9ff1dd65383a335e361c0962220.ttf diff --git a/test/shaping/data/in-house/fonts/b722a7d09e60421f3efbc706ad348ab47b88567b.ttf b/test/shape/data/in-house/fonts/b722a7d09e60421f3efbc706ad348ab47b88567b.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/b722a7d09e60421f3efbc706ad348ab47b88567b.ttf rename to test/shape/data/in-house/fonts/b722a7d09e60421f3efbc706ad348ab47b88567b.ttf diff --git a/test/shaping/data/in-house/fonts/bb0c53752e85c3d28973ebc913287b8987d3dfe8.ttf b/test/shape/data/in-house/fonts/bb0c53752e85c3d28973ebc913287b8987d3dfe8.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/bb0c53752e85c3d28973ebc913287b8987d3dfe8.ttf rename to test/shape/data/in-house/fonts/bb0c53752e85c3d28973ebc913287b8987d3dfe8.ttf diff --git a/test/shaping/data/in-house/fonts/bb9473d2403488714043bcfb946c9f78b86ad627.ttf b/test/shape/data/in-house/fonts/bb9473d2403488714043bcfb946c9f78b86ad627.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/bb9473d2403488714043bcfb946c9f78b86ad627.ttf rename to test/shape/data/in-house/fonts/bb9473d2403488714043bcfb946c9f78b86ad627.ttf diff --git a/test/shaping/data/in-house/fonts/bf39b0e91ef9807f15a9e283a21a14a209fd2cfc.ttf b/test/shape/data/in-house/fonts/bf39b0e91ef9807f15a9e283a21a14a209fd2cfc.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/bf39b0e91ef9807f15a9e283a21a14a209fd2cfc.ttf rename to test/shape/data/in-house/fonts/bf39b0e91ef9807f15a9e283a21a14a209fd2cfc.ttf diff --git a/test/shaping/data/in-house/fonts/bf962d3202883a820aed019d9b5c1838c2ff69c6.ttf b/test/shape/data/in-house/fonts/bf962d3202883a820aed019d9b5c1838c2ff69c6.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/bf962d3202883a820aed019d9b5c1838c2ff69c6.ttf rename to test/shape/data/in-house/fonts/bf962d3202883a820aed019d9b5c1838c2ff69c6.ttf diff --git a/test/shaping/data/in-house/fonts/c4e48b0886ef460f532fb49f00047ec92c432ec0.ttf b/test/shape/data/in-house/fonts/c4e48b0886ef460f532fb49f00047ec92c432ec0.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/c4e48b0886ef460f532fb49f00047ec92c432ec0.ttf rename to test/shape/data/in-house/fonts/c4e48b0886ef460f532fb49f00047ec92c432ec0.ttf diff --git a/test/shaping/data/in-house/fonts/cc5f3d2d717fb6bd4dfae1c16d48a2cb8e12233b.ttf b/test/shape/data/in-house/fonts/cc5f3d2d717fb6bd4dfae1c16d48a2cb8e12233b.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/cc5f3d2d717fb6bd4dfae1c16d48a2cb8e12233b.ttf rename to test/shape/data/in-house/fonts/cc5f3d2d717fb6bd4dfae1c16d48a2cb8e12233b.ttf diff --git a/test/shaping/data/in-house/fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf b/test/shape/data/in-house/fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf rename to test/shape/data/in-house/fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf diff --git a/test/shaping/data/in-house/fonts/d3129450fafe5e5c98cfc25a4e71809b1b4d2855.ttf b/test/shape/data/in-house/fonts/d3129450fafe5e5c98cfc25a4e71809b1b4d2855.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/d3129450fafe5e5c98cfc25a4e71809b1b4d2855.ttf rename to test/shape/data/in-house/fonts/d3129450fafe5e5c98cfc25a4e71809b1b4d2855.ttf diff --git a/test/shaping/data/in-house/fonts/d629e7fedc0b350222d7987345fe61613fa3929a.ttf b/test/shape/data/in-house/fonts/d629e7fedc0b350222d7987345fe61613fa3929a.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/d629e7fedc0b350222d7987345fe61613fa3929a.ttf rename to test/shape/data/in-house/fonts/d629e7fedc0b350222d7987345fe61613fa3929a.ttf diff --git a/test/shaping/data/in-house/fonts/d9b8bc10985f24796826c29f7ccba3d0ae11ec02.ttf b/test/shape/data/in-house/fonts/d9b8bc10985f24796826c29f7ccba3d0ae11ec02.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/d9b8bc10985f24796826c29f7ccba3d0ae11ec02.ttf rename to test/shape/data/in-house/fonts/d9b8bc10985f24796826c29f7ccba3d0ae11ec02.ttf diff --git a/test/shaping/data/in-house/fonts/dcf774ca21062e7439f98658b18974ea8b956d0c.ttf b/test/shape/data/in-house/fonts/dcf774ca21062e7439f98658b18974ea8b956d0c.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/dcf774ca21062e7439f98658b18974ea8b956d0c.ttf rename to test/shape/data/in-house/fonts/dcf774ca21062e7439f98658b18974ea8b956d0c.ttf diff --git a/test/shaping/data/in-house/fonts/df768b9c257e0c9c35786c47cae15c46571d56be.ttf b/test/shape/data/in-house/fonts/df768b9c257e0c9c35786c47cae15c46571d56be.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/df768b9c257e0c9c35786c47cae15c46571d56be.ttf rename to test/shape/data/in-house/fonts/df768b9c257e0c9c35786c47cae15c46571d56be.ttf diff --git a/test/shaping/data/in-house/fonts/e207635780b42f898d58654b65098763e340f5c7.ttf b/test/shape/data/in-house/fonts/e207635780b42f898d58654b65098763e340f5c7.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/e207635780b42f898d58654b65098763e340f5c7.ttf rename to test/shape/data/in-house/fonts/e207635780b42f898d58654b65098763e340f5c7.ttf diff --git a/test/shaping/data/in-house/fonts/e39391c77a6321c2ac7a2d644de0396470cd4bfe.ttf b/test/shape/data/in-house/fonts/e39391c77a6321c2ac7a2d644de0396470cd4bfe.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/e39391c77a6321c2ac7a2d644de0396470cd4bfe.ttf rename to test/shape/data/in-house/fonts/e39391c77a6321c2ac7a2d644de0396470cd4bfe.ttf diff --git a/test/shaping/data/in-house/fonts/e5ff44940364c2247abed50bdda30d2ef5aedfe4.ttf b/test/shape/data/in-house/fonts/e5ff44940364c2247abed50bdda30d2ef5aedfe4.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/e5ff44940364c2247abed50bdda30d2ef5aedfe4.ttf rename to test/shape/data/in-house/fonts/e5ff44940364c2247abed50bdda30d2ef5aedfe4.ttf diff --git a/test/shaping/data/in-house/fonts/e68a88939e0f06e34d2bc911f09b70890289c8fd.ttf b/test/shape/data/in-house/fonts/e68a88939e0f06e34d2bc911f09b70890289c8fd.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/e68a88939e0f06e34d2bc911f09b70890289c8fd.ttf rename to test/shape/data/in-house/fonts/e68a88939e0f06e34d2bc911f09b70890289c8fd.ttf diff --git a/test/shaping/data/in-house/fonts/e8691822f6a705e3e9fb48a0405c645b1a036590.ttf b/test/shape/data/in-house/fonts/e8691822f6a705e3e9fb48a0405c645b1a036590.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/e8691822f6a705e3e9fb48a0405c645b1a036590.ttf rename to test/shape/data/in-house/fonts/e8691822f6a705e3e9fb48a0405c645b1a036590.ttf diff --git a/test/shaping/data/in-house/fonts/ea3f63620511b2097200d23774ffef197e829e69.ttf b/test/shape/data/in-house/fonts/ea3f63620511b2097200d23774ffef197e829e69.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/ea3f63620511b2097200d23774ffef197e829e69.ttf rename to test/shape/data/in-house/fonts/ea3f63620511b2097200d23774ffef197e829e69.ttf diff --git a/test/shaping/data/in-house/fonts/ee39587d13b2afa5499cc79e45780aa79293bbd4.ttf b/test/shape/data/in-house/fonts/ee39587d13b2afa5499cc79e45780aa79293bbd4.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/ee39587d13b2afa5499cc79e45780aa79293bbd4.ttf rename to test/shape/data/in-house/fonts/ee39587d13b2afa5499cc79e45780aa79293bbd4.ttf diff --git a/test/shaping/data/in-house/fonts/ef86fe710cfea877bbe0dbb6946a1f88d0661031.ttf b/test/shape/data/in-house/fonts/ef86fe710cfea877bbe0dbb6946a1f88d0661031.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/ef86fe710cfea877bbe0dbb6946a1f88d0661031.ttf rename to test/shape/data/in-house/fonts/ef86fe710cfea877bbe0dbb6946a1f88d0661031.ttf diff --git a/test/shaping/data/in-house/fonts/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf b/test/shape/data/in-house/fonts/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf rename to test/shape/data/in-house/fonts/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf diff --git a/test/shaping/data/in-house/fonts/f443753e8ffe8e8aae606cfba158e00334b6efb1.ttf b/test/shape/data/in-house/fonts/f443753e8ffe8e8aae606cfba158e00334b6efb1.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/f443753e8ffe8e8aae606cfba158e00334b6efb1.ttf rename to test/shape/data/in-house/fonts/f443753e8ffe8e8aae606cfba158e00334b6efb1.ttf diff --git a/test/shaping/data/in-house/fonts/f499fbc23865022234775c43503bba2e63978fe1.ttf b/test/shape/data/in-house/fonts/f499fbc23865022234775c43503bba2e63978fe1.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/f499fbc23865022234775c43503bba2e63978fe1.ttf rename to test/shape/data/in-house/fonts/f499fbc23865022234775c43503bba2e63978fe1.ttf diff --git a/test/shaping/data/in-house/fonts/f518eb6f6b5eec2946c9fbbbde44e45d46f5e2ac.ttf b/test/shape/data/in-house/fonts/f518eb6f6b5eec2946c9fbbbde44e45d46f5e2ac.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/f518eb6f6b5eec2946c9fbbbde44e45d46f5e2ac.ttf rename to test/shape/data/in-house/fonts/f518eb6f6b5eec2946c9fbbbde44e45d46f5e2ac.ttf diff --git a/test/shaping/data/in-house/fonts/f75c4b05a0a4d67c1a808081ae3d74a9c66509e8.ttf b/test/shape/data/in-house/fonts/f75c4b05a0a4d67c1a808081ae3d74a9c66509e8.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/f75c4b05a0a4d67c1a808081ae3d74a9c66509e8.ttf rename to test/shape/data/in-house/fonts/f75c4b05a0a4d67c1a808081ae3d74a9c66509e8.ttf diff --git a/test/shaping/data/in-house/fonts/f79eb71df4e4c9c273b67b89a06e5ff9e3c1f834.ttf b/test/shape/data/in-house/fonts/f79eb71df4e4c9c273b67b89a06e5ff9e3c1f834.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/f79eb71df4e4c9c273b67b89a06e5ff9e3c1f834.ttf rename to test/shape/data/in-house/fonts/f79eb71df4e4c9c273b67b89a06e5ff9e3c1f834.ttf diff --git a/test/shaping/data/in-house/fonts/f9b1dd4dcb515e757789a22cb4241107746fd3d0.ttf b/test/shape/data/in-house/fonts/f9b1dd4dcb515e757789a22cb4241107746fd3d0.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/f9b1dd4dcb515e757789a22cb4241107746fd3d0.ttf rename to test/shape/data/in-house/fonts/f9b1dd4dcb515e757789a22cb4241107746fd3d0.ttf diff --git a/test/shaping/data/in-house/fonts/fbb6c84c9e1fe0c39e152fbe845e51fd81f6748e.ttf b/test/shape/data/in-house/fonts/fbb6c84c9e1fe0c39e152fbe845e51fd81f6748e.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/fbb6c84c9e1fe0c39e152fbe845e51fd81f6748e.ttf rename to test/shape/data/in-house/fonts/fbb6c84c9e1fe0c39e152fbe845e51fd81f6748e.ttf diff --git a/test/shaping/data/in-house/fonts/fcbaa518d3cce441ed37ae3b1fed6a19e9b54efd.ttf b/test/shape/data/in-house/fonts/fcbaa518d3cce441ed37ae3b1fed6a19e9b54efd.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/fcbaa518d3cce441ed37ae3b1fed6a19e9b54efd.ttf rename to test/shape/data/in-house/fonts/fcbaa518d3cce441ed37ae3b1fed6a19e9b54efd.ttf diff --git a/test/shaping/data/in-house/fonts/fcdcffbdf1c4c97c05308d7600e4c283eb47dbca.ttf b/test/shape/data/in-house/fonts/fcdcffbdf1c4c97c05308d7600e4c283eb47dbca.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/fcdcffbdf1c4c97c05308d7600e4c283eb47dbca.ttf rename to test/shape/data/in-house/fonts/fcdcffbdf1c4c97c05308d7600e4c283eb47dbca.ttf diff --git a/test/shaping/data/in-house/fonts/fcea341ba6489536390384d8403ce5287ba71a4a.ttf b/test/shape/data/in-house/fonts/fcea341ba6489536390384d8403ce5287ba71a4a.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/fcea341ba6489536390384d8403ce5287ba71a4a.ttf rename to test/shape/data/in-house/fonts/fcea341ba6489536390384d8403ce5287ba71a4a.ttf diff --git a/test/shaping/data/in-house/fonts/fd07ea46e4d8368ada1776208c07fd596f727852.ttf b/test/shape/data/in-house/fonts/fd07ea46e4d8368ada1776208c07fd596f727852.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/fd07ea46e4d8368ada1776208c07fd596f727852.ttf rename to test/shape/data/in-house/fonts/fd07ea46e4d8368ada1776208c07fd596f727852.ttf diff --git a/test/shaping/data/in-house/fonts/ffa0f5d2d9025486d8469d8b1fdd983e7632499b.ttf b/test/shape/data/in-house/fonts/ffa0f5d2d9025486d8469d8b1fdd983e7632499b.ttf similarity index 100% rename from test/shaping/data/in-house/fonts/ffa0f5d2d9025486d8469d8b1fdd983e7632499b.ttf rename to test/shape/data/in-house/fonts/ffa0f5d2d9025486d8469d8b1fdd983e7632499b.ttf diff --git a/test/shaping/data/in-house/meson.build b/test/shape/data/in-house/meson.build similarity index 100% rename from test/shaping/data/in-house/meson.build rename to test/shape/data/in-house/meson.build diff --git a/test/shaping/data/in-house/tests/aat-morx.tests b/test/shape/data/in-house/tests/aat-morx.tests similarity index 100% rename from test/shaping/data/in-house/tests/aat-morx.tests rename to test/shape/data/in-house/tests/aat-morx.tests diff --git a/test/shaping/data/in-house/tests/aat-trak.tests b/test/shape/data/in-house/tests/aat-trak.tests similarity index 100% rename from test/shaping/data/in-house/tests/aat-trak.tests rename to test/shape/data/in-house/tests/aat-trak.tests diff --git a/test/shaping/data/in-house/tests/arabic-fallback-shaping.tests b/test/shape/data/in-house/tests/arabic-fallback-shaping.tests similarity index 100% rename from test/shaping/data/in-house/tests/arabic-fallback-shaping.tests rename to test/shape/data/in-house/tests/arabic-fallback-shaping.tests diff --git a/test/shaping/data/in-house/tests/arabic-feature-order.tests b/test/shape/data/in-house/tests/arabic-feature-order.tests similarity index 100% rename from test/shaping/data/in-house/tests/arabic-feature-order.tests rename to test/shape/data/in-house/tests/arabic-feature-order.tests diff --git a/test/shaping/data/in-house/tests/arabic-like-joining.tests b/test/shape/data/in-house/tests/arabic-like-joining.tests similarity index 100% rename from test/shaping/data/in-house/tests/arabic-like-joining.tests rename to test/shape/data/in-house/tests/arabic-like-joining.tests diff --git a/test/shaping/data/in-house/tests/arabic-mark-attach.tests b/test/shape/data/in-house/tests/arabic-mark-attach.tests similarity index 100% rename from test/shaping/data/in-house/tests/arabic-mark-attach.tests rename to test/shape/data/in-house/tests/arabic-mark-attach.tests diff --git a/test/shaping/data/in-house/tests/arabic-mark-order.tests b/test/shape/data/in-house/tests/arabic-mark-order.tests similarity index 100% rename from test/shaping/data/in-house/tests/arabic-mark-order.tests rename to test/shape/data/in-house/tests/arabic-mark-order.tests diff --git a/test/shaping/data/in-house/tests/arabic-stch.tests b/test/shape/data/in-house/tests/arabic-stch.tests similarity index 100% rename from test/shaping/data/in-house/tests/arabic-stch.tests rename to test/shape/data/in-house/tests/arabic-stch.tests diff --git a/test/shaping/data/in-house/tests/automatic-fractions.tests b/test/shape/data/in-house/tests/automatic-fractions.tests similarity index 100% rename from test/shaping/data/in-house/tests/automatic-fractions.tests rename to test/shape/data/in-house/tests/automatic-fractions.tests diff --git a/test/shaping/data/in-house/tests/cluster.tests b/test/shape/data/in-house/tests/cluster.tests similarity index 100% rename from test/shaping/data/in-house/tests/cluster.tests rename to test/shape/data/in-house/tests/cluster.tests diff --git a/test/shaping/data/in-house/tests/collections.tests b/test/shape/data/in-house/tests/collections.tests similarity index 100% rename from test/shaping/data/in-house/tests/collections.tests rename to test/shape/data/in-house/tests/collections.tests diff --git a/test/shaping/data/in-house/tests/color-fonts.tests b/test/shape/data/in-house/tests/color-fonts.tests similarity index 100% rename from test/shaping/data/in-house/tests/color-fonts.tests rename to test/shape/data/in-house/tests/color-fonts.tests diff --git a/test/shaping/data/in-house/tests/context-matching.tests b/test/shape/data/in-house/tests/context-matching.tests similarity index 100% rename from test/shaping/data/in-house/tests/context-matching.tests rename to test/shape/data/in-house/tests/context-matching.tests diff --git a/test/shaping/data/in-house/tests/cursive-positioning.tests b/test/shape/data/in-house/tests/cursive-positioning.tests similarity index 100% rename from test/shaping/data/in-house/tests/cursive-positioning.tests rename to test/shape/data/in-house/tests/cursive-positioning.tests diff --git a/test/shaping/data/in-house/tests/default-ignorables.tests b/test/shape/data/in-house/tests/default-ignorables.tests similarity index 100% rename from test/shaping/data/in-house/tests/default-ignorables.tests rename to test/shape/data/in-house/tests/default-ignorables.tests diff --git a/test/shaping/data/in-house/tests/digits.tests b/test/shape/data/in-house/tests/digits.tests similarity index 100% rename from test/shaping/data/in-house/tests/digits.tests rename to test/shape/data/in-house/tests/digits.tests diff --git a/test/shaping/data/in-house/tests/emoji-clusters.tests b/test/shape/data/in-house/tests/emoji-clusters.tests similarity index 100% rename from test/shaping/data/in-house/tests/emoji-clusters.tests rename to test/shape/data/in-house/tests/emoji-clusters.tests diff --git a/test/shaping/data/in-house/tests/emoji.tests b/test/shape/data/in-house/tests/emoji.tests similarity index 100% rename from test/shaping/data/in-house/tests/emoji.tests rename to test/shape/data/in-house/tests/emoji.tests diff --git a/test/shaping/data/in-house/tests/fallback-positioning.tests b/test/shape/data/in-house/tests/fallback-positioning.tests similarity index 100% rename from test/shaping/data/in-house/tests/fallback-positioning.tests rename to test/shape/data/in-house/tests/fallback-positioning.tests diff --git a/test/shaping/data/in-house/tests/hangul-jamo.tests b/test/shape/data/in-house/tests/hangul-jamo.tests similarity index 100% rename from test/shaping/data/in-house/tests/hangul-jamo.tests rename to test/shape/data/in-house/tests/hangul-jamo.tests diff --git a/test/shaping/data/in-house/tests/hyphens.tests b/test/shape/data/in-house/tests/hyphens.tests similarity index 100% rename from test/shaping/data/in-house/tests/hyphens.tests rename to test/shape/data/in-house/tests/hyphens.tests diff --git a/test/shaping/data/in-house/tests/indic-consonant-with-stacker.tests b/test/shape/data/in-house/tests/indic-consonant-with-stacker.tests similarity index 100% rename from test/shaping/data/in-house/tests/indic-consonant-with-stacker.tests rename to test/shape/data/in-house/tests/indic-consonant-with-stacker.tests diff --git a/test/shaping/data/in-house/tests/indic-decompose.tests b/test/shape/data/in-house/tests/indic-decompose.tests similarity index 100% rename from test/shaping/data/in-house/tests/indic-decompose.tests rename to test/shape/data/in-house/tests/indic-decompose.tests diff --git a/test/shaping/data/in-house/tests/indic-init.tests b/test/shape/data/in-house/tests/indic-init.tests similarity index 100% rename from test/shaping/data/in-house/tests/indic-init.tests rename to test/shape/data/in-house/tests/indic-init.tests diff --git a/test/shaping/data/in-house/tests/indic-joiner-candrabindu.tests b/test/shape/data/in-house/tests/indic-joiner-candrabindu.tests similarity index 100% rename from test/shaping/data/in-house/tests/indic-joiner-candrabindu.tests rename to test/shape/data/in-house/tests/indic-joiner-candrabindu.tests diff --git a/test/shaping/data/in-house/tests/indic-joiners.tests b/test/shape/data/in-house/tests/indic-joiners.tests similarity index 100% rename from test/shaping/data/in-house/tests/indic-joiners.tests rename to test/shape/data/in-house/tests/indic-joiners.tests diff --git a/test/shaping/data/in-house/tests/indic-old-spec.tests b/test/shape/data/in-house/tests/indic-old-spec.tests similarity index 100% rename from test/shaping/data/in-house/tests/indic-old-spec.tests rename to test/shape/data/in-house/tests/indic-old-spec.tests diff --git a/test/shaping/data/in-house/tests/indic-pref-blocking.tests b/test/shape/data/in-house/tests/indic-pref-blocking.tests similarity index 100% rename from test/shaping/data/in-house/tests/indic-pref-blocking.tests rename to test/shape/data/in-house/tests/indic-pref-blocking.tests diff --git a/test/shaping/data/in-house/tests/indic-script-extensions.tests b/test/shape/data/in-house/tests/indic-script-extensions.tests similarity index 100% rename from test/shaping/data/in-house/tests/indic-script-extensions.tests rename to test/shape/data/in-house/tests/indic-script-extensions.tests diff --git a/test/shaping/data/in-house/tests/indic-special-cases.tests b/test/shape/data/in-house/tests/indic-special-cases.tests similarity index 100% rename from test/shaping/data/in-house/tests/indic-special-cases.tests rename to test/shape/data/in-house/tests/indic-special-cases.tests diff --git a/test/shaping/data/in-house/tests/indic-syllable.tests b/test/shape/data/in-house/tests/indic-syllable.tests similarity index 100% rename from test/shaping/data/in-house/tests/indic-syllable.tests rename to test/shape/data/in-house/tests/indic-syllable.tests diff --git a/test/shaping/data/in-house/tests/indic-vowel-letter-spoofing.tests b/test/shape/data/in-house/tests/indic-vowel-letter-spoofing.tests similarity index 100% rename from test/shaping/data/in-house/tests/indic-vowel-letter-spoofing.tests rename to test/shape/data/in-house/tests/indic-vowel-letter-spoofing.tests diff --git a/test/shaping/data/in-house/tests/kern-format2.tests b/test/shape/data/in-house/tests/kern-format2.tests similarity index 100% rename from test/shaping/data/in-house/tests/kern-format2.tests rename to test/shape/data/in-house/tests/kern-format2.tests diff --git a/test/shaping/data/in-house/tests/khmer-mark-order.tests b/test/shape/data/in-house/tests/khmer-mark-order.tests similarity index 100% rename from test/shaping/data/in-house/tests/khmer-mark-order.tests rename to test/shape/data/in-house/tests/khmer-mark-order.tests diff --git a/test/shaping/data/in-house/tests/khmer-misc.tests b/test/shape/data/in-house/tests/khmer-misc.tests similarity index 100% rename from test/shaping/data/in-house/tests/khmer-misc.tests rename to test/shape/data/in-house/tests/khmer-misc.tests diff --git a/test/shaping/data/in-house/tests/language-tags.tests b/test/shape/data/in-house/tests/language-tags.tests similarity index 100% rename from test/shaping/data/in-house/tests/language-tags.tests rename to test/shape/data/in-house/tests/language-tags.tests diff --git a/test/shaping/data/in-house/tests/ligature-id.tests b/test/shape/data/in-house/tests/ligature-id.tests similarity index 100% rename from test/shaping/data/in-house/tests/ligature-id.tests rename to test/shape/data/in-house/tests/ligature-id.tests diff --git a/test/shaping/data/in-house/tests/macos.tests b/test/shape/data/in-house/tests/macos.tests similarity index 100% rename from test/shaping/data/in-house/tests/macos.tests rename to test/shape/data/in-house/tests/macos.tests diff --git a/test/shaping/data/in-house/tests/mark-attachment.tests b/test/shape/data/in-house/tests/mark-attachment.tests similarity index 100% rename from test/shaping/data/in-house/tests/mark-attachment.tests rename to test/shape/data/in-house/tests/mark-attachment.tests diff --git a/test/shaping/data/in-house/tests/mark-filtering-sets.tests b/test/shape/data/in-house/tests/mark-filtering-sets.tests similarity index 100% rename from test/shaping/data/in-house/tests/mark-filtering-sets.tests rename to test/shape/data/in-house/tests/mark-filtering-sets.tests diff --git a/test/shaping/data/in-house/tests/mongolian-variation-selector.tests b/test/shape/data/in-house/tests/mongolian-variation-selector.tests similarity index 100% rename from test/shaping/data/in-house/tests/mongolian-variation-selector.tests rename to test/shape/data/in-house/tests/mongolian-variation-selector.tests diff --git a/test/shaping/data/in-house/tests/myanmar-misc.tests b/test/shape/data/in-house/tests/myanmar-misc.tests similarity index 100% rename from test/shaping/data/in-house/tests/myanmar-misc.tests rename to test/shape/data/in-house/tests/myanmar-misc.tests diff --git a/test/shaping/data/in-house/tests/myanmar-syllable.tests b/test/shape/data/in-house/tests/myanmar-syllable.tests similarity index 100% rename from test/shaping/data/in-house/tests/myanmar-syllable.tests rename to test/shape/data/in-house/tests/myanmar-syllable.tests diff --git a/test/shaping/data/in-house/tests/myanmar-zawgyi.tests b/test/shape/data/in-house/tests/myanmar-zawgyi.tests similarity index 100% rename from test/shaping/data/in-house/tests/myanmar-zawgyi.tests rename to test/shape/data/in-house/tests/myanmar-zawgyi.tests diff --git a/test/shaping/data/in-house/tests/none-directional.tests b/test/shape/data/in-house/tests/none-directional.tests similarity index 100% rename from test/shaping/data/in-house/tests/none-directional.tests rename to test/shape/data/in-house/tests/none-directional.tests diff --git a/test/shaping/data/in-house/tests/positioning-features.tests b/test/shape/data/in-house/tests/positioning-features.tests similarity index 100% rename from test/shaping/data/in-house/tests/positioning-features.tests rename to test/shape/data/in-house/tests/positioning-features.tests diff --git a/test/shaping/data/in-house/tests/rand.tests b/test/shape/data/in-house/tests/rand.tests similarity index 100% rename from test/shaping/data/in-house/tests/rand.tests rename to test/shape/data/in-house/tests/rand.tests diff --git a/test/shaping/data/in-house/tests/reverse-sub.tests b/test/shape/data/in-house/tests/reverse-sub.tests similarity index 100% rename from test/shaping/data/in-house/tests/reverse-sub.tests rename to test/shape/data/in-house/tests/reverse-sub.tests diff --git a/test/shaping/data/in-house/tests/rotation.tests b/test/shape/data/in-house/tests/rotation.tests similarity index 100% rename from test/shaping/data/in-house/tests/rotation.tests rename to test/shape/data/in-house/tests/rotation.tests diff --git a/test/shaping/data/in-house/tests/simple.tests b/test/shape/data/in-house/tests/simple.tests similarity index 100% rename from test/shaping/data/in-house/tests/simple.tests rename to test/shape/data/in-house/tests/simple.tests diff --git a/test/shaping/data/in-house/tests/sinhala.tests b/test/shape/data/in-house/tests/sinhala.tests similarity index 100% rename from test/shaping/data/in-house/tests/sinhala.tests rename to test/shape/data/in-house/tests/sinhala.tests diff --git a/test/shaping/data/in-house/tests/spaces.tests b/test/shape/data/in-house/tests/spaces.tests similarity index 100% rename from test/shaping/data/in-house/tests/spaces.tests rename to test/shape/data/in-house/tests/spaces.tests diff --git a/test/shaping/data/in-house/tests/tibetan-contractions-1.tests b/test/shape/data/in-house/tests/tibetan-contractions-1.tests similarity index 100% rename from test/shaping/data/in-house/tests/tibetan-contractions-1.tests rename to test/shape/data/in-house/tests/tibetan-contractions-1.tests diff --git a/test/shaping/data/in-house/tests/tibetan-contractions-2.tests b/test/shape/data/in-house/tests/tibetan-contractions-2.tests similarity index 100% rename from test/shaping/data/in-house/tests/tibetan-contractions-2.tests rename to test/shape/data/in-house/tests/tibetan-contractions-2.tests diff --git a/test/shaping/data/in-house/tests/tibetan-vowels.tests b/test/shape/data/in-house/tests/tibetan-vowels.tests similarity index 100% rename from test/shaping/data/in-house/tests/tibetan-vowels.tests rename to test/shape/data/in-house/tests/tibetan-vowels.tests diff --git a/test/shaping/data/in-house/tests/tt-kern-gpos.tests b/test/shape/data/in-house/tests/tt-kern-gpos.tests similarity index 100% rename from test/shaping/data/in-house/tests/tt-kern-gpos.tests rename to test/shape/data/in-house/tests/tt-kern-gpos.tests diff --git a/test/shaping/data/in-house/tests/use-indic3.tests b/test/shape/data/in-house/tests/use-indic3.tests similarity index 100% rename from test/shaping/data/in-house/tests/use-indic3.tests rename to test/shape/data/in-house/tests/use-indic3.tests diff --git a/test/shaping/data/in-house/tests/use-marchen.tests b/test/shape/data/in-house/tests/use-marchen.tests similarity index 100% rename from test/shaping/data/in-house/tests/use-marchen.tests rename to test/shape/data/in-house/tests/use-marchen.tests diff --git a/test/shaping/data/in-house/tests/use-syllable.tests b/test/shape/data/in-house/tests/use-syllable.tests similarity index 100% rename from test/shaping/data/in-house/tests/use-syllable.tests rename to test/shape/data/in-house/tests/use-syllable.tests diff --git a/test/shaping/data/in-house/tests/use-vowel-letter-spoofing.tests b/test/shape/data/in-house/tests/use-vowel-letter-spoofing.tests similarity index 100% rename from test/shaping/data/in-house/tests/use-vowel-letter-spoofing.tests rename to test/shape/data/in-house/tests/use-vowel-letter-spoofing.tests diff --git a/test/shaping/data/in-house/tests/use.tests b/test/shape/data/in-house/tests/use.tests similarity index 100% rename from test/shaping/data/in-house/tests/use.tests rename to test/shape/data/in-house/tests/use.tests diff --git a/test/shaping/data/in-house/tests/variations-rvrn.tests b/test/shape/data/in-house/tests/variations-rvrn.tests similarity index 100% rename from test/shaping/data/in-house/tests/variations-rvrn.tests rename to test/shape/data/in-house/tests/variations-rvrn.tests diff --git a/test/shaping/data/in-house/tests/variations.tests b/test/shape/data/in-house/tests/variations.tests similarity index 100% rename from test/shaping/data/in-house/tests/variations.tests rename to test/shape/data/in-house/tests/variations.tests diff --git a/test/shaping/data/in-house/tests/vertical.tests b/test/shape/data/in-house/tests/vertical.tests similarity index 100% rename from test/shaping/data/in-house/tests/vertical.tests rename to test/shape/data/in-house/tests/vertical.tests diff --git a/test/shaping/data/in-house/tests/zero-width-marks.tests b/test/shape/data/in-house/tests/zero-width-marks.tests similarity index 100% rename from test/shaping/data/in-house/tests/zero-width-marks.tests rename to test/shape/data/in-house/tests/zero-width-marks.tests diff --git a/test/shaping/data/text-rendering-tests/COPYING b/test/shape/data/text-rendering-tests/COPYING similarity index 100% rename from test/shaping/data/text-rendering-tests/COPYING rename to test/shape/data/text-rendering-tests/COPYING diff --git a/test/shaping/data/text-rendering-tests/DISABLED b/test/shape/data/text-rendering-tests/DISABLED similarity index 100% rename from test/shaping/data/text-rendering-tests/DISABLED rename to test/shape/data/text-rendering-tests/DISABLED diff --git a/test/shaping/data/text-rendering-tests/Makefile.am b/test/shape/data/text-rendering-tests/Makefile.am similarity index 100% rename from test/shaping/data/text-rendering-tests/Makefile.am rename to test/shape/data/text-rendering-tests/Makefile.am diff --git a/test/shaping/data/text-rendering-tests/Makefile.sources b/test/shape/data/text-rendering-tests/Makefile.sources similarity index 100% rename from test/shaping/data/text-rendering-tests/Makefile.sources rename to test/shape/data/text-rendering-tests/Makefile.sources diff --git a/test/shaping/data/text-rendering-tests/README b/test/shape/data/text-rendering-tests/README similarity index 100% rename from test/shaping/data/text-rendering-tests/README rename to test/shape/data/text-rendering-tests/README diff --git a/test/shaping/data/text-rendering-tests/fonts/AdobeVFPrototype-Subset.otf b/test/shape/data/text-rendering-tests/fonts/AdobeVFPrototype-Subset.otf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/AdobeVFPrototype-Subset.otf rename to test/shape/data/text-rendering-tests/fonts/AdobeVFPrototype-Subset.otf diff --git a/test/shaping/data/text-rendering-tests/fonts/FDArrayTest257.otf b/test/shape/data/text-rendering-tests/fonts/FDArrayTest257.otf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/FDArrayTest257.otf rename to test/shape/data/text-rendering-tests/fonts/FDArrayTest257.otf diff --git a/test/shaping/data/text-rendering-tests/fonts/FDArrayTest65535.otf b/test/shape/data/text-rendering-tests/fonts/FDArrayTest65535.otf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/FDArrayTest65535.otf rename to test/shape/data/text-rendering-tests/fonts/FDArrayTest65535.otf diff --git a/test/shaping/data/text-rendering-tests/fonts/NotoSansBalinese-Regular.ttf b/test/shape/data/text-rendering-tests/fonts/NotoSansBalinese-Regular.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/NotoSansBalinese-Regular.ttf rename to test/shape/data/text-rendering-tests/fonts/NotoSansBalinese-Regular.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/NotoSansKannada-Regular.ttf b/test/shape/data/text-rendering-tests/fonts/NotoSansKannada-Regular.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/NotoSansKannada-Regular.ttf rename to test/shape/data/text-rendering-tests/fonts/NotoSansKannada-Regular.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/NotoSerifKannada-Regular.ttf b/test/shape/data/text-rendering-tests/fonts/NotoSerifKannada-Regular.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/NotoSerifKannada-Regular.ttf rename to test/shape/data/text-rendering-tests/fonts/NotoSerifKannada-Regular.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/Selawik-README.md b/test/shape/data/text-rendering-tests/fonts/Selawik-README.md similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/Selawik-README.md rename to test/shape/data/text-rendering-tests/fonts/Selawik-README.md diff --git a/test/shaping/data/text-rendering-tests/fonts/Selawik-variable.ttf b/test/shape/data/text-rendering-tests/fonts/Selawik-variable.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/Selawik-variable.ttf rename to test/shape/data/text-rendering-tests/fonts/Selawik-variable.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestAVAR.ttf b/test/shape/data/text-rendering-tests/fonts/TestAVAR.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestAVAR.ttf rename to test/shape/data/text-rendering-tests/fonts/TestAVAR.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestCMAP14.otf b/test/shape/data/text-rendering-tests/fonts/TestCMAP14.otf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestCMAP14.otf rename to test/shape/data/text-rendering-tests/fonts/TestCMAP14.otf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestCMAPMacTurkish.ttf b/test/shape/data/text-rendering-tests/fonts/TestCMAPMacTurkish.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestCMAPMacTurkish.ttf rename to test/shape/data/text-rendering-tests/fonts/TestCMAPMacTurkish.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestCVARGVAROne.ttf b/test/shape/data/text-rendering-tests/fonts/TestCVARGVAROne.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestCVARGVAROne.ttf rename to test/shape/data/text-rendering-tests/fonts/TestCVARGVAROne.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestCVARGVARTwo.ttf b/test/shape/data/text-rendering-tests/fonts/TestCVARGVARTwo.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestCVARGVARTwo.ttf rename to test/shape/data/text-rendering-tests/fonts/TestCVARGVARTwo.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGLYFOne.ttf b/test/shape/data/text-rendering-tests/fonts/TestGLYFOne.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestGLYFOne.ttf rename to test/shape/data/text-rendering-tests/fonts/TestGLYFOne.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGPOSFour.ttf b/test/shape/data/text-rendering-tests/fonts/TestGPOSFour.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestGPOSFour.ttf rename to test/shape/data/text-rendering-tests/fonts/TestGPOSFour.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGPOSOne.ttf b/test/shape/data/text-rendering-tests/fonts/TestGPOSOne.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestGPOSOne.ttf rename to test/shape/data/text-rendering-tests/fonts/TestGPOSOne.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGPOSThree.ttf b/test/shape/data/text-rendering-tests/fonts/TestGPOSThree.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestGPOSThree.ttf rename to test/shape/data/text-rendering-tests/fonts/TestGPOSThree.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGPOSTwo.otf b/test/shape/data/text-rendering-tests/fonts/TestGPOSTwo.otf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestGPOSTwo.otf rename to test/shape/data/text-rendering-tests/fonts/TestGPOSTwo.otf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGSUBOne.otf b/test/shape/data/text-rendering-tests/fonts/TestGSUBOne.otf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestGSUBOne.otf rename to test/shape/data/text-rendering-tests/fonts/TestGSUBOne.otf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGSUBThree.ttf b/test/shape/data/text-rendering-tests/fonts/TestGSUBThree.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestGSUBThree.ttf rename to test/shape/data/text-rendering-tests/fonts/TestGSUBThree.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGVAR-Composite-0.ttf b/test/shape/data/text-rendering-tests/fonts/TestGVAR-Composite-0.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestGVAR-Composite-0.ttf rename to test/shape/data/text-rendering-tests/fonts/TestGVAR-Composite-0.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGVAR-Composite-Missing.ttf b/test/shape/data/text-rendering-tests/fonts/TestGVAR-Composite-Missing.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestGVAR-Composite-Missing.ttf rename to test/shape/data/text-rendering-tests/fonts/TestGVAR-Composite-Missing.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGVAREight.ttf b/test/shape/data/text-rendering-tests/fonts/TestGVAREight.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestGVAREight.ttf rename to test/shape/data/text-rendering-tests/fonts/TestGVAREight.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGVARFour.ttf b/test/shape/data/text-rendering-tests/fonts/TestGVARFour.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestGVARFour.ttf rename to test/shape/data/text-rendering-tests/fonts/TestGVARFour.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGVARNine.ttf b/test/shape/data/text-rendering-tests/fonts/TestGVARNine.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestGVARNine.ttf rename to test/shape/data/text-rendering-tests/fonts/TestGVARNine.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGVAROne.ttf b/test/shape/data/text-rendering-tests/fonts/TestGVAROne.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestGVAROne.ttf rename to test/shape/data/text-rendering-tests/fonts/TestGVAROne.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGVARThree.ttf b/test/shape/data/text-rendering-tests/fonts/TestGVARThree.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestGVARThree.ttf rename to test/shape/data/text-rendering-tests/fonts/TestGVARThree.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGVARTwo.ttf b/test/shape/data/text-rendering-tests/fonts/TestGVARTwo.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestGVARTwo.ttf rename to test/shape/data/text-rendering-tests/fonts/TestGVARTwo.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestHVAROne.otf b/test/shape/data/text-rendering-tests/fonts/TestHVAROne.otf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestHVAROne.otf rename to test/shape/data/text-rendering-tests/fonts/TestHVAROne.otf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestHVARTwo.ttf b/test/shape/data/text-rendering-tests/fonts/TestHVARTwo.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestHVARTwo.ttf rename to test/shape/data/text-rendering-tests/fonts/TestHVARTwo.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestKERNOne.otf b/test/shape/data/text-rendering-tests/fonts/TestKERNOne.otf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestKERNOne.otf rename to test/shape/data/text-rendering-tests/fonts/TestKERNOne.otf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXEight.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXEight.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXEight.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXEight.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXEighteen.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXEighteen.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXEighteen.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXEighteen.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXEleven.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXEleven.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXEleven.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXEleven.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXForty.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXForty.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXForty.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXForty.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXFour.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXFour.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXFour.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXFour.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXFourteen.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXFourteen.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXFourteen.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXFourteen.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXFourtyone.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXFourtyone.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXFourtyone.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXFourtyone.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXNine.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXNine.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXNine.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXNine.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXOne.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXOne.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXOne.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXOne.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXSeventeen.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXSeventeen.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXSeventeen.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXSeventeen.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXSixteen.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXSixteen.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXSixteen.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXSixteen.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXTen.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXTen.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXTen.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXTen.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXThirteen.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXThirteen.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXThirteen.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXThirteen.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXThirtyeight.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXThirtyeight.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXThirtyeight.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXThirtyeight.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXThirtyfive.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXThirtyfive.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXThirtyfive.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXThirtyfive.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXThirtyfour.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXThirtyfour.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXThirtyfour.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXThirtyfour.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXThirtynine.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXThirtynine.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXThirtynine.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXThirtynine.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXThirtyone.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXThirtyone.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXThirtyone.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXThirtyone.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXThirtyseven.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXThirtyseven.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXThirtyseven.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXThirtyseven.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXThirtysix.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXThirtysix.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXThirtysix.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXThirtysix.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXThirtythree.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXThirtythree.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXThirtythree.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXThirtythree.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXThirtytwo.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXThirtytwo.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXThirtytwo.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXThirtytwo.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXThree.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXThree.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXThree.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXThree.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXTwelve.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXTwelve.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXTwelve.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXTwelve.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXTwenty.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXTwenty.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXTwenty.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXTwenty.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyeight.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXTwentyeight.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyeight.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXTwentyeight.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyfive.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXTwentyfive.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyfive.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXTwentyfive.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyfour.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXTwentyfour.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyfour.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXTwentyfour.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentynine.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXTwentynine.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXTwentynine.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXTwentynine.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyone.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXTwentyone.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyone.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXTwentyone.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyseven.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXTwentyseven.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyseven.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXTwentyseven.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentysix.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXTwentysix.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXTwentysix.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXTwentysix.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentythree.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXTwentythree.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXTwentythree.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXTwentythree.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentytwo.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXTwentytwo.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXTwentytwo.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXTwentytwo.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXTwo.ttf b/test/shape/data/text-rendering-tests/fonts/TestMORXTwo.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestMORXTwo.ttf rename to test/shape/data/text-rendering-tests/fonts/TestMORXTwo.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestSFNTOne.otf b/test/shape/data/text-rendering-tests/fonts/TestSFNTOne.otf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestSFNTOne.otf rename to test/shape/data/text-rendering-tests/fonts/TestSFNTOne.otf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestSFNTTwo.ttf b/test/shape/data/text-rendering-tests/fonts/TestSFNTTwo.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestSFNTTwo.ttf rename to test/shape/data/text-rendering-tests/fonts/TestSFNTTwo.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestSVGgradientTransform.otf b/test/shape/data/text-rendering-tests/fonts/TestSVGgradientTransform.otf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestSVGgradientTransform.otf rename to test/shape/data/text-rendering-tests/fonts/TestSVGgradientTransform.otf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestSVGgzip.otf b/test/shape/data/text-rendering-tests/fonts/TestSVGgzip.otf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestSVGgzip.otf rename to test/shape/data/text-rendering-tests/fonts/TestSVGgzip.otf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestSVGmultiGlyphs.otf b/test/shape/data/text-rendering-tests/fonts/TestSVGmultiGlyphs.otf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestSVGmultiGlyphs.otf rename to test/shape/data/text-rendering-tests/fonts/TestSVGmultiGlyphs.otf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestShapeAran.ttf b/test/shape/data/text-rendering-tests/fonts/TestShapeAran.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestShapeAran.ttf rename to test/shape/data/text-rendering-tests/fonts/TestShapeAran.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestShapeEthi.ttf b/test/shape/data/text-rendering-tests/fonts/TestShapeEthi.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestShapeEthi.ttf rename to test/shape/data/text-rendering-tests/fonts/TestShapeEthi.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestShapeKndaV3.ttf b/test/shape/data/text-rendering-tests/fonts/TestShapeKndaV3.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestShapeKndaV3.ttf rename to test/shape/data/text-rendering-tests/fonts/TestShapeKndaV3.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestShapeLana.ttf b/test/shape/data/text-rendering-tests/fonts/TestShapeLana.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestShapeLana.ttf rename to test/shape/data/text-rendering-tests/fonts/TestShapeLana.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/TestTRAKOne.ttf b/test/shape/data/text-rendering-tests/fonts/TestTRAKOne.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/TestTRAKOne.ttf rename to test/shape/data/text-rendering-tests/fonts/TestTRAKOne.ttf diff --git a/test/shaping/data/text-rendering-tests/fonts/Zycon.ttf b/test/shape/data/text-rendering-tests/fonts/Zycon.ttf similarity index 100% rename from test/shaping/data/text-rendering-tests/fonts/Zycon.ttf rename to test/shape/data/text-rendering-tests/fonts/Zycon.ttf diff --git a/test/shaping/data/text-rendering-tests/meson.build b/test/shape/data/text-rendering-tests/meson.build similarity index 100% rename from test/shaping/data/text-rendering-tests/meson.build rename to test/shape/data/text-rendering-tests/meson.build diff --git a/test/shaping/data/text-rendering-tests/tests/AVAR-1.tests b/test/shape/data/text-rendering-tests/tests/AVAR-1.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/AVAR-1.tests rename to test/shape/data/text-rendering-tests/tests/AVAR-1.tests diff --git a/test/shaping/data/text-rendering-tests/tests/CFF-1.tests b/test/shape/data/text-rendering-tests/tests/CFF-1.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/CFF-1.tests rename to test/shape/data/text-rendering-tests/tests/CFF-1.tests diff --git a/test/shaping/data/text-rendering-tests/tests/CFF-2.tests b/test/shape/data/text-rendering-tests/tests/CFF-2.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/CFF-2.tests rename to test/shape/data/text-rendering-tests/tests/CFF-2.tests diff --git a/test/shaping/data/text-rendering-tests/tests/CFF2-1.tests b/test/shape/data/text-rendering-tests/tests/CFF2-1.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/CFF2-1.tests rename to test/shape/data/text-rendering-tests/tests/CFF2-1.tests diff --git a/test/shaping/data/text-rendering-tests/tests/CMAP-1.tests b/test/shape/data/text-rendering-tests/tests/CMAP-1.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/CMAP-1.tests rename to test/shape/data/text-rendering-tests/tests/CMAP-1.tests diff --git a/test/shaping/data/text-rendering-tests/tests/CMAP-2.tests b/test/shape/data/text-rendering-tests/tests/CMAP-2.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/CMAP-2.tests rename to test/shape/data/text-rendering-tests/tests/CMAP-2.tests diff --git a/test/shaping/data/text-rendering-tests/tests/CMAP-3.tests b/test/shape/data/text-rendering-tests/tests/CMAP-3.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/CMAP-3.tests rename to test/shape/data/text-rendering-tests/tests/CMAP-3.tests diff --git a/test/shaping/data/text-rendering-tests/tests/CVAR-1.tests b/test/shape/data/text-rendering-tests/tests/CVAR-1.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/CVAR-1.tests rename to test/shape/data/text-rendering-tests/tests/CVAR-1.tests diff --git a/test/shaping/data/text-rendering-tests/tests/CVAR-2.tests b/test/shape/data/text-rendering-tests/tests/CVAR-2.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/CVAR-2.tests rename to test/shape/data/text-rendering-tests/tests/CVAR-2.tests diff --git a/test/shaping/data/text-rendering-tests/tests/GLYF-1.tests b/test/shape/data/text-rendering-tests/tests/GLYF-1.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/GLYF-1.tests rename to test/shape/data/text-rendering-tests/tests/GLYF-1.tests diff --git a/test/shaping/data/text-rendering-tests/tests/GPOS-1.tests b/test/shape/data/text-rendering-tests/tests/GPOS-1.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/GPOS-1.tests rename to test/shape/data/text-rendering-tests/tests/GPOS-1.tests diff --git a/test/shaping/data/text-rendering-tests/tests/GPOS-2.tests b/test/shape/data/text-rendering-tests/tests/GPOS-2.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/GPOS-2.tests rename to test/shape/data/text-rendering-tests/tests/GPOS-2.tests diff --git a/test/shaping/data/text-rendering-tests/tests/GPOS-3.tests b/test/shape/data/text-rendering-tests/tests/GPOS-3.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/GPOS-3.tests rename to test/shape/data/text-rendering-tests/tests/GPOS-3.tests diff --git a/test/shaping/data/text-rendering-tests/tests/GPOS-4.tests b/test/shape/data/text-rendering-tests/tests/GPOS-4.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/GPOS-4.tests rename to test/shape/data/text-rendering-tests/tests/GPOS-4.tests diff --git a/test/shaping/data/text-rendering-tests/tests/GPOS-5.tests b/test/shape/data/text-rendering-tests/tests/GPOS-5.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/GPOS-5.tests rename to test/shape/data/text-rendering-tests/tests/GPOS-5.tests diff --git a/test/shaping/data/text-rendering-tests/tests/GSUB-1.tests b/test/shape/data/text-rendering-tests/tests/GSUB-1.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/GSUB-1.tests rename to test/shape/data/text-rendering-tests/tests/GSUB-1.tests diff --git a/test/shaping/data/text-rendering-tests/tests/GSUB-2.tests b/test/shape/data/text-rendering-tests/tests/GSUB-2.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/GSUB-2.tests rename to test/shape/data/text-rendering-tests/tests/GSUB-2.tests diff --git a/test/shaping/data/text-rendering-tests/tests/GSUB-3.tests b/test/shape/data/text-rendering-tests/tests/GSUB-3.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/GSUB-3.tests rename to test/shape/data/text-rendering-tests/tests/GSUB-3.tests diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-1.tests b/test/shape/data/text-rendering-tests/tests/GVAR-1.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/GVAR-1.tests rename to test/shape/data/text-rendering-tests/tests/GVAR-1.tests diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-2.tests b/test/shape/data/text-rendering-tests/tests/GVAR-2.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/GVAR-2.tests rename to test/shape/data/text-rendering-tests/tests/GVAR-2.tests diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-3.tests b/test/shape/data/text-rendering-tests/tests/GVAR-3.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/GVAR-3.tests rename to test/shape/data/text-rendering-tests/tests/GVAR-3.tests diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-4.tests b/test/shape/data/text-rendering-tests/tests/GVAR-4.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/GVAR-4.tests rename to test/shape/data/text-rendering-tests/tests/GVAR-4.tests diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-5.tests b/test/shape/data/text-rendering-tests/tests/GVAR-5.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/GVAR-5.tests rename to test/shape/data/text-rendering-tests/tests/GVAR-5.tests diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-6.tests b/test/shape/data/text-rendering-tests/tests/GVAR-6.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/GVAR-6.tests rename to test/shape/data/text-rendering-tests/tests/GVAR-6.tests diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-7.tests b/test/shape/data/text-rendering-tests/tests/GVAR-7.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/GVAR-7.tests rename to test/shape/data/text-rendering-tests/tests/GVAR-7.tests diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-8.tests b/test/shape/data/text-rendering-tests/tests/GVAR-8.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/GVAR-8.tests rename to test/shape/data/text-rendering-tests/tests/GVAR-8.tests diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-9.tests b/test/shape/data/text-rendering-tests/tests/GVAR-9.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/GVAR-9.tests rename to test/shape/data/text-rendering-tests/tests/GVAR-9.tests diff --git a/test/shaping/data/text-rendering-tests/tests/HVAR-1.tests b/test/shape/data/text-rendering-tests/tests/HVAR-1.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/HVAR-1.tests rename to test/shape/data/text-rendering-tests/tests/HVAR-1.tests diff --git a/test/shaping/data/text-rendering-tests/tests/HVAR-2.tests b/test/shape/data/text-rendering-tests/tests/HVAR-2.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/HVAR-2.tests rename to test/shape/data/text-rendering-tests/tests/HVAR-2.tests diff --git a/test/shaping/data/text-rendering-tests/tests/KERN-1.tests b/test/shape/data/text-rendering-tests/tests/KERN-1.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/KERN-1.tests rename to test/shape/data/text-rendering-tests/tests/KERN-1.tests diff --git a/test/shaping/data/text-rendering-tests/tests/KERN-2.tests b/test/shape/data/text-rendering-tests/tests/KERN-2.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/KERN-2.tests rename to test/shape/data/text-rendering-tests/tests/KERN-2.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-1.tests b/test/shape/data/text-rendering-tests/tests/MORX-1.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-1.tests rename to test/shape/data/text-rendering-tests/tests/MORX-1.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-10.tests b/test/shape/data/text-rendering-tests/tests/MORX-10.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-10.tests rename to test/shape/data/text-rendering-tests/tests/MORX-10.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-11.tests b/test/shape/data/text-rendering-tests/tests/MORX-11.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-11.tests rename to test/shape/data/text-rendering-tests/tests/MORX-11.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-12.tests b/test/shape/data/text-rendering-tests/tests/MORX-12.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-12.tests rename to test/shape/data/text-rendering-tests/tests/MORX-12.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-13.tests b/test/shape/data/text-rendering-tests/tests/MORX-13.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-13.tests rename to test/shape/data/text-rendering-tests/tests/MORX-13.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-14.tests b/test/shape/data/text-rendering-tests/tests/MORX-14.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-14.tests rename to test/shape/data/text-rendering-tests/tests/MORX-14.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-16.tests b/test/shape/data/text-rendering-tests/tests/MORX-16.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-16.tests rename to test/shape/data/text-rendering-tests/tests/MORX-16.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-17.tests b/test/shape/data/text-rendering-tests/tests/MORX-17.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-17.tests rename to test/shape/data/text-rendering-tests/tests/MORX-17.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-18.tests b/test/shape/data/text-rendering-tests/tests/MORX-18.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-18.tests rename to test/shape/data/text-rendering-tests/tests/MORX-18.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-19.tests b/test/shape/data/text-rendering-tests/tests/MORX-19.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-19.tests rename to test/shape/data/text-rendering-tests/tests/MORX-19.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-2.tests b/test/shape/data/text-rendering-tests/tests/MORX-2.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-2.tests rename to test/shape/data/text-rendering-tests/tests/MORX-2.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-20.tests b/test/shape/data/text-rendering-tests/tests/MORX-20.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-20.tests rename to test/shape/data/text-rendering-tests/tests/MORX-20.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-21.tests b/test/shape/data/text-rendering-tests/tests/MORX-21.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-21.tests rename to test/shape/data/text-rendering-tests/tests/MORX-21.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-22.tests b/test/shape/data/text-rendering-tests/tests/MORX-22.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-22.tests rename to test/shape/data/text-rendering-tests/tests/MORX-22.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-23.tests b/test/shape/data/text-rendering-tests/tests/MORX-23.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-23.tests rename to test/shape/data/text-rendering-tests/tests/MORX-23.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-24.tests b/test/shape/data/text-rendering-tests/tests/MORX-24.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-24.tests rename to test/shape/data/text-rendering-tests/tests/MORX-24.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-25.tests b/test/shape/data/text-rendering-tests/tests/MORX-25.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-25.tests rename to test/shape/data/text-rendering-tests/tests/MORX-25.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-26.tests b/test/shape/data/text-rendering-tests/tests/MORX-26.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-26.tests rename to test/shape/data/text-rendering-tests/tests/MORX-26.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-27.tests b/test/shape/data/text-rendering-tests/tests/MORX-27.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-27.tests rename to test/shape/data/text-rendering-tests/tests/MORX-27.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-28.tests b/test/shape/data/text-rendering-tests/tests/MORX-28.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-28.tests rename to test/shape/data/text-rendering-tests/tests/MORX-28.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-29.tests b/test/shape/data/text-rendering-tests/tests/MORX-29.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-29.tests rename to test/shape/data/text-rendering-tests/tests/MORX-29.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-3.tests b/test/shape/data/text-rendering-tests/tests/MORX-3.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-3.tests rename to test/shape/data/text-rendering-tests/tests/MORX-3.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-30.tests b/test/shape/data/text-rendering-tests/tests/MORX-30.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-30.tests rename to test/shape/data/text-rendering-tests/tests/MORX-30.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-31.tests b/test/shape/data/text-rendering-tests/tests/MORX-31.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-31.tests rename to test/shape/data/text-rendering-tests/tests/MORX-31.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-32.tests b/test/shape/data/text-rendering-tests/tests/MORX-32.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-32.tests rename to test/shape/data/text-rendering-tests/tests/MORX-32.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-33.tests b/test/shape/data/text-rendering-tests/tests/MORX-33.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-33.tests rename to test/shape/data/text-rendering-tests/tests/MORX-33.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-34.tests b/test/shape/data/text-rendering-tests/tests/MORX-34.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-34.tests rename to test/shape/data/text-rendering-tests/tests/MORX-34.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-35.tests b/test/shape/data/text-rendering-tests/tests/MORX-35.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-35.tests rename to test/shape/data/text-rendering-tests/tests/MORX-35.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-36.tests b/test/shape/data/text-rendering-tests/tests/MORX-36.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-36.tests rename to test/shape/data/text-rendering-tests/tests/MORX-36.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-37.tests b/test/shape/data/text-rendering-tests/tests/MORX-37.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-37.tests rename to test/shape/data/text-rendering-tests/tests/MORX-37.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-38.tests b/test/shape/data/text-rendering-tests/tests/MORX-38.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-38.tests rename to test/shape/data/text-rendering-tests/tests/MORX-38.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-39.tests b/test/shape/data/text-rendering-tests/tests/MORX-39.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-39.tests rename to test/shape/data/text-rendering-tests/tests/MORX-39.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-4.tests b/test/shape/data/text-rendering-tests/tests/MORX-4.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-4.tests rename to test/shape/data/text-rendering-tests/tests/MORX-4.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-40.tests b/test/shape/data/text-rendering-tests/tests/MORX-40.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-40.tests rename to test/shape/data/text-rendering-tests/tests/MORX-40.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-41.tests b/test/shape/data/text-rendering-tests/tests/MORX-41.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-41.tests rename to test/shape/data/text-rendering-tests/tests/MORX-41.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-5.tests b/test/shape/data/text-rendering-tests/tests/MORX-5.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-5.tests rename to test/shape/data/text-rendering-tests/tests/MORX-5.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-6.tests b/test/shape/data/text-rendering-tests/tests/MORX-6.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-6.tests rename to test/shape/data/text-rendering-tests/tests/MORX-6.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-7.tests b/test/shape/data/text-rendering-tests/tests/MORX-7.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-7.tests rename to test/shape/data/text-rendering-tests/tests/MORX-7.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-8.tests b/test/shape/data/text-rendering-tests/tests/MORX-8.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-8.tests rename to test/shape/data/text-rendering-tests/tests/MORX-8.tests diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-9.tests b/test/shape/data/text-rendering-tests/tests/MORX-9.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/MORX-9.tests rename to test/shape/data/text-rendering-tests/tests/MORX-9.tests diff --git a/test/shaping/data/text-rendering-tests/tests/SFNT-1.tests b/test/shape/data/text-rendering-tests/tests/SFNT-1.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/SFNT-1.tests rename to test/shape/data/text-rendering-tests/tests/SFNT-1.tests diff --git a/test/shaping/data/text-rendering-tests/tests/SFNT-2.tests b/test/shape/data/text-rendering-tests/tests/SFNT-2.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/SFNT-2.tests rename to test/shape/data/text-rendering-tests/tests/SFNT-2.tests diff --git a/test/shaping/data/text-rendering-tests/tests/SHARAN-1.tests b/test/shape/data/text-rendering-tests/tests/SHARAN-1.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/SHARAN-1.tests rename to test/shape/data/text-rendering-tests/tests/SHARAN-1.tests diff --git a/test/shaping/data/text-rendering-tests/tests/SHBALI-1.tests b/test/shape/data/text-rendering-tests/tests/SHBALI-1.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/SHBALI-1.tests rename to test/shape/data/text-rendering-tests/tests/SHBALI-1.tests diff --git a/test/shaping/data/text-rendering-tests/tests/SHBALI-2.tests b/test/shape/data/text-rendering-tests/tests/SHBALI-2.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/SHBALI-2.tests rename to test/shape/data/text-rendering-tests/tests/SHBALI-2.tests diff --git a/test/shaping/data/text-rendering-tests/tests/SHBALI-3.tests b/test/shape/data/text-rendering-tests/tests/SHBALI-3.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/SHBALI-3.tests rename to test/shape/data/text-rendering-tests/tests/SHBALI-3.tests diff --git a/test/shaping/data/text-rendering-tests/tests/SHKNDA-1.tests b/test/shape/data/text-rendering-tests/tests/SHKNDA-1.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/SHKNDA-1.tests rename to test/shape/data/text-rendering-tests/tests/SHKNDA-1.tests diff --git a/test/shaping/data/text-rendering-tests/tests/SHKNDA-2.tests b/test/shape/data/text-rendering-tests/tests/SHKNDA-2.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/SHKNDA-2.tests rename to test/shape/data/text-rendering-tests/tests/SHKNDA-2.tests diff --git a/test/shaping/data/text-rendering-tests/tests/SHKNDA-3.tests b/test/shape/data/text-rendering-tests/tests/SHKNDA-3.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/SHKNDA-3.tests rename to test/shape/data/text-rendering-tests/tests/SHKNDA-3.tests diff --git a/test/shaping/data/text-rendering-tests/tests/SHLANA-1.tests b/test/shape/data/text-rendering-tests/tests/SHLANA-1.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/SHLANA-1.tests rename to test/shape/data/text-rendering-tests/tests/SHLANA-1.tests diff --git a/test/shaping/data/text-rendering-tests/tests/SHLANA-10.tests b/test/shape/data/text-rendering-tests/tests/SHLANA-10.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/SHLANA-10.tests rename to test/shape/data/text-rendering-tests/tests/SHLANA-10.tests diff --git a/test/shaping/data/text-rendering-tests/tests/SHLANA-2.tests b/test/shape/data/text-rendering-tests/tests/SHLANA-2.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/SHLANA-2.tests rename to test/shape/data/text-rendering-tests/tests/SHLANA-2.tests diff --git a/test/shaping/data/text-rendering-tests/tests/SHLANA-3.tests b/test/shape/data/text-rendering-tests/tests/SHLANA-3.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/SHLANA-3.tests rename to test/shape/data/text-rendering-tests/tests/SHLANA-3.tests diff --git a/test/shaping/data/text-rendering-tests/tests/SHLANA-4.tests b/test/shape/data/text-rendering-tests/tests/SHLANA-4.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/SHLANA-4.tests rename to test/shape/data/text-rendering-tests/tests/SHLANA-4.tests diff --git a/test/shaping/data/text-rendering-tests/tests/SHLANA-5.tests b/test/shape/data/text-rendering-tests/tests/SHLANA-5.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/SHLANA-5.tests rename to test/shape/data/text-rendering-tests/tests/SHLANA-5.tests diff --git a/test/shaping/data/text-rendering-tests/tests/SHLANA-6.tests b/test/shape/data/text-rendering-tests/tests/SHLANA-6.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/SHLANA-6.tests rename to test/shape/data/text-rendering-tests/tests/SHLANA-6.tests diff --git a/test/shaping/data/text-rendering-tests/tests/SHLANA-7.tests b/test/shape/data/text-rendering-tests/tests/SHLANA-7.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/SHLANA-7.tests rename to test/shape/data/text-rendering-tests/tests/SHLANA-7.tests diff --git a/test/shaping/data/text-rendering-tests/tests/SHLANA-8.tests b/test/shape/data/text-rendering-tests/tests/SHLANA-8.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/SHLANA-8.tests rename to test/shape/data/text-rendering-tests/tests/SHLANA-8.tests diff --git a/test/shaping/data/text-rendering-tests/tests/SHLANA-9.tests b/test/shape/data/text-rendering-tests/tests/SHLANA-9.tests similarity index 100% rename from test/shaping/data/text-rendering-tests/tests/SHLANA-9.tests rename to test/shape/data/text-rendering-tests/tests/SHLANA-9.tests diff --git a/test/shaping/data/text-rendering-tests/update.py b/test/shape/data/text-rendering-tests/update.py similarity index 100% rename from test/shaping/data/text-rendering-tests/update.py rename to test/shape/data/text-rendering-tests/update.py diff --git a/test/shaping/hb-diff b/test/shape/hb-diff similarity index 100% rename from test/shaping/hb-diff rename to test/shape/hb-diff diff --git a/test/shaping/hb-diff-colorize b/test/shape/hb-diff-colorize similarity index 100% rename from test/shaping/hb-diff-colorize rename to test/shape/hb-diff-colorize diff --git a/test/shaping/hb-diff-filter-failures b/test/shape/hb-diff-filter-failures similarity index 100% rename from test/shaping/hb-diff-filter-failures rename to test/shape/hb-diff-filter-failures diff --git a/test/shaping/hb-diff-stat b/test/shape/hb-diff-stat similarity index 100% rename from test/shaping/hb-diff-stat rename to test/shape/hb-diff-stat diff --git a/test/shaping/hb-unicode-decode b/test/shape/hb-unicode-decode similarity index 100% rename from test/shaping/hb-unicode-decode rename to test/shape/hb-unicode-decode diff --git a/test/shaping/hb-unicode-encode b/test/shape/hb-unicode-encode similarity index 100% rename from test/shaping/hb-unicode-encode rename to test/shape/hb-unicode-encode diff --git a/test/shaping/hb-unicode-prettyname b/test/shape/hb-unicode-prettyname similarity index 100% rename from test/shaping/hb-unicode-prettyname rename to test/shape/hb-unicode-prettyname diff --git a/test/shaping/hb_test_tools.py b/test/shape/hb_test_tools.py similarity index 100% rename from test/shaping/hb_test_tools.py rename to test/shape/hb_test_tools.py diff --git a/test/shaping/meson.build b/test/shape/meson.build similarity index 100% rename from test/shaping/meson.build rename to test/shape/meson.build diff --git a/test/shaping/record-test.sh b/test/shape/record-test.sh similarity index 100% rename from test/shaping/record-test.sh rename to test/shape/record-test.sh diff --git a/test/shaping/run-tests.py b/test/shape/run-tests.py similarity index 100% rename from test/shaping/run-tests.py rename to test/shape/run-tests.py diff --git a/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-persian/mehran.txt b/test/shape/texts/in-house/shaper-arabic/script-arabic/language-persian/mehran.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-arabic/script-arabic/language-persian/mehran.txt rename to test/shape/texts/in-house/shaper-arabic/script-arabic/language-persian/mehran.txt diff --git a/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/2grams.txt b/test/shape/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/2grams.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/2grams.txt rename to test/shape/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/2grams.txt diff --git a/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/3grams.txt b/test/shape/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/3grams.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/3grams.txt rename to test/shape/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/3grams.txt diff --git a/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/4grams.txt b/test/shape/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/4grams.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/4grams.txt rename to test/shape/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/4grams.txt diff --git a/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/5grams.txt b/test/shape/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/5grams.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/5grams.txt rename to test/shape/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/5grams.txt diff --git a/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/6grams.txt b/test/shape/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/6grams.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/6grams.txt rename to test/shape/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/6grams.txt diff --git a/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/7grams.txt b/test/shape/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/7grams.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/7grams.txt rename to test/shape/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/7grams.txt diff --git a/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/8grams.txt b/test/shape/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/8grams.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/8grams.txt rename to test/shape/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/8grams.txt diff --git a/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/LICENSE b/test/shape/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/LICENSE similarity index 100% rename from test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/LICENSE rename to test/shape/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/LICENSE diff --git a/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/README b/test/shape/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/README similarity index 100% rename from test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/README rename to test/shape/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/README diff --git a/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/SOURCES b/test/shape/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/SOURCES similarity index 100% rename from test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/SOURCES rename to test/shape/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/SOURCES diff --git a/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/lam-alef.txt b/test/shape/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/lam-alef.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/lam-alef.txt rename to test/shape/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/lam-alef.txt diff --git a/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-arabic.txt b/test/shape/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-arabic.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-arabic.txt rename to test/shape/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-arabic.txt diff --git a/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-persian.txt b/test/shape/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-persian.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-persian.txt rename to test/shape/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-persian.txt diff --git a/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-urdu.txt b/test/shape/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-urdu.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-urdu.txt rename to test/shape/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-urdu.txt diff --git a/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/ligature-components.txt b/test/shape/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/ligature-components.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/ligature-components.txt rename to test/shape/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/ligature-components.txt diff --git a/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/ligature-diacritics.txt b/test/shape/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/ligature-diacritics.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/ligature-diacritics.txt rename to test/shape/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/ligature-diacritics.txt diff --git a/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/mark-skipping.txt b/test/shape/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/mark-skipping.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/mark-skipping.txt rename to test/shape/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/mark-skipping.txt diff --git a/test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/misc.txt b/test/shape/texts/in-house/shaper-arabic/script-mongolian/misc/misc.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/misc.txt rename to test/shape/texts/in-house/shaper-arabic/script-mongolian/misc/misc.txt diff --git a/test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/non-joining.txt b/test/shape/texts/in-house/shaper-arabic/script-mongolian/misc/non-joining.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/non-joining.txt rename to test/shape/texts/in-house/shaper-arabic/script-mongolian/misc/non-joining.txt diff --git a/test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/poem.txt b/test/shape/texts/in-house/shaper-arabic/script-mongolian/misc/poem.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/poem.txt rename to test/shape/texts/in-house/shaper-arabic/script-mongolian/misc/poem.txt diff --git a/test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/variation-selectors.txt b/test/shape/texts/in-house/shaper-arabic/script-mongolian/misc/variation-selectors.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/variation-selectors.txt rename to test/shape/texts/in-house/shaper-arabic/script-mongolian/misc/variation-selectors.txt diff --git a/test/shaping/texts/in-house/shaper-arabic/script-nko/misc/misc.txt b/test/shape/texts/in-house/shaper-arabic/script-nko/misc/misc.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-arabic/script-nko/misc/misc.txt rename to test/shape/texts/in-house/shaper-arabic/script-nko/misc/misc.txt diff --git a/test/shaping/texts/in-house/shaper-arabic/script-phags-pa/misc/misc.txt b/test/shape/texts/in-house/shaper-arabic/script-phags-pa/misc/misc.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-arabic/script-phags-pa/misc/misc.txt rename to test/shape/texts/in-house/shaper-arabic/script-phags-pa/misc/misc.txt diff --git a/test/shaping/texts/in-house/shaper-arabic/script-syriac/misc/abbreviation-mark.txt b/test/shape/texts/in-house/shaper-arabic/script-syriac/misc/abbreviation-mark.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-arabic/script-syriac/misc/abbreviation-mark.txt rename to test/shape/texts/in-house/shaper-arabic/script-syriac/misc/abbreviation-mark.txt diff --git a/test/shaping/texts/in-house/shaper-arabic/script-syriac/misc/alaph.txt b/test/shape/texts/in-house/shaper-arabic/script-syriac/misc/alaph.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-arabic/script-syriac/misc/alaph.txt rename to test/shape/texts/in-house/shaper-arabic/script-syriac/misc/alaph.txt diff --git a/test/shaping/texts/in-house/shaper-default/script-ethiopic/misc/misc.txt b/test/shape/texts/in-house/shaper-default/script-ethiopic/misc/misc.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-default/script-ethiopic/misc/misc.txt rename to test/shape/texts/in-house/shaper-default/script-ethiopic/misc/misc.txt diff --git a/test/shaping/texts/in-house/shaper-default/script-han/misc/cjk-compat.txt b/test/shape/texts/in-house/shaper-default/script-han/misc/cjk-compat.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-default/script-han/misc/cjk-compat.txt rename to test/shape/texts/in-house/shaper-default/script-han/misc/cjk-compat.txt diff --git a/test/shaping/texts/in-house/shaper-default/script-hiragana/misc/kazuraki-liga-lines.txt b/test/shape/texts/in-house/shaper-default/script-hiragana/misc/kazuraki-liga-lines.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-default/script-hiragana/misc/kazuraki-liga-lines.txt rename to test/shape/texts/in-house/shaper-default/script-hiragana/misc/kazuraki-liga-lines.txt diff --git a/test/shaping/texts/in-house/shaper-default/script-hiragana/misc/kazuraki-liga.txt b/test/shape/texts/in-house/shaper-default/script-hiragana/misc/kazuraki-liga.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-default/script-hiragana/misc/kazuraki-liga.txt rename to test/shape/texts/in-house/shaper-default/script-hiragana/misc/kazuraki-liga.txt diff --git a/test/shaping/texts/in-house/shaper-default/script-linear-b/misc/misc.txt b/test/shape/texts/in-house/shaper-default/script-linear-b/misc/misc.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-default/script-linear-b/misc/misc.txt rename to test/shape/texts/in-house/shaper-default/script-linear-b/misc/misc.txt diff --git a/test/shaping/texts/in-house/shaper-default/script-tifinagh/misc/misc.txt b/test/shape/texts/in-house/shaper-default/script-tifinagh/misc/misc.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-default/script-tifinagh/misc/misc.txt rename to test/shape/texts/in-house/shaper-default/script-tifinagh/misc/misc.txt diff --git a/test/shaping/texts/in-house/shaper-hangul/script-hangul/misc/misc.txt b/test/shape/texts/in-house/shaper-hangul/script-hangul/misc/misc.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-hangul/script-hangul/misc/misc.txt rename to test/shape/texts/in-house/shaper-hangul/script-hangul/misc/misc.txt diff --git a/test/shaping/texts/in-house/shaper-hebrew/script-hebrew/misc/diacritics.txt b/test/shape/texts/in-house/shaper-hebrew/script-hebrew/misc/diacritics.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-hebrew/script-hebrew/misc/diacritics.txt rename to test/shape/texts/in-house/shaper-hebrew/script-hebrew/misc/diacritics.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-assamese/utrrs/LICENSE b/test/shape/texts/in-house/shaper-indic/script-assamese/utrrs/LICENSE similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-assamese/utrrs/LICENSE rename to test/shape/texts/in-house/shaper-indic/script-assamese/utrrs/LICENSE diff --git a/test/shaping/texts/in-house/shaper-indic/script-assamese/utrrs/README b/test/shape/texts/in-house/shaper-indic/script-assamese/utrrs/README similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-assamese/utrrs/README rename to test/shape/texts/in-house/shaper-indic/script-assamese/utrrs/README diff --git a/test/shaping/texts/in-house/shaper-indic/script-assamese/utrrs/SOURCES b/test/shape/texts/in-house/shaper-indic/script-assamese/utrrs/SOURCES similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-assamese/utrrs/SOURCES rename to test/shape/texts/in-house/shaper-indic/script-assamese/utrrs/SOURCES diff --git a/test/shaping/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt b/test/shape/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shape/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt rename to test/shape/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shape/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shape/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt rename to test/shape/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shape/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt b/test/shape/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt rename to test/shape/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shape/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt rename to test/shape/texts/in-house/shaper-indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt b/test/shape/texts/in-house/shaper-indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt rename to test/shape/texts/in-house/shaper-indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt b/test/shape/texts/in-house/shaper-indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt rename to test/shape/texts/in-house/shaper-indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-assamese/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shape/texts/in-house/shaper-indic/script-assamese/utrrs/gsub/IndicFontFeatureGSUB.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-assamese/utrrs/gsub/IndicFontFeatureGSUB.txt rename to test/shape/texts/in-house/shaper-indic/script-assamese/utrrs/gsub/IndicFontFeatureGSUB.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-bengali/bengali-vowel-letters.txt b/test/shape/texts/in-house/shaper-indic/script-bengali/bengali-vowel-letters.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-bengali/bengali-vowel-letters.txt rename to test/shape/texts/in-house/shaper-indic/script-bengali/bengali-vowel-letters.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-bengali/misc/misc.txt b/test/shape/texts/in-house/shaper-indic/script-bengali/misc/misc.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-bengali/misc/misc.txt rename to test/shape/texts/in-house/shaper-indic/script-bengali/misc/misc.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-bengali/misc/reph.txt b/test/shape/texts/in-house/shaper-indic/script-bengali/misc/reph.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-bengali/misc/reph.txt rename to test/shape/texts/in-house/shaper-indic/script-bengali/misc/reph.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-bengali/utrrs/LICENSE b/test/shape/texts/in-house/shaper-indic/script-bengali/utrrs/LICENSE similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-bengali/utrrs/LICENSE rename to test/shape/texts/in-house/shaper-indic/script-bengali/utrrs/LICENSE diff --git a/test/shaping/texts/in-house/shaper-indic/script-bengali/utrrs/README b/test/shape/texts/in-house/shaper-indic/script-bengali/utrrs/README similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-bengali/utrrs/README rename to test/shape/texts/in-house/shaper-indic/script-bengali/utrrs/README diff --git a/test/shaping/texts/in-house/shaper-indic/script-bengali/utrrs/SOURCES b/test/shape/texts/in-house/shaper-indic/script-bengali/utrrs/SOURCES similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-bengali/utrrs/SOURCES rename to test/shape/texts/in-house/shaper-indic/script-bengali/utrrs/SOURCES diff --git a/test/shaping/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt b/test/shape/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shape/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt rename to test/shape/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shape/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shape/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt rename to test/shape/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shape/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt b/test/shape/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt rename to test/shape/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shape/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt rename to test/shape/texts/in-house/shaper-indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt b/test/shape/texts/in-house/shaper-indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt rename to test/shape/texts/in-house/shaper-indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt b/test/shape/texts/in-house/shaper-indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt rename to test/shape/texts/in-house/shaper-indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-bengali/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shape/texts/in-house/shaper-indic/script-bengali/utrrs/gsub/IndicFontFeatureGSUB.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-bengali/utrrs/gsub/IndicFontFeatureGSUB.txt rename to test/shape/texts/in-house/shaper-indic/script-bengali/utrrs/gsub/IndicFontFeatureGSUB.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-devanagari/devanagari-atomic-consonants.txt b/test/shape/texts/in-house/shaper-indic/script-devanagari/devanagari-atomic-consonants.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-devanagari/devanagari-atomic-consonants.txt rename to test/shape/texts/in-house/shaper-indic/script-devanagari/devanagari-atomic-consonants.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-devanagari/devanagari-vowel-letters.txt b/test/shape/texts/in-house/shaper-indic/script-devanagari/devanagari-vowel-letters.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-devanagari/devanagari-vowel-letters.txt rename to test/shape/texts/in-house/shaper-indic/script-devanagari/devanagari-vowel-letters.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-devanagari/misc/dottedcircle.txt b/test/shape/texts/in-house/shaper-indic/script-devanagari/misc/dottedcircle.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-devanagari/misc/dottedcircle.txt rename to test/shape/texts/in-house/shaper-indic/script-devanagari/misc/dottedcircle.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-devanagari/misc/eyelash.txt b/test/shape/texts/in-house/shaper-indic/script-devanagari/misc/eyelash.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-devanagari/misc/eyelash.txt rename to test/shape/texts/in-house/shaper-indic/script-devanagari/misc/eyelash.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-devanagari/misc/joiners.txt b/test/shape/texts/in-house/shaper-indic/script-devanagari/misc/joiners.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-devanagari/misc/joiners.txt rename to test/shape/texts/in-house/shaper-indic/script-devanagari/misc/joiners.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-devanagari/misc/misc.txt b/test/shape/texts/in-house/shaper-indic/script-devanagari/misc/misc.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-devanagari/misc/misc.txt rename to test/shape/texts/in-house/shaper-indic/script-devanagari/misc/misc.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-devanagari/misc/spec-deviations.txt b/test/shape/texts/in-house/shaper-indic/script-devanagari/misc/spec-deviations.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-devanagari/misc/spec-deviations.txt rename to test/shape/texts/in-house/shaper-indic/script-devanagari/misc/spec-deviations.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-devanagari/misc/tricky-reordering.txt b/test/shape/texts/in-house/shaper-indic/script-devanagari/misc/tricky-reordering.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-devanagari/misc/tricky-reordering.txt rename to test/shape/texts/in-house/shaper-indic/script-devanagari/misc/tricky-reordering.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/LICENSE b/test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/LICENSE similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/LICENSE rename to test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/LICENSE diff --git a/test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/README b/test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/README similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/README rename to test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/README diff --git a/test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/SOURCES b/test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/SOURCES similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/SOURCES rename to test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/SOURCES diff --git a/test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt b/test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt rename to test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt b/test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt rename to test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DevnagariSpecificAddition.txt b/test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DevnagariSpecificAddition.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DevnagariSpecificAddition.txt rename to test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DevnagariSpecificAddition.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt rename to test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-GenericPunctuation.txt b/test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-GenericPunctuation.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-GenericPunctuation.txt rename to test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-GenericPunctuation.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt rename to test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt b/test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt rename to test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt b/test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt rename to test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/gsub/IndicFontFeatureGSUB.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-devanagari/utrrs/gsub/IndicFontFeatureGSUB.txt rename to test/shape/texts/in-house/shaper-indic/script-devanagari/utrrs/gsub/IndicFontFeatureGSUB.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-gujarati/gujarati-vowel-letters.txt b/test/shape/texts/in-house/shaper-indic/script-gujarati/gujarati-vowel-letters.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gujarati/gujarati-vowel-letters.txt rename to test/shape/texts/in-house/shaper-indic/script-gujarati/gujarati-vowel-letters.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-gujarati/utrrs/LICENSE b/test/shape/texts/in-house/shaper-indic/script-gujarati/utrrs/LICENSE similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gujarati/utrrs/LICENSE rename to test/shape/texts/in-house/shaper-indic/script-gujarati/utrrs/LICENSE diff --git a/test/shaping/texts/in-house/shaper-indic/script-gujarati/utrrs/README b/test/shape/texts/in-house/shaper-indic/script-gujarati/utrrs/README similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gujarati/utrrs/README rename to test/shape/texts/in-house/shaper-indic/script-gujarati/utrrs/README diff --git a/test/shaping/texts/in-house/shaper-indic/script-gujarati/utrrs/SOURCES b/test/shape/texts/in-house/shaper-indic/script-gujarati/utrrs/SOURCES similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gujarati/utrrs/SOURCES rename to test/shape/texts/in-house/shaper-indic/script-gujarati/utrrs/SOURCES diff --git a/test/shaping/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt b/test/shape/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shape/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt rename to test/shape/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shape/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shape/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt rename to test/shape/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shape/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt b/test/shape/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt rename to test/shape/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shape/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt rename to test/shape/texts/in-house/shaper-indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt b/test/shape/texts/in-house/shaper-indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt rename to test/shape/texts/in-house/shaper-indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt b/test/shape/texts/in-house/shaper-indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt rename to test/shape/texts/in-house/shaper-indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-gujarati/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shape/texts/in-house/shaper-indic/script-gujarati/utrrs/gsub/IndicFontFeatureGSUB.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gujarati/utrrs/gsub/IndicFontFeatureGSUB.txt rename to test/shape/texts/in-house/shaper-indic/script-gujarati/utrrs/gsub/IndicFontFeatureGSUB.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-gurmukhi/gurmukhi-vowel-letters.txt b/test/shape/texts/in-house/shaper-indic/script-gurmukhi/gurmukhi-vowel-letters.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gurmukhi/gurmukhi-vowel-letters.txt rename to test/shape/texts/in-house/shaper-indic/script-gurmukhi/gurmukhi-vowel-letters.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-gurmukhi/misc/misc.txt b/test/shape/texts/in-house/shaper-indic/script-gurmukhi/misc/misc.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gurmukhi/misc/misc.txt rename to test/shape/texts/in-house/shaper-indic/script-gurmukhi/misc/misc.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-gurmukhi/utrrs/LICENSE b/test/shape/texts/in-house/shaper-indic/script-gurmukhi/utrrs/LICENSE similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gurmukhi/utrrs/LICENSE rename to test/shape/texts/in-house/shaper-indic/script-gurmukhi/utrrs/LICENSE diff --git a/test/shaping/texts/in-house/shaper-indic/script-gurmukhi/utrrs/README b/test/shape/texts/in-house/shaper-indic/script-gurmukhi/utrrs/README similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gurmukhi/utrrs/README rename to test/shape/texts/in-house/shaper-indic/script-gurmukhi/utrrs/README diff --git a/test/shaping/texts/in-house/shaper-indic/script-gurmukhi/utrrs/SOURCES b/test/shape/texts/in-house/shaper-indic/script-gurmukhi/utrrs/SOURCES similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gurmukhi/utrrs/SOURCES rename to test/shape/texts/in-house/shaper-indic/script-gurmukhi/utrrs/SOURCES diff --git a/test/shaping/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shape/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt rename to test/shape/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shape/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shape/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt rename to test/shape/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-GurmukhiSpecific.txt b/test/shape/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-GurmukhiSpecific.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-GurmukhiSpecific.txt rename to test/shape/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-GurmukhiSpecific.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shape/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt b/test/shape/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt rename to test/shape/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shape/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt rename to test/shape/texts/in-house/shaper-indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt b/test/shape/texts/in-house/shaper-indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt rename to test/shape/texts/in-house/shaper-indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt b/test/shape/texts/in-house/shaper-indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt rename to test/shape/texts/in-house/shaper-indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-gurmukhi/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shape/texts/in-house/shaper-indic/script-gurmukhi/utrrs/gsub/IndicFontFeatureGSUB.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-gurmukhi/utrrs/gsub/IndicFontFeatureGSUB.txt rename to test/shape/texts/in-house/shaper-indic/script-gurmukhi/utrrs/gsub/IndicFontFeatureGSUB.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-kannada/kannada-vowel-letters.txt b/test/shape/texts/in-house/shaper-indic/script-kannada/kannada-vowel-letters.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-kannada/kannada-vowel-letters.txt rename to test/shape/texts/in-house/shaper-indic/script-kannada/kannada-vowel-letters.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-kannada/misc/misc.txt b/test/shape/texts/in-house/shaper-indic/script-kannada/misc/misc.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-kannada/misc/misc.txt rename to test/shape/texts/in-house/shaper-indic/script-kannada/misc/misc.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-kannada/misc/right-matras.txt b/test/shape/texts/in-house/shaper-indic/script-kannada/misc/right-matras.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-kannada/misc/right-matras.txt rename to test/shape/texts/in-house/shaper-indic/script-kannada/misc/right-matras.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-kannada/utrrs/LICENSE b/test/shape/texts/in-house/shaper-indic/script-kannada/utrrs/LICENSE similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-kannada/utrrs/LICENSE rename to test/shape/texts/in-house/shaper-indic/script-kannada/utrrs/LICENSE diff --git a/test/shaping/texts/in-house/shaper-indic/script-kannada/utrrs/README b/test/shape/texts/in-house/shaper-indic/script-kannada/utrrs/README similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-kannada/utrrs/README rename to test/shape/texts/in-house/shaper-indic/script-kannada/utrrs/README diff --git a/test/shaping/texts/in-house/shaper-indic/script-kannada/utrrs/SOURCES b/test/shape/texts/in-house/shaper-indic/script-kannada/utrrs/SOURCES similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-kannada/utrrs/SOURCES rename to test/shape/texts/in-house/shaper-indic/script-kannada/utrrs/SOURCES diff --git a/test/shaping/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt b/test/shape/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt rename to test/shape/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt b/test/shape/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shape/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt rename to test/shape/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shape/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shape/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt rename to test/shape/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shape/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt b/test/shape/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt rename to test/shape/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shape/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt rename to test/shape/texts/in-house/shaper-indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-kannada/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt b/test/shape/texts/in-house/shaper-indic/script-kannada/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-kannada/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt rename to test/shape/texts/in-house/shaper-indic/script-kannada/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-kannada/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shape/texts/in-house/shaper-indic/script-kannada/utrrs/gsub/IndicFontFeatureGSUB.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-kannada/utrrs/gsub/IndicFontFeatureGSUB.txt rename to test/shape/texts/in-house/shaper-indic/script-kannada/utrrs/gsub/IndicFontFeatureGSUB.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-malayalam/malayalam-vowel-letters.txt b/test/shape/texts/in-house/shaper-indic/script-malayalam/malayalam-vowel-letters.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-malayalam/malayalam-vowel-letters.txt rename to test/shape/texts/in-house/shaper-indic/script-malayalam/malayalam-vowel-letters.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-malayalam/misc/cibu.txt b/test/shape/texts/in-house/shaper-indic/script-malayalam/misc/cibu.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-malayalam/misc/cibu.txt rename to test/shape/texts/in-house/shaper-indic/script-malayalam/misc/cibu.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-malayalam/misc/dot-reph.txt b/test/shape/texts/in-house/shaper-indic/script-malayalam/misc/dot-reph.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-malayalam/misc/dot-reph.txt rename to test/shape/texts/in-house/shaper-indic/script-malayalam/misc/dot-reph.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-malayalam/misc/misc.txt b/test/shape/texts/in-house/shaper-indic/script-malayalam/misc/misc.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-malayalam/misc/misc.txt rename to test/shape/texts/in-house/shaper-indic/script-malayalam/misc/misc.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-malayalam/utrrs/LICENSE b/test/shape/texts/in-house/shaper-indic/script-malayalam/utrrs/LICENSE similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-malayalam/utrrs/LICENSE rename to test/shape/texts/in-house/shaper-indic/script-malayalam/utrrs/LICENSE diff --git a/test/shaping/texts/in-house/shaper-indic/script-malayalam/utrrs/README b/test/shape/texts/in-house/shaper-indic/script-malayalam/utrrs/README similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-malayalam/utrrs/README rename to test/shape/texts/in-house/shaper-indic/script-malayalam/utrrs/README diff --git a/test/shaping/texts/in-house/shaper-indic/script-malayalam/utrrs/SOURCES b/test/shape/texts/in-house/shaper-indic/script-malayalam/utrrs/SOURCES similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-malayalam/utrrs/SOURCES rename to test/shape/texts/in-house/shaper-indic/script-malayalam/utrrs/SOURCES diff --git a/test/shaping/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt b/test/shape/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shape/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt rename to test/shape/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shape/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shape/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt rename to test/shape/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shape/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt b/test/shape/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt rename to test/shape/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shape/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt rename to test/shape/texts/in-house/shaper-indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-malayalam/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shape/texts/in-house/shaper-indic/script-malayalam/utrrs/gsub/IndicFontFeatureGSUB.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-malayalam/utrrs/gsub/IndicFontFeatureGSUB.txt rename to test/shape/texts/in-house/shaper-indic/script-malayalam/utrrs/gsub/IndicFontFeatureGSUB.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-oriya/misc/bindu.txt b/test/shape/texts/in-house/shaper-indic/script-oriya/misc/bindu.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-oriya/misc/bindu.txt rename to test/shape/texts/in-house/shaper-indic/script-oriya/misc/bindu.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-oriya/misc/misc.txt b/test/shape/texts/in-house/shaper-indic/script-oriya/misc/misc.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-oriya/misc/misc.txt rename to test/shape/texts/in-house/shaper-indic/script-oriya/misc/misc.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-oriya/oriya-vowel-letters.txt b/test/shape/texts/in-house/shaper-indic/script-oriya/oriya-vowel-letters.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-oriya/oriya-vowel-letters.txt rename to test/shape/texts/in-house/shaper-indic/script-oriya/oriya-vowel-letters.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-oriya/utrrs/LICENSE b/test/shape/texts/in-house/shaper-indic/script-oriya/utrrs/LICENSE similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-oriya/utrrs/LICENSE rename to test/shape/texts/in-house/shaper-indic/script-oriya/utrrs/LICENSE diff --git a/test/shaping/texts/in-house/shaper-indic/script-oriya/utrrs/README b/test/shape/texts/in-house/shaper-indic/script-oriya/utrrs/README similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-oriya/utrrs/README rename to test/shape/texts/in-house/shaper-indic/script-oriya/utrrs/README diff --git a/test/shaping/texts/in-house/shaper-indic/script-oriya/utrrs/SOURCES b/test/shape/texts/in-house/shaper-indic/script-oriya/utrrs/SOURCES similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-oriya/utrrs/SOURCES rename to test/shape/texts/in-house/shaper-indic/script-oriya/utrrs/SOURCES diff --git a/test/shaping/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt b/test/shape/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt rename to test/shape/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt b/test/shape/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shape/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt rename to test/shape/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shape/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shape/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt rename to test/shape/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shape/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-OriyaSpecific.txt b/test/shape/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-OriyaSpecific.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-OriyaSpecific.txt rename to test/shape/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-OriyaSpecific.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt b/test/shape/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt rename to test/shape/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shape/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt rename to test/shape/texts/in-house/shaper-indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-oriya/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shape/texts/in-house/shaper-indic/script-oriya/utrrs/gsub/IndicFontFeatureGSUB.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-oriya/utrrs/gsub/IndicFontFeatureGSUB.txt rename to test/shape/texts/in-house/shaper-indic/script-oriya/utrrs/gsub/IndicFontFeatureGSUB.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-sinhala/misc/extensive.txt b/test/shape/texts/in-house/shaper-indic/script-sinhala/misc/extensive.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-sinhala/misc/extensive.txt rename to test/shape/texts/in-house/shaper-indic/script-sinhala/misc/extensive.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-sinhala/misc/misc.txt b/test/shape/texts/in-house/shaper-indic/script-sinhala/misc/misc.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-sinhala/misc/misc.txt rename to test/shape/texts/in-house/shaper-indic/script-sinhala/misc/misc.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-sinhala/misc/reph.txt b/test/shape/texts/in-house/shaper-indic/script-sinhala/misc/reph.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-sinhala/misc/reph.txt rename to test/shape/texts/in-house/shaper-indic/script-sinhala/misc/reph.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-sinhala/misc/split-matras.txt b/test/shape/texts/in-house/shaper-indic/script-sinhala/misc/split-matras.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-sinhala/misc/split-matras.txt rename to test/shape/texts/in-house/shaper-indic/script-sinhala/misc/split-matras.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/LICENSE b/test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/LICENSE similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/LICENSE rename to test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/LICENSE diff --git a/test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/README b/test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/README similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/README rename to test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/README diff --git a/test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/SOURCES b/test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/SOURCES similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/SOURCES rename to test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/SOURCES diff --git a/test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt rename to test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Punctuation.txt b/test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Punctuation.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Punctuation.txt rename to test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Punctuation.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt rename to test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/gpos/IndicFontFeatureGPOS.txt b/test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/gpos/IndicFontFeatureGPOS.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/gpos/IndicFontFeatureGPOS.txt rename to test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/gpos/IndicFontFeatureGPOS.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Conjunct.txt b/test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Conjunct.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Conjunct.txt rename to test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Conjunct.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Rakaaraansaya.txt b/test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Rakaaraansaya.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Rakaaraansaya.txt rename to test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Rakaaraansaya.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Repaya.txt b/test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Repaya.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Repaya.txt rename to test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Repaya.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Special-Cases.txt b/test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Special-Cases.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Special-Cases.txt rename to test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Special-Cases.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-TouchingLetters.txt b/test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-TouchingLetters.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-TouchingLetters.txt rename to test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-TouchingLetters.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Yansaya.txt b/test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Yansaya.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Yansaya.txt rename to test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Yansaya.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB.txt rename to test/shape/texts/in-house/shaper-indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-tamil/misc/misc.txt b/test/shape/texts/in-house/shaper-indic/script-tamil/misc/misc.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-tamil/misc/misc.txt rename to test/shape/texts/in-house/shaper-indic/script-tamil/misc/misc.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/LICENSE b/test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/LICENSE similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/LICENSE rename to test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/LICENSE diff --git a/test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/README b/test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/README similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/README rename to test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/README diff --git a/test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/SOURCES b/test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/SOURCES similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/SOURCES rename to test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/SOURCES diff --git a/test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt rename to test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-CurrencySymbols.txt b/test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-CurrencySymbols.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-CurrencySymbols.txt rename to test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-CurrencySymbols.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt rename to test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Numerics.txt b/test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Numerics.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Numerics.txt rename to test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Numerics.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt b/test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt rename to test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Symbols.txt b/test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Symbols.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Symbols.txt rename to test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Symbols.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-TamilSymbol.txt b/test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-TamilSymbol.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-TamilSymbol.txt rename to test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-TamilSymbol.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt rename to test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt b/test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt rename to test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt b/test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt rename to test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/gsub/IndicFontFeatureGSUB.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-tamil/utrrs/gsub/IndicFontFeatureGSUB.txt rename to test/shape/texts/in-house/shaper-indic/script-tamil/utrrs/gsub/IndicFontFeatureGSUB.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-telugu/misc/misc.txt b/test/shape/texts/in-house/shaper-indic/script-telugu/misc/misc.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-telugu/misc/misc.txt rename to test/shape/texts/in-house/shaper-indic/script-telugu/misc/misc.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-telugu/telugu-vowel-letters.txt b/test/shape/texts/in-house/shaper-indic/script-telugu/telugu-vowel-letters.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-telugu/telugu-vowel-letters.txt rename to test/shape/texts/in-house/shaper-indic/script-telugu/telugu-vowel-letters.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-telugu/utrrs/LICENSE b/test/shape/texts/in-house/shaper-indic/script-telugu/utrrs/LICENSE similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-telugu/utrrs/LICENSE rename to test/shape/texts/in-house/shaper-indic/script-telugu/utrrs/LICENSE diff --git a/test/shaping/texts/in-house/shaper-indic/script-telugu/utrrs/README b/test/shape/texts/in-house/shaper-indic/script-telugu/utrrs/README similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-telugu/utrrs/README rename to test/shape/texts/in-house/shaper-indic/script-telugu/utrrs/README diff --git a/test/shaping/texts/in-house/shaper-indic/script-telugu/utrrs/SOURCES b/test/shape/texts/in-house/shaper-indic/script-telugu/utrrs/SOURCES similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-telugu/utrrs/SOURCES rename to test/shape/texts/in-house/shaper-indic/script-telugu/utrrs/SOURCES diff --git a/test/shaping/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt b/test/shape/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shape/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt rename to test/shape/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shape/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shape/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt rename to test/shape/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shape/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt rename to test/shape/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt b/test/shape/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt rename to test/shape/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shape/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt rename to test/shape/texts/in-house/shaper-indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-telugu/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt b/test/shape/texts/in-house/shaper-indic/script-telugu/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-telugu/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt rename to test/shape/texts/in-house/shaper-indic/script-telugu/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt diff --git a/test/shaping/texts/in-house/shaper-indic/script-telugu/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shape/texts/in-house/shaper-indic/script-telugu/utrrs/gsub/IndicFontFeatureGSUB.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-indic/script-telugu/utrrs/gsub/IndicFontFeatureGSUB.txt rename to test/shape/texts/in-house/shaper-indic/script-telugu/utrrs/gsub/IndicFontFeatureGSUB.txt diff --git a/test/shaping/texts/in-house/shaper-khmer/misc.txt b/test/shape/texts/in-house/shaper-khmer/misc.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-khmer/misc.txt rename to test/shape/texts/in-house/shaper-khmer/misc.txt diff --git a/test/shaping/texts/in-house/shaper-khmer/other-marks-invalid.txt b/test/shape/texts/in-house/shaper-khmer/other-marks-invalid.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-khmer/other-marks-invalid.txt rename to test/shape/texts/in-house/shaper-khmer/other-marks-invalid.txt diff --git a/test/shaping/texts/in-house/shaper-khmer/other-marks.txt b/test/shape/texts/in-house/shaper-khmer/other-marks.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-khmer/other-marks.txt rename to test/shape/texts/in-house/shaper-khmer/other-marks.txt diff --git a/test/shaping/texts/in-house/shaper-myanmar/script-myanmar/misc/misc.txt b/test/shape/texts/in-house/shaper-myanmar/script-myanmar/misc/misc.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-myanmar/script-myanmar/misc/misc.txt rename to test/shape/texts/in-house/shaper-myanmar/script-myanmar/misc/misc.txt diff --git a/test/shaping/texts/in-house/shaper-myanmar/script-myanmar/misc/otspec.txt b/test/shape/texts/in-house/shaper-myanmar/script-myanmar/misc/otspec.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-myanmar/script-myanmar/misc/otspec.txt rename to test/shape/texts/in-house/shaper-myanmar/script-myanmar/misc/otspec.txt diff --git a/test/shaping/texts/in-house/shaper-myanmar/script-myanmar/misc/utn11.txt b/test/shape/texts/in-house/shaper-myanmar/script-myanmar/misc/utn11.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-myanmar/script-myanmar/misc/utn11.txt rename to test/shape/texts/in-house/shaper-myanmar/script-myanmar/misc/utn11.txt diff --git a/test/shaping/texts/in-house/shaper-thai/script-lao/misc/sara-am.txt b/test/shape/texts/in-house/shaper-thai/script-lao/misc/sara-am.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-thai/script-lao/misc/sara-am.txt rename to test/shape/texts/in-house/shaper-thai/script-lao/misc/sara-am.txt diff --git a/test/shaping/texts/in-house/shaper-thai/script-thai/misc/misc.txt b/test/shape/texts/in-house/shaper-thai/script-thai/misc/misc.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-thai/script-thai/misc/misc.txt rename to test/shape/texts/in-house/shaper-thai/script-thai/misc/misc.txt diff --git a/test/shaping/texts/in-house/shaper-thai/script-thai/misc/phinthu.txt b/test/shape/texts/in-house/shaper-thai/script-thai/misc/phinthu.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-thai/script-thai/misc/phinthu.txt rename to test/shape/texts/in-house/shaper-thai/script-thai/misc/phinthu.txt diff --git a/test/shaping/texts/in-house/shaper-thai/script-thai/misc/pua-shaping.txt b/test/shape/texts/in-house/shaper-thai/script-thai/misc/pua-shaping.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-thai/script-thai/misc/pua-shaping.txt rename to test/shape/texts/in-house/shaper-thai/script-thai/misc/pua-shaping.txt diff --git a/test/shaping/texts/in-house/shaper-thai/script-thai/misc/sara-am.txt b/test/shape/texts/in-house/shaper-thai/script-thai/misc/sara-am.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-thai/script-thai/misc/sara-am.txt rename to test/shape/texts/in-house/shaper-thai/script-thai/misc/sara-am.txt diff --git a/test/shaping/texts/in-house/shaper-tibetan/script-tibetan/misc/contractions.txt b/test/shape/texts/in-house/shaper-tibetan/script-tibetan/misc/contractions.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-tibetan/script-tibetan/misc/contractions.txt rename to test/shape/texts/in-house/shaper-tibetan/script-tibetan/misc/contractions.txt diff --git a/test/shaping/texts/in-house/shaper-tibetan/script-tibetan/misc/misc.txt b/test/shape/texts/in-house/shaper-tibetan/script-tibetan/misc/misc.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-tibetan/script-tibetan/misc/misc.txt rename to test/shape/texts/in-house/shaper-tibetan/script-tibetan/misc/misc.txt diff --git a/test/shaping/texts/in-house/shaper-use/script-batak/misc.txt b/test/shape/texts/in-house/shaper-use/script-batak/misc.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-use/script-batak/misc.txt rename to test/shape/texts/in-house/shaper-use/script-batak/misc.txt diff --git a/test/shaping/texts/in-house/shaper-use/script-buginese/misc.txt b/test/shape/texts/in-house/shaper-use/script-buginese/misc.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-use/script-buginese/misc.txt rename to test/shape/texts/in-house/shaper-use/script-buginese/misc.txt diff --git a/test/shaping/texts/in-house/shaper-use/script-cham/misc.txt b/test/shape/texts/in-house/shaper-use/script-cham/misc.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-use/script-cham/misc.txt rename to test/shape/texts/in-house/shaper-use/script-cham/misc.txt diff --git a/test/shaping/texts/in-house/shaper-use/script-javanese/misc.txt b/test/shape/texts/in-house/shaper-use/script-javanese/misc.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-use/script-javanese/misc.txt rename to test/shape/texts/in-house/shaper-use/script-javanese/misc.txt diff --git a/test/shaping/texts/in-house/shaper-use/script-kaithi/misc.txt b/test/shape/texts/in-house/shaper-use/script-kaithi/misc.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-use/script-kaithi/misc.txt rename to test/shape/texts/in-house/shaper-use/script-kaithi/misc.txt diff --git a/test/shaping/texts/in-house/shaper-use/script-kharoshti/misc.txt b/test/shape/texts/in-house/shaper-use/script-kharoshti/misc.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-use/script-kharoshti/misc.txt rename to test/shape/texts/in-house/shaper-use/script-kharoshti/misc.txt diff --git a/test/shaping/texts/in-house/shaper-use/script-tai-tham/misc.txt b/test/shape/texts/in-house/shaper-use/script-tai-tham/misc.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-use/script-tai-tham/misc.txt rename to test/shape/texts/in-house/shaper-use/script-tai-tham/misc.txt diff --git a/test/shaping/texts/in-house/shaper-use/script-tai-tham/torture.txt b/test/shape/texts/in-house/shaper-use/script-tai-tham/torture.txt similarity index 100% rename from test/shaping/texts/in-house/shaper-use/script-tai-tham/torture.txt rename to test/shape/texts/in-house/shaper-use/script-tai-tham/torture.txt From 24a9d8c78db50e8082cb6ba258707f3d0e8333e7 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 11 Aug 2021 18:47:06 -0600 Subject: [PATCH 11/26] [util] Use post_parse in font_options_t --- util/font-options.hh | 15 +++++---------- util/hb-ot-shape-closure.cc | 2 +- util/hb-shape.cc | 2 +- util/helper-cairo.hh | 2 +- util/shape-consumer.hh | 2 +- util/view-cairo.hh | 2 +- 6 files changed, 10 insertions(+), 15 deletions(-) diff --git a/util/font-options.hh b/util/font-options.hh index fd63a3ceb..84fe53634 100644 --- a/util/font-options.hh +++ b/util/font-options.hh @@ -51,7 +51,7 @@ struct font_options_t : face_options_t void add_options (option_parser_t *parser); - hb_font_t *get_font () const; + void post_parse (GError **error); hb_variation_t *variations = nullptr; unsigned int num_variations = 0; @@ -64,8 +64,7 @@ struct font_options_t : face_options_t char *font_funcs = nullptr; int ft_load_flags = 2; - private: - mutable hb_font_t *font = nullptr; + hb_font_t *font = nullptr; }; @@ -80,12 +79,10 @@ static struct supported_font_funcs_t { {"ot", hb_ot_font_set_funcs}, }; -hb_font_t * -font_options_t::get_font () const -{ - if (font) - return font; +void +font_options_t::post_parse (GError **error) +{ font = hb_font_create (face); if (font_size_x == FONT_SIZE_UPEM) @@ -137,8 +134,6 @@ font_options_t::get_font () const #ifdef HAVE_FREETYPE hb_ft_font_set_load_flags (font, ft_load_flags); #endif - - return font; } diff --git a/util/hb-ot-shape-closure.cc b/util/hb-ot-shape-closure.cc index 90f29d989..874ddd728 100644 --- a/util/hb-ot-shape-closure.cc +++ b/util/hb-ot-shape-closure.cc @@ -57,7 +57,7 @@ struct shape_closure_consumer_t void init (const font_options_t *font_opts) { glyphs = hb_set_create (); - font = hb_font_reference (font_opts->get_font ()); + font = hb_font_reference (font_opts->font); failed = false; buffer = hb_buffer_create (); } diff --git a/util/hb-shape.cc b/util/hb-shape.cc index 62ed23346..06bb0adac 100644 --- a/util/hb-shape.cc +++ b/util/hb-shape.cc @@ -49,7 +49,7 @@ struct output_buffer_t : output_options_t get_file_handle (); gs = g_string_new (nullptr); line_no = 0; - font = hb_font_reference (font_opts->get_font ()); + font = hb_font_reference (font_opts->font); if (!output_format) serialize_format = HB_BUFFER_SERIALIZE_FORMAT_TEXT; diff --git a/util/helper-cairo.hh b/util/helper-cairo.hh index 19651b23b..948747da5 100644 --- a/util/helper-cairo.hh +++ b/util/helper-cairo.hh @@ -79,7 +79,7 @@ void free_ft_library () static inline cairo_scaled_font_t * helper_cairo_create_scaled_font (const font_options_t *font_opts) { - hb_font_t *font = hb_font_reference (font_opts->get_font ()); + hb_font_t *font = hb_font_reference (font_opts->font); cairo_font_face_t *cairo_face; /* We cannot use the FT_Face from hb_font_t, as doing so will confuse hb_font_t because diff --git a/util/shape-consumer.hh b/util/shape-consumer.hh index 760756432..cbbac2202 100644 --- a/util/shape-consumer.hh +++ b/util/shape-consumer.hh @@ -42,7 +42,7 @@ struct shape_consumer_t : shape_options_t void init (const font_options_t *font_opts) { - font = hb_font_reference (font_opts->get_font ()); + font = hb_font_reference (font_opts->font); failed = false; buffer = hb_buffer_create (); diff --git a/util/view-cairo.hh b/util/view-cairo.hh index bfe4e2a0c..6e85b927f 100644 --- a/util/view-cairo.hh +++ b/util/view-cairo.hh @@ -100,7 +100,7 @@ view_cairo_t::render (const font_options_t *font_opts) int x_sign = font_opts->font_size_x < 0 ? -1 : +1; int y_sign = font_opts->font_size_y < 0 ? -1 : +1; - hb_font_t *font = font_opts->get_font(); + hb_font_t *font = font_opts->font; if (!have_font_extents) { From fd0778aa2a8525d9b435304710c29598df6905cc Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 11 Aug 2021 18:54:46 -0600 Subject: [PATCH 12/26] [util] Use post_parse in output_options_t --- util/hb-shape.cc | 1 - util/helper-cairo.hh | 4 +-- util/output-options.hh | 57 ++++++++++++++++++------------------------ 3 files changed, 27 insertions(+), 35 deletions(-) diff --git a/util/hb-shape.cc b/util/hb-shape.cc index 06bb0adac..6b274ecc7 100644 --- a/util/hb-shape.cc +++ b/util/hb-shape.cc @@ -46,7 +46,6 @@ struct output_buffer_t : output_options_t void init (hb_buffer_t *buffer, const font_options_t *font_opts) { - get_file_handle (); gs = g_string_new (nullptr); line_no = 0; font = hb_font_reference (font_opts->font); diff --git a/util/helper-cairo.hh b/util/helper-cairo.hh index 948747da5..605f17e28 100644 --- a/util/helper-cairo.hh +++ b/util/helper-cairo.hh @@ -447,7 +447,7 @@ helper_cairo_create_context (double w, double h, const char *extension = out_opts->output_format; if (!extension) { #if HAVE_ISATTY - if (isatty (fileno (out_opts->get_file_handle ()))) + if (isatty (fileno (out_opts->fp))) { #ifdef CAIRO_HAS_PNG_FUNCTIONS const char *name; @@ -526,7 +526,7 @@ helper_cairo_create_context (double w, double h, content = CAIRO_CONTENT_COLOR_ALPHA; cairo_surface_t *surface; - FILE *f = out_opts->get_file_handle (); + FILE *f = out_opts->fp; if (constructor) surface = constructor (stdio_write_func, f, w, h); else if (constructor2) diff --git a/util/output-options.hh b/util/output-options.hh index f3fda61e3..c86096098 100644 --- a/util/output-options.hh +++ b/util/output-options.hh @@ -42,56 +42,49 @@ struct output_options_t void add_options (option_parser_t *parser, const char **supported_formats = nullptr); - void post_parse (GError **error G_GNUC_UNUSED) - { - if (output_format) - explicit_output_format = true; - - if (output_file && !output_format) { - output_format = strrchr (output_file, '.'); - if (output_format) - { - output_format++; /* skip the dot */ - output_format = g_strdup (output_format); - } - } - - if (output_file && 0 == strcmp (output_file, "-")) - output_file = nullptr; /* STDOUT */ - } - - FILE *get_file_handle (); + void post_parse (GError **error G_GNUC_UNUSED); char *output_file = nullptr; char *output_format = nullptr; - bool explicit_output_format = false; - mutable FILE *fp = nullptr; + bool explicit_output_format = false; + FILE *fp = nullptr; }; - -FILE * -output_options_t::get_file_handle () +void +output_options_t::post_parse (GError **error) { - if (fp) - return fp; + if (output_format) + explicit_output_format = true; + + if (output_file && !output_format) + { + output_format = strrchr (output_file, '.'); + if (output_format) + { + output_format++; /* skip the dot */ + output_format = g_strdup (output_format); + } + } + + if (output_file && 0 == strcmp (output_file, "-")) + output_file = nullptr; /* STDOUT */ if (output_file) fp = fopen (output_file, "wb"); - else { + else + { #if defined(_WIN32) || defined(__CYGWIN__) setmode (fileno (stdout), O_BINARY); #endif fp = stdout; } if (!fp) - fail (false, "Cannot open output file `%s': %s", - g_filename_display_name (output_file), strerror (errno)); - - return fp; + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + "Cannot open output file `%s': %s", + g_filename_display_name (output_file), strerror (errno)); } - void output_options_t::add_options (option_parser_t *parser, const char **supported_formats) From 23298bc846d34eb6a5465511df6219e3d94c3103 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 11 Aug 2021 18:58:25 -0600 Subject: [PATCH 13/26] [util] Remove unnecessary check --- util/text-options.hh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/util/text-options.hh b/util/text-options.hh index c9b04cb9a..4fce69ce9 100644 --- a/util/text-options.hh +++ b/util/text-options.hh @@ -139,8 +139,7 @@ text_options_t::get_line (unsigned int *len) if (!fp) { - if (!text_file) - fail (true, "At least one of text or text-file must be set"); + assert (text_file); if (0 != strcmp (text_file, "-")) fp = fopen (text_file, "r"); From 6ba7ddafed4cf80cdb4ff38700d96629d10eed64 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 11 Aug 2021 19:06:57 -0600 Subject: [PATCH 14/26] [util] Move text-file opening to post_parse --- util/text-options.hh | 39 +++++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 18 deletions(-) diff --git a/util/text-options.hh b/util/text-options.hh index 4fce69ce9..8f76612b0 100644 --- a/util/text-options.hh +++ b/util/text-options.hh @@ -1,6 +1,9 @@ struct text_options_t { + text_options_t () + : gs (g_string_new (nullptr)) + {} ~text_options_t () { g_free (text_before); @@ -17,13 +20,29 @@ struct text_options_t void post_parse (GError **error G_GNUC_UNUSED) { - if (!this->text && !this->text_file) - this->text_file = g_strdup ("-"); + if (!text && !text_file) + text_file = g_strdup ("-"); if (text && text_file) + { g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, "Only one of text and text-file can be set"); + return; + } + + if (text_file) + { + if (0 != strcmp (text_file, "-")) + fp = fopen (text_file, "r"); + else + fp = stdin; + + if (!fp) + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + "Failed opening text file `%s': %s", + text_file, strerror (errno)); + } } const char *get_line (unsigned int *len); @@ -137,22 +156,6 @@ text_options_t::get_line (unsigned int *len) return text; } - if (!fp) - { - assert (text_file); - - if (0 != strcmp (text_file, "-")) - fp = fopen (text_file, "r"); - else - fp = stdin; - - if (!fp) - fail (false, "Failed opening text file `%s': %s", - text_file, strerror (errno)); - - gs = g_string_new (nullptr); - } - g_string_set_size (gs, 0); char buf[BUFSIZ]; while (fgets (buf, sizeof (buf), fp)) From 97a9e4e41e9712fa52802d1043b7cecdde2ff2a2 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 11 Aug 2021 19:28:16 -0600 Subject: [PATCH 15/26] [util] Separate shape_text_options_t from text_options_t --- util/hb-ot-shape-closure.cc | 15 +++++--- util/hb-shape.cc | 2 +- util/hb-subset.cc | 14 ++++--- util/hb-view.cc | 2 +- util/main-font-text.hh | 6 +-- util/shape-consumer.hh | 16 +++++--- util/text-options.hh | 73 +++++++++++++++++++++++++++++++++---- 7 files changed, 98 insertions(+), 30 deletions(-) diff --git a/util/hb-ot-shape-closure.cc b/util/hb-ot-shape-closure.cc index 874ddd728..1cfdf34cc 100644 --- a/util/hb-ot-shape-closure.cc +++ b/util/hb-ot-shape-closure.cc @@ -61,16 +61,19 @@ struct shape_closure_consumer_t failed = false; buffer = hb_buffer_create (); } - void consume_line (const char *text, - unsigned int text_len, - const char *text_before, - const char *text_after) + template + bool consume_line (text_options_t &text_opts) { + unsigned int text_len; + const char *text; + if (!(text = text_opts.get_line (&text_len))) + return false; + hb_set_clear (glyphs); shaper.shape_closure (text, text_len, font, buffer, glyphs); if (hb_set_is_empty (glyphs)) - return; + return true; /* Print it out! */ bool first = true; @@ -88,6 +91,8 @@ struct shape_closure_consumer_t } else printf ("%u", i); } + + return true; } void finish (const font_options_t *font_opts) { diff --git a/util/hb-shape.cc b/util/hb-shape.cc index 6b274ecc7..35cad0324 100644 --- a/util/hb-shape.cc +++ b/util/hb-shape.cc @@ -161,6 +161,6 @@ struct output_buffer_t : output_options_t int main (int argc, char **argv) { - using main_t = main_font_text_t, font_options_t, text_options_t>; + using main_t = main_font_text_t, font_options_t, shape_text_options_t>; return batch_main (argc, argv); } diff --git a/util/hb-subset.cc b/util/hb-subset.cc index 6664ed48c..1bbeb7f6f 100644 --- a/util/hb-subset.cc +++ b/util/hb-subset.cc @@ -52,17 +52,19 @@ struct subset_consumer_t : subset_options_t, output_options_t face = hb_face_reference (face_opts->face); } - void consume_line (const char *text, - unsigned int text_len, - const char *text_before, - const char *text_after) + bool consume_line (text_options_t &text_opts) { + unsigned int text_len; + const char *text; + if (!(text = text_opts.get_line (&text_len))) + return false; + // TODO does this only get called with at least 1 codepoint? hb_set_t *codepoints = hb_subset_input_unicode_set (input); if (0 == strcmp (text, "*")) { hb_face_collect_unicodes (face, codepoints); - return; + return true; } gchar *c = (gchar *)text; @@ -71,6 +73,8 @@ struct subset_consumer_t : subset_options_t, output_options_t hb_codepoint_t hb_cp = cp; hb_set_add (codepoints, hb_cp); } while ((c = g_utf8_find_next_char(c, text + text_len))); + + return true; } hb_bool_t diff --git a/util/hb-view.cc b/util/hb-view.cc index 7ecaa3709..2664c7c81 100644 --- a/util/hb-view.cc +++ b/util/hb-view.cc @@ -37,5 +37,5 @@ const unsigned SUBPIXEL_BITS = 6; int main (int argc, char **argv) { - return main_font_text_t, font_options_t, text_options_t> () (argc, argv); + return main_font_text_t, font_options_t, shape_text_options_t> () (argc, argv); } diff --git a/util/main-font-text.hh b/util/main-font-text.hh index a2a439170..dabbd3285 100644 --- a/util/main-font-text.hh +++ b/util/main-font-text.hh @@ -41,10 +41,8 @@ struct main_font_text_t : option_parser_t, font_options_t, text_options_t, consu this->init (this); - unsigned int line_len; - const char *line; - while ((line = this->get_line (&line_len))) - this->consume_line (line, line_len, this->text_before, this->text_after); + while (this->consume_line (*this)) + ; this->finish (this); diff --git a/util/shape-consumer.hh b/util/shape-consumer.hh index cbbac2202..333e5e876 100644 --- a/util/shape-consumer.hh +++ b/util/shape-consumer.hh @@ -29,6 +29,7 @@ #include "font-options.hh" #include "shape-options.hh" +#include "text-options.hh" template @@ -48,18 +49,20 @@ struct shape_consumer_t : shape_options_t output.init (buffer, font_opts); } - void consume_line (const char *text, - unsigned int text_len, - const char *text_before, - const char *text_after) + bool consume_line (shape_text_options_t &text_opts) { + unsigned int text_len; + const char *text; + if (!(text = text_opts.get_line (&text_len))) + return false; + output.new_line (); for (unsigned int n = num_iterations; n; n--) { const char *error = nullptr; - populate_buffer (buffer, text, text_len, text_before, text_after); + populate_buffer (buffer, text, text_len, text_opts.text_before, text_opts.text_after); if (n == 1) output.consume_text (buffer, text, text_len, utf8_clusters); if (!shape (font, buffer, &error)) @@ -69,11 +72,12 @@ struct shape_consumer_t : shape_options_t if (hb_buffer_get_content_type (buffer) == HB_BUFFER_CONTENT_TYPE_GLYPHS) break; else - return; + return true; } } output.consume_glyphs (buffer, text, text_len, utf8_clusters); + return true; } void finish (const font_options_t *font_opts) { diff --git a/util/text-options.hh b/util/text-options.hh index 8f76612b0..9ed47fd7e 100644 --- a/util/text-options.hh +++ b/util/text-options.hh @@ -1,3 +1,33 @@ +/* + * Copyright © 2011 Google, Inc. + * + * This is part of HarfBuzz, a text shaping library. + * + * Permission is hereby granted, without written agreement and without + * license or royalty fees, to use, copy, modify, and distribute this + * software and its documentation for any purpose, provided that the + * above copyright notice and the following two paragraphs appear in + * all copies of this software. + * + * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR + * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES + * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN + * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH + * DAMAGE. + * + * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, + * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS + * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO + * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. + * + * Google Author(s): Behdad Esfahbod + */ + +#ifndef TEXT_OPTIONS_HH +#define TEXT_OPTIONS_HH + +#include "options.hh" struct text_options_t { @@ -6,8 +36,6 @@ struct text_options_t {} ~text_options_t () { - g_free (text_before); - g_free (text_after); g_free (text); g_free (text_file); if (gs) @@ -47,9 +75,6 @@ struct text_options_t const char *get_line (unsigned int *len); - char *text_before = nullptr; - char *text_after = nullptr; - int text_len = -1; char *text = nullptr; char *text_file = nullptr; @@ -59,6 +84,20 @@ struct text_options_t GString *gs = nullptr; }; +struct shape_text_options_t : text_options_t +{ + ~shape_text_options_t () + { + g_free (text_before); + g_free (text_after); + } + + void add_options (option_parser_t *parser); + + char *text_before = nullptr; + char *text_after = nullptr; +}; + static gboolean parse_text (const char *name G_GNUC_UNUSED, @@ -182,9 +221,7 @@ text_options_t::add_options (option_parser_t *parser) { {"text", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_text, "Set input text", "string"}, {"text-file", 0, 0, G_OPTION_ARG_STRING, &this->text_file, "Set input text file-name", "filename"}, - {"unicodes", 'u', 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_unicodes, "Set input Unicode codepoints\n\n If no text is provided, standard input is used for input.\n", "list of hex numbers"}, - {"text-before", 0, 0, G_OPTION_ARG_STRING, &this->text_before, "Set text context before each line", "string"}, - {"text-after", 0, 0, G_OPTION_ARG_STRING, &this->text_after, "Set text context after each line", "string"}, + {"unicodes", 'u', 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_unicodes, "Set input Unicode codepoints\n\n If no text is provided, standard input is used for input.", "list of hex numbers"}, {nullptr} }; parser->add_group (entries, @@ -193,3 +230,23 @@ text_options_t::add_options (option_parser_t *parser) "Options for the input text", this); } + +void +shape_text_options_t::add_options (option_parser_t *parser) +{ + text_options_t::add_options (parser); + + GOptionEntry entries[] = + { + {"text-before", 0, 0, G_OPTION_ARG_STRING, &this->text_before, "Set text context before each line", "string"}, + {"text-after", 0, 0, G_OPTION_ARG_STRING, &this->text_after, "Set text context after each line", "string"}, + {nullptr} + }; + parser->add_group (entries, + "text-context", + "Textual context options:", + "Options for the input context text", + this); +} + +#endif From ba418cfc5218ac093b759e2c03a43234a786f6eb Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 11 Aug 2021 19:29:07 -0600 Subject: [PATCH 16/26] [util] Use automatic casts --- util/view-cairo.hh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/util/view-cairo.hh b/util/view-cairo.hh index 6e85b927f..430f6f9fd 100644 --- a/util/view-cairo.hh +++ b/util/view-cairo.hh @@ -141,8 +141,8 @@ view_cairo_t::render (const font_options_t *font_opts) /* Create surface. */ cairo_t *cr = helper_cairo_create_context (w + margin.l + margin.r, h + margin.t + margin.b, - static_cast (this), - static_cast (this), + this, + this, content); cairo_set_scaled_font (cr, scaled_font); From 58bfe40794352afc162c651ff84cbacf5e751960 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 11 Aug 2021 19:48:28 -0600 Subject: [PATCH 17/26] [util] Move hb-subset away from main-font-text --- test/subset/run-tests.py | 1 - util/face-options.hh | 6 ++ util/hb-shape.cc | 8 +- util/hb-subset.cc | 160 +++++++++++++++++++++++---------------- util/helper-cairo.hh | 4 +- util/output-options.hh | 15 ++-- util/shape-options.hh | 9 ++- util/text-options.hh | 18 ++--- 8 files changed, 129 insertions(+), 92 deletions(-) diff --git a/test/subset/run-tests.py b/test/subset/run-tests.py index 503c89514..79830c452 100755 --- a/test/subset/run-tests.py +++ b/test/subset/run-tests.py @@ -56,7 +56,6 @@ def run_test (test, should_check_ots): "--drop-tables+=DSIG", "--drop-tables-=sbix"] cli_args.extend (test.get_profile_flags ()) - print (' '.join (cli_args)) ret = subset_cmd (cli_args) if ret != "success": diff --git a/util/face-options.hh b/util/face-options.hh index 3ac366404..386b9339c 100644 --- a/util/face-options.hh +++ b/util/face-options.hh @@ -69,8 +69,11 @@ void face_options_t::post_parse (GError **error) { if (!font_file) + { g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, "No font file set"); + return; + } assert (font_file); @@ -95,8 +98,11 @@ face_options_t::post_parse (GError **error) cache.font_path = g_strdup (font_path); if (!cache.blob) + { g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, "%s: Failed reading file", font_path); + return; + } hb_face_destroy (cache.face); cache.face = nullptr; diff --git a/util/hb-shape.cc b/util/hb-shape.cc index 35cad0324..0e5633d3b 100644 --- a/util/hb-shape.cc +++ b/util/hb-shape.cc @@ -95,13 +95,13 @@ struct output_buffer_t : output_options_t { g_string_set_size (gs, 0); format.serialize_buffer_of_text (buffer, line_no, text, text_len, font, gs); - fprintf (fp, "%s", gs->str); + fprintf (out_fp, "%s", gs->str); } void error (const char *message) { g_string_set_size (gs, 0); format.serialize_message (line_no, "error", message, gs); - fprintf (fp, "%s", gs->str); + fprintf (out_fp, "%s", gs->str); } void consume_glyphs (hb_buffer_t *buffer, const char *text, @@ -111,7 +111,7 @@ struct output_buffer_t : output_options_t g_string_set_size (gs, 0); format.serialize_buffer_of_glyphs (buffer, line_no, text, text_len, font, serialize_format, serialize_flags, gs); - fprintf (fp, "%s", gs->str); + fprintf (out_fp, "%s", gs->str); } void finish (hb_buffer_t *buffer, const font_options_t *font_opts) { @@ -143,7 +143,7 @@ struct output_buffer_t : output_options_t g_string_append_printf (gs, "trace: %s buffer: ", message); format.serialize (buffer, font, serialize_format, serialize_flags, gs); g_string_append_c (gs, '\n'); - fprintf (fp, "%s", gs->str); + fprintf (out_fp, "%s", gs->str); } diff --git a/util/hb-subset.cc b/util/hb-subset.cc index 1bbeb7f6f..903321a21 100644 --- a/util/hb-subset.cc +++ b/util/hb-subset.cc @@ -38,73 +38,37 @@ * Command line interface to the harfbuzz font subsetter. */ - -struct subset_consumer_t : subset_options_t, output_options_t +struct subset_main_t : option_parser_t, face_options_t, text_options_t, subset_options_t, output_options_t { - void add_options (option_parser_t *parser) + int operator () (int argc, char **argv) { - subset_options_t::add_options (parser); - output_options_t::add_options (parser); - } + add_options (); + parse (&argc, &argv); - void init (const face_options_t *face_opts) - { - face = hb_face_reference (face_opts->face); - } - - bool consume_line (text_options_t &text_opts) - { + hb_set_t *codepoints = hb_subset_input_unicode_set (input); unsigned int text_len; const char *text; - if (!(text = text_opts.get_line (&text_len))) - return false; - - // TODO does this only get called with at least 1 codepoint? - hb_set_t *codepoints = hb_subset_input_unicode_set (input); - if (0 == strcmp (text, "*")) + while ((text = get_line (&text_len))) { - hb_face_collect_unicodes (face, codepoints); - return true; + if (0 == strcmp (text, "*")) + { + hb_face_collect_unicodes (face, codepoints); + continue; + } + + if (*text) + { + gchar *c = (gchar *)text; + do + { + gunichar cp = g_utf8_get_char(c); + hb_codepoint_t hb_cp = cp; + hb_set_add (codepoints, hb_cp); + } + while ((c = g_utf8_find_next_char(c, text + text_len))); + } } - gchar *c = (gchar *)text; - do { - gunichar cp = g_utf8_get_char(c); - hb_codepoint_t hb_cp = cp; - hb_set_add (codepoints, hb_cp); - } while ((c = g_utf8_find_next_char(c, text + text_len))); - - return true; - } - - hb_bool_t - write_file (const char *output_file, hb_blob_t *blob) { - unsigned int size; - const char* data = hb_blob_get_data (blob, &size); - - if (!output_file) - fail (true, "No output file was specified"); - - FILE *fp = fopen(output_file, "wb"); - if (!fp) - fail (false, "Cannot open output file `%s': %s", - g_filename_display_name (output_file), strerror (errno)); - - while (size) { - size_t ret = fwrite (data, 1, size, fp); - size -= ret; - data += ret; - if (size && ferror (fp)) - fail (false, "Failed to write output: %s", strerror (errno)); - } - - fclose (fp); - - return true; - } - - void finish (const face_options_t *face_opts) - { hb_face_t *new_face = nullptr; for (unsigned i = 0; i < num_iterations; i++) { @@ -112,8 +76,8 @@ struct subset_consumer_t : subset_options_t, output_options_t new_face = hb_subset_or_fail (face, input); } - failed = !new_face; - if (!failed) + bool success = new_face; + if (success) { hb_blob_t *result = hb_face_reference_blob (new_face); write_file (output_file, result); @@ -121,18 +85,80 @@ struct subset_consumer_t : subset_options_t, output_options_t } hb_face_destroy (new_face); - hb_face_destroy (face); + + return success ? 0 : 1; } - public: - bool failed = false; + bool + write_file (const char *output_file, hb_blob_t *blob) + { + if (!output_file) + fail (true, "No output file was specified"); - hb_face_t *face = nullptr; + unsigned int size; + const char* data = hb_blob_get_data (blob, &size); + + while (size) + { + size_t ret = fwrite (data, 1, size, out_fp); + size -= ret; + data += ret; + if (size && ferror (out_fp)) + fail (false, "Failed to write output: %s", strerror (errno)); + } + + return true; + } + + protected: + + void add_options () + { + face_options_t::add_options (this); + text_options_t::add_options (this); + subset_options_t::add_options (this); + output_options_t::add_options (this); + + GOptionEntry entries[] = + { + {G_OPTION_REMAINING, 0, G_OPTION_FLAG_IN_MAIN, + G_OPTION_ARG_CALLBACK, (gpointer) &collect_rest, nullptr, "[FONT-FILE] [TEXT]"}, + {nullptr} + }; + add_main_group (entries, this); + option_parser_t::add_options (); + } + + private: + + static gboolean + collect_rest (const char *name G_GNUC_UNUSED, + const char *arg, + gpointer data, + GError **error) + { + subset_main_t *thiz = (subset_main_t *) data; + + if (!thiz->font_file) + { + thiz->font_file = g_strdup (arg); + return true; + } + + if (!thiz->text && !thiz->text_file) + { + thiz->text = g_strdup (arg); + return true; + } + + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + "Too many arguments on the command line"); + return false; + } }; int main (int argc, char **argv) { - using main_t = main_font_text_t; - return batch_main (argc, argv); + return batch_main (argc, argv); } diff --git a/util/helper-cairo.hh b/util/helper-cairo.hh index 605f17e28..3c4857c79 100644 --- a/util/helper-cairo.hh +++ b/util/helper-cairo.hh @@ -447,7 +447,7 @@ helper_cairo_create_context (double w, double h, const char *extension = out_opts->output_format; if (!extension) { #if HAVE_ISATTY - if (isatty (fileno (out_opts->fp))) + if (isatty (fileno (out_opts->out_fp))) { #ifdef CAIRO_HAS_PNG_FUNCTIONS const char *name; @@ -526,7 +526,7 @@ helper_cairo_create_context (double w, double h, content = CAIRO_CONTENT_COLOR_ALPHA; cairo_surface_t *surface; - FILE *f = out_opts->fp; + FILE *f = out_opts->out_fp; if (constructor) surface = constructor (stdio_write_func, f, w, h); else if (constructor2) diff --git a/util/output-options.hh b/util/output-options.hh index c86096098..9d7b3c723 100644 --- a/util/output-options.hh +++ b/util/output-options.hh @@ -35,8 +35,8 @@ struct output_options_t { g_free (output_file); g_free (output_format); - if (fp && fp != stdout) - fclose (fp); + if (out_fp && out_fp != stdout) + fclose (out_fp); } void add_options (option_parser_t *parser, @@ -48,7 +48,7 @@ struct output_options_t char *output_format = nullptr; bool explicit_output_format = false; - FILE *fp = nullptr; + FILE *out_fp = nullptr; }; void @@ -71,18 +71,21 @@ output_options_t::post_parse (GError **error) output_file = nullptr; /* STDOUT */ if (output_file) - fp = fopen (output_file, "wb"); + out_fp = fopen (output_file, "wb"); else { #if defined(_WIN32) || defined(__CYGWIN__) setmode (fileno (stdout), O_BINARY); #endif - fp = stdout; + out_fp = stdout; } - if (!fp) + if (!out_fp) + { g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, "Cannot open output file `%s': %s", g_filename_display_name (output_file), strerror (errno)); + return; + } } void diff --git a/util/shape-options.hh b/util/shape-options.hh index f19578bbf..c3dedb521 100644 --- a/util/shape-options.hh +++ b/util/shape-options.hh @@ -322,15 +322,18 @@ parse_shapers (const char *name G_GNUC_UNUSED, shape_options_t *shape_opts = (shape_options_t *) data; char **shapers = g_strsplit (arg, ",", 0); - for (char **shaper = shapers; *shaper; shaper++) { + for (char **shaper = shapers; *shaper; shaper++) + { bool found = false; for (const char **hb_shaper = hb_shape_list_shapers (); *hb_shaper; hb_shaper++) { - if (strcmp (*shaper, *hb_shaper) == 0) { + if (strcmp (*shaper, *hb_shaper) == 0) + { found = true; break; } } - if (!found) { + if (!found) + { g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, "Unknown or unsupported shaper: %s", *shaper); g_strfreev (shapers); diff --git a/util/text-options.hh b/util/text-options.hh index 9ed47fd7e..121045421 100644 --- a/util/text-options.hh +++ b/util/text-options.hh @@ -40,8 +40,8 @@ struct text_options_t g_free (text_file); if (gs) g_string_free (gs, true); - if (fp && fp != stdin) - fclose (fp); + if (in_fp && in_fp != stdin) + fclose (in_fp); } void add_options (option_parser_t *parser); @@ -62,11 +62,11 @@ struct text_options_t if (text_file) { if (0 != strcmp (text_file, "-")) - fp = fopen (text_file, "r"); + in_fp = fopen (text_file, "r"); else - fp = stdin; + in_fp = stdin; - if (!fp) + if (!in_fp) g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, "Failed opening text file `%s': %s", text_file, strerror (errno)); @@ -80,7 +80,7 @@ struct text_options_t char *text_file = nullptr; private: - FILE *fp = nullptr; + FILE *in_fp = nullptr; GString *gs = nullptr; }; @@ -197,7 +197,7 @@ text_options_t::get_line (unsigned int *len) g_string_set_size (gs, 0); char buf[BUFSIZ]; - while (fgets (buf, sizeof (buf), fp)) + while (fgets (buf, sizeof (buf), in_fp)) { unsigned bytes = strlen (buf); if (bytes && buf[bytes - 1] == '\n') @@ -208,10 +208,10 @@ text_options_t::get_line (unsigned int *len) } g_string_append_len (gs, buf, bytes); } - if (ferror (fp)) + if (ferror (in_fp)) fail (false, "Failed reading text: %s", strerror (errno)); *len = gs->len; - return !*len && feof (fp) ? nullptr : gs->str; + return !*len && feof (in_fp) ? nullptr : gs->str; } void From c98773ebb0b47c682494de4a4c6b648a62698cec Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 11 Aug 2021 20:22:03 -0600 Subject: [PATCH 18/26] [util/hb-subset] Move output-file validation code into post_parse --- util/hb-shape.cc | 2 +- util/hb-subset.cc | 5 +- util/helper-cairo.hh | 2 + util/output-options.hh | 132 ++++++++++++++++++++--------------------- util/view-cairo.hh | 2 +- 5 files changed, 71 insertions(+), 72 deletions(-) diff --git a/util/hb-shape.cc b/util/hb-shape.cc index 0e5633d3b..0e8263be2 100644 --- a/util/hb-shape.cc +++ b/util/hb-shape.cc @@ -36,7 +36,7 @@ const unsigned DEFAULT_FONT_SIZE = FONT_SIZE_UPEM; const unsigned SUBPIXEL_BITS = 0; -struct output_buffer_t : output_options_t +struct output_buffer_t : output_options_t<> { void add_options (option_parser_t *parser) { diff --git a/util/hb-subset.cc b/util/hb-subset.cc index 903321a21..0683d7e4b 100644 --- a/util/hb-subset.cc +++ b/util/hb-subset.cc @@ -38,7 +38,7 @@ * Command line interface to the harfbuzz font subsetter. */ -struct subset_main_t : option_parser_t, face_options_t, text_options_t, subset_options_t, output_options_t +struct subset_main_t : option_parser_t, face_options_t, text_options_t, subset_options_t, output_options_t { int operator () (int argc, char **argv) { @@ -92,8 +92,7 @@ struct subset_main_t : option_parser_t, face_options_t, text_options_t, subset_o bool write_file (const char *output_file, hb_blob_t *blob) { - if (!output_file) - fail (true, "No output file was specified"); + assert (out_fp); unsigned int size; const char* data = hb_blob_get_data (blob, &size); diff --git a/util/helper-cairo.hh b/util/helper-cairo.hh index 3c4857c79..b8d461224 100644 --- a/util/helper-cairo.hh +++ b/util/helper-cairo.hh @@ -426,6 +426,8 @@ static const char *helper_cairo_supported_formats[] = nullptr }; +template static inline cairo_t * helper_cairo_create_context (double w, double h, view_options_t *view_opts, diff --git a/util/output-options.hh b/util/output-options.hh index 9d7b3c723..270e9f1e4 100644 --- a/util/output-options.hh +++ b/util/output-options.hh @@ -29,6 +29,7 @@ #include "options.hh" +template struct output_options_t { ~output_options_t () @@ -40,9 +41,71 @@ struct output_options_t } void add_options (option_parser_t *parser, - const char **supported_formats = nullptr); + const char **supported_formats = nullptr) + { + const char *text = nullptr; - void post_parse (GError **error G_GNUC_UNUSED); + if (supported_formats) + { + char *items = g_strjoinv ("/", const_cast (supported_formats)); + text = g_strdup_printf ("Set output format\n\n Supported output formats are: %s", items); + g_free (items); + parser->free_later ((char *) text); + } + + GOptionEntry entries[] = + { + {"output-file", 'o', 0, G_OPTION_ARG_STRING, &this->output_file, "Set output file-name (default: stdout)","filename"}, + {"output-format", 'O', supported_formats ? 0 : G_OPTION_FLAG_HIDDEN, + G_OPTION_ARG_STRING, &this->output_format, text, "format"}, + {nullptr} + }; + parser->add_group (entries, + "output", + "Output destination & format options:", + "Options for the destination & form of the output", + this); + } + + void post_parse (GError **error) + { + if (output_format) + explicit_output_format = true; + + if (output_file && !output_format) + { + output_format = strrchr (output_file, '.'); + if (output_format) + { + output_format++; /* skip the dot */ + output_format = g_strdup (output_format); + } + } + + if (output_file && 0 != strcmp (output_file, "-")) + out_fp = fopen (output_file, "wb"); + else + { + if (!default_stdout && !output_file) + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + "No output file was specified"); + return; + } + +#if defined(_WIN32) || defined(__CYGWIN__) + setmode (fileno (stdout), O_BINARY); +#endif + out_fp = stdout; + } + if (!out_fp) + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + "Cannot open output file `%s': %s", + g_filename_display_name (output_file), strerror (errno)); + return; + } + } char *output_file = nullptr; char *output_format = nullptr; @@ -51,69 +114,4 @@ struct output_options_t FILE *out_fp = nullptr; }; -void -output_options_t::post_parse (GError **error) -{ - if (output_format) - explicit_output_format = true; - - if (output_file && !output_format) - { - output_format = strrchr (output_file, '.'); - if (output_format) - { - output_format++; /* skip the dot */ - output_format = g_strdup (output_format); - } - } - - if (output_file && 0 == strcmp (output_file, "-")) - output_file = nullptr; /* STDOUT */ - - if (output_file) - out_fp = fopen (output_file, "wb"); - else - { -#if defined(_WIN32) || defined(__CYGWIN__) - setmode (fileno (stdout), O_BINARY); -#endif - out_fp = stdout; - } - if (!out_fp) - { - g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, - "Cannot open output file `%s': %s", - g_filename_display_name (output_file), strerror (errno)); - return; - } -} - -void -output_options_t::add_options (option_parser_t *parser, - const char **supported_formats) -{ - const char *text = nullptr; - - if (supported_formats) - { - char *items = g_strjoinv ("/", const_cast (supported_formats)); - text = g_strdup_printf ("Set output format\n\n Supported output formats are: %s", items); - g_free (items); - parser->free_later ((char *) text); - } - - GOptionEntry entries[] = - { - {"output-file", 'o', 0, G_OPTION_ARG_STRING, &this->output_file, "Set output file-name (default: stdout)","filename"}, - {"output-format", 'O', supported_formats ? 0 : G_OPTION_FLAG_HIDDEN, - G_OPTION_ARG_STRING, &this->output_format, text, "format"}, - {nullptr} - }; - parser->add_group (entries, - "output", - "Output destination & format options:", - "Options for the destination & form of the output", - this); -} - #endif diff --git a/util/view-cairo.hh b/util/view-cairo.hh index 430f6f9fd..e48d9d508 100644 --- a/util/view-cairo.hh +++ b/util/view-cairo.hh @@ -31,7 +31,7 @@ #include "output-options.hh" #include "helper-cairo.hh" -struct view_cairo_t : view_options_t, output_options_t +struct view_cairo_t : view_options_t, output_options_t<> { ~view_cairo_t () { From 9a6055caa812a5c855ec604ce0c74a91236c0988 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 11 Aug 2021 20:30:25 -0600 Subject: [PATCH 19/26] [util/hb-ot-shape-closure] Remove unnecessary include --- util/hb-ot-shape-closure.cc | 4 ---- 1 file changed, 4 deletions(-) diff --git a/util/hb-ot-shape-closure.cc b/util/hb-ot-shape-closure.cc index 1cfdf34cc..776e67017 100644 --- a/util/hb-ot-shape-closure.cc +++ b/util/hb-ot-shape-closure.cc @@ -32,10 +32,6 @@ const unsigned DEFAULT_FONT_SIZE = FONT_SIZE_NONE; const unsigned SUBPIXEL_BITS = 0; -#ifdef HAVE_FREETYPE -#include -#endif - struct shape_closure_consumer_t { void add_options (struct option_parser_t *parser) From b83f25c749c219e2cb7ed6d819d638f97bf3ea62 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 11 Aug 2021 20:42:20 -0600 Subject: [PATCH 20/26] [util/hb-subset] Revamp option groups --- util/shape-options.hh | 3 ++- util/subset-options.hh | 59 +++++++++++++++++++++++++++++++++--------- 2 files changed, 49 insertions(+), 13 deletions(-) diff --git a/util/shape-options.hh b/util/shape-options.hh index c3dedb521..92d273174 100644 --- a/util/shape-options.hh +++ b/util/shape-options.hh @@ -432,7 +432,8 @@ shape_options_t::add_options (option_parser_t *parser) {"cluster-level", 0, 0, G_OPTION_ARG_INT, &this->cluster_level, "Cluster merging level (default: 0)", "0/1/2"}, {"normalize-glyphs",0, 0, G_OPTION_ARG_NONE, &this->normalize_glyphs, "Rearrange glyph clusters in nominal order", nullptr}, {"verify", 0, 0, G_OPTION_ARG_NONE, &this->verify, "Perform sanity checks on shaping results", nullptr}, - {"num-iterations", 'n', 0, G_OPTION_ARG_INT, &this->num_iterations, "Run shaper N times (default: 1)", "N"}, + {"num-iterations", 'n', G_OPTION_FLAG_IN_MAIN, + G_OPTION_ARG_INT, &this->num_iterations, "Run shaper N times (default: 1)", "N"}, {nullptr} }; parser->add_group (entries, diff --git a/util/subset-options.hh b/util/subset-options.hh index f2f85c215..6027cde94 100644 --- a/util/subset-options.hh +++ b/util/subset-options.hh @@ -325,16 +325,27 @@ parse_drop_tables (const char *name, void subset_options_t::add_options (option_parser_t *parser) { - GOptionEntry entries[] = + GOptionEntry glyphset_entries[] = { - {"no-hinting", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Whether to drop hints", nullptr}, - {"retain-gids", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "If set don't renumber glyph ids in the subset.", nullptr}, {"gids", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_gids, "Specify glyph IDs or ranges to include in the subset", "list of comma/whitespace-separated int numbers or ranges"}, - {"desubroutinize", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Remove CFF/CFF2 use of subroutines", nullptr}, + // gids-file + // glyphs + // glyphs-file + // text + // text-file + {nullptr} + }; + parser->add_group (glyphset_entries, + "subset-glyphset", + "Subset glyph-set option:", + "Subsetting glyph-set options", + this); + + GOptionEntry other_entries[] = + { {"name-IDs", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_nameids, "Subset specified nameids", "list of int numbers"}, {"name-IDs-", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_nameids, "Subset specified nameids", "list of int numbers"}, {"name-IDs+", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_nameids, "Subset specified nameids", "list of int numbers"}, - {"name-legacy", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Keep legacy (non-Unicode) 'name' table entries", nullptr}, {"name-languages", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_name_languages, "Subset nameRecords with specified language IDs", "list of int numbers"}, {"name-languages-", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_name_languages, "Subset nameRecords with specified language IDs", "list of int numbers"}, {"name-languages+", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_name_languages, "Subset nameRecords with specified language IDs", "list of int numbers"}, @@ -344,9 +355,20 @@ subset_options_t::add_options (option_parser_t *parser) {"drop-tables", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_drop_tables, "Drop the specified tables.", "list of string table tags."}, {"drop-tables+", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_drop_tables, "Drop the specified tables.", "list of string table tags."}, {"drop-tables-", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_drop_tables, "Drop the specified tables.", "list of string table tags."}, - {"num-iterations", 'n', 0, G_OPTION_ARG_INT, - &this->num_iterations, - "Run subsetter N times (default: 1)", "N"}, + {nullptr} + }; + parser->add_group (other_entries, + "subset-other", + "Subset other option:", + "Subsetting other options", + this); + + GOptionEntry flag_entries[] = + { + {"no-hinting", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Whether to drop hints", nullptr}, + {"retain-gids", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "If set don't renumber glyph ids in the subset.", nullptr}, + {"desubroutinize", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Remove CFF/CFF2 use of subroutines", nullptr}, + {"name-legacy", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Keep legacy (non-Unicode) 'name' table entries", nullptr}, {"set-overlaps-flag", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Set the overlaps flag on each glyph.", nullptr}, {"notdef-outline", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Keep the outline of \'.notdef\' glyph", nullptr}, @@ -354,10 +376,23 @@ subset_options_t::add_options (option_parser_t *parser) {"glyph-names", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Keep PS glyph names in TT-flavored fonts. ", nullptr}, {nullptr} }; - parser->add_group (entries, - "subset", - "Subset options:", - "Options subsetting", + parser->add_group (flag_entries, + "subset-flags", + "Subset boolean option:", + "Subsetting boolean options", + this); + + GOptionEntry app_entries[] = + { + {"num-iterations", 'n', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_INT, + &this->num_iterations, + "Run subsetter N times (default: 1)", "N"}, + {nullptr} + }; + parser->add_group (app_entries, + "subset-app", + "Subset app option:", + "Subsetting application options", this); } From 4ec727e55f1f5479aa2be85f8ad4e0f1a4b922b6 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 11 Aug 2021 20:46:16 -0600 Subject: [PATCH 21/26] [util] Minor edit of failure messages --- util/subset-options.hh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/util/subset-options.hh b/util/subset-options.hh index 6027cde94..365675dec 100644 --- a/util/subset-options.hh +++ b/util/subset-options.hh @@ -72,11 +72,11 @@ parse_gids (const char *name G_GNUC_UNUSED, { hb_set_destroy (gids); g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, - "Failed parsing gids values at: '%s'", s); + "Failed parsing glyph-index at: '%s'", s); return false; } - if (p && p[0] == '-') //gid ranges + if (p && p[0] == '-') // ranges { s = ++p; hb_codepoint_t end_code = strtoul (s, &p, 10); @@ -84,7 +84,7 @@ parse_gids (const char *name G_GNUC_UNUSED, { hb_set_destroy (gids); g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, - "Failed parsing gids values at: '%s'", s); + "Failed parsing glyph-index at: '%s'", s); return false; } @@ -92,7 +92,7 @@ parse_gids (const char *name G_GNUC_UNUSED, { hb_set_destroy (gids); g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, - "Invalid gids range value %u-%u", start_code, end_code); + "Invalid gid-index range %u-%u", start_code, end_code); return false; } hb_set_add_range (gids, start_code, end_code); From 5b07c3c7d03b5ff6d35fafa3db402528d813af0a Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 11 Aug 2021 21:14:55 -0600 Subject: [PATCH 22/26] [util/hb-subset] Parse --text & --unicodes --- util/Makefile.sources | 1 - util/hb-subset.cc | 550 ++++++++++++++++++++++++++++++++++++----- util/subset-options.hh | 399 ------------------------------ util/text-options.hh | 3 +- 4 files changed, 486 insertions(+), 467 deletions(-) delete mode 100644 util/subset-options.hh diff --git a/util/Makefile.sources b/util/Makefile.sources index 069d600de..df3ad4a41 100644 --- a/util/Makefile.sources +++ b/util/Makefile.sources @@ -36,7 +36,6 @@ HB_SUBSET_CLI_sources = \ main-font-text.hh \ options.hh \ output-options.hh \ - subset-options.hh \ text-options.hh \ $(NULL) diff --git a/util/hb-subset.cc b/util/hb-subset.cc index 0683d7e4b..41f292e27 100644 --- a/util/hb-subset.cc +++ b/util/hb-subset.cc @@ -27,48 +27,32 @@ #include -#include "subset-options.hh" #include "output-options.hh" #include "face-options.hh" -#include "text-options.hh" #include "batch.hh" #include "main-font-text.hh" +#include + /* * Command line interface to the harfbuzz font subsetter. */ -struct subset_main_t : option_parser_t, face_options_t, text_options_t, subset_options_t, output_options_t +struct subset_main_t : option_parser_t, face_options_t, output_options_t { + subset_main_t () + : input (hb_subset_input_create_or_fail ()) + {} + ~subset_main_t () + { + hb_subset_input_destroy (input); + } + int operator () (int argc, char **argv) { add_options (); parse (&argc, &argv); - hb_set_t *codepoints = hb_subset_input_unicode_set (input); - unsigned int text_len; - const char *text; - while ((text = get_line (&text_len))) - { - if (0 == strcmp (text, "*")) - { - hb_face_collect_unicodes (face, codepoints); - continue; - } - - if (*text) - { - gchar *c = (gchar *)text; - do - { - gunichar cp = g_utf8_get_char(c); - hb_codepoint_t hb_cp = cp; - hb_set_add (codepoints, hb_cp); - } - while ((c = g_utf8_find_next_char(c, text + text_len))); - } - } - hb_face_t *new_face = nullptr; for (unsigned i = 0; i < num_iterations; i++) { @@ -109,53 +93,489 @@ struct subset_main_t : option_parser_t, face_options_t, text_options_t, subset_o return true; } + void add_options (); + + public: + void post_parse (GError **error G_GNUC_UNUSED); + protected: - - void add_options () - { - face_options_t::add_options (this); - text_options_t::add_options (this); - subset_options_t::add_options (this); - output_options_t::add_options (this); - - GOptionEntry entries[] = - { - {G_OPTION_REMAINING, 0, G_OPTION_FLAG_IN_MAIN, - G_OPTION_ARG_CALLBACK, (gpointer) &collect_rest, nullptr, "[FONT-FILE] [TEXT]"}, - {nullptr} - }; - add_main_group (entries, this); - option_parser_t::add_options (); - } - - private: - static gboolean - collect_rest (const char *name G_GNUC_UNUSED, + collect_rest (const char *name, const char *arg, gpointer data, - GError **error) - { - subset_main_t *thiz = (subset_main_t *) data; + GError **error); - if (!thiz->font_file) - { - thiz->font_file = g_strdup (arg); - return true; - } + public: - if (!thiz->text && !thiz->text_file) - { - thiz->text = g_strdup (arg); - return true; - } + unsigned num_iterations = 1; + hb_subset_input_t *input = nullptr; - g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, - "Too many arguments on the command line"); - return false; - } + bool all_unicodes = false; }; +static gboolean +parse_gids (const char *name G_GNUC_UNUSED, + const char *arg, + gpointer data, + GError **error G_GNUC_UNUSED) +{ + subset_main_t *subset_main = (subset_main_t *) data; + hb_set_t *gids = hb_subset_input_glyph_set (subset_main->input); + + char *s = (char *) arg; + char *p; + + while (s && *s) + { + while (*s && strchr (", ", *s)) + s++; + if (!*s) + break; + + errno = 0; + hb_codepoint_t start_code = strtoul (s, &p, 10); + if (s[0] == '-' || errno || s == p) + { + hb_set_destroy (gids); + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + "Failed parsing glyph-index at: '%s'", s); + return false; + } + + if (p && p[0] == '-') // ranges + { + s = ++p; + hb_codepoint_t end_code = strtoul (s, &p, 10); + if (s[0] == '-' || errno || s == p) + { + hb_set_destroy (gids); + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + "Failed parsing glyph-index at: '%s'", s); + return false; + } + + if (end_code < start_code) + { + hb_set_destroy (gids); + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + "Invalid gid-index range %u-%u", start_code, end_code); + return false; + } + hb_set_add_range (gids, start_code, end_code); + } + else + { + hb_set_add (gids, start_code); + } + s = p; + } + + return true; +} + +static gboolean +parse_text (const char *name G_GNUC_UNUSED, + const char *arg, + gpointer data, + GError **error G_GNUC_UNUSED) +{ + subset_main_t *subset_main = (subset_main_t *) data; + + if (0 == strcmp (arg, "*")) + { + subset_main->all_unicodes = true; + return true; + } + + hb_set_t *codepoints = hb_subset_input_unicode_set (subset_main->input); + for (gchar *c = (gchar *) arg; + *c; + c = g_utf8_find_next_char(c, nullptr)) + { + gunichar cp = g_utf8_get_char(c); + hb_set_add (codepoints, cp); + } + return true; +} + +static gboolean +parse_unicodes (const char *name G_GNUC_UNUSED, + const char *arg, + gpointer data, + GError **error G_GNUC_UNUSED) +{ + subset_main_t *subset_main = (subset_main_t *) data; + + if (0 == strcmp (arg, "*")) + { + subset_main->all_unicodes = true; + return true; + } + + hb_set_t *codepoints = hb_subset_input_unicode_set (subset_main->input); + { + char *s = (char *) arg; + char *p; + + while (s && *s) + { +#define DELIMITERS "<+>{},;&#\\xXuUnNiI\n\t\v\f\r " + + while (*s && strchr (DELIMITERS, *s)) + s++; + if (!*s) + break; + + errno = 0; + hb_codepoint_t u = strtoul (s, &p, 16); + if (errno || s == p) + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + "Failed parsing Unicode value at: '%s'", s); + return false; + } + hb_set_add (codepoints, u); + + s = p; + } + } + return true; +} + +static gboolean +parse_nameids (const char *name, + const char *arg, + gpointer data, + GError **error G_GNUC_UNUSED) +{ + subset_main_t *subset_main = (subset_main_t *) data; + hb_set_t *name_ids = hb_subset_input_nameid_set (subset_main->input); + + char last_name_char = name[strlen (name) - 1]; + + if (last_name_char != '+' && last_name_char != '-') + hb_set_clear (name_ids); + + if (0 == strcmp (arg, "*")) + { + if (last_name_char == '-') + hb_set_del_range (name_ids, 0, 0x7FFF); + else + hb_set_add_range (name_ids, 0, 0x7FFF); + return true; + } + + char *s = (char *) arg; + char *p; + + while (s && *s) + { + while (*s && strchr (", ", *s)) + s++; + if (!*s) + break; + + errno = 0; + hb_codepoint_t u = strtoul (s, &p, 10); + if (errno || s == p) + { + hb_set_destroy (name_ids); + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + "Failed parsing nameID value at: '%s'", s); + return false; + } + + if (last_name_char != '-') + { + hb_set_add (name_ids, u); + } else { + hb_set_del (name_ids, u); + } + + s = p; + } + + return true; +} + +static gboolean +parse_name_languages (const char *name, + const char *arg, + gpointer data, + GError **error G_GNUC_UNUSED) +{ + subset_main_t *subset_main = (subset_main_t *) data; + hb_set_t *name_languages = hb_subset_input_namelangid_set (subset_main->input); + + char last_name_char = name[strlen (name) - 1]; + + if (last_name_char != '+' && last_name_char != '-') + hb_set_clear (name_languages); + + if (0 == strcmp (arg, "*")) + { + if (last_name_char == '-') + hb_set_del_range (name_languages, 0, 0x5FFF); + else + hb_set_add_range (name_languages, 0, 0x5FFF); + return true; + } + + char *s = (char *) arg; + char *p; + + while (s && *s) + { + while (*s && strchr (", ", *s)) + s++; + if (!*s) + break; + + errno = 0; + hb_codepoint_t u = strtoul (s, &p, 10); + if (errno || s == p) + { + hb_set_destroy (name_languages); + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + "Failed parsing name-language code at: '%s'", s); + return false; + } + + if (last_name_char != '-') + { + hb_set_add (name_languages, u); + } else { + hb_set_del (name_languages, u); + } + + s = p; + } + + return true; +} + +template +static gboolean +set_flag (const char *name, + const char *arg, + gpointer data, + GError **error G_GNUC_UNUSED) +{ + subset_main_t *subset_main = (subset_main_t *) data; + + hb_subset_input_set_flags (subset_main->input, + hb_subset_input_get_flags (subset_main->input) | flag); + + return true; +} + +static gboolean +parse_layout_features (const char *name, + const char *arg, + gpointer data, + GError **error G_GNUC_UNUSED) +{ + subset_main_t *subset_main = (subset_main_t *) data; + hb_set_t *layout_features = hb_subset_input_layout_features_set (subset_main->input); + + char last_name_char = name[strlen (name) - 1]; + + if (last_name_char != '+' && last_name_char != '-') + hb_set_clear (layout_features); + + if (0 == strcmp (arg, "*")) + { + if (last_name_char == '-') + { + hb_set_clear (layout_features); + hb_subset_input_set_flags (subset_main->input, + hb_subset_input_get_flags (subset_main->input) & ~HB_SUBSET_FLAGS_RETAIN_ALL_FEATURES); + } else { + hb_subset_input_set_flags (subset_main->input, + hb_subset_input_get_flags (subset_main->input) | HB_SUBSET_FLAGS_RETAIN_ALL_FEATURES); + } + return true; + } + + char *s = strtok((char *) arg, ", "); + while (s) + { + if (strlen (s) > 4) // table tags are at most 4 bytes + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + "Failed parsing table tag value at: '%s'", s); + return false; + } + + hb_tag_t tag = hb_tag_from_string (s, strlen (s)); + + if (last_name_char != '-') + hb_set_add (layout_features, tag); + else + hb_set_del (layout_features, tag); + + s = strtok(nullptr, ", "); + } + + return true; +} + +static gboolean +parse_drop_tables (const char *name, + const char *arg, + gpointer data, + GError **error G_GNUC_UNUSED) +{ + subset_main_t *subset_main = (subset_main_t *) data; + hb_set_t *drop_tables = hb_subset_input_drop_tables_set (subset_main->input); + + char last_name_char = name[strlen (name) - 1]; + + if (last_name_char != '+' && last_name_char != '-') + hb_set_clear (drop_tables); + + char *s = strtok((char *) arg, ", "); + while (s) + { + if (strlen (s) > 4) // Table tags are at most 4 bytes. + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + "Failed parsing table tag value at: '%s'", s); + return false; + } + + hb_tag_t tag = hb_tag_from_string (s, strlen (s)); + + if (last_name_char != '-') + hb_set_add (drop_tables, tag); + else + hb_set_del (drop_tables, tag); + + s = strtok(nullptr, ", "); + } + + return true; +} + +gboolean +subset_main_t::collect_rest (const char *name, + const char *arg, + gpointer data, + GError **error) +{ + subset_main_t *thiz = (subset_main_t *) data; + + if (!thiz->font_file) + { + thiz->font_file = g_strdup (arg); + return true; + } + + parse_text (name, arg, data, error); + return true; +} + +void +subset_main_t::add_options () +{ + face_options_t::add_options (this); + + GOptionEntry glyphset_entries[] = + { + {"gids", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_gids, "Specify glyph IDs or ranges to include in the subset", "list of glyph indices/ranges"}, + // gids-file + // glyphs + // glyphs-file + {"text", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_text, "Specify text to include in the subset", "string"}, + // text-file + {"unicodes", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_unicodes, "Specify Unicode codepoints or ranges to include in the subset", "list of hex numbers/ranges"}, + {nullptr} + }; + add_group (glyphset_entries, + "subset-glyphset", + "Subset glyph-set option:", + "Subsetting glyph-set options", + this); + + GOptionEntry other_entries[] = + { + {"name-IDs", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_nameids, "Subset specified nameids", "list of int numbers"}, + {"name-IDs-", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_nameids, "Subset specified nameids", "list of int numbers"}, + {"name-IDs+", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_nameids, "Subset specified nameids", "list of int numbers"}, + {"name-languages", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_name_languages, "Subset nameRecords with specified language IDs", "list of int numbers"}, + {"name-languages-", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_name_languages, "Subset nameRecords with specified language IDs", "list of int numbers"}, + {"name-languages+", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_name_languages, "Subset nameRecords with specified language IDs", "list of int numbers"}, + {"layout-features", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_layout_features, "Specify set of layout feature tags that will be preserved", "list of string table tags."}, + {"layout-features+",0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_layout_features, "Specify set of layout feature tags that will be preserved", "list of string table tags."}, + {"layout-features-",0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_layout_features, "Specify set of layout feature tags that will be preserved", "list of string table tags."}, + {"drop-tables", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_drop_tables, "Drop the specified tables.", "list of string table tags."}, + {"drop-tables+", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_drop_tables, "Drop the specified tables.", "list of string table tags."}, + {"drop-tables-", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_drop_tables, "Drop the specified tables.", "list of string table tags."}, + {nullptr} + }; + add_group (other_entries, + "subset-other", + "Subset other option:", + "Subsetting other options", + this); + + GOptionEntry flag_entries[] = + { + {"no-hinting", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Whether to drop hints", nullptr}, + {"retain-gids", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "If set don't renumber glyph ids in the subset.", nullptr}, + {"desubroutinize", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Remove CFF/CFF2 use of subroutines", nullptr}, + {"name-legacy", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Keep legacy (non-Unicode) 'name' table entries", nullptr}, + {"set-overlaps-flag", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, + "Set the overlaps flag on each glyph.", nullptr}, + {"notdef-outline", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Keep the outline of \'.notdef\' glyph", nullptr}, + {"no-prune-unicode-ranges", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Don't change the 'OS/2 ulUnicodeRange*' bits.", nullptr}, + {"glyph-names", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Keep PS glyph names in TT-flavored fonts. ", nullptr}, + {nullptr} + }; + add_group (flag_entries, + "subset-flags", + "Subset boolean option:", + "Subsetting boolean options", + this); + + GOptionEntry app_entries[] = + { + {"num-iterations", 'n', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_INT, + &this->num_iterations, + "Run subsetter N times (default: 1)", "N"}, + {nullptr} + }; + add_group (app_entries, + "subset-app", + "Subset app option:", + "Subsetting application options", + this); + + output_options_t::add_options (this); + + GOptionEntry entries[] = + { + {G_OPTION_REMAINING, 0, G_OPTION_FLAG_IN_MAIN, + G_OPTION_ARG_CALLBACK, (gpointer) &collect_rest, nullptr, "[FONT-FILE] [TEXT]"}, + {nullptr} + }; + add_main_group (entries, this); + option_parser_t::add_options (); +} + +void +subset_main_t::post_parse (GError **error G_GNUC_UNUSED) +{ + /* This WILL get called multiple times. Oh well... */ + + if (all_unicodes) + { + hb_set_t *codepoints = hb_subset_input_unicode_set (input); + hb_face_collect_unicodes (face, codepoints); + all_unicodes = false; + } +} + int main (int argc, char **argv) { diff --git a/util/subset-options.hh b/util/subset-options.hh deleted file mode 100644 index 365675dec..000000000 --- a/util/subset-options.hh +++ /dev/null @@ -1,399 +0,0 @@ -/* - * Copyright © 2019 Google, Inc. - * - * This is part of HarfBuzz, a text shaping library. - * - * Permission is hereby granted, without written agreement and without - * license or royalty fees, to use, copy, modify, and distribute this - * software and its documentation for any purpose, provided that the - * above copyright notice and the following two paragraphs appear in - * all copies of this software. - * - * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR - * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES - * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN - * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - * - * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, - * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS - * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO - * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. - * - * Google Author(s): Garret Rieger - */ - -#ifndef SUBSET_OPTIONS_HH -#define SUBSET_OPTIONS_HH - -#include "options.hh" -#include "hb-subset.h" - -struct subset_options_t -{ - subset_options_t () - : input (hb_subset_input_create_or_fail ()) - {} - ~subset_options_t () - { - hb_subset_input_destroy (input); - } - - void add_options (option_parser_t *parser); - - unsigned num_iterations = 1; - hb_subset_input_t *input = nullptr; -}; - - -static gboolean -parse_gids (const char *name G_GNUC_UNUSED, - const char *arg, - gpointer data, - GError **error G_GNUC_UNUSED) -{ - subset_options_t *subset_opts = (subset_options_t *) data; - hb_set_t *gids = hb_subset_input_glyph_set (subset_opts->input); - - char *s = (char *) arg; - char *p; - - while (s && *s) - { - while (*s && strchr (", ", *s)) - s++; - if (!*s) - break; - - errno = 0; - hb_codepoint_t start_code = strtoul (s, &p, 10); - if (s[0] == '-' || errno || s == p) - { - hb_set_destroy (gids); - g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, - "Failed parsing glyph-index at: '%s'", s); - return false; - } - - if (p && p[0] == '-') // ranges - { - s = ++p; - hb_codepoint_t end_code = strtoul (s, &p, 10); - if (s[0] == '-' || errno || s == p) - { - hb_set_destroy (gids); - g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, - "Failed parsing glyph-index at: '%s'", s); - return false; - } - - if (end_code < start_code) - { - hb_set_destroy (gids); - g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, - "Invalid gid-index range %u-%u", start_code, end_code); - return false; - } - hb_set_add_range (gids, start_code, end_code); - } - else - { - hb_set_add (gids, start_code); - } - s = p; - } - - return true; -} - -static gboolean -parse_nameids (const char *name, - const char *arg, - gpointer data, - GError **error G_GNUC_UNUSED) -{ - subset_options_t *subset_opts = (subset_options_t *) data; - hb_set_t *name_ids = hb_subset_input_nameid_set (subset_opts->input); - - char last_name_char = name[strlen (name) - 1]; - - if (last_name_char != '+' && last_name_char != '-') - hb_set_clear (name_ids); - - if (0 == strcmp (arg, "*")) - { - if (last_name_char == '-') - hb_set_del_range (name_ids, 0, 0x7FFF); - else - hb_set_add_range (name_ids, 0, 0x7FFF); - return true; - } - - char *s = (char *) arg; - char *p; - - while (s && *s) - { - while (*s && strchr (", ", *s)) - s++; - if (!*s) - break; - - errno = 0; - hb_codepoint_t u = strtoul (s, &p, 10); - if (errno || s == p) - { - hb_set_destroy (name_ids); - g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, - "Failed parsing nameID values at: '%s'", s); - return false; - } - - if (last_name_char != '-') - { - hb_set_add (name_ids, u); - } else { - hb_set_del (name_ids, u); - } - - s = p; - } - - return true; -} - -static gboolean -parse_name_languages (const char *name, - const char *arg, - gpointer data, - GError **error G_GNUC_UNUSED) -{ - subset_options_t *subset_opts = (subset_options_t *) data; - hb_set_t *name_languages = hb_subset_input_namelangid_set (subset_opts->input); - - char last_name_char = name[strlen (name) - 1]; - - if (last_name_char != '+' && last_name_char != '-') - hb_set_clear (name_languages); - - if (0 == strcmp (arg, "*")) - { - if (last_name_char == '-') - hb_set_del_range (name_languages, 0, 0x5FFF); - else - hb_set_add_range (name_languages, 0, 0x5FFF); - return true; - } - - char *s = (char *) arg; - char *p; - - while (s && *s) - { - while (*s && strchr (", ", *s)) - s++; - if (!*s) - break; - - errno = 0; - hb_codepoint_t u = strtoul (s, &p, 10); - if (errno || s == p) - { - hb_set_destroy (name_languages); - g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, - "Failed parsing name_languages values at: '%s'", s); - return false; - } - - if (last_name_char != '-') - { - hb_set_add (name_languages, u); - } else { - hb_set_del (name_languages, u); - } - - s = p; - } - - return true; -} - -template -static gboolean -set_flag (const char *name, - const char *arg, - gpointer data, - GError **error G_GNUC_UNUSED) -{ - subset_options_t *subset_opts = (subset_options_t *) data; - - hb_subset_input_set_flags (subset_opts->input, - hb_subset_input_get_flags (subset_opts->input) | flag); - - return true; -} - -static gboolean -parse_layout_features (const char *name, - const char *arg, - gpointer data, - GError **error G_GNUC_UNUSED) -{ - subset_options_t *subset_opts = (subset_options_t *) data; - hb_set_t *layout_features = hb_subset_input_layout_features_set (subset_opts->input); - - char last_name_char = name[strlen (name) - 1]; - - if (last_name_char != '+' && last_name_char != '-') - hb_set_clear (layout_features); - - if (0 == strcmp (arg, "*")) - { - if (last_name_char == '-') - { - hb_set_clear (layout_features); - hb_subset_input_set_flags (subset_opts->input, - hb_subset_input_get_flags (subset_opts->input) & ~HB_SUBSET_FLAGS_RETAIN_ALL_FEATURES); - } else { - hb_subset_input_set_flags (subset_opts->input, - hb_subset_input_get_flags (subset_opts->input) | HB_SUBSET_FLAGS_RETAIN_ALL_FEATURES); - } - return true; - } - - char *s = strtok((char *) arg, ", "); - while (s) - { - if (strlen (s) > 4) // table tags are at most 4 bytes - { - g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, - "Failed parsing table tag values at: '%s'", s); - return false; - } - - hb_tag_t tag = hb_tag_from_string (s, strlen (s)); - - if (last_name_char != '-') - hb_set_add (layout_features, tag); - else - hb_set_del (layout_features, tag); - - s = strtok(nullptr, ", "); - } - - return true; -} - -static gboolean -parse_drop_tables (const char *name, - const char *arg, - gpointer data, - GError **error G_GNUC_UNUSED) -{ - subset_options_t *subset_opts = (subset_options_t *) data; - hb_set_t *drop_tables = hb_subset_input_drop_tables_set (subset_opts->input); - - char last_name_char = name[strlen (name) - 1]; - - if (last_name_char != '+' && last_name_char != '-') - hb_set_clear (drop_tables); - - char *s = strtok((char *) arg, ", "); - while (s) - { - if (strlen (s) > 4) // Table tags are at most 4 bytes. - { - g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, - "Failed parsing table tag values at: '%s'", s); - return false; - } - - hb_tag_t tag = hb_tag_from_string (s, strlen (s)); - - if (last_name_char != '-') - hb_set_add (drop_tables, tag); - else - hb_set_del (drop_tables, tag); - - s = strtok(nullptr, ", "); - } - - return true; -} - -void -subset_options_t::add_options (option_parser_t *parser) -{ - GOptionEntry glyphset_entries[] = - { - {"gids", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_gids, "Specify glyph IDs or ranges to include in the subset", "list of comma/whitespace-separated int numbers or ranges"}, - // gids-file - // glyphs - // glyphs-file - // text - // text-file - {nullptr} - }; - parser->add_group (glyphset_entries, - "subset-glyphset", - "Subset glyph-set option:", - "Subsetting glyph-set options", - this); - - GOptionEntry other_entries[] = - { - {"name-IDs", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_nameids, "Subset specified nameids", "list of int numbers"}, - {"name-IDs-", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_nameids, "Subset specified nameids", "list of int numbers"}, - {"name-IDs+", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_nameids, "Subset specified nameids", "list of int numbers"}, - {"name-languages", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_name_languages, "Subset nameRecords with specified language IDs", "list of int numbers"}, - {"name-languages-", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_name_languages, "Subset nameRecords with specified language IDs", "list of int numbers"}, - {"name-languages+", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_name_languages, "Subset nameRecords with specified language IDs", "list of int numbers"}, - {"layout-features", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_layout_features, "Specify set of layout feature tags that will be preserved", "list of string table tags."}, - {"layout-features+", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_layout_features, "Specify set of layout feature tags that will be preserved", "list of string table tags."}, - {"layout-features-", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_layout_features, "Specify set of layout feature tags that will be preserved", "list of string table tags."}, - {"drop-tables", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_drop_tables, "Drop the specified tables.", "list of string table tags."}, - {"drop-tables+", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_drop_tables, "Drop the specified tables.", "list of string table tags."}, - {"drop-tables-", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_drop_tables, "Drop the specified tables.", "list of string table tags."}, - {nullptr} - }; - parser->add_group (other_entries, - "subset-other", - "Subset other option:", - "Subsetting other options", - this); - - GOptionEntry flag_entries[] = - { - {"no-hinting", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Whether to drop hints", nullptr}, - {"retain-gids", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "If set don't renumber glyph ids in the subset.", nullptr}, - {"desubroutinize", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Remove CFF/CFF2 use of subroutines", nullptr}, - {"name-legacy", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Keep legacy (non-Unicode) 'name' table entries", nullptr}, - {"set-overlaps-flag", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, - "Set the overlaps flag on each glyph.", nullptr}, - {"notdef-outline", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Keep the outline of \'.notdef\' glyph", nullptr}, - {"no-prune-unicode-ranges", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Don't change the 'OS/2 ulUnicodeRange*' bits.", nullptr}, - {"glyph-names", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &set_flag, "Keep PS glyph names in TT-flavored fonts. ", nullptr}, - {nullptr} - }; - parser->add_group (flag_entries, - "subset-flags", - "Subset boolean option:", - "Subsetting boolean options", - this); - - GOptionEntry app_entries[] = - { - {"num-iterations", 'n', G_OPTION_FLAG_IN_MAIN, G_OPTION_ARG_INT, - &this->num_iterations, - "Run subsetter N times (default: 1)", "N"}, - {nullptr} - }; - parser->add_group (app_entries, - "subset-app", - "Subset app option:", - "Subsetting application options", - this); -} - -#endif diff --git a/util/text-options.hh b/util/text-options.hh index 121045421..90862fe3f 100644 --- a/util/text-options.hh +++ b/util/text-options.hh @@ -119,7 +119,6 @@ parse_text (const char *name G_GNUC_UNUSED, return true; } - static gboolean parse_unicodes (const char *name G_GNUC_UNUSED, const char *arg, @@ -161,7 +160,7 @@ parse_unicodes (const char *name G_GNUC_UNUSED, { g_string_free (gs, TRUE); g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, - "Failed parsing Unicode values at: '%s'", s); + "Failed parsing Unicode value at: '%s'", s); return false; } From bf80b7ea457deb1fb72e7996e5f4d78a981e8a39 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 11 Aug 2021 22:07:45 -0600 Subject: [PATCH 23/26] [util/hb-subset] Add --glyphs for passing glyph names Part of https://github.com/harfbuzz/harfbuzz/issues/2455 --- util/hb-subset.cc | 63 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/util/hb-subset.cc b/util/hb-subset.cc index 41f292e27..7e5d89040 100644 --- a/util/hb-subset.cc +++ b/util/hb-subset.cc @@ -110,7 +110,9 @@ struct subset_main_t : option_parser_t, face_options_t, output_options_t unsigned num_iterations = 1; hb_subset_input_t *input = nullptr; + /* Internal, ouch. */ bool all_unicodes = false; + GString *glyph_names = nullptr; }; static gboolean @@ -173,6 +175,24 @@ parse_gids (const char *name G_GNUC_UNUSED, return true; } +static gboolean +parse_glyphs (const char *name G_GNUC_UNUSED, + const char *arg, + gpointer data, + GError **error G_GNUC_UNUSED) +{ + subset_main_t *subset_main = (subset_main_t *) data; + + if (!subset_main->glyph_names) + subset_main->glyph_names = g_string_new (nullptr); + else + g_string_append_c (subset_main->glyph_names, ' '); + + g_string_append (subset_main->glyph_names, arg); + + return true; +} + static gboolean parse_text (const char *name G_GNUC_UNUSED, const char *arg, @@ -212,6 +232,7 @@ parse_unicodes (const char *name G_GNUC_UNUSED, return true; } + // XXX TODO Ranges hb_set_t *codepoints = hb_subset_input_unicode_set (subset_main->input); { char *s = (char *) arg; @@ -484,11 +505,12 @@ subset_main_t::add_options () { {"gids", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_gids, "Specify glyph IDs or ranges to include in the subset", "list of glyph indices/ranges"}, // gids-file - // glyphs + {"glyphs", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_glyphs, "Specify glyph names to include in the subset", "list of glyph names"}, // glyphs-file {"text", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_text, "Specify text to include in the subset", "string"}, // text-file {"unicodes", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_unicodes, "Specify Unicode codepoints or ranges to include in the subset", "list of hex numbers/ranges"}, + // unicodes-file {nullptr} }; add_group (glyphset_entries, @@ -574,6 +596,45 @@ subset_main_t::post_parse (GError **error G_GNUC_UNUSED) hb_face_collect_unicodes (face, codepoints); all_unicodes = false; } + + if (glyph_names) + { + char *p = glyph_names->str; + char *p_end = p + glyph_names->len; + + hb_set_t *gids = hb_subset_input_glyph_set (input); + + hb_font_t *font = hb_font_create (face); + while (p < p_end) + { + while (p < p_end && (*p == ' ' || *p == ',')) + p++; + + char *end = p; + while (end < p_end && *end != ' ' && *end != ',') + end++; + *end = '\0'; + + if (p < end) + { + hb_codepoint_t gid; + if (!hb_font_get_glyph_from_name (font, p, -1, &gid)) + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + "Failed parsing glyph name: '%s'", p); + return; + } + + hb_set_add (gids, gid); + } + + p = end + 1; + } + hb_font_destroy (font); + + g_string_free (glyph_names, false); + glyph_names = nullptr; + } } int From 49cf36027c5ad8092966983f9c2e438cbef00c15 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 11 Aug 2021 22:34:14 -0600 Subject: [PATCH 24/26] [util/hb-subset] Parse --gids-file, --glyphs-file, --text-file, --unicodes-file Fixes https://github.com/harfbuzz/harfbuzz/issues/2455 Fixes https://github.com/harfbuzz/harfbuzz/issues/3002 --- util/hb-subset.cc | 119 +++++++++++++++++++++++++++++++++++----------- 1 file changed, 92 insertions(+), 27 deletions(-) diff --git a/util/hb-subset.cc b/util/hb-subset.cc index 7e5d89040..8c7a7892c 100644 --- a/util/hb-subset.cc +++ b/util/hb-subset.cc @@ -96,7 +96,7 @@ struct subset_main_t : option_parser_t, face_options_t, output_options_t void add_options (); public: - void post_parse (GError **error G_GNUC_UNUSED); + void post_parse (GError **error); protected: static gboolean @@ -119,7 +119,7 @@ static gboolean parse_gids (const char *name G_GNUC_UNUSED, const char *arg, gpointer data, - GError **error G_GNUC_UNUSED) + GError **error) { subset_main_t *subset_main = (subset_main_t *) data; hb_set_t *gids = hb_subset_input_glyph_set (subset_main->input); @@ -222,7 +222,7 @@ static gboolean parse_unicodes (const char *name G_GNUC_UNUSED, const char *arg, gpointer data, - GError **error G_GNUC_UNUSED) + GError **error) { subset_main_t *subset_main = (subset_main_t *) data; @@ -267,7 +267,7 @@ static gboolean parse_nameids (const char *name, const char *arg, gpointer data, - GError **error G_GNUC_UNUSED) + GError **error) { subset_main_t *subset_main = (subset_main_t *) data; hb_set_t *name_ids = hb_subset_input_nameid_set (subset_main->input); @@ -323,7 +323,7 @@ static gboolean parse_name_languages (const char *name, const char *arg, gpointer data, - GError **error G_GNUC_UNUSED) + GError **error) { subset_main_t *subset_main = (subset_main_t *) data; hb_set_t *name_languages = hb_subset_input_namelangid_set (subset_main->input); @@ -445,7 +445,7 @@ static gboolean parse_drop_tables (const char *name, const char *arg, gpointer data, - GError **error G_GNUC_UNUSED) + GError **error) { subset_main_t *subset_main = (subset_main_t *) data; hb_set_t *drop_tables = hb_subset_input_drop_tables_set (subset_main->input); @@ -478,6 +478,71 @@ parse_drop_tables (const char *name, return true; } +template +static gboolean +parse_file_for (const char *name, + const char *arg, + gpointer data, + GError **error) +{ + FILE *fp = nullptr; + if (0 != strcmp (arg, "-")) + fp = fopen (arg, "r"); + else + fp = stdin; + + if (!fp) + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + "Failed opening file `%s': %s", + arg, strerror (errno)); + return false; + } + + GString *gs = g_string_new (nullptr); + do + { + g_string_set_size (gs, 0); + char buf[BUFSIZ]; + while (fgets (buf, sizeof (buf), fp)) + { + unsigned bytes = strlen (buf); + if (bytes && buf[bytes - 1] == '\n') + { + bytes--; + g_string_append_len (gs, buf, bytes); + break; + } + g_string_append_len (gs, buf, bytes); + } + if (ferror (fp)) + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_FAILED, + "Failed reading file `%s': %s", + arg, strerror (errno)); + return false; + } + g_string_append_c (gs, '\0'); + + if (allow_comments) + { + char *comment = strchr (gs->str, '#'); + if (comment) + *comment = '\0'; + } + + line_parser (name, gs->str, data, error); + + if (*error) + break; + } + while (!feof (fp)); + + g_string_free (gs, false); + + return true; +} + gboolean subset_main_t::collect_rest (const char *name, const char *arg, @@ -503,14 +568,14 @@ subset_main_t::add_options () GOptionEntry glyphset_entries[] = { - {"gids", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_gids, "Specify glyph IDs or ranges to include in the subset", "list of glyph indices/ranges"}, - // gids-file - {"glyphs", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_glyphs, "Specify glyph names to include in the subset", "list of glyph names"}, - // glyphs-file - {"text", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_text, "Specify text to include in the subset", "string"}, - // text-file - {"unicodes", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_unicodes, "Specify Unicode codepoints or ranges to include in the subset", "list of hex numbers/ranges"}, - // unicodes-file + {"gids", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_gids, "Specify glyph IDs or ranges to include in the subset", "list of glyph indices/ranges"}, + {"gids-file", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_file_for, "Specify file to read glyph IDs or ranges from", "filename"}, + {"glyphs", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_glyphs, "Specify glyph names to include in the subset", "list of glyph names"}, + {"glyphs-file", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_file_for, "Specify file to read glyph names fromt", "filename"}, + {"text", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_text, "Specify text to include in the subset", "string"}, + {"text-file", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_file_for, "Specify file to read text from", "filename"}, + {"unicodes", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_unicodes, "Specify Unicode codepoints or ranges to include in the subset", "list of hex numbers/ranges"}, + {"unicodes-file", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_file_for, "Specify file to read Unicode codepoints or ranges from", "filename"}, {nullptr} }; add_group (glyphset_entries, @@ -521,18 +586,18 @@ subset_main_t::add_options () GOptionEntry other_entries[] = { - {"name-IDs", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_nameids, "Subset specified nameids", "list of int numbers"}, - {"name-IDs-", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_nameids, "Subset specified nameids", "list of int numbers"}, - {"name-IDs+", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_nameids, "Subset specified nameids", "list of int numbers"}, - {"name-languages", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_name_languages, "Subset nameRecords with specified language IDs", "list of int numbers"}, - {"name-languages-", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_name_languages, "Subset nameRecords with specified language IDs", "list of int numbers"}, - {"name-languages+", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_name_languages, "Subset nameRecords with specified language IDs", "list of int numbers"}, - {"layout-features", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_layout_features, "Specify set of layout feature tags that will be preserved", "list of string table tags."}, - {"layout-features+",0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_layout_features, "Specify set of layout feature tags that will be preserved", "list of string table tags."}, - {"layout-features-",0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_layout_features, "Specify set of layout feature tags that will be preserved", "list of string table tags."}, - {"drop-tables", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_drop_tables, "Drop the specified tables.", "list of string table tags."}, - {"drop-tables+", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_drop_tables, "Drop the specified tables.", "list of string table tags."}, - {"drop-tables-", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_drop_tables, "Drop the specified tables.", "list of string table tags."}, + {"name-IDs", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_nameids, "Subset specified nameids", "list of int numbers"}, + {"name-IDs-", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_nameids, "Subset specified nameids", "list of int numbers"}, + {"name-IDs+", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_nameids, "Subset specified nameids", "list of int numbers"}, + {"name-languages", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_name_languages, "Subset nameRecords with specified language IDs", "list of int numbers"}, + {"name-languages-", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_name_languages, "Subset nameRecords with specified language IDs", "list of int numbers"}, + {"name-languages+", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_name_languages, "Subset nameRecords with specified language IDs", "list of int numbers"}, + {"layout-features", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_layout_features, "Specify set of layout feature tags that will be preserved", "list of string table tags."}, + {"layout-features+",0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_layout_features, "Specify set of layout feature tags that will be preserved", "list of string table tags."}, + {"layout-features-",0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_layout_features, "Specify set of layout feature tags that will be preserved", "list of string table tags."}, + {"drop-tables", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_drop_tables, "Drop the specified tables.", "list of string table tags."}, + {"drop-tables+", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_drop_tables, "Drop the specified tables.", "list of string table tags."}, + {"drop-tables-", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &parse_drop_tables, "Drop the specified tables.", "list of string table tags."}, {nullptr} }; add_group (other_entries, @@ -586,7 +651,7 @@ subset_main_t::add_options () } void -subset_main_t::post_parse (GError **error G_GNUC_UNUSED) +subset_main_t::post_parse (GError **error) { /* This WILL get called multiple times. Oh well... */ From f60f005b1fec38dcb0630b01520a7b8a105759c5 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 11 Aug 2021 22:36:00 -0600 Subject: [PATCH 25/26] [util/hb-subset] Remove wrong hb_set_destroy() in error paths --- util/hb-subset.cc | 5 ----- 1 file changed, 5 deletions(-) diff --git a/util/hb-subset.cc b/util/hb-subset.cc index 8c7a7892c..5a85174d8 100644 --- a/util/hb-subset.cc +++ b/util/hb-subset.cc @@ -138,7 +138,6 @@ parse_gids (const char *name G_GNUC_UNUSED, hb_codepoint_t start_code = strtoul (s, &p, 10); if (s[0] == '-' || errno || s == p) { - hb_set_destroy (gids); g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, "Failed parsing glyph-index at: '%s'", s); return false; @@ -150,7 +149,6 @@ parse_gids (const char *name G_GNUC_UNUSED, hb_codepoint_t end_code = strtoul (s, &p, 10); if (s[0] == '-' || errno || s == p) { - hb_set_destroy (gids); g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, "Failed parsing glyph-index at: '%s'", s); return false; @@ -158,7 +156,6 @@ parse_gids (const char *name G_GNUC_UNUSED, if (end_code < start_code) { - hb_set_destroy (gids); g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, "Invalid gid-index range %u-%u", start_code, end_code); return false; @@ -300,7 +297,6 @@ parse_nameids (const char *name, hb_codepoint_t u = strtoul (s, &p, 10); if (errno || s == p) { - hb_set_destroy (name_ids); g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, "Failed parsing nameID value at: '%s'", s); return false; @@ -356,7 +352,6 @@ parse_name_languages (const char *name, hb_codepoint_t u = strtoul (s, &p, 10); if (errno || s == p) { - hb_set_destroy (name_languages); g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, "Failed parsing name-language code at: '%s'", s); return false; From 23282c9c9d057c715dde93d18167de9329931354 Mon Sep 17 00:00:00 2001 From: Behdad Esfahbod Date: Wed, 11 Aug 2021 22:49:47 -0600 Subject: [PATCH 26/26] [util/hb-subset] Support ranges in --unicodes / --unicodes-file Fixes https://github.com/harfbuzz/harfbuzz/issues/3109 --- test/shape/hb_test_tools.py | 2 +- util/hb-subset.cc | 68 +++++++++++++++++++++++++------------ util/text-options.hh | 3 +- 3 files changed, 48 insertions(+), 25 deletions(-) diff --git a/test/shape/hb_test_tools.py b/test/shape/hb_test_tools.py index a9368adbd..682b919b6 100644 --- a/test/shape/hb_test_tools.py +++ b/test/shape/hb_test_tools.py @@ -384,7 +384,7 @@ class Unicode: @staticmethod def parse (s): s = re.sub (r"0[xX]", " ", s) - s = re.sub (r"[<+>{},;&#\\xXuUnNiI\n\t]", " ", s) + s = re.sub (r"[<+\->{},;&#\\xXuUnNiI\n\t]", " ", s) return [int (x, 16) for x in s.split ()] @staticmethod diff --git a/util/hb-subset.cc b/util/hb-subset.cc index 5a85174d8..d65ee8215 100644 --- a/util/hb-subset.cc +++ b/util/hb-subset.cc @@ -157,7 +157,7 @@ parse_gids (const char *name G_GNUC_UNUSED, if (end_code < start_code) { g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, - "Invalid gid-index range %u-%u", start_code, end_code); + "Invalid glyph-index range %u-%u", start_code, end_code); return false; } hb_set_add_range (gids, start_code, end_code); @@ -166,6 +166,7 @@ parse_gids (const char *name G_GNUC_UNUSED, { hb_set_add (gids, start_code); } + s = p; } @@ -204,13 +205,13 @@ parse_text (const char *name G_GNUC_UNUSED, return true; } - hb_set_t *codepoints = hb_subset_input_unicode_set (subset_main->input); + hb_set_t *unicodes = hb_subset_input_unicode_set (subset_main->input); for (gchar *c = (gchar *) arg; *c; c = g_utf8_find_next_char(c, nullptr)) { gunichar cp = g_utf8_get_char(c); - hb_set_add (codepoints, cp); + hb_set_add (unicodes, cp); } return true; } @@ -230,33 +231,56 @@ parse_unicodes (const char *name G_GNUC_UNUSED, } // XXX TODO Ranges - hb_set_t *codepoints = hb_subset_input_unicode_set (subset_main->input); + hb_set_t *unicodes = hb_subset_input_unicode_set (subset_main->input); + +#define DELIMITERS "<+->{},;&#\\xXuUnNiI\n\t\v\f\r " + + char *s = (char *) arg; + char *p; + + while (s && *s) { - char *s = (char *) arg; - char *p; + while (*s && strchr (DELIMITERS, *s)) + s++; + if (!*s) + break; - while (s && *s) + errno = 0; + hb_codepoint_t start_code = strtoul (s, &p, 16); + if (errno || s == p) { -#define DELIMITERS "<+>{},;&#\\xXuUnNiI\n\t\v\f\r " + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + "Failed parsing Unicode at: '%s'", s); + return false; + } - while (*s && strchr (DELIMITERS, *s)) - s++; - if (!*s) - break; - - errno = 0; - hb_codepoint_t u = strtoul (s, &p, 16); - if (errno || s == p) + if (p && p[0] == '-') // ranges + { + s = ++p; + hb_codepoint_t end_code = strtoul (s, &p, 16); + if (s[0] == '-' || errno || s == p) { g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, - "Failed parsing Unicode value at: '%s'", s); + "Failed parsing Unicode at: '%s'", s); return false; } - hb_set_add (codepoints, u); - s = p; + if (end_code < start_code) + { + g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, + "Invalid Unicode range %u-%u", start_code, end_code); + return false; + } + hb_set_add_range (unicodes, start_code, end_code); } + else + { + hb_set_add (unicodes, start_code); + } + + s = p; } + return true; } @@ -298,7 +322,7 @@ parse_nameids (const char *name, if (errno || s == p) { g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, - "Failed parsing nameID value at: '%s'", s); + "Failed parsing nameID at: '%s'", s); return false; } @@ -419,7 +443,7 @@ parse_layout_features (const char *name, if (strlen (s) > 4) // table tags are at most 4 bytes { g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, - "Failed parsing table tag value at: '%s'", s); + "Failed parsing table tag at: '%s'", s); return false; } @@ -456,7 +480,7 @@ parse_drop_tables (const char *name, if (strlen (s) > 4) // Table tags are at most 4 bytes. { g_set_error (error, G_OPTION_ERROR, G_OPTION_ERROR_BAD_VALUE, - "Failed parsing table tag value at: '%s'", s); + "Failed parsing table tag at: '%s'", s); return false; } diff --git a/util/text-options.hh b/util/text-options.hh index 90862fe3f..cf780f14b 100644 --- a/util/text-options.hh +++ b/util/text-options.hh @@ -141,14 +141,13 @@ parse_unicodes (const char *name G_GNUC_UNUSED, } else { +#define DELIMITERS "<+->{},;&#\\xXuUnNiI\n\t\v\f\r " char *s = (char *) arg; char *p; while (s && *s) { -#define DELIMITERS "<+>{},;&#\\xXuUnNiI\n\t\v\f\r " - while (*s && strchr (DELIMITERS, *s)) s++; if (!*s)