[HarfBuzz] harfbuzz: Branch 'master' - 21 commits

Behdad Esfahbod behdad at kemper.freedesktop.org
Wed Jan 10 01:51:01 UTC 2018


 CMakeLists.txt                                                                      |   22 
 configure.ac                                                                        |    3 
 src/Makefile.sources                                                                |    4 
 src/hb-aat-layout-common-private.hh                                                 |  430 ++++++++++
 src/hb-aat-layout-morx-table.hh                                                     |  349 ++++++++
 src/hb-aat-layout-private.hh                                                        |   40 
 src/hb-aat-layout.cc                                                                |   66 +
 src/hb-buffer-serialize.cc                                                          |   38 
 src/hb-buffer.h                                                                     |    5 
 src/hb-face.cc                                                                      |    6 
 src/hb-open-type-private.hh                                                         |   16 
 src/hb-ot-cbdt-table.hh                                                             |    4 
 src/hb-ot-cmap-table.hh                                                             |    2 
 src/hb-ot-glyf-table.hh                                                             |    6 
 src/hb-ot-hmtx-table.hh                                                             |    8 
 src/hb-ot-kern-table.hh                                                             |    2 
 src/hb-ot-layout-common-private.hh                                                  |    8 
 src/hb-ot-layout-private.hh                                                         |    5 
 src/hb-ot-layout.cc                                                                 |    8 
 src/hb-ot-post-table.hh                                                             |    2 
 src/hb-ot-shape-fallback.cc                                                         |    2 
 src/hb-ot-shape.cc                                                                  |    6 
 src/hb-uniscribe.cc                                                                 |    2 
 test/fuzzing/run-fuzzer-tests.py                                                    |    2 
 test/shaping/Makefile.am                                                            |  116 +-
 test/shaping/data/in-house/COPYING                                                  |    7 
 test/shaping/data/in-house/tests/arabic-fallback-shaping.tests                      |    1 
 test/shaping/data/in-house/tests/arabic-feature-order.tests                         |    4 
 test/shaping/data/in-house/tests/arabic-like-joining.tests                          |    1 
 test/shaping/data/in-house/tests/arabic-mark-order.tests                            |    6 
 test/shaping/data/in-house/tests/arabic-stch.tests                                  |    1 
 test/shaping/data/in-house/tests/automatic-fractions.tests                          |    3 
 test/shaping/data/in-house/tests/cluster.tests                                      |    2 
 test/shaping/data/in-house/tests/color-fonts.tests                                  |    1 
 test/shaping/data/in-house/tests/context-matching.tests                             |    3 
 test/shaping/data/in-house/tests/cursive-positioning.tests                          |    4 
 test/shaping/data/in-house/tests/default-ignorables.tests                           |    2 
 test/shaping/data/in-house/tests/emoji-flag-tags.tests                              |    2 
 test/shaping/data/in-house/tests/fallback-positioning.tests                         |    2 
 test/shaping/data/in-house/tests/fuzzed.tests                                       |   22 
 test/shaping/data/in-house/tests/hangul-jamo.tests                                  |    2 
 test/shaping/data/in-house/tests/hyphens.tests                                      |    2 
 test/shaping/data/in-house/tests/indic-consonant-with-stacker.tests                 |    4 
 test/shaping/data/in-house/tests/indic-init.tests                                   |    1 
 test/shaping/data/in-house/tests/indic-joiner-candrabindu.tests                     |    2 
 test/shaping/data/in-house/tests/indic-joiners.tests                                |    2 
 test/shaping/data/in-house/tests/indic-old-spec.tests                               |    2 
 test/shaping/data/in-house/tests/indic-pref-blocking.tests                          |    2 
 test/shaping/data/in-house/tests/indic-script-extensions.tests                      |    2 
 test/shaping/data/in-house/tests/indic-special-cases.tests                          |    3 
 test/shaping/data/in-house/tests/indic-syllable.tests                               |    8 
 test/shaping/data/in-house/tests/language-tags.tests                                |   12 
 test/shaping/data/in-house/tests/ligature-id.tests                                  |   36 
 test/shaping/data/in-house/tests/mark-attachment.tests                              |    1 
 test/shaping/data/in-house/tests/mark-filtering-sets.tests                          |    5 
 test/shaping/data/in-house/tests/mongolian-variation-selector.tests                 |    4 
 test/shaping/data/in-house/tests/simple.tests                                       |    2 
 test/shaping/data/in-house/tests/spaces.tests                                       |   17 
 test/shaping/data/in-house/tests/tibetan-contractions-1.tests                       |   60 +
 test/shaping/data/in-house/tests/tibetan-contractions-2.tests                       |   53 +
 test/shaping/data/in-house/tests/tibetan-vowels.tests                               |   11 
 test/shaping/data/in-house/tests/use-marchen.tests                                  |   35 
 test/shaping/data/in-house/tests/use-syllable.tests                                 |    7 
 test/shaping/data/in-house/tests/use.tests                                          |    4 
 test/shaping/data/in-house/tests/variations-rvrn.tests                              |  100 ++
 test/shaping/data/in-house/tests/vertical.tests                                     |    3 
 test/shaping/data/in-house/tests/zero-width-marks.tests                             |   11 
 test/shaping/data/text-rendering-tests/extract-tests.py                             |   45 +
 test/shaping/hb-diff-ngrams                                                         |    5 
 test/shaping/hb-manifest-read                                                       |    5 
 test/shaping/hb-manifest-update                                                     |    5 
 test/shaping/hb_test_tools.py                                                       |   26 
 test/shaping/run-tests.py                                                           |   81 -
 test/shaping/tests/arabic-fallback-shaping.tests                                    |    1 
 test/shaping/tests/arabic-feature-order.tests                                       |    4 
 test/shaping/tests/arabic-like-joining.tests                                        |    1 
 test/shaping/tests/arabic-mark-order.tests                                          |    6 
 test/shaping/tests/arabic-stch.tests                                                |    1 
 test/shaping/tests/automatic-fractions.tests                                        |    3 
 test/shaping/tests/cluster.tests                                                    |    2 
 test/shaping/tests/color-fonts.tests                                                |    1 
 test/shaping/tests/context-matching.tests                                           |    3 
 test/shaping/tests/cursive-positioning.tests                                        |    4 
 test/shaping/tests/default-ignorables.tests                                         |    2 
 test/shaping/tests/emoji-flag-tags.tests                                            |    2 
 test/shaping/tests/fallback-positioning.tests                                       |    2 
 test/shaping/tests/fuzzed.tests                                                     |   22 
 test/shaping/tests/hangul-jamo.tests                                                |    2 
 test/shaping/tests/hyphens.tests                                                    |    2 
 test/shaping/tests/indic-consonant-with-stacker.tests                               |    4 
 test/shaping/tests/indic-init.tests                                                 |    1 
 test/shaping/tests/indic-joiner-candrabindu.tests                                   |    2 
 test/shaping/tests/indic-joiners.tests                                              |    2 
 test/shaping/tests/indic-old-spec.tests                                             |    2 
 test/shaping/tests/indic-pref-blocking.tests                                        |    2 
 test/shaping/tests/indic-script-extensions.tests                                    |    2 
 test/shaping/tests/indic-special-cases.tests                                        |    3 
 test/shaping/tests/indic-syllable.tests                                             |    8 
 test/shaping/tests/language-tags.tests                                              |   12 
 test/shaping/tests/ligature-id.tests                                                |   36 
 test/shaping/tests/mark-attachment.tests                                            |    1 
 test/shaping/tests/mark-filtering-sets.tests                                        |    5 
 test/shaping/tests/mongolian-variation-selector.tests                               |    4 
 test/shaping/tests/simple.tests                                                     |    2 
 test/shaping/tests/spaces.tests                                                     |   17 
 test/shaping/tests/tibetan-contractions-1.tests                                     |   60 -
 test/shaping/tests/tibetan-contractions-2.tests                                     |   53 -
 test/shaping/tests/tibetan-vowels.tests                                             |   11 
 test/shaping/tests/use-marchen.tests                                                |   35 
 test/shaping/tests/use-syllable.tests                                               |    7 
 test/shaping/tests/use.tests                                                        |    4 
 test/shaping/tests/variations-rvrn.tests                                            |  100 --
 test/shaping/tests/vertical.tests                                                   |    3 
 test/shaping/tests/zero-width-marks.tests                                           |   11 
 test/shaping/texts/in-house/shaper-arabic/script-arabic/language-persian/mehran.txt |   14 
 test/shaping/texts/in-house/shaper-arabic/script-syriac/misc/abbreviation-mark.txt  |   11 
 test/shaping/texts/in-house/shaper-default/script-tifinagh/misc/misc.txt            |    1 
 test/shaping/texts/in-house/shaper-myanmar/script-myanmar/misc/otspec.txt           |    1 
 test/shaping/texts/in-house/shaper-use/script-buginese/misc.txt                     |   92 +-
 test/shaping/texts/in-tree/shaper-arabic/script-syriac/misc/abbreviation-mark.txt   |   11 
 util/hb-shape.cc                                                                    |    2 
 util/options.cc                                                                     |   15 
 util/options.hh                                                                     |    2 
 123 files changed, 1632 insertions(+), 733 deletions(-)

New commits:
commit 0ed69c946247feb5bbb5be06d5314c5e0c0fec67
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Wed Jan 10 02:49:36 2018 +0100

    Disable processing of morx table in ot shaper
    
    So I can merge this to master...

diff --git a/src/hb-ot-shape.cc b/src/hb-ot-shape.cc
index 69302488..21f6eda0 100644
--- a/src/hb-ot-shape.cc
+++ b/src/hb-ot-shape.cc
@@ -617,8 +617,8 @@ hb_ot_substitute_complex (hb_ot_shape_context_t *c)
   c->plan->substitute (c->font, buffer);
 
   /* XXX Call morx instead. */
-  OT::hb_apply_context_t ac (0, c->font, c->buffer);
-  hb_aat_layout_substitute (&ac);
+  //OT::hb_apply_context_t ac (0, c->font, c->buffer);
+  //hb_aat_layout_substitute (&ac);
 }
 
 static inline void
commit 3f29ea91441b2e8c86cf379b4803f638a2e8dcfc
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Wed Jan 10 02:48:04 2018 +0100

    [util] Add hb-shape --ned
    
    For not displaying extra data: no clusters, no advance. Just data pertaining
    to where glyphs end up on the screen.

diff --git a/test/shaping/data/text-rendering-tests/extract-tests.py b/test/shaping/data/text-rendering-tests/extract-tests.py
index cb003db9..e8717781 100755
--- a/test/shaping/data/text-rendering-tests/extract-tests.py
+++ b/test/shaping/data/text-rendering-tests/extract-tests.py
@@ -40,6 +40,6 @@ for elt in html.findall(".//*[@class='expected'][@ft:id]", namespaces):
 		assert href[0] == '#'
 		glyphname = '.'.join(href[1:].split('/')[1].split('.')[1:])
 		glyphs.append((glyphname, x, y))
-	print("../fonts/%s:--font-size=1000 --no-clusters --no-advances:%s:%s" % (font, unistr(text), glyphstr(glyphs)))
+	print("../fonts/%s:--font-size=1000 --ned --font-funcs=ft:%s:%s" % (font, unistr(text), glyphstr(glyphs)))
 
 sys.exit(0 if found else 1)
diff --git a/util/options.cc b/util/options.cc
index dc95b71f..23360d8f 100644
--- a/util/options.cc
+++ b/util/options.cc
@@ -830,6 +830,17 @@ parse_verbose (const char *name G_GNUC_UNUSED,
   return true;
 }
 
+static gboolean
+parse_ned (const char *name G_GNUC_UNUSED,
+	   const char *arg G_GNUC_UNUSED,
+	   gpointer    data G_GNUC_UNUSED,
+	   GError    **error G_GNUC_UNUSED)
+{
+  format_options_t *format_opts = (format_options_t *) data;
+  format_opts->show_clusters = format_opts->show_advances = false;
+  return true;
+}
+
 void
 format_options_t::add_options (option_parser_t *parser)
 {
@@ -850,6 +861,8 @@ format_options_t::add_options (option_parser_t *parser)
 			      G_OPTION_ARG_NONE,	&this->show_clusters,		"Do not output cluster indices",					nullptr},
     {"show-extents",	0, 0, G_OPTION_ARG_NONE,	&this->show_extents,		"Output glyph extents",							nullptr},
     {"show-flags",	0, 0, G_OPTION_ARG_NONE,	&this->show_flags,		"Output glyph flags",							nullptr},
+    {"ned",	      'v', G_OPTION_FLAG_NO_ARG,
+			      G_OPTION_ARG_CALLBACK,	(gpointer) &parse_ned,		"No Extra Data; Do not output clusters or advances",			nullptr},
     {"trace",	      'V', 0, G_OPTION_ARG_NONE,	&this->trace,			"Output interim shaping results",					nullptr},
     {nullptr}
   };
commit 7020130665316365c288d0960fc288faa8f5bdf7
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Wed Jan 10 02:37:39 2018 +0100

    [test] Minor

diff --git a/test/shaping/run-tests.py b/test/shaping/run-tests.py
index 56b4d778..b3f5ffcd 100755
--- a/test/shaping/run-tests.py
+++ b/test/shaping/run-tests.py
@@ -9,7 +9,7 @@ def cmd(command):
 		command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 	p.wait ()
 	print (p.stderr.read (), file=sys.stderr, end='')
-	return p.stdout.read ().decode ("utf-8"), p.returncode
+	return p.stdout.read ().decode ("utf-8").strip(), p.returncode
 
 
 args = sys.argv[1:]
commit 5f94b4cc39f2f61b38c954ddac1aae6a052845bd
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Wed Jan 10 02:35:59 2018 +0100

    [kern] Mark unsafe-to-break

diff --git a/src/hb-ot-shape-fallback.cc b/src/hb-ot-shape-fallback.cc
index 458c8eaa..695f6b06 100644
--- a/src/hb-ot-shape-fallback.cc
+++ b/src/hb-ot-shape-fallback.cc
@@ -473,6 +473,7 @@ _hb_ot_shape_fallback_kern (const hb_ot_shape_plan_t *plan,
       pos[idx].x_advance += kern1;
       pos[skippy_iter.idx].x_advance += kern2;
       pos[skippy_iter.idx].x_offset += kern2;
+      buffer->unsafe_to_break (idx, skippy_iter.idx + 1);
     }
 
     if (y_kern)
@@ -482,6 +483,7 @@ _hb_ot_shape_fallback_kern (const hb_ot_shape_plan_t *plan,
       pos[idx].y_advance += kern1;
       pos[skippy_iter.idx].y_advance += kern2;
       pos[skippy_iter.idx].y_offset += kern2;
+      buffer->unsafe_to_break (idx, skippy_iter.idx + 1);
     }
 
     idx = skippy_iter.idx;
commit 71fd6325b6cba2586709022dd33530c61141bf8f
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Wed Jan 10 02:20:14 2018 +0100

    Add option to buffer serialization to not output glyph advances
    
    When advances are not printed, glyph offsets reflect absolute glyph
    positions.
    
    New API:
    HB_BUFFER_SERIALIZE_FLAG_NO_ADVANCES
    hb-shape --no-advances

diff --git a/src/hb-buffer-serialize.cc b/src/hb-buffer-serialize.cc
index ea62e9ff..6a19c43c 100644
--- a/src/hb-buffer-serialize.cc
+++ b/src/hb-buffer-serialize.cc
@@ -109,6 +109,7 @@ _hb_buffer_serialize_glyphs_json (hb_buffer_t *buffer,
 			     nullptr : hb_buffer_get_glyph_positions (buffer, nullptr);
 
   *buf_consumed = 0;
+  hb_position_t x = 0, y = 0;
   for (unsigned int i = start; i < end; i++)
   {
     char b[1024];
@@ -146,9 +147,10 @@ _hb_buffer_serialize_glyphs_json (hb_buffer_t *buffer,
     if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS))
     {
       p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"dx\":%d,\"dy\":%d",
-			     pos[i].x_offset, pos[i].y_offset));
-      p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"ax\":%d,\"ay\":%d",
-			     pos[i].x_advance, pos[i].y_advance));
+			     x+pos[i].x_offset, y+pos[i].y_offset));
+      if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_ADVANCES))
+	p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), ",\"ax\":%d,\"ay\":%d",
+			       pos[i].x_advance, pos[i].y_advance));
     }
 
     if (flags & HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS)
@@ -179,6 +181,12 @@ _hb_buffer_serialize_glyphs_json (hb_buffer_t *buffer,
       *buf = '\0';
     } else
       return i - start;
+
+    if (flags & HB_BUFFER_SERIALIZE_FLAG_NO_ADVANCES)
+    {
+      x += pos[i].x_advance;
+      y += pos[i].y_advance;
+    }
   }
 
   return end - start;
@@ -199,6 +207,7 @@ _hb_buffer_serialize_glyphs_text (hb_buffer_t *buffer,
 			     nullptr : hb_buffer_get_glyph_positions (buffer, nullptr);
 
   *buf_consumed = 0;
+  hb_position_t x = 0, y = 0;
   for (unsigned int i = start; i < end; i++)
   {
     char b[1024];
@@ -223,13 +232,16 @@ _hb_buffer_serialize_glyphs_text (hb_buffer_t *buffer,
 
     if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS))
     {
-      if (pos[i].x_offset || pos[i].y_offset)
-	p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), "@%d,%d", pos[i].x_offset, pos[i].y_offset));
-
-      *p++ = '+';
-      p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), "%d", pos[i].x_advance));
-      if (pos[i].y_advance)
-	p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), ",%d", pos[i].y_advance));
+      if (x+pos[i].x_offset || y+pos[i].y_offset)
+	p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), "@%d,%d", x+pos[i].x_offset, y+pos[i].y_offset));
+
+      if (!(flags & HB_BUFFER_SERIALIZE_FLAG_NO_ADVANCES))
+      {
+	*p++ = '+';
+	p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), "%d", pos[i].x_advance));
+	if (pos[i].y_advance)
+	  p += MAX (0, snprintf (p, ARRAY_LENGTH (b) - (p - b), ",%d", pos[i].y_advance));
+      }
     }
 
     if (flags & HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS)
@@ -255,6 +267,12 @@ _hb_buffer_serialize_glyphs_text (hb_buffer_t *buffer,
       *buf = '\0';
     } else
       return i - start;
+
+    if (flags & HB_BUFFER_SERIALIZE_FLAG_NO_ADVANCES)
+    {
+      x += pos[i].x_advance;
+      y += pos[i].y_advance;
+    }
   }
 
   return end - start;
diff --git a/src/hb-buffer.h b/src/hb-buffer.h
index a8a4b84e..1341be52 100644
--- a/src/hb-buffer.h
+++ b/src/hb-buffer.h
@@ -412,6 +412,8 @@ hb_buffer_normalize_glyphs (hb_buffer_t *buffer);
  * @HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS: do not serialize glyph position information.
  * @HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES: do no serialize glyph name.
  * @HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS: serialize glyph extents.
+ * @HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS: serialize glyph flags. Since: 1.5.0
+ * @HB_BUFFER_SERIALIZE_FLAG_NO_ADVANCES: do not serialize glyph advances. Since: 1.8.0
  *
  * Flags that control what glyph information are serialized in hb_buffer_serialize_glyphs().
  *
@@ -423,7 +425,8 @@ typedef enum { /*< flags >*/
   HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS		= 0x00000002u,
   HB_BUFFER_SERIALIZE_FLAG_NO_GLYPH_NAMES	= 0x00000004u,
   HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS	= 0x00000008u,
-  HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS		= 0x00000010u
+  HB_BUFFER_SERIALIZE_FLAG_GLYPH_FLAGS		= 0x00000010u,
+  HB_BUFFER_SERIALIZE_FLAG_NO_ADVANCES		= 0x00000020u
 } hb_buffer_serialize_flags_t;
 
 /**
diff --git a/util/hb-shape.cc b/util/hb-shape.cc
index dc9f446b..337cd431 100644
--- a/util/hb-shape.cc
+++ b/util/hb-shape.cc
@@ -72,6 +72,8 @@ struct output_buffer_t
       flags |= HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS;
     if (!format.show_positions)
       flags |= HB_BUFFER_SERIALIZE_FLAG_NO_POSITIONS;
+    if (!format.show_advances)
+      flags |= HB_BUFFER_SERIALIZE_FLAG_NO_ADVANCES;
     if (format.show_extents)
       flags |= HB_BUFFER_SERIALIZE_FLAG_GLYPH_EXTENTS;
     if (format.show_flags)
diff --git a/util/options.cc b/util/options.cc
index 5434b156..dc95b71f 100644
--- a/util/options.cc
+++ b/util/options.cc
@@ -844,6 +844,8 @@ format_options_t::add_options (option_parser_t *parser)
 			      G_OPTION_ARG_NONE,	&this->show_glyph_names,	"Output glyph indices instead of names",				nullptr},
     {"no-positions",	0, G_OPTION_FLAG_REVERSE,
 			      G_OPTION_ARG_NONE,	&this->show_positions,		"Do not output glyph positions",					nullptr},
+    {"no-advances",	0, G_OPTION_FLAG_REVERSE,
+			      G_OPTION_ARG_NONE,	&this->show_advances,		"Do not output glyph advances",						nullptr},
     {"no-clusters",	0, G_OPTION_FLAG_REVERSE,
 			      G_OPTION_ARG_NONE,	&this->show_clusters,		"Do not output cluster indices",					nullptr},
     {"show-extents",	0, 0, G_OPTION_ARG_NONE,	&this->show_extents,		"Output glyph extents",							nullptr},
diff --git a/util/options.hh b/util/options.hh
index 4f9d85e5..103cd0d7 100644
--- a/util/options.hh
+++ b/util/options.hh
@@ -584,6 +584,7 @@ struct format_options_t : option_group_t
   format_options_t (option_parser_t *parser) {
     show_glyph_names = true;
     show_positions = true;
+    show_advances = true;
     show_clusters = true;
     show_text = false;
     show_unicode = false;
@@ -628,6 +629,7 @@ struct format_options_t : option_group_t
 
   hb_bool_t show_glyph_names;
   hb_bool_t show_positions;
+  hb_bool_t show_advances;
   hb_bool_t show_clusters;
   hb_bool_t show_text;
   hb_bool_t show_unicode;
commit 316a28f8f8a9c459936ce9f2786d4d64a8f4e2c0
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Wed Jan 10 01:54:12 2018 +0100

    [test] Add script for extracting tests from text-rendering-tests
    
    Work in progress...
    
    https://github.com/unicode-org/text-rendering-tests

diff --git a/test/shaping/data/text-rendering-tests/extract-tests.py b/test/shaping/data/text-rendering-tests/extract-tests.py
new file mode 100755
index 00000000..cb003db9
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/extract-tests.py
@@ -0,0 +1,45 @@
+#!/usr/bin/env python
+
+from __future__ import print_function
+import sys
+import xml.etree.ElementTree as ET
+
+# Can we extract this from HTML element itself? I couldn't.
+namespaces = {
+	'ft': 'https://github.com/OpenType/fonttest',
+	'xlink': 'http://www.w3.org/1999/xlink',
+}
+def ns(s):
+	ns,s = s.split(':')
+	return '{%s}%s' % (namespaces[ns], s)
+
+def unistr(s):
+	return ','.join('U+%04X' % ord(c) for c in s)
+
+def glyphstr(glyphs):
+	out = []
+	for glyphname,x,y in glyphs:
+		if x or y:
+			out.append('%s@%d,%d' % (glyphname, x, y))
+		else:
+			out.append(glyphname)
+	return '['+'|'.join(out)+']'
+
+html = ET.fromstring(sys.stdin.read())
+found = False
+for elt in html.findall(".//*[@class='expected'][@ft:id]", namespaces):
+	found = True
+	name = elt.get(ns('ft:id'))
+	text = elt.get(ns('ft:render'))
+	font = elt.get(ns('ft:font'))
+	glyphs = []
+	for use in elt.findall(".//use"):
+		x = int(use.get('x'))
+		y = int(use.get('y'))
+		href = use.get(ns('xlink:href'))
+		assert href[0] == '#'
+		glyphname = '.'.join(href[1:].split('/')[1].split('.')[1:])
+		glyphs.append((glyphname, x, y))
+	print("../fonts/%s:--font-size=1000 --no-clusters --no-advances:%s:%s" % (font, unistr(text), glyphstr(glyphs)))
+
+sys.exit(0 if found else 1)
commit 6b4d63f295f419f55983a8fc72f582802f55b09f
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Wed Jan 10 01:13:36 2018 +0100

    [test] Minor

diff --git a/test/shaping/run-tests.py b/test/shaping/run-tests.py
index 33009269..56b4d778 100755
--- a/test/shaping/run-tests.py
+++ b/test/shaping/run-tests.py
@@ -4,12 +4,6 @@ from __future__ import print_function
 import sys, os, subprocess
 
 
-try:
-	input = raw_input
-except NameError:
-	pass
-
-
 def cmd(command):
 	p = subprocess.Popen (
 		command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
@@ -33,9 +27,6 @@ if len (args) and args[0] == "--reference":
 	reference = True
 	args = args[1:]
 
-if not reference:
-	print ('hb_shape:', hb_shape)
-
 if not len (args):
 	args = ['-']
 
commit 504f913654d5904604e6abdbf7d0653f40db51fc
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Tue Jan 9 23:15:54 2018 +0100

    [test] Simplify test runner
    
    Always pass hb-shape as first argument to run-tests.py.
    
    Also require automake 1.13.

diff --git a/configure.ac b/configure.ac
index 18bfe2a0..3b68264e 100644
--- a/configure.ac
+++ b/configure.ac
@@ -9,8 +9,7 @@ AC_CONFIG_MACRO_DIR([m4])
 AC_CONFIG_SRCDIR([src/harfbuzz.pc.in])
 AC_CONFIG_HEADERS([config.h])
 
-AM_INIT_AUTOMAKE([1.11.1 gnits tar-ustar dist-bzip2 no-dist-gzip -Wall no-define color-tests -Wno-portability])
-AM_CONDITIONAL(AUTOMAKE_OLDER_THAN_1_13, test $am__api_version = 1.11 -o $am__api_version = 1.12)
+AM_INIT_AUTOMAKE([1.13.0 gnits tar-ustar dist-bzip2 no-dist-gzip -Wall no-define color-tests -Wno-portability])
 AM_SILENT_RULES([yes])
 
 # Initialize libtool
diff --git a/test/shaping/Makefile.am b/test/shaping/Makefile.am
index c63374ed..116a7e44 100644
--- a/test/shaping/Makefile.am
+++ b/test/shaping/Makefile.am
@@ -79,22 +79,8 @@ TESTS = \
 	data/in-house/tests/zero-width-marks.tests \
 	$(NULL)
 
-TEST_EXTENSIONS = \
-	.tests \
-	$(NULL)
-
-AM_TESTS_ENVIRONMENT = \
-	EXEEXT="$(EXEEXT)"; \
-	export EXEEXT; \
-	$(NULL)
-
-if AUTOMAKE_OLDER_THAN_1_13
-TESTS_ENVIRONMENT = \
-	$(AM_TESTS_ENVIRONMENT) \
-	$(TESTS_LOG_COMPILER) \
-	$(NULL)
-endif
+TEST_EXTENSIONS = .tests
 
-TESTS_LOG_COMPILER = $(srcdir)/run-tests.py
+TESTS_LOG_COMPILER = $(srcdir)/run-tests.py $(top_builddir)/util/hb-shape$(EXEEXT)
 
 -include $(top_srcdir)/git.mk
diff --git a/test/shaping/run-tests.py b/test/shaping/run-tests.py
index 76c1bd38..33009269 100755
--- a/test/shaping/run-tests.py
+++ b/test/shaping/run-tests.py
@@ -18,25 +18,13 @@ def cmd(command):
 	return p.stdout.read ().decode ("utf-8"), p.returncode
 
 
-builddir = os.environ.get ("builddir", ".")
-top_builddir = os.environ.get ("top_builddir",
-	os.path.normpath (os.path.join (builddir, "..", "..")))
-utildir = os.environ.get ("utildir", "util")
-EXEEXT = os.environ.get ("EXEEXT", "")
-
-extra_options = "--verify"
-hb_shape = os.path.join (top_builddir, utildir, "hb-shape" + EXEEXT)
-
 args = sys.argv[1:]
+if not args or sys.argv[1].find('hb-shape') == -1 or not os.path.exists (sys.argv[1]):
+	print ("""First argument does not seem to point to usable hb-shape.""")
+	sys.exit (1)
+hb_shape, args = args[0], args[1:]
 
-if not os.path.exists (hb_shape):
-	if len (sys.argv) == 1 or sys.argv[1].find('hb-shape') == -1 or not os.path.exists (sys.argv[1]):
-		print ("""Failed to find hb-shape binary automatically,
-please provide it as the first argument to the tool""")
-		sys.exit (1)
-
-	hb_shape = args[0]
-	args = args[1:]
+extra_options = "--verify"
 
 fails = 0
 
commit 141db8b7a3abf2adbf0caa0659d9239396f6a2db
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Tue Jan 9 23:11:00 2018 +0100

    [test] Minor

diff --git a/test/shaping/Makefile.am b/test/shaping/Makefile.am
index 3208007d..c63374ed 100644
--- a/test/shaping/Makefile.am
+++ b/test/shaping/Makefile.am
@@ -86,10 +86,6 @@ TEST_EXTENSIONS = \
 AM_TESTS_ENVIRONMENT = \
 	EXEEXT="$(EXEEXT)"; \
 	export EXEEXT; \
-	srcdir="$(srcdir)"; \
-	export srcdir; \
-	builddir="$(builddir)"; \
-	export builddir; \
 	$(NULL)
 
 if AUTOMAKE_OLDER_THAN_1_13
diff --git a/test/shaping/run-tests.py b/test/shaping/run-tests.py
index 7f53e494..76c1bd38 100755
--- a/test/shaping/run-tests.py
+++ b/test/shaping/run-tests.py
@@ -20,7 +20,7 @@ def cmd(command):
 
 builddir = os.environ.get ("builddir", ".")
 top_builddir = os.environ.get ("top_builddir",
-	os.path.normpath (os.path.join (os.getcwd (), "..", "..")))
+	os.path.normpath (os.path.join (builddir, "..", "..")))
 utildir = os.environ.get ("utildir", "util")
 EXEEXT = os.environ.get ("EXEEXT", "")
 
@@ -30,7 +30,7 @@ hb_shape = os.path.join (top_builddir, utildir, "hb-shape" + EXEEXT)
 args = sys.argv[1:]
 
 if not os.path.exists (hb_shape):
-	if len (sys.argv) == 1 or not os.path.exists (sys.argv[1]):
+	if len (sys.argv) == 1 or sys.argv[1].find('hb-shape') == -1 or not os.path.exists (sys.argv[1]):
 		print ("""Failed to find hb-shape binary automatically,
 please provide it as the first argument to the tool""")
 		sys.exit (1)
commit 44c65eee28e2de5c54028cb0ef144f56da16ef58
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Tue Jan 9 21:58:57 2018 +0100

    [test] Reorganize test suite
    
    In anticipation of importing more test suites.

diff --git a/test/fuzzing/run-fuzzer-tests.py b/test/fuzzing/run-fuzzer-tests.py
index 23922ccd..79e47c9f 100755
--- a/test/fuzzing/run-fuzzer-tests.py
+++ b/test/fuzzing/run-fuzzer-tests.py
@@ -19,7 +19,7 @@ please provide it as the first argument to the tool""")
 print ('hb_fuzzer:', hb_fuzzer)
 fails = 0
 
-for line in open (os.path.join (srcdir, "..", "shaping", "tests", "misc", "fuzzed.tests")):
+for line in open (os.path.join (srcdir, "..", "shaping", "data", "in-house", "tests", "fuzzed.tests")):
 	font = line.split (":")[0]
 
 	p = subprocess.Popen (
diff --git a/test/shaping/Makefile.am b/test/shaping/Makefile.am
index ffcba977..3208007d 100644
--- a/test/shaping/Makefile.am
+++ b/test/shaping/Makefile.am
@@ -21,8 +21,8 @@ EXTRA_DIST += \
 	hb-unicode-prettyname \
 	record-test.sh \
 	run-tests.py \
-	texts/in-tree \
-	fonts/sha1sum \
+	texts/in-house \
+	data/in-house/fonts \
 	CMakeLists.txt \
 	$(TESTS) \
 	$(NULL)
@@ -36,47 +36,47 @@ CLEANFILES += \
 	$(NULL)
 
 TESTS = \
-	tests/misc/arabic-fallback-shaping.tests \
-	tests/misc/arabic-feature-order.tests \
-	tests/misc/arabic-like-joining.tests \
-	tests/misc/arabic-mark-order.tests \
-	tests/misc/arabic-stch.tests \
-	tests/misc/automatic-fractions.tests \
-	tests/misc/cluster.tests \
-	tests/misc/color-fonts.tests \
-	tests/misc/context-matching.tests \
-	tests/misc/cursive-positioning.tests \
-	tests/misc/default-ignorables.tests \
-	tests/misc/emoji-flag-tags.tests \
-	tests/misc/fallback-positioning.tests \
-	tests/misc/fuzzed.tests \
-	tests/misc/hangul-jamo.tests \
-	tests/misc/hyphens.tests \
-	tests/misc/indic-consonant-with-stacker.tests \
-	tests/misc/indic-init.tests \
-	tests/misc/indic-joiner-candrabindu.tests \
-	tests/misc/indic-joiners.tests \
-	tests/misc/indic-old-spec.tests \
-	tests/misc/indic-pref-blocking.tests \
-	tests/misc/indic-script-extensions.tests \
-	tests/misc/indic-special-cases.tests \
-	tests/misc/indic-syllable.tests \
-	tests/misc/language-tags.tests \
-	tests/misc/ligature-id.tests \
-	tests/misc/mark-attachment.tests \
-	tests/misc/mark-filtering-sets.tests \
-	tests/misc/mongolian-variation-selector.tests \
-	tests/misc/spaces.tests \
-	tests/misc/simple.tests \
-	tests/misc/tibetan-contractions-1.tests \
-	tests/misc/tibetan-contractions-2.tests \
-	tests/misc/tibetan-vowels.tests \
-	tests/misc/use.tests \
-	tests/misc/use-marchen.tests \
-	tests/misc/use-syllable.tests \
-	tests/misc/variations-rvrn.tests \
-	tests/misc/vertical.tests \
-	tests/misc/zero-width-marks.tests \
+	data/in-house/tests/arabic-fallback-shaping.tests \
+	data/in-house/tests/arabic-feature-order.tests \
+	data/in-house/tests/arabic-like-joining.tests \
+	data/in-house/tests/arabic-mark-order.tests \
+	data/in-house/tests/arabic-stch.tests \
+	data/in-house/tests/automatic-fractions.tests \
+	data/in-house/tests/cluster.tests \
+	data/in-house/tests/color-fonts.tests \
+	data/in-house/tests/context-matching.tests \
+	data/in-house/tests/cursive-positioning.tests \
+	data/in-house/tests/default-ignorables.tests \
+	data/in-house/tests/emoji-flag-tags.tests \
+	data/in-house/tests/fallback-positioning.tests \
+	data/in-house/tests/fuzzed.tests \
+	data/in-house/tests/hangul-jamo.tests \
+	data/in-house/tests/hyphens.tests \
+	data/in-house/tests/indic-consonant-with-stacker.tests \
+	data/in-house/tests/indic-init.tests \
+	data/in-house/tests/indic-joiner-candrabindu.tests \
+	data/in-house/tests/indic-joiners.tests \
+	data/in-house/tests/indic-old-spec.tests \
+	data/in-house/tests/indic-pref-blocking.tests \
+	data/in-house/tests/indic-script-extensions.tests \
+	data/in-house/tests/indic-special-cases.tests \
+	data/in-house/tests/indic-syllable.tests \
+	data/in-house/tests/language-tags.tests \
+	data/in-house/tests/ligature-id.tests \
+	data/in-house/tests/mark-attachment.tests \
+	data/in-house/tests/mark-filtering-sets.tests \
+	data/in-house/tests/mongolian-variation-selector.tests \
+	data/in-house/tests/spaces.tests \
+	data/in-house/tests/simple.tests \
+	data/in-house/tests/tibetan-contractions-1.tests \
+	data/in-house/tests/tibetan-contractions-2.tests \
+	data/in-house/tests/tibetan-vowels.tests \
+	data/in-house/tests/use.tests \
+	data/in-house/tests/use-marchen.tests \
+	data/in-house/tests/use-syllable.tests \
+	data/in-house/tests/variations-rvrn.tests \
+	data/in-house/tests/vertical.tests \
+	data/in-house/tests/zero-width-marks.tests \
 	$(NULL)
 
 TEST_EXTENSIONS = \
diff --git a/test/shaping/fonts/COPYING b/test/shaping/data/in-house/COPYING
similarity index 93%
rename from test/shaping/fonts/COPYING
rename to test/shaping/data/in-house/COPYING
index 87faaca0..52c48c44 100644
--- a/test/shaping/fonts/COPYING
+++ b/test/shaping/data/in-house/COPYING
@@ -1,9 +1,4 @@
-The following license applies to these fonts:
-
-    sha1sum/341421e629668b1a1242245d39238ca48432d35d.ttf
-    sha1sum/55c88ebbe938680b08f92c3de20713183e0c7481.ttf
-    sha1sum/663aef6b019dbf45ffd74089e2b5f2496ceceb18.ttf
-    sha1sum/a014549f766436cf55b2ceb40e462038938ee899.ttf
+The following license applies to many of the fonts in this folder.
 
 
 This Font Software is licensed under the SIL Open Font License,
diff --git a/test/shaping/fonts/sha1sum/0509e80afb379d16560e9e47bdd7d888bebdebc6.ttf b/test/shaping/data/in-house/fonts/0509e80afb379d16560e9e47bdd7d888bebdebc6.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/0509e80afb379d16560e9e47bdd7d888bebdebc6.ttf
rename to test/shaping/data/in-house/fonts/0509e80afb379d16560e9e47bdd7d888bebdebc6.ttf
diff --git a/test/shaping/fonts/sha1sum/051d92f8bc6ff724511b296c27623f824de256e9.ttf b/test/shaping/data/in-house/fonts/051d92f8bc6ff724511b296c27623f824de256e9.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/051d92f8bc6ff724511b296c27623f824de256e9.ttf
rename to test/shaping/data/in-house/fonts/051d92f8bc6ff724511b296c27623f824de256e9.ttf
diff --git a/test/shaping/fonts/sha1sum/074a5ae6b19de8f29772fdd5df2d3d833f81f5e6.ttf b/test/shaping/data/in-house/fonts/074a5ae6b19de8f29772fdd5df2d3d833f81f5e6.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/074a5ae6b19de8f29772fdd5df2d3d833f81f5e6.ttf
rename to test/shaping/data/in-house/fonts/074a5ae6b19de8f29772fdd5df2d3d833f81f5e6.ttf
diff --git a/test/shaping/fonts/sha1sum/07f054357ff8638bac3711b422a1e31180bba863.ttf b/test/shaping/data/in-house/fonts/07f054357ff8638bac3711b422a1e31180bba863.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/07f054357ff8638bac3711b422a1e31180bba863.ttf
rename to test/shaping/data/in-house/fonts/07f054357ff8638bac3711b422a1e31180bba863.ttf
diff --git a/test/shaping/fonts/sha1sum/15dfc433a135a658b9f4b1a861b5cdd9658ccbb9.ttf b/test/shaping/data/in-house/fonts/15dfc433a135a658b9f4b1a861b5cdd9658ccbb9.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/15dfc433a135a658b9f4b1a861b5cdd9658ccbb9.ttf
rename to test/shaping/data/in-house/fonts/15dfc433a135a658b9f4b1a861b5cdd9658ccbb9.ttf
diff --git a/test/shaping/fonts/sha1sum/1735326da89f0818cd8c51a0600e9789812c0f94.ttf b/test/shaping/data/in-house/fonts/1735326da89f0818cd8c51a0600e9789812c0f94.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/1735326da89f0818cd8c51a0600e9789812c0f94.ttf
rename to test/shaping/data/in-house/fonts/1735326da89f0818cd8c51a0600e9789812c0f94.ttf
diff --git a/test/shaping/fonts/sha1sum/191826b9643e3f124d865d617ae609db6a2ce203.ttf b/test/shaping/data/in-house/fonts/191826b9643e3f124d865d617ae609db6a2ce203.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/191826b9643e3f124d865d617ae609db6a2ce203.ttf
rename to test/shaping/data/in-house/fonts/191826b9643e3f124d865d617ae609db6a2ce203.ttf
diff --git a/test/shaping/fonts/sha1sum/1a3d8f381387dd29be1e897e4b5100ac8b4829e1.ttf b/test/shaping/data/in-house/fonts/1a3d8f381387dd29be1e897e4b5100ac8b4829e1.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/1a3d8f381387dd29be1e897e4b5100ac8b4829e1.ttf
rename to test/shaping/data/in-house/fonts/1a3d8f381387dd29be1e897e4b5100ac8b4829e1.ttf
diff --git a/test/shaping/fonts/sha1sum/1a6f1687b7a221f9f2c834b0b360d3c8463b6daf.ttf b/test/shaping/data/in-house/fonts/1a6f1687b7a221f9f2c834b0b360d3c8463b6daf.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/1a6f1687b7a221f9f2c834b0b360d3c8463b6daf.ttf
rename to test/shaping/data/in-house/fonts/1a6f1687b7a221f9f2c834b0b360d3c8463b6daf.ttf
diff --git a/test/shaping/fonts/sha1sum/1c04a16f32a39c26c851b7fc014d2e8d298ba2b8.ttf b/test/shaping/data/in-house/fonts/1c04a16f32a39c26c851b7fc014d2e8d298ba2b8.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/1c04a16f32a39c26c851b7fc014d2e8d298ba2b8.ttf
rename to test/shaping/data/in-house/fonts/1c04a16f32a39c26c851b7fc014d2e8d298ba2b8.ttf
diff --git a/test/shaping/fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf b/test/shaping/data/in-house/fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf
rename to test/shaping/data/in-house/fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf
diff --git a/test/shaping/fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf b/test/shaping/data/in-house/fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf
rename to test/shaping/data/in-house/fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf
diff --git a/test/shaping/fonts/sha1sum/205edd09bd3d141cc9580f650109556cc28b22cb.ttf b/test/shaping/data/in-house/fonts/205edd09bd3d141cc9580f650109556cc28b22cb.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/205edd09bd3d141cc9580f650109556cc28b22cb.ttf
rename to test/shaping/data/in-house/fonts/205edd09bd3d141cc9580f650109556cc28b22cb.ttf
diff --git a/test/shaping/fonts/sha1sum/217a934cfe15c548b572c203dceb2befdf026462.ttf b/test/shaping/data/in-house/fonts/217a934cfe15c548b572c203dceb2befdf026462.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/217a934cfe15c548b572c203dceb2befdf026462.ttf
rename to test/shaping/data/in-house/fonts/217a934cfe15c548b572c203dceb2befdf026462.ttf
diff --git a/test/shaping/fonts/sha1sum/21b7fb9c1eeae260473809fbc1fe330f66a507cd.ttf b/test/shaping/data/in-house/fonts/21b7fb9c1eeae260473809fbc1fe330f66a507cd.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/21b7fb9c1eeae260473809fbc1fe330f66a507cd.ttf
rename to test/shaping/data/in-house/fonts/21b7fb9c1eeae260473809fbc1fe330f66a507cd.ttf
diff --git a/test/shaping/fonts/sha1sum/226bc2deab3846f1a682085f70c67d0421014144.ttf b/test/shaping/data/in-house/fonts/226bc2deab3846f1a682085f70c67d0421014144.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/226bc2deab3846f1a682085f70c67d0421014144.ttf
rename to test/shaping/data/in-house/fonts/226bc2deab3846f1a682085f70c67d0421014144.ttf
diff --git a/test/shaping/fonts/sha1sum/243798dd281c1c77c065958e1ff467420faa9bde.ttf b/test/shaping/data/in-house/fonts/243798dd281c1c77c065958e1ff467420faa9bde.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/243798dd281c1c77c065958e1ff467420faa9bde.ttf
rename to test/shaping/data/in-house/fonts/243798dd281c1c77c065958e1ff467420faa9bde.ttf
diff --git a/test/shaping/fonts/sha1sum/24b8d24d00ae86f49791b746da4c9d3f717a51a8.ttf b/test/shaping/data/in-house/fonts/24b8d24d00ae86f49791b746da4c9d3f717a51a8.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/24b8d24d00ae86f49791b746da4c9d3f717a51a8.ttf
rename to test/shaping/data/in-house/fonts/24b8d24d00ae86f49791b746da4c9d3f717a51a8.ttf
diff --git a/test/shaping/fonts/sha1sum/270b89df543a7e48e206a2d830c0e10e5265c630.ttf b/test/shaping/data/in-house/fonts/270b89df543a7e48e206a2d830c0e10e5265c630.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/270b89df543a7e48e206a2d830c0e10e5265c630.ttf
rename to test/shaping/data/in-house/fonts/270b89df543a7e48e206a2d830c0e10e5265c630.ttf
diff --git a/test/shaping/fonts/sha1sum/298c9e1d955f10f6f72c6915c3c6ff9bf9695cec.ttf b/test/shaping/data/in-house/fonts/298c9e1d955f10f6f72c6915c3c6ff9bf9695cec.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/298c9e1d955f10f6f72c6915c3c6ff9bf9695cec.ttf
rename to test/shaping/data/in-house/fonts/298c9e1d955f10f6f72c6915c3c6ff9bf9695cec.ttf
diff --git a/test/shaping/fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf b/test/shaping/data/in-house/fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf
rename to test/shaping/data/in-house/fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf
diff --git a/test/shaping/fonts/sha1sum/341421e629668b1a1242245d39238ca48432d35d.ttf b/test/shaping/data/in-house/fonts/341421e629668b1a1242245d39238ca48432d35d.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/341421e629668b1a1242245d39238ca48432d35d.ttf
rename to test/shaping/data/in-house/fonts/341421e629668b1a1242245d39238ca48432d35d.ttf
diff --git a/test/shaping/fonts/sha1sum/3493e92eaded2661cadde752a39f9d58b11f0326.ttf b/test/shaping/data/in-house/fonts/3493e92eaded2661cadde752a39f9d58b11f0326.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/3493e92eaded2661cadde752a39f9d58b11f0326.ttf
rename to test/shaping/data/in-house/fonts/3493e92eaded2661cadde752a39f9d58b11f0326.ttf
diff --git a/test/shaping/fonts/sha1sum/3511ff5c1647150595846ac414c595cccac34f18.ttf b/test/shaping/data/in-house/fonts/3511ff5c1647150595846ac414c595cccac34f18.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/3511ff5c1647150595846ac414c595cccac34f18.ttf
rename to test/shaping/data/in-house/fonts/3511ff5c1647150595846ac414c595cccac34f18.ttf
diff --git a/test/shaping/fonts/sha1sum/37033cc5cf37bb223d7355153016b6ccece93b28.ttf b/test/shaping/data/in-house/fonts/37033cc5cf37bb223d7355153016b6ccece93b28.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/37033cc5cf37bb223d7355153016b6ccece93b28.ttf
rename to test/shaping/data/in-house/fonts/37033cc5cf37bb223d7355153016b6ccece93b28.ttf
diff --git a/test/shaping/fonts/sha1sum/373e67bf41ca264e260a9716162b71a23549e885.ttf b/test/shaping/data/in-house/fonts/373e67bf41ca264e260a9716162b71a23549e885.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/373e67bf41ca264e260a9716162b71a23549e885.ttf
rename to test/shaping/data/in-house/fonts/373e67bf41ca264e260a9716162b71a23549e885.ttf
diff --git a/test/shaping/fonts/sha1sum/375d6ae32a3cbe52fbf81a4e5777e3377675d5a3.ttf b/test/shaping/data/in-house/fonts/375d6ae32a3cbe52fbf81a4e5777e3377675d5a3.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/375d6ae32a3cbe52fbf81a4e5777e3377675d5a3.ttf
rename to test/shaping/data/in-house/fonts/375d6ae32a3cbe52fbf81a4e5777e3377675d5a3.ttf
diff --git a/test/shaping/fonts/sha1sum/3cae6bfe5b57c07ba81ddbd54c02fe4f3a1e3bf6.ttf b/test/shaping/data/in-house/fonts/3cae6bfe5b57c07ba81ddbd54c02fe4f3a1e3bf6.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/3cae6bfe5b57c07ba81ddbd54c02fe4f3a1e3bf6.ttf
rename to test/shaping/data/in-house/fonts/3cae6bfe5b57c07ba81ddbd54c02fe4f3a1e3bf6.ttf
diff --git a/test/shaping/fonts/sha1sum/3d0b77a2360aa6faa1385aaa510509ab70dfbeff.ttf b/test/shaping/data/in-house/fonts/3d0b77a2360aa6faa1385aaa510509ab70dfbeff.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/3d0b77a2360aa6faa1385aaa510509ab70dfbeff.ttf
rename to test/shaping/data/in-house/fonts/3d0b77a2360aa6faa1385aaa510509ab70dfbeff.ttf
diff --git a/test/shaping/fonts/sha1sum/43979b90b2dd929723cf4fe1715990bcb9c9a56b.ttf b/test/shaping/data/in-house/fonts/43979b90b2dd929723cf4fe1715990bcb9c9a56b.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/43979b90b2dd929723cf4fe1715990bcb9c9a56b.ttf
rename to test/shaping/data/in-house/fonts/43979b90b2dd929723cf4fe1715990bcb9c9a56b.ttf
diff --git a/test/shaping/fonts/sha1sum/43ef465752be9af900745f72fe29cb853a1401a5.ttf b/test/shaping/data/in-house/fonts/43ef465752be9af900745f72fe29cb853a1401a5.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/43ef465752be9af900745f72fe29cb853a1401a5.ttf
rename to test/shaping/data/in-house/fonts/43ef465752be9af900745f72fe29cb853a1401a5.ttf
diff --git a/test/shaping/fonts/sha1sum/45855bc8d46332b39c4ab9e2ee1a26b1f896da6b.ttf b/test/shaping/data/in-house/fonts/45855bc8d46332b39c4ab9e2ee1a26b1f896da6b.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/45855bc8d46332b39c4ab9e2ee1a26b1f896da6b.ttf
rename to test/shaping/data/in-house/fonts/45855bc8d46332b39c4ab9e2ee1a26b1f896da6b.ttf
diff --git a/test/shaping/fonts/sha1sum/49c9f7485c1392fa09a1b801bc2ffea79275f22e.ttf b/test/shaping/data/in-house/fonts/49c9f7485c1392fa09a1b801bc2ffea79275f22e.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/49c9f7485c1392fa09a1b801bc2ffea79275f22e.ttf
rename to test/shaping/data/in-house/fonts/49c9f7485c1392fa09a1b801bc2ffea79275f22e.ttf
diff --git a/test/shaping/fonts/sha1sum/4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf b/test/shaping/data/in-house/fonts/4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf
rename to test/shaping/data/in-house/fonts/4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf
diff --git a/test/shaping/fonts/sha1sum/4fac3929fc3332834e93673780ec0fe94342d193.ttf b/test/shaping/data/in-house/fonts/4fac3929fc3332834e93673780ec0fe94342d193.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/4fac3929fc3332834e93673780ec0fe94342d193.ttf
rename to test/shaping/data/in-house/fonts/4fac3929fc3332834e93673780ec0fe94342d193.ttf
diff --git a/test/shaping/fonts/sha1sum/5028afb650b1bb718ed2131e872fbcce57828fff.ttf b/test/shaping/data/in-house/fonts/5028afb650b1bb718ed2131e872fbcce57828fff.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/5028afb650b1bb718ed2131e872fbcce57828fff.ttf
rename to test/shaping/data/in-house/fonts/5028afb650b1bb718ed2131e872fbcce57828fff.ttf
diff --git a/test/shaping/fonts/sha1sum/53374c7ca3657be37efde7ed02ae34229a56ae1f.ttf b/test/shaping/data/in-house/fonts/53374c7ca3657be37efde7ed02ae34229a56ae1f.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/53374c7ca3657be37efde7ed02ae34229a56ae1f.ttf
rename to test/shaping/data/in-house/fonts/53374c7ca3657be37efde7ed02ae34229a56ae1f.ttf
diff --git a/test/shaping/fonts/sha1sum/54674a3111d209fb6be0ed31745314b7a8d2c244.ttf b/test/shaping/data/in-house/fonts/54674a3111d209fb6be0ed31745314b7a8d2c244.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/54674a3111d209fb6be0ed31745314b7a8d2c244.ttf
rename to test/shaping/data/in-house/fonts/54674a3111d209fb6be0ed31745314b7a8d2c244.ttf
diff --git a/test/shaping/fonts/sha1sum/558661aa659912f4d30ecd27bd09835171a8e2b0.ttf b/test/shaping/data/in-house/fonts/558661aa659912f4d30ecd27bd09835171a8e2b0.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/558661aa659912f4d30ecd27bd09835171a8e2b0.ttf
rename to test/shaping/data/in-house/fonts/558661aa659912f4d30ecd27bd09835171a8e2b0.ttf
diff --git a/test/shaping/fonts/sha1sum/55c88ebbe938680b08f92c3de20713183e0c7481.ttf b/test/shaping/data/in-house/fonts/55c88ebbe938680b08f92c3de20713183e0c7481.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/55c88ebbe938680b08f92c3de20713183e0c7481.ttf
rename to test/shaping/data/in-house/fonts/55c88ebbe938680b08f92c3de20713183e0c7481.ttf
diff --git a/test/shaping/fonts/sha1sum/56cfd0e18d07f41c38e9598545a6d369127fc6f9.ttf b/test/shaping/data/in-house/fonts/56cfd0e18d07f41c38e9598545a6d369127fc6f9.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/56cfd0e18d07f41c38e9598545a6d369127fc6f9.ttf
rename to test/shaping/data/in-house/fonts/56cfd0e18d07f41c38e9598545a6d369127fc6f9.ttf
diff --git a/test/shaping/fonts/sha1sum/57a9d9f83020155cbb1d2be1f43d82388cbecc88.ttf b/test/shaping/data/in-house/fonts/57a9d9f83020155cbb1d2be1f43d82388cbecc88.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/57a9d9f83020155cbb1d2be1f43d82388cbecc88.ttf
rename to test/shaping/data/in-house/fonts/57a9d9f83020155cbb1d2be1f43d82388cbecc88.ttf
diff --git a/test/shaping/fonts/sha1sum/59a585a63b3df608fbeef00956c8c108deec7de6.ttf b/test/shaping/data/in-house/fonts/59a585a63b3df608fbeef00956c8c108deec7de6.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/59a585a63b3df608fbeef00956c8c108deec7de6.ttf
rename to test/shaping/data/in-house/fonts/59a585a63b3df608fbeef00956c8c108deec7de6.ttf
diff --git a/test/shaping/fonts/sha1sum/5a5daf5eb5a4db77a2baa3ad9c7a6ed6e0655fa8.ttf b/test/shaping/data/in-house/fonts/5a5daf5eb5a4db77a2baa3ad9c7a6ed6e0655fa8.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/5a5daf5eb5a4db77a2baa3ad9c7a6ed6e0655fa8.ttf
rename to test/shaping/data/in-house/fonts/5a5daf5eb5a4db77a2baa3ad9c7a6ed6e0655fa8.ttf
diff --git a/test/shaping/fonts/sha1sum/5dfad7735c6a67085f1b90d4d497e32907db4c78.ttf b/test/shaping/data/in-house/fonts/5dfad7735c6a67085f1b90d4d497e32907db4c78.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/5dfad7735c6a67085f1b90d4d497e32907db4c78.ttf
rename to test/shaping/data/in-house/fonts/5dfad7735c6a67085f1b90d4d497e32907db4c78.ttf
diff --git a/test/shaping/fonts/sha1sum/641bd9db850193064d17575053ae2bf8ec149ddc.ttf b/test/shaping/data/in-house/fonts/641bd9db850193064d17575053ae2bf8ec149ddc.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/641bd9db850193064d17575053ae2bf8ec149ddc.ttf
rename to test/shaping/data/in-house/fonts/641bd9db850193064d17575053ae2bf8ec149ddc.ttf
diff --git a/test/shaping/fonts/sha1sum/663aef6b019dbf45ffd74089e2b5f2496ceceb18.ttf b/test/shaping/data/in-house/fonts/663aef6b019dbf45ffd74089e2b5f2496ceceb18.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/663aef6b019dbf45ffd74089e2b5f2496ceceb18.ttf
rename to test/shaping/data/in-house/fonts/663aef6b019dbf45ffd74089e2b5f2496ceceb18.ttf
diff --git a/test/shaping/fonts/sha1sum/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf b/test/shaping/data/in-house/fonts/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf
rename to test/shaping/data/in-house/fonts/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf
diff --git a/test/shaping/fonts/sha1sum/6ff0fbead4462d9f229167b4e6839eceb8465058.ttf b/test/shaping/data/in-house/fonts/6ff0fbead4462d9f229167b4e6839eceb8465058.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/6ff0fbead4462d9f229167b4e6839eceb8465058.ttf
rename to test/shaping/data/in-house/fonts/6ff0fbead4462d9f229167b4e6839eceb8465058.ttf
diff --git a/test/shaping/fonts/sha1sum/706c5d7b625f207bc0d874c67237aad6f1e9cd6f.ttf b/test/shaping/data/in-house/fonts/706c5d7b625f207bc0d874c67237aad6f1e9cd6f.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/706c5d7b625f207bc0d874c67237aad6f1e9cd6f.ttf
rename to test/shaping/data/in-house/fonts/706c5d7b625f207bc0d874c67237aad6f1e9cd6f.ttf
diff --git a/test/shaping/fonts/sha1sum/757ebd573617a24aa9dfbf0b885c54875c6fe06b.ttf b/test/shaping/data/in-house/fonts/757ebd573617a24aa9dfbf0b885c54875c6fe06b.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/757ebd573617a24aa9dfbf0b885c54875c6fe06b.ttf
rename to test/shaping/data/in-house/fonts/757ebd573617a24aa9dfbf0b885c54875c6fe06b.ttf
diff --git a/test/shaping/fonts/sha1sum/7a37dc4d5bf018456aea291cee06daf004c0221c.ttf b/test/shaping/data/in-house/fonts/7a37dc4d5bf018456aea291cee06daf004c0221c.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/7a37dc4d5bf018456aea291cee06daf004c0221c.ttf
rename to test/shaping/data/in-house/fonts/7a37dc4d5bf018456aea291cee06daf004c0221c.ttf
diff --git a/test/shaping/fonts/sha1sum/7e14e7883ed152baa158b80e207b66114c823a8b.ttf b/test/shaping/data/in-house/fonts/7e14e7883ed152baa158b80e207b66114c823a8b.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/7e14e7883ed152baa158b80e207b66114c823a8b.ttf
rename to test/shaping/data/in-house/fonts/7e14e7883ed152baa158b80e207b66114c823a8b.ttf
diff --git a/test/shaping/fonts/sha1sum/8099955657a54e9ee38a6ba1d6f950ce58e3cc25.ttf b/test/shaping/data/in-house/fonts/8099955657a54e9ee38a6ba1d6f950ce58e3cc25.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/8099955657a54e9ee38a6ba1d6f950ce58e3cc25.ttf
rename to test/shaping/data/in-house/fonts/8099955657a54e9ee38a6ba1d6f950ce58e3cc25.ttf
diff --git a/test/shaping/fonts/sha1sum/813c2f8e5512187fd982417a7fb4286728e6f4a8.ttf b/test/shaping/data/in-house/fonts/813c2f8e5512187fd982417a7fb4286728e6f4a8.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/813c2f8e5512187fd982417a7fb4286728e6f4a8.ttf
rename to test/shaping/data/in-house/fonts/813c2f8e5512187fd982417a7fb4286728e6f4a8.ttf
diff --git a/test/shaping/fonts/sha1sum/81c368a33816fb20e9f647e8f24e2180f4720263.ttf b/test/shaping/data/in-house/fonts/81c368a33816fb20e9f647e8f24e2180f4720263.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/81c368a33816fb20e9f647e8f24e2180f4720263.ttf
rename to test/shaping/data/in-house/fonts/81c368a33816fb20e9f647e8f24e2180f4720263.ttf
diff --git a/test/shaping/fonts/sha1sum/8228d035fcd65d62ec9728fb34f42c63be93a5d3.ttf b/test/shaping/data/in-house/fonts/8228d035fcd65d62ec9728fb34f42c63be93a5d3.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/8228d035fcd65d62ec9728fb34f42c63be93a5d3.ttf
rename to test/shaping/data/in-house/fonts/8228d035fcd65d62ec9728fb34f42c63be93a5d3.ttf
diff --git a/test/shaping/fonts/sha1sum/8240789f6d12d4cfc4b5e8e6f246c3701bcf861f.ttf b/test/shaping/data/in-house/fonts/8240789f6d12d4cfc4b5e8e6f246c3701bcf861f.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/8240789f6d12d4cfc4b5e8e6f246c3701bcf861f.ttf
rename to test/shaping/data/in-house/fonts/8240789f6d12d4cfc4b5e8e6f246c3701bcf861f.ttf
diff --git a/test/shaping/fonts/sha1sum/82f4f3b57bb55344e72e70231380202a52af5805.ttf b/test/shaping/data/in-house/fonts/82f4f3b57bb55344e72e70231380202a52af5805.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/82f4f3b57bb55344e72e70231380202a52af5805.ttf
rename to test/shaping/data/in-house/fonts/82f4f3b57bb55344e72e70231380202a52af5805.ttf
diff --git a/test/shaping/fonts/sha1sum/8454d22037f892e76614e1645d066689a0200e61.ttf b/test/shaping/data/in-house/fonts/8454d22037f892e76614e1645d066689a0200e61.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/8454d22037f892e76614e1645d066689a0200e61.ttf
rename to test/shaping/data/in-house/fonts/8454d22037f892e76614e1645d066689a0200e61.ttf
diff --git a/test/shaping/fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf b/test/shaping/data/in-house/fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf
rename to test/shaping/data/in-house/fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf
diff --git a/test/shaping/fonts/sha1sum/856ff9562451293cbeff6f396d4e3877c4f0a436.ttf b/test/shaping/data/in-house/fonts/856ff9562451293cbeff6f396d4e3877c4f0a436.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/856ff9562451293cbeff6f396d4e3877c4f0a436.ttf
rename to test/shaping/data/in-house/fonts/856ff9562451293cbeff6f396d4e3877c4f0a436.ttf
diff --git a/test/shaping/fonts/sha1sum/85fe0be440c64ac77699e21c2f1bd933a919167e.ttf b/test/shaping/data/in-house/fonts/85fe0be440c64ac77699e21c2f1bd933a919167e.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/85fe0be440c64ac77699e21c2f1bd933a919167e.ttf
rename to test/shaping/data/in-house/fonts/85fe0be440c64ac77699e21c2f1bd933a919167e.ttf
diff --git a/test/shaping/fonts/sha1sum/87f85d17d26f1fe9ad28d7365101958edaefb967.ttf b/test/shaping/data/in-house/fonts/87f85d17d26f1fe9ad28d7365101958edaefb967.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/87f85d17d26f1fe9ad28d7365101958edaefb967.ttf
rename to test/shaping/data/in-house/fonts/87f85d17d26f1fe9ad28d7365101958edaefb967.ttf
diff --git a/test/shaping/fonts/sha1sum/8a9fea2a7384f2116e5b84a9b31f83be7850ce21.ttf b/test/shaping/data/in-house/fonts/8a9fea2a7384f2116e5b84a9b31f83be7850ce21.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/8a9fea2a7384f2116e5b84a9b31f83be7850ce21.ttf
rename to test/shaping/data/in-house/fonts/8a9fea2a7384f2116e5b84a9b31f83be7850ce21.ttf
diff --git a/test/shaping/fonts/sha1sum/94a5d6fb15a27521fba9ea4aee9cb39b2d03322a.ttf b/test/shaping/data/in-house/fonts/94a5d6fb15a27521fba9ea4aee9cb39b2d03322a.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/94a5d6fb15a27521fba9ea4aee9cb39b2d03322a.ttf
rename to test/shaping/data/in-house/fonts/94a5d6fb15a27521fba9ea4aee9cb39b2d03322a.ttf
diff --git a/test/shaping/fonts/sha1sum/96490dd2ff81233b335a650e7eb660e0e7b2eeea.ttf b/test/shaping/data/in-house/fonts/96490dd2ff81233b335a650e7eb660e0e7b2eeea.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/96490dd2ff81233b335a650e7eb660e0e7b2eeea.ttf
rename to test/shaping/data/in-house/fonts/96490dd2ff81233b335a650e7eb660e0e7b2eeea.ttf
diff --git a/test/shaping/fonts/sha1sum/98b7887cff91f722b92a8ff800120954606354f9.ttf b/test/shaping/data/in-house/fonts/98b7887cff91f722b92a8ff800120954606354f9.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/98b7887cff91f722b92a8ff800120954606354f9.ttf
rename to test/shaping/data/in-house/fonts/98b7887cff91f722b92a8ff800120954606354f9.ttf
diff --git a/test/shaping/fonts/sha1sum/9d8a94a67932a3ab75a596fc8b5c6d0392ca9e49.ttf b/test/shaping/data/in-house/fonts/9d8a94a67932a3ab75a596fc8b5c6d0392ca9e49.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/9d8a94a67932a3ab75a596fc8b5c6d0392ca9e49.ttf
rename to test/shaping/data/in-house/fonts/9d8a94a67932a3ab75a596fc8b5c6d0392ca9e49.ttf
diff --git a/test/shaping/fonts/sha1sum/a014549f766436cf55b2ceb40e462038938ee899.ttf b/test/shaping/data/in-house/fonts/a014549f766436cf55b2ceb40e462038938ee899.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/a014549f766436cf55b2ceb40e462038938ee899.ttf
rename to test/shaping/data/in-house/fonts/a014549f766436cf55b2ceb40e462038938ee899.ttf
diff --git a/test/shaping/fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf b/test/shaping/data/in-house/fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf
rename to test/shaping/data/in-house/fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf
diff --git a/test/shaping/fonts/sha1sum/a34a7b00f22ffb5fd7eef6933b81c7e71bc2cdfb.ttf b/test/shaping/data/in-house/fonts/a34a7b00f22ffb5fd7eef6933b81c7e71bc2cdfb.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/a34a7b00f22ffb5fd7eef6933b81c7e71bc2cdfb.ttf
rename to test/shaping/data/in-house/fonts/a34a7b00f22ffb5fd7eef6933b81c7e71bc2cdfb.ttf
diff --git a/test/shaping/fonts/sha1sum/a34a9191d9376bda419836effeef7e75c1386016.ttf b/test/shaping/data/in-house/fonts/a34a9191d9376bda419836effeef7e75c1386016.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/a34a9191d9376bda419836effeef7e75c1386016.ttf
rename to test/shaping/data/in-house/fonts/a34a9191d9376bda419836effeef7e75c1386016.ttf
diff --git a/test/shaping/fonts/sha1sum/a69118c2c2ada48ff803d9149daa54c9ebdae30e.ttf b/test/shaping/data/in-house/fonts/a69118c2c2ada48ff803d9149daa54c9ebdae30e.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/a69118c2c2ada48ff803d9149daa54c9ebdae30e.ttf
rename to test/shaping/data/in-house/fonts/a69118c2c2ada48ff803d9149daa54c9ebdae30e.ttf
diff --git a/test/shaping/fonts/sha1sum/a6c76d1bafde4a0b1026ebcc932d2e5c6fd02442.ttf b/test/shaping/data/in-house/fonts/a6c76d1bafde4a0b1026ebcc932d2e5c6fd02442.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/a6c76d1bafde4a0b1026ebcc932d2e5c6fd02442.ttf
rename to test/shaping/data/in-house/fonts/a6c76d1bafde4a0b1026ebcc932d2e5c6fd02442.ttf
diff --git a/test/shaping/fonts/sha1sum/a919b33197965846f21074b24e30250d67277bce.ttf b/test/shaping/data/in-house/fonts/a919b33197965846f21074b24e30250d67277bce.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/a919b33197965846f21074b24e30250d67277bce.ttf
rename to test/shaping/data/in-house/fonts/a919b33197965846f21074b24e30250d67277bce.ttf
diff --git a/test/shaping/fonts/sha1sum/a98e908e2ed21b22228ea59ebcc0f05034c86f2e.ttf b/test/shaping/data/in-house/fonts/a98e908e2ed21b22228ea59ebcc0f05034c86f2e.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/a98e908e2ed21b22228ea59ebcc0f05034c86f2e.ttf
rename to test/shaping/data/in-house/fonts/a98e908e2ed21b22228ea59ebcc0f05034c86f2e.ttf
diff --git a/test/shaping/fonts/sha1sum/b151cfcdaa77585d77f17a42158e0873fc8e2633.ttf b/test/shaping/data/in-house/fonts/b151cfcdaa77585d77f17a42158e0873fc8e2633.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/b151cfcdaa77585d77f17a42158e0873fc8e2633.ttf
rename to test/shaping/data/in-house/fonts/b151cfcdaa77585d77f17a42158e0873fc8e2633.ttf
diff --git a/test/shaping/fonts/sha1sum/b6acef662e0beb8d5fcf5b61c6b0ca69537b7402.ttf b/test/shaping/data/in-house/fonts/b6acef662e0beb8d5fcf5b61c6b0ca69537b7402.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/b6acef662e0beb8d5fcf5b61c6b0ca69537b7402.ttf
rename to test/shaping/data/in-house/fonts/b6acef662e0beb8d5fcf5b61c6b0ca69537b7402.ttf
diff --git a/test/shaping/fonts/sha1sum/b9e2aaa0d75fcef6971ec3a96d806ba4a6b31fe2.ttf b/test/shaping/data/in-house/fonts/b9e2aaa0d75fcef6971ec3a96d806ba4a6b31fe2.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/b9e2aaa0d75fcef6971ec3a96d806ba4a6b31fe2.ttf
rename to test/shaping/data/in-house/fonts/b9e2aaa0d75fcef6971ec3a96d806ba4a6b31fe2.ttf
diff --git a/test/shaping/fonts/sha1sum/bb0c53752e85c3d28973ebc913287b8987d3dfe8.ttf b/test/shaping/data/in-house/fonts/bb0c53752e85c3d28973ebc913287b8987d3dfe8.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/bb0c53752e85c3d28973ebc913287b8987d3dfe8.ttf
rename to test/shaping/data/in-house/fonts/bb0c53752e85c3d28973ebc913287b8987d3dfe8.ttf
diff --git a/test/shaping/fonts/sha1sum/bb29ce50df2bdba2d10726427c6b7609bf460e04.ttf b/test/shaping/data/in-house/fonts/bb29ce50df2bdba2d10726427c6b7609bf460e04.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/bb29ce50df2bdba2d10726427c6b7609bf460e04.ttf
rename to test/shaping/data/in-house/fonts/bb29ce50df2bdba2d10726427c6b7609bf460e04.ttf
diff --git a/test/shaping/fonts/sha1sum/bb9473d2403488714043bcfb946c9f78b86ad627.ttf b/test/shaping/data/in-house/fonts/bb9473d2403488714043bcfb946c9f78b86ad627.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/bb9473d2403488714043bcfb946c9f78b86ad627.ttf
rename to test/shaping/data/in-house/fonts/bb9473d2403488714043bcfb946c9f78b86ad627.ttf
diff --git a/test/shaping/fonts/sha1sum/bbf4a308c402f0678c3e82844892a4da2ebe598f.ttf b/test/shaping/data/in-house/fonts/bbf4a308c402f0678c3e82844892a4da2ebe598f.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/bbf4a308c402f0678c3e82844892a4da2ebe598f.ttf
rename to test/shaping/data/in-house/fonts/bbf4a308c402f0678c3e82844892a4da2ebe598f.ttf
diff --git a/test/shaping/fonts/sha1sum/bf39b0e91ef9807f15a9e283a21a14a209fd2cfc.ttf b/test/shaping/data/in-house/fonts/bf39b0e91ef9807f15a9e283a21a14a209fd2cfc.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/bf39b0e91ef9807f15a9e283a21a14a209fd2cfc.ttf
rename to test/shaping/data/in-house/fonts/bf39b0e91ef9807f15a9e283a21a14a209fd2cfc.ttf
diff --git a/test/shaping/fonts/sha1sum/bf962d3202883a820aed019d9b5c1838c2ff69c6.ttf b/test/shaping/data/in-house/fonts/bf962d3202883a820aed019d9b5c1838c2ff69c6.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/bf962d3202883a820aed019d9b5c1838c2ff69c6.ttf
rename to test/shaping/data/in-house/fonts/bf962d3202883a820aed019d9b5c1838c2ff69c6.ttf
diff --git a/test/shaping/fonts/sha1sum/c4e48b0886ef460f532fb49f00047ec92c432ec0.ttf b/test/shaping/data/in-house/fonts/c4e48b0886ef460f532fb49f00047ec92c432ec0.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/c4e48b0886ef460f532fb49f00047ec92c432ec0.ttf
rename to test/shaping/data/in-house/fonts/c4e48b0886ef460f532fb49f00047ec92c432ec0.ttf
diff --git a/test/shaping/fonts/sha1sum/cc5f3d2d717fb6bd4dfae1c16d48a2cb8e12233b.ttf b/test/shaping/data/in-house/fonts/cc5f3d2d717fb6bd4dfae1c16d48a2cb8e12233b.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/cc5f3d2d717fb6bd4dfae1c16d48a2cb8e12233b.ttf
rename to test/shaping/data/in-house/fonts/cc5f3d2d717fb6bd4dfae1c16d48a2cb8e12233b.ttf
diff --git a/test/shaping/fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf b/test/shaping/data/in-house/fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf
rename to test/shaping/data/in-house/fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf
diff --git a/test/shaping/fonts/sha1sum/d629e7fedc0b350222d7987345fe61613fa3929a.ttf b/test/shaping/data/in-house/fonts/d629e7fedc0b350222d7987345fe61613fa3929a.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/d629e7fedc0b350222d7987345fe61613fa3929a.ttf
rename to test/shaping/data/in-house/fonts/d629e7fedc0b350222d7987345fe61613fa3929a.ttf
diff --git a/test/shaping/fonts/sha1sum/d9b8bc10985f24796826c29f7ccba3d0ae11ec02.ttf b/test/shaping/data/in-house/fonts/d9b8bc10985f24796826c29f7ccba3d0ae11ec02.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/d9b8bc10985f24796826c29f7ccba3d0ae11ec02.ttf
rename to test/shaping/data/in-house/fonts/d9b8bc10985f24796826c29f7ccba3d0ae11ec02.ttf
diff --git a/test/shaping/fonts/sha1sum/dd9f0c7c7c36f75a18be0cab1cddf8f3ab0f366b.ttf b/test/shaping/data/in-house/fonts/dd9f0c7c7c36f75a18be0cab1cddf8f3ab0f366b.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/dd9f0c7c7c36f75a18be0cab1cddf8f3ab0f366b.ttf
rename to test/shaping/data/in-house/fonts/dd9f0c7c7c36f75a18be0cab1cddf8f3ab0f366b.ttf
diff --git a/test/shaping/fonts/sha1sum/df768b9c257e0c9c35786c47cae15c46571d56be.ttf b/test/shaping/data/in-house/fonts/df768b9c257e0c9c35786c47cae15c46571d56be.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/df768b9c257e0c9c35786c47cae15c46571d56be.ttf
rename to test/shaping/data/in-house/fonts/df768b9c257e0c9c35786c47cae15c46571d56be.ttf
diff --git a/test/shaping/fonts/sha1sum/e207635780b42f898d58654b65098763e340f5c7.ttf b/test/shaping/data/in-house/fonts/e207635780b42f898d58654b65098763e340f5c7.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/e207635780b42f898d58654b65098763e340f5c7.ttf
rename to test/shaping/data/in-house/fonts/e207635780b42f898d58654b65098763e340f5c7.ttf
diff --git a/test/shaping/fonts/sha1sum/e68a88939e0f06e34d2bc911f09b70890289c8fd.ttf b/test/shaping/data/in-house/fonts/e68a88939e0f06e34d2bc911f09b70890289c8fd.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/e68a88939e0f06e34d2bc911f09b70890289c8fd.ttf
rename to test/shaping/data/in-house/fonts/e68a88939e0f06e34d2bc911f09b70890289c8fd.ttf
diff --git a/test/shaping/fonts/sha1sum/e88c339237f52d21e01c55f01b9c1b4cc14a0467.ttf b/test/shaping/data/in-house/fonts/e88c339237f52d21e01c55f01b9c1b4cc14a0467.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/e88c339237f52d21e01c55f01b9c1b4cc14a0467.ttf
rename to test/shaping/data/in-house/fonts/e88c339237f52d21e01c55f01b9c1b4cc14a0467.ttf
diff --git a/test/shaping/fonts/sha1sum/ee39587d13b2afa5499cc79e45780aa79293bbd4.ttf b/test/shaping/data/in-house/fonts/ee39587d13b2afa5499cc79e45780aa79293bbd4.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/ee39587d13b2afa5499cc79e45780aa79293bbd4.ttf
rename to test/shaping/data/in-house/fonts/ee39587d13b2afa5499cc79e45780aa79293bbd4.ttf
diff --git a/test/shaping/fonts/sha1sum/ef2511f215aa3ca847cbfffbf861793b42170875.ttf b/test/shaping/data/in-house/fonts/ef2511f215aa3ca847cbfffbf861793b42170875.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/ef2511f215aa3ca847cbfffbf861793b42170875.ttf
rename to test/shaping/data/in-house/fonts/ef2511f215aa3ca847cbfffbf861793b42170875.ttf
diff --git a/test/shaping/fonts/sha1sum/ef86fe710cfea877bbe0dbb6946a1f88d0661031.ttf b/test/shaping/data/in-house/fonts/ef86fe710cfea877bbe0dbb6946a1f88d0661031.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/ef86fe710cfea877bbe0dbb6946a1f88d0661031.ttf
rename to test/shaping/data/in-house/fonts/ef86fe710cfea877bbe0dbb6946a1f88d0661031.ttf
diff --git a/test/shaping/fonts/sha1sum/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf b/test/shaping/data/in-house/fonts/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf
rename to test/shaping/data/in-house/fonts/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf
diff --git a/test/shaping/fonts/sha1sum/f443753e8ffe8e8aae606cfba158e00334b6efb1.ttf b/test/shaping/data/in-house/fonts/f443753e8ffe8e8aae606cfba158e00334b6efb1.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/f443753e8ffe8e8aae606cfba158e00334b6efb1.ttf
rename to test/shaping/data/in-house/fonts/f443753e8ffe8e8aae606cfba158e00334b6efb1.ttf
diff --git a/test/shaping/fonts/sha1sum/f499fbc23865022234775c43503bba2e63978fe1.ttf b/test/shaping/data/in-house/fonts/f499fbc23865022234775c43503bba2e63978fe1.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/f499fbc23865022234775c43503bba2e63978fe1.ttf
rename to test/shaping/data/in-house/fonts/f499fbc23865022234775c43503bba2e63978fe1.ttf
diff --git a/test/shaping/fonts/sha1sum/f518eb6f6b5eec2946c9fbbbde44e45d46f5e2ac.ttf b/test/shaping/data/in-house/fonts/f518eb6f6b5eec2946c9fbbbde44e45d46f5e2ac.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/f518eb6f6b5eec2946c9fbbbde44e45d46f5e2ac.ttf
rename to test/shaping/data/in-house/fonts/f518eb6f6b5eec2946c9fbbbde44e45d46f5e2ac.ttf
diff --git a/test/shaping/fonts/sha1sum/f9b1dd4dcb515e757789a22cb4241107746fd3d0.ttf b/test/shaping/data/in-house/fonts/f9b1dd4dcb515e757789a22cb4241107746fd3d0.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/f9b1dd4dcb515e757789a22cb4241107746fd3d0.ttf
rename to test/shaping/data/in-house/fonts/f9b1dd4dcb515e757789a22cb4241107746fd3d0.ttf
diff --git a/test/shaping/fonts/sha1sum/fab39d60d758cb586db5a504f218442cd1395725.ttf b/test/shaping/data/in-house/fonts/fab39d60d758cb586db5a504f218442cd1395725.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/fab39d60d758cb586db5a504f218442cd1395725.ttf
rename to test/shaping/data/in-house/fonts/fab39d60d758cb586db5a504f218442cd1395725.ttf
diff --git a/test/shaping/fonts/sha1sum/fbb6c84c9e1fe0c39e152fbe845e51fd81f6748e.ttf b/test/shaping/data/in-house/fonts/fbb6c84c9e1fe0c39e152fbe845e51fd81f6748e.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/fbb6c84c9e1fe0c39e152fbe845e51fd81f6748e.ttf
rename to test/shaping/data/in-house/fonts/fbb6c84c9e1fe0c39e152fbe845e51fd81f6748e.ttf
diff --git a/test/shaping/fonts/sha1sum/fcdcffbdf1c4c97c05308d7600e4c283eb47dbca.ttf b/test/shaping/data/in-house/fonts/fcdcffbdf1c4c97c05308d7600e4c283eb47dbca.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/fcdcffbdf1c4c97c05308d7600e4c283eb47dbca.ttf
rename to test/shaping/data/in-house/fonts/fcdcffbdf1c4c97c05308d7600e4c283eb47dbca.ttf
diff --git a/test/shaping/fonts/sha1sum/ffa0f5d2d9025486d8469d8b1fdd983e7632499b.ttf b/test/shaping/data/in-house/fonts/ffa0f5d2d9025486d8469d8b1fdd983e7632499b.ttf
similarity index 100%
rename from test/shaping/fonts/sha1sum/ffa0f5d2d9025486d8469d8b1fdd983e7632499b.ttf
rename to test/shaping/data/in-house/fonts/ffa0f5d2d9025486d8469d8b1fdd983e7632499b.ttf
diff --git a/test/shaping/data/in-house/tests/arabic-fallback-shaping.tests b/test/shaping/data/in-house/tests/arabic-fallback-shaping.tests
new file mode 100644
index 00000000..274829cc
--- /dev/null
+++ b/test/shaping/data/in-house/tests/arabic-fallback-shaping.tests
@@ -0,0 +1 @@
+../fonts/df768b9c257e0c9c35786c47cae15c46571d56be.ttf::U+0633,U+064F,U+0644,U+064E,U+0651,U+0627,U+0651,U+0650,U+0645,U+062A,U+06CC:[uni06CC.fina=10+1655|uni062A.medi=9+868|uni0645.init=8+1098|uni0650=2 at 221,0+0|uni0651=2 at 260,736+0|uni064E=2 at 935,1259+0|uni0651=2 at 974,736+0|uni06440627.fina=2+1470|uni064F=0 at 558,-10+0|uni0633.init=0+1585]
diff --git a/test/shaping/data/in-house/tests/arabic-feature-order.tests b/test/shaping/data/in-house/tests/arabic-feature-order.tests
new file mode 100644
index 00000000..0f7f58e2
--- /dev/null
+++ b/test/shaping/data/in-house/tests/arabic-feature-order.tests
@@ -0,0 +1,4 @@
+../fonts/813c2f8e5512187fd982417a7fb4286728e6f4a8.ttf::U+1820,U+180B:[uni2048.E81A=0+1550]
+../fonts/8a9fea2a7384f2116e5b84a9b31f83be7850ce21.ttf::U+1820,U+180B:[uni2048.E81A=0+1550]
+../fonts/a919b33197965846f21074b24e30250d67277bce.ttf::U+0644,U+0644,U+0647:[Lellah=0+1503]
+../fonts/bf39b0e91ef9807f15a9e283a21a14a209fd2cfc.ttf::U+0644,U+064E,U+0670,U+0653,U+0626:[afii57414.zz04=4+1202|uni0670_uni0653=0 at 50,350+0|afii57454=0 at 550,1425+0|afii57444.calt=0+1065]
diff --git a/test/shaping/data/in-house/tests/arabic-like-joining.tests b/test/shaping/data/in-house/tests/arabic-like-joining.tests
new file mode 100644
index 00000000..2e341861
--- /dev/null
+++ b/test/shaping/data/in-house/tests/arabic-like-joining.tests
@@ -0,0 +1 @@
+../fonts/5dfad7735c6a67085f1b90d4d497e32907db4c78.ttf::U+1E922,U+1E923,U+1E924,U+1E925,U+1E926,U+1E927,U+1E928,U+1E929,U+1E92A,U+1E92B,U+1E92C,U+1E92D,U+1E92E,U+1E92F,U+1E930,U+1E931,U+1E932,U+1E933,U+1E934,U+1E935,U+1E936,U+1E937,U+1E938,U+1E939,U+1E93A,U+1E93B,U+1E93C,U+1E93D,U+1E93E,U+1E93F,U+1E940,U+1E941,U+1E942,U+1E943:[sha_adlam.fina=33+711|kpo_adlam.medi=32+573|zal_adlam.medi=31+773|gbe_adlam.medi=30+594|kha_adlam.medi=29+686|va_adlam.medi=28+621|nha_adlam.medi=27+587|tu_adlam.medi=26+772|nya_adlam.medi=25+577|ga_adlam.medi=24+552|qaaf_adlam.medi=23+694|ha_adlam.medi=22+600|chi_adlam.medi=21+662|jiim_adlam.medi=20+781|u_adlam.medi=19+678|ya_adlam.medi=18+553|kaf_adlam.medi=17+808|nun_adlam.medi=16+561|waw_adlam.medi=15+651|yhe_adlam.medi=14+674|dha_adlam.medi=13+674|o_adlam.medi=12+640|i_adlam.medi=11+657|fa_adlam.medi=10+590|e_adlam.medi=9+628|ra_adlam.medi=8+599|bhe_adlam.medi=7+594|pe_adlam.medi=6+492|sinnyiiyhe_adlam.medi=5+777|ba_adlam.medi=4+655|miim_adlam.medi=3+525|l
 aam_adlam.medi=2+554|daali_adlam.medi=1+600|alif_adlam.init=0+597]
diff --git a/test/shaping/data/in-house/tests/arabic-mark-order.tests b/test/shaping/data/in-house/tests/arabic-mark-order.tests
new file mode 100644
index 00000000..18ddb885
--- /dev/null
+++ b/test/shaping/data/in-house/tests/arabic-mark-order.tests
@@ -0,0 +1,6 @@
+../fonts/94a5d6fb15a27521fba9ea4aee9cb39b2d03322a.ttf::U+064A,U+064E,U+0670,U+0653,U+0640,U+0654,U+064E,U+0627:[afii57415.zz04=7+481|afii57454=4 at 25,975+0|uni0654=4 at -50,50+0|afii57440=4+650|uni0670_uni0653=0 at 75,400+0|afii57454=0 at 750,1125+0|afii57450.calt=0+1331]
+../fonts/24b8d24d00ae86f49791b746da4c9d3f717a51a8.ttf::U+0628,U+0618,U+0619,U+064E,U+064F,U+0654,U+0658,U+0653,U+0654,U+0651,U+0656,U+0651,U+065C,U+0655,U+0650:[uni0653.small=0 at 266,2508+0|uni0654=0 at 308,2151+0|uni0655=0 at 518,-1544+0|uni065C=0 at 501,-1453+0|uni0656=0 at 573,-659+0|uni0650=0 at 500,133+0|uni0619=0 at 300,1807+0|uni0618=0 at 357,1674+0|uni0651064E=0 at 387,1178+0|uni0651=0 at 402,764+0|uni0658=0 at 424,404+0|uni0654064F=0 at 540,-435+0|uni0628=0+1352]
+../fonts/21b7fb9c1eeae260473809fbc1fe330f66a507cd.ttf::U+0649,U+0655,U+034F,U+0650:[uni0650.small2=0 at 727,-774+0|space=0+0|uni0655=0 at 727,-209+0|uni0649=0+1566]
+../fonts/21b7fb9c1eeae260473809fbc1fe330f66a507cd.ttf::U+0649,U+0655,U+0650:[uni0650.small2=0 at 727,-774+0|uni0655=0 at 727,-209+0|uni0649=0+1566]
+../fonts/21b7fb9c1eeae260473809fbc1fe330f66a507cd.ttf::U+0649,U+0650,U+0655:[uni0650.small2=0 at 727,-774+0|uni0655=0 at 727,-209+0|uni0649=0+1566]
+../fonts/21b7fb9c1eeae260473809fbc1fe330f66a507cd.ttf::U+0649,U+0650,U+034F,U+0655:[uni0655=0+0|space=0+0|uni0650=0 at 166,0+0|uni0649=0+1566]
diff --git a/test/shaping/data/in-house/tests/arabic-stch.tests b/test/shaping/data/in-house/tests/arabic-stch.tests
new file mode 100644
index 00000000..1ba8f60b
--- /dev/null
+++ b/test/shaping/data/in-house/tests/arabic-stch.tests
@@ -0,0 +1 @@
+../fonts/d9b8bc10985f24796826c29f7ccba3d0ae11ec02.ttf:--no-glyph-names:U+0718,U+070F,U+0718,U+0718,U+002E:[1=4+168|3=3+502|3=2+502|4=1 at -1004,0+0|5=1 at -876,0+0|5=1 at -799,0+0|5=1 at -722,0+0|5=1 at -645,0+0|4=1 at -566,0+0|5=1 at -438,0+0|5=1 at -361,0+0|5=1 at -284,0+0|5=1 at -207,0+0|4=1 at -128,0+0|3=0+502]
diff --git a/test/shaping/data/in-house/tests/automatic-fractions.tests b/test/shaping/data/in-house/tests/automatic-fractions.tests
new file mode 100644
index 00000000..58ec26c1
--- /dev/null
+++ b/test/shaping/data/in-house/tests/automatic-fractions.tests
@@ -0,0 +1,3 @@
+../fonts/15dfc433a135a658b9f4b1a861b5cdd9658ccbb9.ttf::U+0031,U+0032,U+0033,U+2044,U+0034,U+0035,U+0036:[one.numr=0+600|two.numr=1+600|three.numr=2+600|fraction=3+252|four.small=4+600|five.small=5+600|six.small=6+600]
+../fonts/15dfc433a135a658b9f4b1a861b5cdd9658ccbb9.ttf:--direction=l --script=arab:U+0031,U+0032,U+0033,U+2044,U+0034,U+0035,U+0036:[one.numr=0+600|two.numr=1+600|three.numr=2+600|fraction=3+252|four.small=4+600|five.small=5+600|six.small=6+600]
+../fonts/15dfc433a135a658b9f4b1a861b5cdd9658ccbb9.ttf:--direction=l:U+0661,U+0662,U+0663,U+2044,U+0664,U+0665,U+0666:[uni0661.numr=0+600|uni0662.numr=1+600|uni0663.numr=2+600|fraction=3+252|uni0664.small=4+600|uni0665.small=5+600|uni0666.small=6+600]
diff --git a/test/shaping/data/in-house/tests/cluster.tests b/test/shaping/data/in-house/tests/cluster.tests
new file mode 100644
index 00000000..fd0a0fe2
--- /dev/null
+++ b/test/shaping/data/in-house/tests/cluster.tests
@@ -0,0 +1,2 @@
+../fonts/4fac3929fc3332834e93673780ec0fe94342d193.ttf:--cluster-level=2:U+0078,U+030A,U+0058,U+030A:[gid2=0+1083|gid3=1 at -1131,-8+0|gid1=2+1200|gid3=3 at -1190,349+0]
+../fonts/43ef465752be9af900745f72fe29cb853a1401a5.ttf:--cluster-level=1:U+05D4,U+05B7,U+05E9,U+05BC,U+05C1,U+05B8,U+05DE,U+05B4,U+05DD:[uni05DD=8+1359|uni05B4=7 at 111,0+0|uni05DE=6+1391|uni05B8=5+0|uni05BC=3+0|uni05C1=3+0|uni05E9=2+1451|uni05B7=1 at 28,0+0|uni05D4=0+1338]
diff --git a/test/shaping/data/in-house/tests/color-fonts.tests b/test/shaping/data/in-house/tests/color-fonts.tests
new file mode 100644
index 00000000..e7311bc3
--- /dev/null
+++ b/test/shaping/data/in-house/tests/color-fonts.tests
@@ -0,0 +1 @@
+../fonts/ee39587d13b2afa5499cc79e45780aa79293bbd4.ttf:--font-funcs=ot --show-extents:U+1F42F:[gid1=0+2963<0,2178,2963,-2788>]
diff --git a/test/shaping/data/in-house/tests/context-matching.tests b/test/shaping/data/in-house/tests/context-matching.tests
new file mode 100644
index 00000000..5673edc3
--- /dev/null
+++ b/test/shaping/data/in-house/tests/context-matching.tests
@@ -0,0 +1,3 @@
+../fonts/4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf::U+1A48,U+1A58,U+1A25,U+1A48,U+1A58,U+1A25,U+1A6E,U+1A63:[uni1A48=0+1212|uni1A25=0+1912|uni1A58=0+0|uni1A48=3+1212|uni1A6E=3+0|uni1A25=3+1912|uni1A58=3+0|uni1A63=3+1212]
+../fonts/d629e7fedc0b350222d7987345fe61613fa3929a.ttf::U+0915,U+093F,U+0915,U+093F:[ivowelsign03deva=0+530|kadeva=0+1561|ivowelsign03deva=2+530|kadeva=2+1561]
+../fonts/f499fbc23865022234775c43503bba2e63978fe1.ttf::U+09B0,U+09CD,U+09A5,U+09CD,U+09AF,U+09C0:[gid1=0+1320|gid13=0+523|gid18=0+545]
diff --git a/test/shaping/data/in-house/tests/cursive-positioning.tests b/test/shaping/data/in-house/tests/cursive-positioning.tests
new file mode 100644
index 00000000..74d283db
--- /dev/null
+++ b/test/shaping/data/in-house/tests/cursive-positioning.tests
@@ -0,0 +1,4 @@
+../fonts/c4e48b0886ef460f532fb49f00047ec92c432ec0.ttf::U+0643,U+0645,U+0645,U+062B,U+0644:[gid8=4+738|gid5=3 at 441,1197+0|gid6=3 at 0,432+405|gid9=2 at 0,477+452|gid9=1 at 0,977+452|gid10=0 at 20,1577+207]
+../fonts/298c9e1d955f10f6f72c6915c3c6ff9bf9695cec.ttf::U+0643,U+0645,U+0645,U+062B,U+0644:[gid8=4+738|gid5=3 at 441,1197+0|gid6=3 at 0,432+405|gid9=2 at 0,477+500|gid9=1 at 0,577+452|gid10=0 at 20,1177+207]
+#../fonts/706c5d7b625f207bc0d874c67237aad6f1e9cd6f.ttf::U+0B1F,U+0B4D,U+0B1A,U+0B4D,U+0B1A:[ttaorya=0+1307|casubscriptorya=0 at -242,104+-231|casubscriptnarroworya=0 at 20,104+507]
+../fonts/07f054357ff8638bac3711b422a1e31180bba863.ttf:--font-funcs=ot --no-glyph-names:U+0606,U+06E1:[2=0 at 40,502+0|1=0+1000]
diff --git a/test/shaping/data/in-house/tests/default-ignorables.tests b/test/shaping/data/in-house/tests/default-ignorables.tests
new file mode 100644
index 00000000..a27b67a6
--- /dev/null
+++ b/test/shaping/data/in-house/tests/default-ignorables.tests
@@ -0,0 +1,2 @@
+../fonts/051d92f8bc6ff724511b296c27623f824de256e9.ttf::U+0075,U+0361,U+034F,U+0301,U+0069:[gid2=0+1266|gid7=0 at -617,442+0|gid5=0 at -7,0+0|gid1=4+528]
+../fonts/bf962d3202883a820aed019d9b5c1838c2ff69c6.ttf::U+0020,U+06CC,U+064E,U+034F,U+0651:[uni0651=1+0|space=1+0|uni064E=1 at 236,-432+0|uni06CC=1+1266|space=0+452]
diff --git a/test/shaping/data/in-house/tests/emoji-flag-tags.tests b/test/shaping/data/in-house/tests/emoji-flag-tags.tests
new file mode 100644
index 00000000..189de55a
--- /dev/null
+++ b/test/shaping/data/in-house/tests/emoji-flag-tags.tests
@@ -0,0 +1,2 @@
+../fonts/53374c7ca3657be37efde7ed02ae34229a56ae1f.ttf::U+1F3F4,U+E0055,U+E0053,U+E0064,U+E0065,U+E007F:[u1F3F4=0+2126|space=1+0|space=2+0|space=3+0|space=4+0|space=5+0]
+../fonts/53374c7ca3657be37efde7ed02ae34229a56ae1f.ttf::U+1F3F4,U+E0064,U+E0065,U+E007F:[de=0+3200]
diff --git a/test/shaping/data/in-house/tests/fallback-positioning.tests b/test/shaping/data/in-house/tests/fallback-positioning.tests
new file mode 100644
index 00000000..5047d84c
--- /dev/null
+++ b/test/shaping/data/in-house/tests/fallback-positioning.tests
@@ -0,0 +1,2 @@
+../fonts/8228d035fcd65d62ec9728fb34f42c63be93a5d3.ttf::U+0078,U+0301,U+0058,U+0301:[x=0+1030|acutecomb=0 at -21,-27+0|X=2+1295|acutecomb=2 at -147,320+0]
+../fonts/856ff9562451293cbeff6f396d4e3877c4f0a436.ttf::U+0061,U+035C,U+0062:[uni0061=0+512|uni035C=0 at -64,-128+0|uni0062=2+512]
diff --git a/test/shaping/data/in-house/tests/fuzzed.tests b/test/shaping/data/in-house/tests/fuzzed.tests
new file mode 100644
index 00000000..e1a39e4e
--- /dev/null
+++ b/test/shaping/data/in-house/tests/fuzzed.tests
@@ -0,0 +1,22 @@
+../fonts/1a6f1687b7a221f9f2c834b0b360d3c8463b6daf.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
+../fonts/5a5daf5eb5a4db77a2baa3ad9c7a6ed6e0655fa8.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
+../fonts/0509e80afb379d16560e9e47bdd7d888bebdebc6.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
+../fonts/641bd9db850193064d17575053ae2bf8ec149ddc.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
+../fonts/375d6ae32a3cbe52fbf81a4e5777e3377675d5a3.ttf:--font-funcs=ot:U+0041:[gid0=0+4352]
+../fonts/8240789f6d12d4cfc4b5e8e6f246c3701bcf861f.ttf:--font-funcs=ot:U+0041:[gid0=0+1024]
+../fonts/b9e2aaa0d75fcef6971ec3a96d806ba4a6b31fe2.ttf:--font-funcs=ot:U+0041:[gid0=0+1000|gid1=0+1000|gid8=0+1000|gid3=0+1000|gid0=0+1000|gid1=0+1000|gid1=0+1000|gid8=0+1000|gid3=0+1000|gid0=0+1000|gid1=0+1000|gid8=0+1000|gid3=0+1000|gid0=0+1000|gid1=0+1000|gid1=0+1000]
+../fonts/43979b90b2dd929723cf4fe1715990bcb9c9a56b.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
+../fonts/3511ff5c1647150595846ac414c595cccac34f18.ttf:--font-funcs=ot --no-positions --no-clusters --no-glyph-names:U+0041:[0|512|15104|11004|3408|18244|17872|17961|0|992|15616|0|14151|20559|20992|5440|256|0|10|8960|256|1024|1490|0|768|4096|256|2216|0|256|256|0|768|10752|11004|3408|18244|17734|53248|256|0|512|14848|10793|57344|768|18227|20285|20480|0|256|0|810|0|11004|3408|18244|17734|53289|57344|768|15667|71|0|20559|21248|256|0|2816|2776|0|51516|0|32|26209|28005|65249|29690|0|51548|0|2454|28783|29556|1291|3458|80|0|2804|210|28786|25968|45763|50546|0|59136|0|38144|256|0|2560|30208|52224|580|17996|21504|6734|108|116|24846|1024|0|255|65280|256|0|8704|1345|23109|8192|10823|21076|8192|12877|20300|8192|6738|20301|8192|16980|21067|8251|18944|255|65280|15360|256|255|65280|256|768|255|65280|256|768|255|65280|256|1024|12|65280|256|1280|255|65280|256|1536|1899|25970|110|11264|27502|29285|12907|25974|28160|14443|25970|28288|3|118|18259|21826|45716|46369|0|0|1|16|17|256|4|16|18244|17734|28|12|0
 |284|0|28|18256|20307|45114|47616|226|10296|0|57927|1|0|0|21248|5440|256|0|10|768|256|1024|512|0|297|16|24833|28774|10794|2304|29|32|42|64515|42|42|64525|20551|17477|18128|10720|3|61|3408|18244|17734|53289|57344|768|15616|512|55|10576|20307|0|255|56063|53504|42|42|64525|12288|18176|80|20307|1|0|62]
+../fonts/fab39d60d758cb586db5a504f218442cd1395725.ttf:--font-funcs=ot:U+0041,U+0041:[gid0=0+1000|gid0=1+1000]
+../fonts/205edd09bd3d141cc9580f650109556cc28b22cb.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
+../fonts/217a934cfe15c548b572c203dceb2befdf026462.ttf:--font-funcs=ot:U+0061,U+0061,U+0061:[]
+../fonts/558661aa659912f4d30ecd27bd09835171a8e2b0.ttf:--font-funcs=ot:U+FFFD,U+E0100,U+FFFD,U+E0010:[]
+../fonts/a34a9191d9376bda419836effeef7e75c1386016.ttf:--font-funcs=ot:U+0041:[]
+../fonts/a69118c2c2ada48ff803d9149daa54c9ebdae30e.ttf:--font-funcs=ot:U+0041:[gid0=0+1229]
+../fonts/b6acef662e0beb8d5fcf5b61c6b0ca69537b7402.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
+../fonts/e88c339237f52d21e01c55f01b9c1b4cc14a0467.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
+../fonts/243798dd281c1c77c065958e1ff467420faa9bde.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
+../fonts/dd9f0c7c7c36f75a18be0cab1cddf8f3ab0f366b.ttf:--font-funcs=ot --no-positions --no-clusters --no-glyph-names:U+0041:[0|0|2|0|0|2|0|0|2|0|0|2|0|0|2|0|0|2|0|0|0|2|0|0|0|2|0|0|2|0|0|2|0|0|2|0|0|2|0|0|0|2|0|0|2|0|0|2|0|0|2|0]
+../fonts/ef2511f215aa3ca847cbfffbf861793b42170875.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
+../fonts/9d8a94a67932a3ab75a596fc8b5c6d0392ca9e49.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
+../fonts/bbf4a308c402f0678c3e82844892a4da2ebe598f.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
diff --git a/test/shaping/data/in-house/tests/hangul-jamo.tests b/test/shaping/data/in-house/tests/hangul-jamo.tests
new file mode 100644
index 00000000..6e2fecc1
--- /dev/null
+++ b/test/shaping/data/in-house/tests/hangul-jamo.tests
@@ -0,0 +1,2 @@
+../fonts/757ebd573617a24aa9dfbf0b885c54875c6fe06b.ttf::U+115F,U+11A2:[gid3=0+920|gid4=0+0]
+../fonts/7e14e7883ed152baa158b80e207b66114c823a8b.ttf::U+11A2:[gid1=0+920]
diff --git a/test/shaping/data/in-house/tests/hyphens.tests b/test/shaping/data/in-house/tests/hyphens.tests
new file mode 100644
index 00000000..acfe8f4f
--- /dev/null
+++ b/test/shaping/data/in-house/tests/hyphens.tests
@@ -0,0 +1,2 @@
+../fonts/1c04a16f32a39c26c851b7fc014d2e8d298ba2b8.ttf::U+2010:[gid1=0+739]
+../fonts/1c04a16f32a39c26c851b7fc014d2e8d298ba2b8.ttf::U+2011:[gid1=0+739]
diff --git a/test/shaping/data/in-house/tests/indic-consonant-with-stacker.tests b/test/shaping/data/in-house/tests/indic-consonant-with-stacker.tests
new file mode 100644
index 00000000..43a3f27e
--- /dev/null
+++ b/test/shaping/data/in-house/tests/indic-consonant-with-stacker.tests
@@ -0,0 +1,4 @@
+../fonts/a014549f766436cf55b2ceb40e462038938ee899.ttf:--no-glyph-names:U+0CF1,U+0C95:[2=0+1129|3=1+358]
+../fonts/55c88ebbe938680b08f92c3de20713183e0c7481.ttf:--no-glyph-names:U+0CF2,U+0CAA:[2=0+1539|3=1+245]
+../fonts/341421e629668b1a1242245d39238ca48432d35d.ttf:--no-glyph-names:U+0CF1:[1=0+1129]
+../fonts/663aef6b019dbf45ffd74089e2b5f2496ceceb18.ttf:--no-glyph-names:U+0CF2:[1=0+1539]
diff --git a/test/shaping/data/in-house/tests/indic-init.tests b/test/shaping/data/in-house/tests/indic-init.tests
new file mode 100644
index 00000000..fee86352
--- /dev/null
+++ b/test/shaping/data/in-house/tests/indic-init.tests
@@ -0,0 +1 @@
+../fonts/1a3d8f381387dd29be1e897e4b5100ac8b4829e1.ttf:--no-glyph-names:U+09AC,U+09C7,U+09AC,U+09C7:[3=0+273|1=0+460|2=2+307|1=2+460]
diff --git a/test/shaping/data/in-house/tests/indic-joiner-candrabindu.tests b/test/shaping/data/in-house/tests/indic-joiner-candrabindu.tests
new file mode 100644
index 00000000..87b36035
--- /dev/null
+++ b/test/shaping/data/in-house/tests/indic-joiner-candrabindu.tests
@@ -0,0 +1,2 @@
+../fonts/5028afb650b1bb718ed2131e872fbcce57828fff.ttf::U+0B13,U+200D,U+0B01:[omorya=0+1450]
+../fonts/5028afb650b1bb718ed2131e872fbcce57828fff.ttf::U+0B13,U+200C,U+0B01:[oorya=0+1309|space=0+0|candrabinduorya=0+0]
diff --git a/test/shaping/data/in-house/tests/indic-joiners.tests b/test/shaping/data/in-house/tests/indic-joiners.tests
new file mode 100644
index 00000000..57107d58
--- /dev/null
+++ b/test/shaping/data/in-house/tests/indic-joiners.tests
@@ -0,0 +1,2 @@
+../fonts/f443753e8ffe8e8aae606cfba158e00334b6efb1.ttf::U+179A,U+1784,U+17D2,U+179F,U+200C,U+17CA,U+17B8,U+0020:[uni179a=0+775|uni1784=1+1550|uni179f.sub=1+775|space=1+0|uni17ca=1+0|uni17b8=1 at 0,300+0|space=7+600]
+../fonts/f443753e8ffe8e8aae606cfba158e00334b6efb1.ttf::U+179A,U+1784,U+17D2,U+179F,U+17CA,U+17B8:[uni179a=0+775|uni1784=1+1550|uni179f.sub=1+775|uni17bb=1 at -75,-700+0|uni17b8=1+0]
diff --git a/test/shaping/data/in-house/tests/indic-old-spec.tests b/test/shaping/data/in-house/tests/indic-old-spec.tests
new file mode 100644
index 00000000..cd563190
--- /dev/null
+++ b/test/shaping/data/in-house/tests/indic-old-spec.tests
@@ -0,0 +1,2 @@
+../fonts/57a9d9f83020155cbb1d2be1f43d82388cbecc88.ttf::U+0C9A,U+0CCD,U+0C9A,U+0CCD:[U0C9A_U0CCD.haln=0+1066|U0C9A_0CCD.blwf=0+0]
+../fonts/270b89df543a7e48e206a2d830c0e10e5265c630.ttf::U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D:[glyph201=0+1183|U0D4D=0+0]
diff --git a/test/shaping/data/in-house/tests/indic-pref-blocking.tests b/test/shaping/data/in-house/tests/indic-pref-blocking.tests
new file mode 100644
index 00000000..516753d1
--- /dev/null
+++ b/test/shaping/data/in-house/tests/indic-pref-blocking.tests
@@ -0,0 +1,2 @@
+../fonts/226bc2deab3846f1a682085f70c67d0421014144.ttf::U+0D2F,U+0D4D,U+0D30,U+0D46:[evowelsignmlym=0+1465|rapostmlym=0+499|yamlym=0+2120]
+../fonts/e207635780b42f898d58654b65098763e340f5c7.ttf::U+0D2F,U+0D4D,U+0D30,U+0D46:[yamlym=0+2120|viramamlym=0+0|evowelsignmlym=0+1465|ramlym=0+1507]
diff --git a/test/shaping/data/in-house/tests/indic-script-extensions.tests b/test/shaping/data/in-house/tests/indic-script-extensions.tests
new file mode 100644
index 00000000..05896276
--- /dev/null
+++ b/test/shaping/data/in-house/tests/indic-script-extensions.tests
@@ -0,0 +1,2 @@
+../fonts/3493e92eaded2661cadde752a39f9d58b11f0326.ttf::U+0BA4,U+0BC6,U+1133C,U+0BAA,U+1133C,U+0BC6,U+1133C:[u0BC6=0+2093|u1133C=0+0|u0BA4=0+1863|u0BC6=3+2093|u1133C=3+0|u0BAA=3+1706|u1133C=3+0]
+../fonts/b151cfcdaa77585d77f17a42158e0873fc8e2633.ttf:--no-glyph-names:U+0BAA,U+11301,U+11303:[1=0+535|2=0+0|3=0+310]
diff --git a/test/shaping/data/in-house/tests/indic-special-cases.tests b/test/shaping/data/in-house/tests/indic-special-cases.tests
new file mode 100644
index 00000000..f51651f1
--- /dev/null
+++ b/test/shaping/data/in-house/tests/indic-special-cases.tests
@@ -0,0 +1,3 @@
+../fonts/3cae6bfe5b57c07ba81ddbd54c02fe4f3a1e3bf6.ttf::U+0CB0,U+0CCD,U+0C95:[gid1=0+1176|gid5=0+1161]
+../fonts/3cae6bfe5b57c07ba81ddbd54c02fe4f3a1e3bf6.ttf::U+0CB0,U+200D,U+0CCD,U+0C95:[gid2=0+1334|gid6=0+358]
+../fonts/3cae6bfe5b57c07ba81ddbd54c02fe4f3a1e3bf6.ttf::U+0CB0,U+0CCD,U+200D,U+0C95:[gid2=0+1334|gid6=0+358]
diff --git a/test/shaping/data/in-house/tests/indic-syllable.tests b/test/shaping/data/in-house/tests/indic-syllable.tests
new file mode 100644
index 00000000..4c7d6513
--- /dev/null
+++ b/test/shaping/data/in-house/tests/indic-syllable.tests
@@ -0,0 +1,8 @@
+../fonts/54674a3111d209fb6be0ed31745314b7a8d2c244.ttf::U+0BA4,U+0BCD,U+00B3:[taprehalftamil=0+1509|uni00B3=2+674]
+../fonts/3d0b77a2360aa6faa1385aaa510509ab70dfbeff.ttf::U+0CF1:[gid1=0+1129]
+../fonts/3d0b77a2360aa6faa1385aaa510509ab70dfbeff.ttf::U+0CF2:[gid2=0+1539]
+../fonts/87f85d17d26f1fe9ad28d7365101958edaefb967.ttf:--font-funcs=ot:U+0980,U+0981:[anjibeng=0+520|candrabindubeng=0+0]
+../fonts/85fe0be440c64ac77699e21c2f1bd933a919167e.ttf::U+0A15,U+0A51,U+0A47:[kaguru=0+1273|udaatguru=0 at 75,0+0|eematraguru=0 at -40,0+0]
+../fonts/1735326da89f0818cd8c51a0600e9789812c0f94.ttf::U+0A51:[uni25CC=0+1044|udaatguru=0+0]
+../fonts/1735326da89f0818cd8c51a0600e9789812c0f94.ttf::U+25CC,U+0A51:[uni25CC=0+1044|udaatguru=0+0]
+../fonts/81c368a33816fb20e9f647e8f24e2180f4720263.ttf:--no-glyph-names:U+0C80,U+0C82:[1=0+502|2=0+502]
diff --git a/test/shaping/data/in-house/tests/language-tags.tests b/test/shaping/data/in-house/tests/language-tags.tests
new file mode 100644
index 00000000..4c62113f
--- /dev/null
+++ b/test/shaping/data/in-house/tests/language-tags.tests
@@ -0,0 +1,12 @@
+../fonts/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf:--language=fa:U+004A:[gid2=0+1000]
+../fonts/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf:--language=ja:U+004A:[gid2=0+1000]
+../fonts/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf:--language=zh:U+004A:[gid4=0+1000]
+../fonts/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf:--language=zh-cn:U+004A:[gid4=0+1000]
+../fonts/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf:--language=zh-sg:U+004A:[gid4=0+1000]
+../fonts/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf:--language=zh-tw:U+004A:[gid5=0+1000]
+../fonts/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf:--language=zh-hans:U+004A:[gid4=0+1000]
+../fonts/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf:--language=zh-hant:U+004A:[gid5=0+1000]
+../fonts/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf:--language=zh-hant-hk:U+004A:[gid6=0+1000]
+../fonts/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf:--language=zh-HK:U+004A:[gid6=0+1000]
+../fonts/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf:--language=zh-mo:U+004A:[gid6=0+1000]
+../fonts/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf:--language=zh-Hant-mo:U+004A:[gid6=0+1000]
diff --git a/test/shaping/data/in-house/tests/ligature-id.tests b/test/shaping/data/in-house/tests/ligature-id.tests
new file mode 100644
index 00000000..3daaca38
--- /dev/null
+++ b/test/shaping/data/in-house/tests/ligature-id.tests
@@ -0,0 +1,36 @@
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|space=3+213|u0995_u09B0_u09CD.blwf.vatu=4+643|u0995_u09CD.half_u09B2.pres=7+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|space=6+213|u0995_u09B0_u09CD.blwf.vatu=7+643|u0995_u09CD.half_u09B2.pres=10+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|space=9+213|u0995_u09B0_u09CD.blwf.vatu=10+643|u0995_u09CD.half_u09B2.pres=13+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|space=12+213|u0995_u09B0_u09CD.blwf.vatu=13+643|u0995_u09CD.half_u09B2.pres=16+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|space=15+213|u0995_u09B0_u09CD.blwf.vatu=16+643|u0995_u09CD.half_u09B2.pres=19+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|space=18+213|u0995_u09B0_u09CD.blwf.vatu=19+643|u0995_u09CD.half_u09B2.pres=22+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|space=21+213|u0995_u09B0_u09CD.blwf.vatu=22+643|u0995_u09CD.half_u09B2.pres=25+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|space=24+213|u0995_u09B0_u09CD.blwf.vatu=25+643|u0995_u09CD.half_u09B2.pres=28+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|space=27+213|u0995_u09B0_u09CD.blwf.vatu=28+643|u0995_u09CD.half_u09B2.pres=31+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|space=30+213|u0995_u09B0_u09CD.blwf.vatu=31+643|u0995_u09CD.half_u09B2.pres=34+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|space=33+213|u0995_u09B0_u09CD.blwf.vatu=34+643|u0995_u09CD.half_u09B2.pres=37+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|space=36+213|u0995_u09B0_u09CD.blwf.vatu=37+643|u0995_u09CD.half_u09B2.pres=40+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|space=39+213|u0995_u09B0_u09CD.blwf.vatu=40+643|u0995_u09CD.half_u09B2.pres=43+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|space=42+213|u0995_u09B0_u09CD.blwf.vatu=43+643|u0995_u09CD.half_u09B2.pres=46+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|space=45+213|u0995_u09B0_u09CD.blwf.vatu=46+643|u0995_u0
 9CD.half_u09B2.pres=49+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|
 space=48+213|u0995_u09B0_u09CD.blwf.vatu=49+643|u0995_u09CD.half_u09B2.pres=52+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.ha
 lf_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|space=51+213|u0995_u09B0_u09CD.blwf.vatu=52+643|u0995_u09CD.half_u09B2.pres=55+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=
 42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|space=54+213|u0995_u09B0_u09CD.blwf.vatu=55+643|u0995_u09CD.half_u09B2.pres=58+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u
 09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|space=57+213|u0995_u09B0_u09CD.blwf.vatu=58+643|u0995_u09CD.half_u09B2.pres=61+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u099
 5.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|space=60+213|u0995_u09B0_u09CD.blwf.vatu=61+643|u0995_u09CD.half_u09B2.pres=64+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|
 u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|space=63+213|u0995_u09B0_u09CD.blwf.vatu=64+643|u0995_u09CD.half_u09B2.pres=67+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.ha
 lf_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|space=66+213|u0995_u09B0_u09CD.blwf.vatu=67+643|u0995_u09CD.half_u09B2.pres=70+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=
 33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|space=69+213|u0995_u09B0_u09CD.blwf.vatu=70+643|u0995_u09CD.half_u09B2.pres=73+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u
 09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|space=72+213|u0995_u09B0_u09CD.blwf.vatu=73+643|u0995_u09CD.half_u09B2.pres=76+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u099
 5.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|space=75+213|u0995_u09B0_u09CD.blwf.vatu=76+643|u0995_u09CD.half_u09B2.pres=79+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|
 u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|space=78+213|u0995_u09B0_u09CD.blwf.vatu=79+643|u0995_u09CD.half_u09B2.pres=82+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.ha
 lf_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|u0995_u09CD.half_u0995.pres=78+566|space=81+213|u0995_u09B0_u09CD.blwf.vatu=82+643|u0995_u09CD.half_u09B2.pres=85+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=
 24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|u0995_u09CD.half_u0995.pres=78+566|u0995_u09CD.half_u0995.pres=81+566|space=84+213|u0995_u09B0_u09CD.blwf.vatu=85+643|u0995_u09CD.half_u09B2.pres=88+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u
 09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|u0995_u09CD.half_u0995.pres=78+566|u0995_u09CD.half_u0995.pres=81+566|u0995_u09CD.half_u0995.pres=84+566|space=87+213|u0995_u09B0_u09CD.blwf.vatu=88+643|u0995_u09CD.half_u09B2.pres=91+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u099
 5.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|u0995_u09CD.half_u0995.pres=78+566|u0995_u09CD.half_u0995.pres=81+566|u0995_u09CD.half_u0995.pres=84+566|u0995_u09CD.half_u0995.pres=87+566|space=90+213|u0995_u09B0_u09CD.blwf.vatu=91+643|u0995_u09CD.half_u09B2.pres=94+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|
 u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|u0995_u09CD.half_u0995.pres=78+566|u0995_u09CD.half_u0995.pres=81+566|u0995_u09CD.half_u0995.pres=84+566|u0995_u09CD.half_u0995.pres=87+566|u0995_u09CD.half_u0995.pres=90+566|space=93+213|u0995_u09B0_u09CD.blwf.vatu=94+643|u0995_u09CD.half_u09B2.pres=97+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.ha
 lf_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|u0995_u09CD.half_u0995.pres=78+566|u0995_u09CD.half_u0995.pres=81+566|u0995_u09CD.half_u0995.pres=84+566|u0995_u09CD.half_u0995.pres=87+566|u0995_u09CD.half_u0995.pres=90+566|u0995_u09CD.half_u0995.pres=93+566|space=96+213|u0995_u09B0_u09CD.blwf.vatu=97+643|u0995_u09CD.half_u09B2.pres=100+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=
 15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|u0995_u09CD.half_u0995.pres=78+566|u0995_u09CD.half_u0995.pres=81+566|u0995_u09CD.half_u0995.pres=84+566|u0995_u09CD.half_u0995.pres=87+566|u0995_u09CD.half_u0995.pres=90+566|u0995_u09CD.half_u0995.pres=93+566|u0995_u09CD.half_u0995.pres=96+566|space=99+213|u0995_u09B0_u09CD.blwf.vatu=100+
 643|u0995_u09CD.half_u09B2.pres=103+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u
 09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|u0995_u09CD.half_u0995.pres=78+566|u0995_u09CD.half_u0995.pres=81+566|u0995_u09CD.half_u0995.pres=84+566|u0995_u09CD.half_u0995.pres=87+566|u0995_u09CD.half_u0995.pres=90+566|u0995_u09CD.half_u0995.pres=93+566|u0995_u09CD.half_u0995.pres=96+566|u0995_u09CD.half_u0995.p
 res=99+566|space=102+213|u0995_u09B0_u09CD.blwf.vatu=103+643|u0995_u09CD.half_u09B2.pres=106+602]
+../fonts/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u099
 5.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|u0995_u09CD.half_u0995.pres=78+566|u0995_u09CD.half_u0995.pres=81+566|u0995_u09CD.half_u0995.pres=84+566|u0995_u09CD.half_u0995.pres=87+566|u0995_u09CD.half_u0995.pres=90+566|u0995_u09CD.half_u0995.pres=93+566|u0995_u09CD.half_u0995.pres=96+566|u09
 95_u09CD.half_u0995.pres=99+566|u0995_u09CD.half_u0995.pres=102+566|space=105+213|u0995_u09B0_u09CD.blwf.vatu=106+643|u0995_u09CD.half_u09B2.pres=109+602]
+../fonts/a6c76d1bafde4a0b1026ebcc932d2e5c6fd02442.ttf::U+1004,U+103A,U+1039,U+101B,U+103D,U+102D:[uni101B103D=0+450|uni1004103A1039102D=0 at -50,0+0]
diff --git a/test/shaping/data/in-house/tests/mark-attachment.tests b/test/shaping/data/in-house/tests/mark-attachment.tests
new file mode 100644
index 00000000..9a9b8ff0
--- /dev/null
+++ b/test/shaping/data/in-house/tests/mark-attachment.tests
@@ -0,0 +1 @@
+../fonts/98b7887cff91f722b92a8ff800120954606354f9.ttf::U+100F,U+103C,U+102F,U+1036:[uni103C102F=0+150|uni100F=0+550|uni1036=0 at -150,0+0]
diff --git a/test/shaping/data/in-house/tests/mark-filtering-sets.tests b/test/shaping/data/in-house/tests/mark-filtering-sets.tests
new file mode 100644
index 00000000..d30e0211
--- /dev/null
+++ b/test/shaping/data/in-house/tests/mark-filtering-sets.tests
@@ -0,0 +1,5 @@
+../fonts/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf::U+062A,U+062E,U+062A,U+0629:[glyph837=3 at 299,1170+0|uni06C1.1=3+502|glyph837=2 at 149,690+0|uni0628.8=2+532|glyph836=1 at -51,1259+0|glyph514=1+196|glyph837=0 at 655,1751+0|glyph112=0 at 0,-358+905]
+../fonts/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf::U+062A,U+062E,U+0646,U+0629:[glyph837=3 at 299,1170+0|uni06C1.1=3+502|glyph836=2 at 149,690+0|uni0628.8=2+532|glyph836=1 at -51,1259+0|glyph514=1+196|glyph837=0 at 655,1751+0|glyph112=0 at 0,-358+905]
+../fonts/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf::U+062A,U+062E,U+0626,U+0629:[glyph837=3 at 299,1170+0|uni06C1.1=3+502|glyph847=2 at 149,690+0|uni0628.8=2+532|glyph836=1 at -51,1259+0|glyph514=1+196|glyph837=0 at 655,1751+0|glyph112=0 at 0,-358+905]
+../fonts/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf::U+062A,U+062E,U+062B,U+0629:[glyph837=3 at 299,1520+0|uni06C1.1=3+502|glyph838=2 at 149,690+0|uni0628.8=2+532|glyph836=1 at -51,1259+0|glyph514=1+196|glyph837=0 at 655,1751+0|glyph112=0 at 0,-358+905]
+../fonts/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf::U+062A,U+062E,U+0679,U+0629:[glyph837=3 at 299,1520+0|uni06C1.1=3+502|glyph842=2 at 149,690+0|uni0628.8=2+532|glyph836=1 at -51,1259+0|glyph514=1+196|glyph837=0 at 655,1751+0|glyph112=0 at 0,-358+905]
diff --git a/test/shaping/data/in-house/tests/mongolian-variation-selector.tests b/test/shaping/data/in-house/tests/mongolian-variation-selector.tests
new file mode 100644
index 00000000..efb4cf4e
--- /dev/null
+++ b/test/shaping/data/in-house/tests/mongolian-variation-selector.tests
@@ -0,0 +1,4 @@
+../fonts/37033cc5cf37bb223d7355153016b6ccece93b28.ttf::U+1826,U+180B,U+1826:[uni1826.E85E_ue.init1=0+599|uni1826.E856_ue.fina=2+750]
+../fonts/ef86fe710cfea877bbe0dbb6946a1f88d0661031.ttf::U+1820,U+180B:[uni1820.E821_a.isol1=0+1199]
+../fonts/bb29ce50df2bdba2d10726427c6b7609bf460e04.ttf::U+183A,U+1823,U+182E,U+182B,U+1822,U+1826,U+180B,U+1832,U+180B,U+1827,U+1837,U+0020,U+182D,U+182D,U+180B,U+0020,U+182D,U+180C,U+0020,U+182D,U+180D,U+200D,U+0020,U+182D,U+200D,U+182D,U+180B,U+200D,U+0020,U+182D,U+180C,U+200D,U+0020,U+182D,U+180D,U+200D,U+0020,U+200D,U+182D,U+200D,U+200D,U+182D,U+180B,U+200D,U+0020,U+200D,U+182D,U+180C,U+200D,U+0020,U+200D,U+182D,U+180D,U+200D,U+0020,U+200D,U+182D,U+200D,U+182D,U+180B,U+0020,U+200D,U+182D,U+180C,U+0020,U+1820,U+200C,U+182D,U+1820,U+1837,U+0020,U+1830,U+1824,U+1837,U+200D,U+200D,U+182D,U+1820,U+200D,U+0020,U+200D,U+182D,U+1824,U+182F,U+1822,U+0020,U+182A,U+1820,U+1822,U+182D,U+180E,U+1820,U+202F,U+1836,U+1822,U+1828:[uni183A1823.E971_ko.init=0+950|uni182E.E904_m.medi=2+400|uni182B1822.E8A6_pi.medi=3+1150|uni1826.E854_ue.medi1=5+1100|uni1832.E916_t.medi1=7+1000|uni1827.E85C_ee.medi=9+750|uni1837.E931_r.fina=10+750|space=11+500|uni182D.E8E2_g.init=12+1000|uni182D.E8E8_g.fina1=13+1250
 |space=15+500|uni182D.EA1B_g.isol2=16+1000|space=18+500|uni182D.EA1E_g.init3=19+650|space=19+0|space=22+500|uni182D.E8E2_g.init=23+1000|space=23+0|uni182D.E8E5_g.medi1=25+800|space=25+0|space=28+500|uni182D.EA1D_g.init2=29+950|space=29+0|space=32+500|uni182D.EA1E_g.init3=33+650|space=33+0|space=36+500|space=36+0|uni182D.E8E4_g.medi=38+800|space=38+0|space=38+0|uni182D.E8E5_g.medi1=41+800|space=41+0|space=44+500|space=44+0|uni182D.E8E6_g.medi2=46+650|space=46+0|space=49+500|space=49+0|uni182D.E8E6_g.medi2=51+650|space=51+0|space=54+500|space=54+0|uni182D.E8E4_g.medi=56+800|space=56+0|uni182D.E8E8_g.fina1=58+1250|space=60+500|space=60+0|uni182D.E8E9_g.fina2=62+1050|space=64+500|uni1820.E820_a.isol=65+1550|space=65+0|uni182D.E8E2_g.init=67+1000|uni1820.E823_a.medi=68+400|uni1837.E931_r.fina=69+750|space=70+500|uni1830.E90B_s.init=71+850|uni1824.E844_u.medi=72+600|uni1837.E930_r.medi=73+600|space=73+0|space=73+0|uni182D.E8E5_g.medi1=76+800|uni1820.E823_a.medi=77+400|space=77+0|space=79+
 500|space=79+0|uni182D.E8E5_g.medi1=81+800|uni1824.E844_u.medi=82+600|uni182F.E908_l.medi=83+400|uni1822.E837_i.fina=84+600|space=85+500|uni182A1820.E875_ba.init=86+1000|uni1822.E836_i.medi2=88+1000|uni182D.E8E8_g.fina1=89+1250|space=90+0|uni1820.E827_a.fina2=91+600|uni202F.nobreak=92+500|uni1836.E92B_y.init1=93+500|uni1822.E834_i.medi=94+500|uni1828.E866_n.fina=95+850]
+../fonts/a34a7b00f22ffb5fd7eef6933b81c7e71bc2cdfb.ttf::U+180A,U+1868,U+180A,U+1868,U+180B,U+180A,U+1868,U+180C,U+180A,U+1868,U+180D,U+180A:[gid1=0+268|gid10=1+778|gid1=2+268|gid9=3+575|gid1=5+268|gid10=6+778|gid1=8+268|gid8=9+575|gid1=11+268]
diff --git a/test/shaping/data/in-house/tests/simple.tests b/test/shaping/data/in-house/tests/simple.tests
new file mode 100644
index 00000000..64cae0e8
--- /dev/null
+++ b/test/shaping/data/in-house/tests/simple.tests
@@ -0,0 +1,2 @@
+../fonts/49c9f7485c1392fa09a1b801bc2ffea79275f22e.ttf:--shaper=ot:U+0056,U+0041,U+0042,U+0045,U+0061,U+0062,U+0063,U+0064:[V=0+1142|A=1+1295|B=2+1295|E=3+1123|a=4+1126|b=5+1164|c=6+1072|d=7+1164]
+../fonts/49c9f7485c1392fa09a1b801bc2ffea79275f22e.ttf:--shaper=fallback:U+0056,U+0041,U+0042,U+0045,U+0061,U+0062,U+0063,U+0064:[V=0+1295|A=1+1295|B=2+1295|E=3+1123|a=4+1126|b=5+1164|c=6+1072|d=7+1164]
diff --git a/test/shaping/data/in-house/tests/spaces.tests b/test/shaping/data/in-house/tests/spaces.tests
new file mode 100644
index 00000000..3ebaac51
--- /dev/null
+++ b/test/shaping/data/in-house/tests/spaces.tests
@@ -0,0 +1,17 @@
+../fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+0020:[gid1=0+560]
+../fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+00A0:[gid1=0+560]
+../fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+1680:[gid0=0+692]
+../fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2000:[gid1=0+1024]
+../fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2001:[gid1=0+2048]
+../fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2002:[gid1=0+1024]
+../fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2003:[gid1=0+2048]
+../fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2004:[gid1=0+683]
+../fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2005:[gid1=0+512]
+../fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2006:[gid1=0+341]
+../fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2007:[gid1=0+560]
+../fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2008:[gid1=0+560]
+../fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2009:[gid1=0+410]
+../fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+200A:[gid1=0+128]
+../fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+202F:[gid1=0+280]
+../fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+205F:[gid1=0+455]
+../fonts/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+3000:[gid1=0+2048]
diff --git a/test/shaping/data/in-house/tests/tibetan-contractions-1.tests b/test/shaping/data/in-house/tests/tibetan-contractions-1.tests
new file mode 100644
index 00000000..ccc0c9c5
--- /dev/null
+++ b/test/shaping/data/in-house/tests/tibetan-contractions-1.tests
@@ -0,0 +1,60 @@
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+FEFF,U+0F40,U+0F72,U+0F72,U+0F0B,U+0F66,U+0FAD,U+0F7C,U+0F7C,U+0F0B:[uni0F40=0+680|uni0F720F72=0+0|uni0F0B=4+190|uni0F660FAD=5+680|uni0F7D=5+0|uni0F0B=9+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F40,U+0F74,U+0F72,U+0F66,U+0F0B:[uni0F400F740F72=0+680|uni0F66=3+680|uni0F0B=4+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F40,U+0F74,U+0F7A,U+0F53,U+0F0B:[uni0F400F74=0+680|uni0F7A=0+0|uni0F53=3+590|uni0F0B=4 at -30,0+160]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F40,U+0F74,U+0F7C,U+0F56,U+0F39,U+0F0B:[uni0F400F74=0+680|uni0F7C=0+0|uni0F56=3+610|uni0F39=3+0|uni0F0B=5+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F40,U+0F74,U+0F72,U+0F42,U+0F66,U+0F0B:[uni0F400F740F72=0+680|uni0F42=3+680|uni0F66=4+680|uni0F0B=5+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F40,U+0F74,U+0F7A,U+0F66,U+0F0B:[uni0F400F74=0+680|uni0F7A=0+0|uni0F66=3+680|uni0F0B=4+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F40,U+0FB3,U+0F74,U+0F7A,U+0F56,U+0F66,U+0F0B:[uni0F400FB30F740F7A=0+660|uni0F56=4+610|uni0F66=5+680|uni0F0B=6+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F40,U+0FB3,U+0F74,U+0F7C,U+0F42,U+0F0B:[uni0F400FB30F74=0+660|uni0F7C=0+0|uni0F42=4+680|uni0F0B=5+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F51,U+0F40,U+0F7C,U+0F7C,U+0F42,U+0F0B:[uni0F51=0+600|uni0F400F7D=1+680|uni0F42=4+680|uni0F0B=5+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F51,U+0F40,U+0F7C,U+0F7C,U+0F62,U+0F0B:[uni0F51=0+600|uni0F400F7D=1+680|uni0F62=4+620|uni0F0B=5 at -65,0+130]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F51,U+0F40,U+0FB1,U+0F7C,U+0F72,U+0F62,U+0F0B:[uni0F51=0+600|uni0F400FB10F7C0F72=1+660|uni0F62=5+620|uni0F0B=6 at -65,0+130]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F66,U+0F90,U+0FB1,U+0F74,U+0F7A,U+0F0B:[uni0F660F900FB10F74=0+680|uni0F7A=0+0|uni0F0B=5+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F56,U+0F66,U+0F90,U+0FB1,U+0F7A,U+0F7A,U+0F51,U+0F0B:[uni0F56=0+610|uni0F660F900FB1=1+660|uni0F7B=1+0|uni0F51=6+600|uni0F0B=7 at -70,0+106]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F56,U+0F66,U+0F90,U+0FB1,U+0F7A,U+0F7A,U+0F7A,U+0F51,U+0F0B:[uni0F56=0+610|uni0F660F900FB1=1+660|uni0F7B0F7A=1+0|uni0F51=7+600|uni0F0B=8 at -70,0+106]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F41,U+0F58,U+0F66,U+0F74,U+0F7E,U+0F0B:[uni0F41=0+660|uni0F58=1+660|uni0F660F740F7E=2+680|uni0F0B=5+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F41,U+0F74,U+0F7C,U+0F66,U+0F39,U+0F0B:[uni0F410F74=0+680|uni0F7C=0+0|uni0F66=3+680|uni0F39=3+0|uni0F0B=5+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F41,U+0FB1,U+0F74,U+0F7C,U+0F42,U+0F0B:[uni0F410FB10F74=0+670|uni0F7C=0+0|uni0F42=4+680|uni0F0B=5+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F41,U+0FB2,U+0F74,U+0F7A,U+0F51,U+0F0B:[uni0F410FB20F74=0+660|uni0F7A=0+0|uni0F51=4+600|uni0F0B=5 at -70,0+106]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F41,U+0FB2,U+0F74,U+0F72,U+0F44,U+0F0B:[uni0F410FB20F74=0+660|uni0F72=0+0|uni0F44=4+560|uni0F0B=5 at -20,0+110]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F41,U+0FB2,U+0F74,U+0F7C,U+0F51,U+0F0B:[uni0F410FB20F74=0+660|uni0F7C=0+0|uni0F51=4+600|uni0F0B=5 at -70,0+106]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F41,U+0FB2,U+0F74,U+0F7E,U+0F51,U+0F0B:[uni0F410FB20F740F7E=0+660|uni0F51=4+600|uni0F0B=5 at -70,0+106]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F58,U+0F41,U+0FB1,U+0F7A,U+0F7A,U+0F7A,U+0F53,U+0F0B:[uni0F58=0+660|uni0F410FB1=1+680|uni0F7B0F7A=1+0|uni0F53=6+590|uni0F0B=7 at -30,0+160]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F60,U+0F41,U+0F7C,U+0F7C,U+0F62,U+0F0B:[uni0F60=0+600|uni0F410F7D=1+660|uni0F62=4+620|uni0F0B=5 at -65,0+130]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F42,U+0F74,U+0F7C,U+0F42,U+0F0B:[uni0F420F74=0+680|uni0F7C=0+0|uni0F42=3+680|uni0F0B=4+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F42,U+0FB1,U+0F74,U+0F72,U+0F42,U+0F0B:[uni0F420FB10F74=0+700|uni0F72=0+0|uni0F42=4+680|uni0F0B=5+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F42,U+0FB2,U+0F74,U+0F72,U+0F53,U+0F0B:[uni0F420FB20F74=0+680|uni0F72=0+0|uni0F53=4+590|uni0F0B=5 at -30,0+160]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F42,U+0FB2,U+0F74,U+0F72,U+0F0B:[uni0F420FB20F74=0+680|uni0F72=0+0|uni0F0B=4+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F42,U+0FB2,U+0F74,U+0F7C,U+0F53,U+0F0B:[uni0F420FB20F74=0+680|uni0F7C=0+0|uni0F53=4+590|uni0F0B=5 at -30,0+160]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F42,U+0FB2,U+0F74,U+0F7C,U+0F56,U+0F0B:[uni0F420FB20F74=0+680|uni0F7C=0+0|uni0F56=4+610|uni0F0B=5+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F42,U+0FB2,U+0F7C,U+0F72,U+0F53,U+0F0B:[uni0F420FB2=0+680|uni0F7C0F72=0+0|uni0F53=4+590|uni0F0B=5 at -30,0+160]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F42,U+0FB2,U+0F7C,U+0F7A,U+0F62,U+0F0B:[uni0F420FB2=0+680|uni0F7C0F7A=0+0|uni0F62=4+620|uni0F0B=5 at -65,0+130]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F51,U+0F42,U+0F74,U+0F72,U+0F42,U+0F0B:[uni0F51=0+600|uni0F420F740F72=1+680|uni0F42=4+680|uni0F0B=5+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F51,U+0F42,U+0F74,U+0F7A,U+0F53,U+0F0B:[uni0F51=0+600|uni0F420F74=1+680|uni0F7A=1+0|uni0F53=4+590|uni0F0B=5 at -30,0+160]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F51,U+0F42,U+0F74,U+0F7A,U+0F42,U+0F66,U+0F0B:[uni0F51=0+600|uni0F420F74=1+680|uni0F7A=1+0|uni0F42=4+680|uni0F66=5+680|uni0F0B=6+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F51,U+0F42,U+0FB3,U+0F7C,U+0F7A,U+0F44,U+0F0B:[uni0F51=0+600|uni0F420FB3=1+680|uni0F7C0F7A=1+0|uni0F44=5+560|uni0F0B=6 at -20,0+110]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F58,U+0F42,U+0F7C,U+0F7C,U+0F53,U+0F0B:[uni0F58=0+660|uni0F420F7D=1+680|uni0F53=4+590|uni0F0B=5 at -30,0+160]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F44,U+0F74,U+0F72,U+0F42,U+0F0B:[uni0F440F74=0+610|uni0F72=0+0|uni0F42=3+680|uni0F0B=4+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F51,U+0F42,U+0FB2,U+0F74,U+0F7C,U+0F56,U+0F0B:[uni0F51=0+600|uni0F420FB20F74=1+680|uni0F7C=1+0|uni0F56=5+610|uni0F0B=6+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F56,U+0F45,U+0F74,U+0F72,U+0F42,U+0F0B:[uni0F56=0+610|uni0F450F740F72=1+630|uni0F42=4+680|uni0F0B=5+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F56,U+0F45,U+0F74,U+0F72,U+0F66,U+0F0B:[uni0F56=0+610|uni0F450F740F72=1+630|uni0F66=4+680|uni0F0B=5+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F56,U+0F45,U+0FB2,U+0F74,U+0F42,U+0F0B:[uni0F56=0+610|uni0F450FB20F74=1+640|uni0F42=4+680|uni0F0B=5+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F56,U+0F45,U+0F74,U+0F72,U+0F0B:[uni0F56=0+610|uni0F450F740F72=1+630|uni0F0B=4+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F56,U+0F45,U+0F74,U+0F7E,U+0F0B:[uni0F56=0+610|uni0F450F740F7E=1+630|uni0F0B=4+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F46,U+0F74,U+0F72,U+0F63,U+0F0B:[uni0F460F74=0+650|uni0F72=0+0|uni0F63=3+700|uni0F0B=4+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F46,U+0F74,U+0F7C,U+0F51,U+0F0B:[uni0F460F74=0+650|uni0F7C=0+0|uni0F51=3+600|uni0F0B=4 at -70,0+106]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F46,U+0F74,U+0F7C,U+0F51,U+0F0B:[uni0F460F74=0+650|uni0F7C=0+0|uni0F51=3+600|uni0F0B=4 at -70,0+106]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F46,U+0F74,U+0F7E,U+0F51,U+0F0B:[uni0F460F740F7E=0+650|uni0F51=3+600|uni0F0B=4 at -70,0+106]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F46,U+0F39,U+0F74,U+0F7C,U+0F51,U+0F0B:[uni0F46=0+620|uni0F39=0+0|uni0F74=0+0|uni0F7C=0+0|uni0F51=4+600|uni0F0B=5 at -70,0+106]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F46,U+0FB2,U+0F74,U+0F72,U+0F53,U+0F0B:[uni0F460FB20F740F72=0+660|uni0F53=4+590|uni0F0B=5 at -30,0+160]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F46,U+0FB2,U+0F74,U+0F7C,U+0F63,U+0F0B:[uni0F460FB20F74=0+660|uni0F7C=0+0|uni0F63=4+700|uni0F0B=5+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F58,U+0F46,U+0F7C,U+0F7A,U+0F53,U+0F0B:[uni0F58=0+660|uni0F46=1+620|uni0F7C0F7A=1+0|uni0F53=4+590|uni0F0B=5 at -30,0+160]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F60,U+0F46,U+0FB1,U+0F7C,U+0F72,U+0F62,U+0F0B:[uni0F60=0+600|uni0F460FB10F7C0F72=1+660|uni0F62=5+620|uni0F0B=6 at -65,0+130]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F47,U+0F7C,U+0F7C,U+0F0B:[uni0F470F7D=0+570|uni0F0B=3+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F62,U+0F97,U+0F74,U+0F7A,U+0F53,U+0F39,U+0F0B:[uni0F620F970F74=0+600|uni0F7A=0+0|uni0F53=4+590|uni0F39=4+0|uni0F0B=6+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F49,U+0F74,U+0F72,U+0F0B:[uni0F490F74=0+580|uni0F72=0+0|uni0F0B=3+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F49,U+0F74,U+0F72,U+0F44,U+0F0B:[uni0F490F74=0+580|uni0F72=0+0|uni0F44=3+560|uni0F0B=4 at -20,0+110]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F58,U+0F49,U+0F72,U+0F7E,U+0F51,U+0F0B:[uni0F58=0+660|uni0F49=1+580|uni0F720F7E=1+0|uni0F51=4+600|uni0F0B=5 at -70,0+106]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F42,U+0F4F,U+0F74,U+0F72,U+0F42,U+0F0B:[uni0F42=0+680|uni0F4F0F740F72=1+600|uni0F42=4+680|uni0F0B=5+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F56,U+0F4F,U+0F44,U+0F7C,U+0F7E,U+0F66,U+0F0B:[uni0F56=0+610|uni0F4F=1+560|uni0F44=2+560|uni0F7C0F7E=2+0|uni0F66=5+680|uni0F0B=6+190]
+../fonts/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F50,U+0F39,U+0F74,U+0F7A,U+0F4A,U+0F0B:[uni0F50=0+600|uni0F39=0+0|uni0F74=0+0|uni0F7A=0+0|uni0F4A=4+590|uni0F0B=5+190]
diff --git a/test/shaping/data/in-house/tests/tibetan-contractions-2.tests b/test/shaping/data/in-house/tests/tibetan-contractions-2.tests
new file mode 100644
index 00000000..b44445c3
--- /dev/null
+++ b/test/shaping/data/in-house/tests/tibetan-contractions-2.tests
@@ -0,0 +1,53 @@
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F50,U+0F74,U+0F72,U+0F53,U+0F0B:[uni0F500F74=0+600|uni0F72=0+0|uni0F53=3+590|uni0F0B=4 at -30,0+160]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F58,U+0F50,U+0F74,U+0F7C,U+0F44,U+0F0B:[uni0F58=0+660|uni0F500F74=1+600|uni0F7C=1+0|uni0F44=4+560|uni0F0B=5 at -20,0+110]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F58,U+0F50,U+0F7C,U+0F7A,U+0F44,U+0F0B:[uni0F58=0+660|uni0F50=1+600|uni0F7C0F7A=1+0|uni0F44=4+560|uni0F0B=5 at -20,0+110]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F58,U+0F50,U+0F7C,U+0F72,U+0F66,U+0F0B:[uni0F58=0+660|uni0F50=1+600|uni0F7C0F72=1+0|uni0F66=4+680|uni0F0B=5+190]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F51,U+0F74,U+0F62,U+0FB2,U+0F7C,U+0F51,U+0F0B:[uni0F510F74=0+600|uni0F620FB2=2+600|uni0F7C=2+0|uni0F51=5+600|uni0F0B=6 at -70,0+106]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F51,U+0FB2,U+0F74,U+0F72,U+0F42,U+0F0B:[uni0F510FB20F74=0+600|uni0F72=0+0|uni0F42=4+680|uni0F0B=5+190]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F42,U+0F51,U+0F74,U+0F7A,U+0F53,U+0F0B:[uni0F42=0+680|uni0F510F740F7A=1+600|uni0F53=4+590|uni0F0B=5 at -30,0+160]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F56,U+0F51,U+0F7B,U+0F42,U+0F66,U+0F0B:[uni0F56=0+610|uni0F510F7B=1+579|uni0F42=3+680|uni0F66=4+680|uni0F0B=5+190]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F60,U+0F51,U+0F74,U+0F7A,U+0F51,U+0F0B:[uni0F60=0+600|uni0F510F740F7A=1+600|uni0F51=4+600|uni0F0B=5 at -70,0+106]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F62,U+0FA1,U+0F7C,U+0F7A,U+0F0B:[uni0F620FA10F7C0F7A=0+580|uni0F0B=4+190]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F66,U+0FA1,U+0F74,U+0F72,U+0F56,U+0F0B:[uni0F660FA10F74=0+680|uni0F72=0+0|uni0F56=4+610|uni0F0B=5+190]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F53,U+0F74,U+0F7C,U+0F42,U+0F66,U+0F0B:[uni0F530F74=0+600|uni0F7C=0+0|uni0F42=3+680|uni0F66=4+680|uni0F0B=5+190]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F53,U+0F74,U+0F7C,U+0F62,U+0F0B:[uni0F530F74=0+600|uni0F7C=0+0|uni0F62=3+620|uni0F0B=4 at -65,0+130]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F42,U+0F53,U+0FB1,U+0F7C,U+0F7E,U+0F62,U+0F0B:[uni0F42=0+680|uni0F530FB1=1+600|uni0F7C0F7E=1+0|uni0F62=5+620|uni0F0B=6 at -65,0+130]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F51,U+0F54,U+0F74,U+0F7C,U+0F42,U+0F66,U+0F0B:[uni0F51=0+600|uni0F540F74=1+610|uni0F7C=1+0|uni0F42=4+680|uni0F66=5+680|uni0F0B=6+190]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F56,U+0FB1,U+0F74,U+0F7E,U+0F56,U+0F0B:[uni0F560FB10F74=0+620|uni0F7E=0+0|uni0F56=4+610|uni0F0B=5+190]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F56,U+0FB3,U+0F74,U+0F7C,U+0F53,U+0F0B:[uni0F560FB30F74=0+650|uni0F7C=0+0|uni0F53=4+590|uni0F0B=5 at -30,0+160]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F56,U+0FB3,U+0F7C,U+0F7C,U+0F53,U+0F0B:[uni0F560FB3=0+650|uni0F7D=0+0|uni0F53=4+590|uni0F0B=5 at -30,0+160]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F51,U+0F56,U+0F74,U+0F7C,U+0F51,U+0F0B:[uni0F51=0+600|uni0F560F74=1+610|uni0F7C=1+0|uni0F51=4+600|uni0F0B=5 at -70,0+106]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F51,U+0F56,U+0F74,U+0F7C,U+0F56,U+0F66,U+0F0B:[uni0F51=0+600|uni0F560F74=1+610|uni0F7C=1+0|uni0F56=4+610|uni0F66=5+680|uni0F0B=6+190]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F58,U+0F74,U+0F7A,U+0F42,U+0F66,U+0F0B:[uni0F580F74=0+680|uni0F7A=0+0|uni0F42=3+680|uni0F66=4+680|uni0F0B=5+190]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F58,U+0F74,U+0F72,U+0F42,U+0F0B:[uni0F580F74=0+680|uni0F72=0+0|uni0F42=3+680|uni0F0B=4+190]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F58,U+0F74,U+0F7A,U+0F42,U+0F66,U+0F0B:[uni0F580F74=0+680|uni0F7A=0+0|uni0F42=3+680|uni0F66=4+680|uni0F0B=5+190]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F58,U+0F74,U+0F7A,U+0F53,U+0F0B:[uni0F580F74=0+680|uni0F7A=0+0|uni0F53=3+590|uni0F0B=4 at -30,0+160]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F58,U+0F9F,U+0F7C,U+0F7A,U+0F42,U+0F0B:[uni0F580F9F0F7C0F7A=0+660|uni0F42=4+680|uni0F0B=5+190]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F58,U+0F7C,U+0F7A,U+0F44,U+0F0B:[uni0F58=0+660|uni0F7C0F7A=0+0|uni0F44=3+560|uni0F0B=4 at -20,0+110]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F42,U+0F59,U+0F74,U+0F7C,U+0F62,U+0F0B:[uni0F42=0+680|uni0F590F74=1+620|uni0F7C=1+0|uni0F62=4+620|uni0F0B=5 at -65,0+130]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F58,U+0F5A,U+0FAE,U+0F74,U+0F7E,U+0F66,U+0F0B:[uni0F58=0+660|uni0F5A0FAE0F740F7E=1+620|uni0F66=5+680|uni0F0B=6+190]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F62,U+0FAB,U+0F74,U+0F7A,U+0F66,U+0F0B:[uni0F620FAB0F74=0+660|uni0F7A=0+0|uni0F66=4+680|uni0F0B=5+190]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F62,U+0FAB,U+0F74,U+0F7A,U+0F53,U+0F0B:[uni0F620FAB0F74=0+660|uni0F7A=0+0|uni0F53=4+590|uni0F0B=5 at -30,0+160]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F5E,U+0F74,U+0F7C,U+0F63,U+0F0B:[uni0F5E0F74=0+660|uni0F7C=0+0|uni0F63=3+700|uni0F0B=4+190]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F42,U+0F5E,U+0F74,U+0F7C,U+0F42,U+0F0B:[uni0F42=0+680|uni0F5E0F74=1+660|uni0F7C=1+0|uni0F42=4+680|uni0F0B=5+190]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F42,U+0F5E,U+0F74,U+0F7C,U+0F58,U+0F66,U+0F0B:[uni0F42=0+680|uni0F5E0F74=1+660|uni0F7C=1+0|uni0F58=4+660|uni0F66=5+680|uni0F0B=6+190]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F42,U+0F5F,U+0F74,U+0F7C,U+0F0B:[uni0F42=0+680|uni0F5F0F74=1+610|uni0F7C=1+0|uni0F0B=4+190]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F42,U+0F5F,U+0F74,U+0F72,U+0F44,U+0F0B:[uni0F42=0+680|uni0F5F0F740F72=1+610|uni0F44=4+560|uni0F0B=5 at -20,0+110]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F42,U+0F5F,U+0F74,U+0F7A,U+0F62,U+0F0B:[uni0F42=0+680|uni0F5F0F74=1+610|uni0F7A=1+0|uni0F62=4+620|uni0F0B=5 at -65,0+130]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F42,U+0F5F,U+0F74,U+0F7A,U+0F62,U+0F0B:[uni0F42=0+680|uni0F5F0F74=1+610|uni0F7A=1+0|uni0F62=4+620|uni0F0B=5 at -65,0+130]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F42,U+0F5F,U+0F74,U+0F7A,U+0F51,U+0F0B:[uni0F42=0+680|uni0F5F0F74=1+610|uni0F7A=1+0|uni0F51=4+600|uni0F0B=5 at -70,0+106]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F60,U+0F7C,U+0F7A,U+0F62,U+0F0B:[uni0F60=0+600|uni0F7C0F7A=0+0|uni0F62=3+620|uni0F0B=4 at -65,0+130]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F61,U+0F72,U+0F7A,U+0F0B:[uni0F61=0+700|uni0F720F7A=0+0|uni0F0B=3+190]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F61,U+0F7A,U+0F7A,U+0F66,U+0F0B:[uni0F61=0+700|uni0F7B=0+0|uni0F66=3+680|uni0F0B=4+190]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F62,U+0F72,U+0F53,U+0F7C,U+0F7A,U+0F0B:[uni0F620F72=0+620|uni0F530F7C0F7A=2+590|uni0F0B=5+190]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F62,U+0F74,U+0F7C,U+0F63,U+0F0B:[uni0F620F74=0+601|uni0F7C=0+0|uni0F63=3+700|uni0F0B=4+190]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F66,U+0F7A,U+0F7E,U+0F53,U+0F0B:[uni0F66=0+680|uni0F7A0F7E=0+0|uni0F53=3+590|uni0F0B=4 at -30,0+160]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F66,U+0F7A,U+0F7E,U+0F51,U+0F60,U+0F0B:[uni0F66=0+680|uni0F7A0F7E=0+0|uni0F51=3+600|uni0F60=4+600|uni0F0B=5 at -40,0+150]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F66,U+0F7C,U+0F7C,U+0F56,U+0F0B:[uni0F660F7D=0+680|uni0F56=3+610|uni0F0B=4+190]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F66,U+0F7C,U+0F7C,U+0F62,U+0F0B:[uni0F660F7D=0+680|uni0F62=3+620|uni0F0B=4 at -65,0+130]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F66,U+0FB2,U+0F7C,U+0F7A,U+0F66,U+0F0B:[uni0F660FB2=0+680|uni0F7C0F7A=0+0|uni0F66=4+680|uni0F0B=5+190]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F66,U+0FB3,U+0F7C,U+0F7C,U+0F51,U+0F0B:[uni0F660FB3=0+680|uni0F7D=0+0|uni0F51=4+600|uni0F0B=5 at -70,0+106]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F66,U+0FB3,U+0F7C,U+0F7C,U+0F53,U+0F0B:[uni0F660FB3=0+680|uni0F7D=0+0|uni0F53=4+590|uni0F0B=5 at -30,0+160]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F56,U+0F66,U+0F99,U+0F7C,U+0F7E,U+0F51,U+0F66,U+0F0B:[uni0F56=0+610|uni0F660F99=1+670|uni0F7C0F7E=1+0|uni0F51=5+600|uni0F66=6+680|uni0F0B=7+190]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F63,U+0FB7,U+0FB1,U+0F7C,U+0F42,U+0F66,U+0F0B:[uni0F630FB70FB1=0+680|uni0F7C=0+0|uni0F42=4+680|uni0F66=5+680|uni0F0B=6+190]
+../fonts/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F68,U+0FB1,U+0F7C,U+0F53,U+0F0B:[uni0F680FB1=0+740|uni0F7C=0+0|uni0F53=3+590|uni0F0B=4 at -30,0+160]
diff --git a/test/shaping/data/in-house/tests/tibetan-vowels.tests b/test/shaping/data/in-house/tests/tibetan-vowels.tests
new file mode 100644
index 00000000..0bb0743b
--- /dev/null
+++ b/test/shaping/data/in-house/tests/tibetan-vowels.tests
@@ -0,0 +1,11 @@
+../fonts/82f4f3b57bb55344e72e70231380202a52af5805.ttf::U+0F68,U+0F72:[uni0F680F72=0+730]
+../fonts/82f4f3b57bb55344e72e70231380202a52af5805.ttf::U+0F68,U+0F74:[uni0F680F74=0+730]
+../fonts/82f4f3b57bb55344e72e70231380202a52af5805.ttf::U+0F68,U+0F7A:[uni0F680F7A=0+730]
+../fonts/82f4f3b57bb55344e72e70231380202a52af5805.ttf::U+0F68,U+0F7C:[uni0F680F7C=0+730]
+../fonts/82f4f3b57bb55344e72e70231380202a52af5805.ttf::U+0F68,U+0F71,U+0F72:[uni0F680F710F72=0+720]
+../fonts/82f4f3b57bb55344e72e70231380202a52af5805.ttf::U+0F68,U+0F71,U+0F74:[uni0F680F75=0+720]
+../fonts/82f4f3b57bb55344e72e70231380202a52af5805.ttf::U+0F68,U+0F7B:[uni0F680F7B=0+720]
+../fonts/82f4f3b57bb55344e72e70231380202a52af5805.ttf::U+0F68,U+0F7D:[uni0F680F7D=0+730]
+../fonts/82f4f3b57bb55344e72e70231380202a52af5805.ttf::U+0F68,U+0F7E:[uni0F680F7E=0+730]
+../fonts/82f4f3b57bb55344e72e70231380202a52af5805.ttf::U+0F68,U+0F7F:[uni0F68=0+730|uni0F7F=0+408]
+../fonts/82f4f3b57bb55344e72e70231380202a52af5805.ttf::U+0F00:[uni0F00=0+730]
diff --git a/test/shaping/data/in-house/tests/use-marchen.tests b/test/shaping/data/in-house/tests/use-marchen.tests
new file mode 100644
index 00000000..850c3e78
--- /dev/null
+++ b/test/shaping/data/in-house/tests/use-marchen.tests
@@ -0,0 +1,35 @@
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8F:[u11C8F=0+3000]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C71:[u11C71=0+1600]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8A,U+11CB5:[u11C8A=0+2000|u11CB5=0 at -2000,0+0]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C84,U+11C71:[u11C84=0+2200|u11C71=1+1600]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C7E,U+11C8A:[u11C7E=0+2600|u11C8A=1+2000]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8A,U+11C92,U+11CA9:[u11C8A.11C92.11CA9=0+2600]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8A,U+11C94,U+11CA9:[u11C8A.11C94.11CA9=0+2600]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8D,U+11C92,U+11CA9:[u11C8D.11C92.11CA9=0+2600]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8D,U+11C94,U+11CA9:[u11C8D.11C94.11CA9=0+2600]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8D,U+11C9E,U+11CA9:[u11C8D.11C9E.11CA9=0+3200]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8D,U+11CA0,U+11CA9:[u11C8D.11CA0.11CA9=0+3000]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8D,U+11C92,U+11CAA:[u11C8D.11C92.11CAA=0+2000]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8D,U+11C94,U+11CAA:[u11C8D.11C94.11CAA=0+2000]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8D,U+11C9D,U+11CAA:[u11C8D.11C9D.11CAA=0+2000]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8D,U+11C9E,U+11CAA:[u11C8D.11C9E.11CAA=0+2600]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8D,U+11CA0,U+11CAA:[u11C8D.11CA0.11CAA=0+2400]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C80,U+11C72,U+11CAA:[u11C80=0+2400|u11C72.11CAA=1+2000]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8C,U+11CB1,U+11C8D:[u11C8C.11CB1=0+2793|u11C8D=2+2000]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C80,U+11C7C,U+11CB3:[u11C80=0+2400|u11C7C.11CB3=1+2200]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C7F,U+11CB2,U+11C7D:[u11C7F.11CB2=0+2400|u11C7D=2+2000]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8D,U+11CB2,U+11C81:[u11C8D.11CB2=0+2000|u11C81=2+2400]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8C,U+11CB4,U+11C74:[u11C8C.11CB4=0+2800|u11C74=2+2000]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8A,U+11CA1,U+11CA9,U+11C71:[u11C8A.11CA1.11CA9=0+3000|u11C71=3+1600]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8D,U+11CA1,U+11CA9,U+11C71:[u11C8D.11CA1.11CA9=0+3000|u11C71=3+1600]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8D,U+11CA1,U+11CAA,U+11C71:[u11C8D.11CA1.11CAA=0+2400|u11C71=3+1600]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8F,U+11CB0,U+11CB4,U+11CB6:[u11C8F.11CB0.11CB4=0+3600|u11CB6=0 at -3200,0+0]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8E,U+11CB0,U+11CB2,U+11CB5:[u11C8E.11CB0.11CB2=0+2000|u11CB5=0 at -2000,0+0]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C74,U+11C89,U+11CB2,U+11C75:[u11C74=0+2000|u11C89.11CB2=1+2000|u11C75=3+2000]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C7C,U+11CAA,U+11CB2,U+11C75:[u11C7C.11CAA.11CB2=0+2200|u11C75=3+2000]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C81,U+11C74,U+11CB2,U+11C8B:[u11C81=0+2400|u11C74.11CB2=1+2000|u11C8B=3+2400]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8B,U+11CB3,U+11C74,U+11C8D:[u11C8B.11CB3=0+2400|u11C74=2+2000|u11C8D=3+2000]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C83,U+11CB4,U+11C74,U+11C8D:[u11C83.11CB4=0+2800|u11C74=2+2000|u11C8D=3+2000]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8B,U+11CB3,U+11C74,U+11C8D,U+11C71:[u11C8B.11CB3=0+2400|u11C74=2+2000|u11C8D=3+2000|u11C71=4+1600]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C80,U+11C76,U+11CB1,U+11C75,U+11C8D:[u11C80=0+2400|u11C76.11CB1=1+3200|u11C75=3+2000|u11C8D=4+2000]
+../fonts/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C80,U+11C8D,U+11C94,U+11CAA,U+11CB1,U+11C74,U+11C8D:[u11C80=0+2400|u11C8D.11C94.11CAA.11CB1.shorti=1+2600|u11C74=5+2000|u11C8D=6+2000]
diff --git a/test/shaping/data/in-house/tests/use-syllable.tests b/test/shaping/data/in-house/tests/use-syllable.tests
new file mode 100644
index 00000000..213b848b
--- /dev/null
+++ b/test/shaping/data/in-house/tests/use-syllable.tests
@@ -0,0 +1,7 @@
+../fonts/96490dd2ff81233b335a650e7eb660e0e7b2eeea.ttf::U+AA00,U+AA2D,U+AA29:[a_cham=0+1121|uSign_cham=0 at 14,0+0|.notdef=0+600]
+../fonts/e68a88939e0f06e34d2bc911f09b70890289c8fd.ttf::U+AA00,U+AA34,U+AA36:[raMedial_cham_pre=0+400|a_cham=0+1121|waMedial_cham=0 at -32,0+0]
+../fonts/e68a88939e0f06e34d2bc911f09b70890289c8fd.ttf::U+AA00,U+AA35,U+AA33:[a_cham=0+1121|laMedial_cham=0 at -32,0+0|yaMedial_cham=0+542]
+../fonts/e68a88939e0f06e34d2bc911f09b70890289c8fd.ttf::U+AA00,U+AA35,U+AA36:[a_cham=0+1121|laMedial_waMedial_cham=0 at 43,0+0]
+../fonts/074a5ae6b19de8f29772fdd5df2d3d833f81f5e6.ttf:--no-glyph-names:U+11320,U+20F0,U+11367:[3=0+502|1=0 at 33,0+0|4=0 at 300,8+0]
+../fonts/373e67bf41ca264e260a9716162b71a23549e885.ttf:--no-glyph-names:U+A8AC,U+A8B4,U+A8B5:[2=0+377|3=0+242|4=0+210]
+../fonts/59a585a63b3df608fbeef00956c8c108deec7de6.ttf:--no-glyph-names:U+1BC7,U+1BEA,U+1BF3:[1=0+749|2=0+402|4=0+535|3=0+401]
diff --git a/test/shaping/data/in-house/tests/use.tests b/test/shaping/data/in-house/tests/use.tests
new file mode 100644
index 00000000..f83f6f9a
--- /dev/null
+++ b/test/shaping/data/in-house/tests/use.tests
@@ -0,0 +1,4 @@
+../fonts/fbb6c84c9e1fe0c39e152fbe845e51fd81f6748e.ttf::U+1B1B,U+1B44,U+1B13,U+1B3E:[gid3=0+990|gid7=0+2473|gid5=0 at -293,-400+0]
+../fonts/4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf::U+1A48,U+1A58,U+1A25,U+1A48,U+1A58,U+1A25,U+1A6E,U+1A63:[uni1A48=0+1212|uni1A25=0+1912|uni1A58=0+0|uni1A48=3+1212|uni1A6E=3+0|uni1A25=3+1912|uni1A58=3+0|uni1A63=3+1212]
+../fonts/f518eb6f6b5eec2946c9fbbbde44e45d46f5e2ac.ttf::U+1A48,U+1A58,U+1A25,U+1A48,U+1A58,U+1A25,U+1A6E,U+1A63:[uni1A48=0+1212|uni1A25=0+1912|uni1A58=0+0|uni1A48=3+1212|uni1A6E=3+1211|uni1A25=3+1912|uni1A58=3+0|uni1A63=3+1212]
+../fonts/6ff0fbead4462d9f229167b4e6839eceb8465058.ttf:--font-funcs=ot:U+11103,U+11128:[u11103=0+837|u11128=0+0]
diff --git a/test/shaping/data/in-house/tests/variations-rvrn.tests b/test/shaping/data/in-house/tests/variations-rvrn.tests
new file mode 100644
index 00000000..78ebb924
--- /dev/null
+++ b/test/shaping/data/in-house/tests/variations-rvrn.tests
@@ -0,0 +1,100 @@
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=1:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=11:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=21:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=31:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=41:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=51:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=61:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=71:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=81:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=91:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=101:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=111:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=121:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=131:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=141:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=151:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=161:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=171:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=181:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=191:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=201:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=211:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=221:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=231:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=241:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=251:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=261:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=271:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=281:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=291:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=301:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=311:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=321:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=331:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=341:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=351:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=361:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=371:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=381:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=391:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=401:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=411:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=421:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=431:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=441:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=451:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=461:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=471:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=481:U+0072:[rvrn_base=0+1529]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=491:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=501:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=511:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=521:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=531:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=541:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=551:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=561:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=571:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=581:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=591:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=601:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=611:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=621:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=631:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=641:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=651:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=661:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=671:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=681:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=691:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=701:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=711:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=721:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=731:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=741:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=751:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=761:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=771:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=781:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=791:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=801:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=811:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=821:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=831:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=841:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=851:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=861:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=871:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=881:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=891:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=901:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=911:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=921:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=931:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=941:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=951:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=961:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=971:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=981:U+0072:[rvrn_subst=0+1825]
+../fonts/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=991:U+0072:[rvrn_subst=0+1825]
diff --git a/test/shaping/data/in-house/tests/vertical.tests b/test/shaping/data/in-house/tests/vertical.tests
new file mode 100644
index 00000000..17df28e6
--- /dev/null
+++ b/test/shaping/data/in-house/tests/vertical.tests
@@ -0,0 +1,3 @@
+../fonts/191826b9643e3f124d865d617ae609db6a2ce203.ttf:--direction=t --font-funcs=ft:U+300C:[uni300C.vert=0 at -512,-578+0,-1024]
+../fonts/f9b1dd4dcb515e757789a22cb4241107746fd3d0.ttf:--direction=t --font-funcs=ft:U+0041,U+0042:[gid1=0 at -654,-2128+0,-2789|gid2=1 at -665,-2125+0,-2789]
+../fonts/f9b1dd4dcb515e757789a22cb4241107746fd3d0.ttf:--direction=t --font-funcs=ot:U+0041,U+0042:[gid1=0 at -654,-2189+0,-2789|gid2=1 at -665,-2189+0,-2789]
diff --git a/test/shaping/data/in-house/tests/zero-width-marks.tests b/test/shaping/data/in-house/tests/zero-width-marks.tests
new file mode 100644
index 00000000..1a3474ac
--- /dev/null
+++ b/test/shaping/data/in-house/tests/zero-width-marks.tests
@@ -0,0 +1,11 @@
+../fonts/bb9473d2403488714043bcfb946c9f78b86ad627.ttf::U+1030:[circledash=0+636|u1030.med=0 at -162,0+0]
+../fonts/8454d22037f892e76614e1645d066689a0200e61.ttf::U+05E0,U+05B8,U+0591,U+05DA,U+05B0:[uni05DA05B0=3+991|uni2009=0+200|uni0591=0 at 75,0+0|uni05B8=0 at 495,0+0|uni05E0=0+683]
+../fonts/45855bc8d46332b39c4ab9e2ee1a26b1f896da6b.ttf::U+0E01,U+0E34,U+0E01:[gid1=0+1264|gid2=0 at 20,0+0|gid1=2+1264]
+../fonts/7a37dc4d5bf018456aea291cee06daf004c0221c.ttf::U+0E01,U+0E34,U+0E01:[gid1=0+1264|gid2=0 at 20,0+1000|gid1=2+1264]
+../fonts/8099955657a54e9ee38a6ba1d6f950ce58e3cc25.ttf::U+0E01,U+0E34,U+0E01:[gid1=0+1264|gid2=0+0|gid1=2+1264]
+../fonts/bb0c53752e85c3d28973ebc913287b8987d3dfe8.ttf::U+0E01,U+0E34,U+0E01:[gid1=0+1264|gid2=0+0|gid1=2+1264]
+../fonts/ffa0f5d2d9025486d8469d8b1fdd983e7632499b.ttf::U+0058,U+0303,U+0078,U+0303,U+006A,U+006A,U+006A,U+0303,U+006A,U+0303,U+006A,U+006A:[gid1=0+1200|gid6=0 at -1029,340+0|gid3=2+1083|gid6=2 at -992,0+0|gid2=4+528|gid2=5+528|gid5=6+528|gid6=6 at -693,0+0|gid5=8+528|gid6=8 at -693,0+0|gid2=10+528|gid2=11+528]
+../fonts/cc5f3d2d717fb6bd4dfae1c16d48a2cb8e12233b.ttf::U+0058,U+0303,U+0078,U+0303,U+006A,U+006A,U+006A,U+0303,U+006A,U+0303,U+006A,U+006A:[gid1=0+1200|gid6=0 at -1029,340+1200|gid3=2+1083|gid6=2 at -992,0+1200|gid2=4+528|gid2=5+528|gid5=6+528|gid6=6 at -693,0+1200|gid5=8+528|gid6=8 at -693,0+1200|gid2=10+528|gid2=11+528]
+../fonts/fcdcffbdf1c4c97c05308d7600e4c283eb47dbca.ttf::U+0058,U+0303,U+0078,U+0303,U+006A,U+006A,U+006A,U+0303,U+006A,U+0303,U+006A,U+006A:[gid1=0+1200|gid6=0+0|gid3=2+1083|gid6=2+0|gid2=4+528|gid2=5+528|gid5=6+528|gid6=6+0|gid5=8+528|gid6=8+0|gid2=10+528|gid2=11+528]
+../fonts/56cfd0e18d07f41c38e9598545a6d369127fc6f9.ttf::U+0058,U+0303,U+0078,U+0303,U+006A,U+006A,U+006A,U+0303,U+006A,U+0303,U+006A,U+006A:[gid1=0+1200|gid6=0 at -1029,340+0|gid3=2+1083|gid6=2 at -992,0+0|gid2=4+528|gid2=5+528|gid5=6+528|gid6=6 at -693,0+0|gid5=8+528|gid6=8 at -693,0+0|gid2=10+528|gid2=11+528]
+../fonts/a98e908e2ed21b22228ea59ebcc0f05034c86f2e.ttf::U+0041,U+0042,U+0041:[A=0+1368|B=1+0|A=2+1368]
diff --git a/test/shaping/run-tests.py b/test/shaping/run-tests.py
index 306fcc3e..7f53e494 100755
--- a/test/shaping/run-tests.py
+++ b/test/shaping/run-tests.py
@@ -14,11 +14,10 @@ def cmd(command):
 	p = subprocess.Popen (
 		command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
 	p.wait ()
-	print (p.stderr.read (), file=sys.stderr)
+	print (p.stderr.read (), file=sys.stderr, end='')
 	return p.stdout.read ().decode ("utf-8"), p.returncode
 
 
-srcdir = os.environ.get ("srcdir", ".")
 builddir = os.environ.get ("builddir", ".")
 top_builddir = os.environ.get ("top_builddir",
 	os.path.normpath (os.path.join (os.getcwd (), "..", "..")))
@@ -50,46 +49,37 @@ if not reference:
 	print ('hb_shape:', hb_shape)
 
 if not len (args):
-	args = [sys.stdin]
+	args = ['-']
 
-for f in args:
+for filename in args:
 	if not reference:
-		if f == sys.stdin:
+		if filename == '-':
 			print ("Running tests from standard input")
 		else:
-			print ("Running tests in " + f)
-
-	if f == sys.stdin:
-		def f():
-			while True:
-				try:
-					line = input ()
-				except EOFError:
-					break
-
-				if len (line):
-					yield line
-				else:
-					break
-		f = f()
+			print ("Running tests in " + filename)
+
+	if filename == '-':
+		f = sys.stdin
 	else:
-		f = open (f)
+		f = open (filename)
 
 	for line in f:
 		fontfile, options, unicodes, glyphs_expected = line.split (":")
+		cwd = os.path.dirname(filename)
+		fontfile = os.path.normpath (os.path.join (cwd, fontfile))
 
 		if line.startswith ("#"):
 			if not reference:
-				print ("# hb-shape %s --unicodes %s" % (fontfile, unicodes))
+				print ("# %s %s --unicodes %s" % (hb_shape, fontfile, unicodes))
 			continue
 
 		if not reference:
-			print ("hb-shape %s %s %s --unicodes %s" %
-					 (fontfile, extra_options, options, unicodes))
+			print ("%s %s %s %s --unicodes %s" %
+					 (hb_shape, fontfile, extra_options, options, unicodes))
 
 		glyphs1, returncode = cmd ([hb_shape, "--font-funcs=ft",
-			os.path.join (srcdir, fontfile), extra_options, "--unicodes",
-			unicodes] + (options.split (' ') if len(options) else []))
+			fontfile, extra_options, "--unicodes",
+			unicodes] + (options.split (' ') if options else []))
 
 		if returncode:
 			print ("hb-shape --font-funcs=ft failed.", file=sys.stderr)
@@ -97,11 +87,11 @@ for f in args:
 			#continue
 
 		glyphs2, returncode = cmd ([hb_shape, "--font-funcs=ot",
-			os.path.join (srcdir, fontfile), extra_options, "--unicodes",
-			unicodes] + (options.split (' ') if len(options) else []))
+			fontfile, extra_options, "--unicodes",
+			unicodes] + (options.split (' ') if options else []))
 
 		if returncode:
-			print ("hb-shape --font-funcs=ot failed.", file=sys.stderr)
+			print ("ERROR: hb-shape --font-funcs=ot failed.", file=sys.stderr)
 			fails = fails + 1
 			#continue
 
diff --git a/test/shaping/tests/misc/arabic-fallback-shaping.tests b/test/shaping/tests/misc/arabic-fallback-shaping.tests
deleted file mode 100644
index 6f1cb8b9..00000000
--- a/test/shaping/tests/misc/arabic-fallback-shaping.tests
+++ /dev/null
@@ -1 +0,0 @@
-fonts/sha1sum/df768b9c257e0c9c35786c47cae15c46571d56be.ttf::U+0633,U+064F,U+0644,U+064E,U+0651,U+0627,U+0651,U+0650,U+0645,U+062A,U+06CC:[uni06CC.fina=10+1655|uni062A.medi=9+868|uni0645.init=8+1098|uni0650=2 at 221,0+0|uni0651=2 at 260,736+0|uni064E=2 at 935,1259+0|uni0651=2 at 974,736+0|uni06440627.fina=2+1470|uni064F=0 at 558,-10+0|uni0633.init=0+1585]
diff --git a/test/shaping/tests/misc/arabic-feature-order.tests b/test/shaping/tests/misc/arabic-feature-order.tests
deleted file mode 100644
index 58e741e4..00000000
--- a/test/shaping/tests/misc/arabic-feature-order.tests
+++ /dev/null
@@ -1,4 +0,0 @@
-fonts/sha1sum/813c2f8e5512187fd982417a7fb4286728e6f4a8.ttf::U+1820,U+180B:[uni2048.E81A=0+1550]
-fonts/sha1sum/8a9fea2a7384f2116e5b84a9b31f83be7850ce21.ttf::U+1820,U+180B:[uni2048.E81A=0+1550]
-fonts/sha1sum/a919b33197965846f21074b24e30250d67277bce.ttf::U+0644,U+0644,U+0647:[Lellah=0+1503]
-fonts/sha1sum/bf39b0e91ef9807f15a9e283a21a14a209fd2cfc.ttf::U+0644,U+064E,U+0670,U+0653,U+0626:[afii57414.zz04=4+1202|uni0670_uni0653=0 at 50,350+0|afii57454=0 at 550,1425+0|afii57444.calt=0+1065]
diff --git a/test/shaping/tests/misc/arabic-like-joining.tests b/test/shaping/tests/misc/arabic-like-joining.tests
deleted file mode 100644
index ec994d08..00000000
--- a/test/shaping/tests/misc/arabic-like-joining.tests
+++ /dev/null
@@ -1 +0,0 @@
-fonts/sha1sum/5dfad7735c6a67085f1b90d4d497e32907db4c78.ttf::U+1E922,U+1E923,U+1E924,U+1E925,U+1E926,U+1E927,U+1E928,U+1E929,U+1E92A,U+1E92B,U+1E92C,U+1E92D,U+1E92E,U+1E92F,U+1E930,U+1E931,U+1E932,U+1E933,U+1E934,U+1E935,U+1E936,U+1E937,U+1E938,U+1E939,U+1E93A,U+1E93B,U+1E93C,U+1E93D,U+1E93E,U+1E93F,U+1E940,U+1E941,U+1E942,U+1E943:[sha_adlam.fina=33+711|kpo_adlam.medi=32+573|zal_adlam.medi=31+773|gbe_adlam.medi=30+594|kha_adlam.medi=29+686|va_adlam.medi=28+621|nha_adlam.medi=27+587|tu_adlam.medi=26+772|nya_adlam.medi=25+577|ga_adlam.medi=24+552|qaaf_adlam.medi=23+694|ha_adlam.medi=22+600|chi_adlam.medi=21+662|jiim_adlam.medi=20+781|u_adlam.medi=19+678|ya_adlam.medi=18+553|kaf_adlam.medi=17+808|nun_adlam.medi=16+561|waw_adlam.medi=15+651|yhe_adlam.medi=14+674|dha_adlam.medi=13+674|o_adlam.medi=12+640|i_adlam.medi=11+657|fa_adlam.medi=10+590|e_adlam.medi=9+628|ra_adlam.medi=8+599|bhe_adlam.medi=7+594|pe_adlam.medi=6+492|sinnyiiyhe_adlam.medi=5+777|ba_adlam.medi=4+655|miim_adlam.medi=3+
 525|laam_adlam.medi=2+554|daali_adlam.medi=1+600|alif_adlam.init=0+597]
diff --git a/test/shaping/tests/misc/arabic-mark-order.tests b/test/shaping/tests/misc/arabic-mark-order.tests
deleted file mode 100644
index cc5226bb..00000000
--- a/test/shaping/tests/misc/arabic-mark-order.tests
+++ /dev/null
@@ -1,6 +0,0 @@
-fonts/sha1sum/94a5d6fb15a27521fba9ea4aee9cb39b2d03322a.ttf::U+064A,U+064E,U+0670,U+0653,U+0640,U+0654,U+064E,U+0627:[afii57415.zz04=7+481|afii57454=4 at 25,975+0|uni0654=4 at -50,50+0|afii57440=4+650|uni0670_uni0653=0 at 75,400+0|afii57454=0 at 750,1125+0|afii57450.calt=0+1331]
-fonts/sha1sum/24b8d24d00ae86f49791b746da4c9d3f717a51a8.ttf::U+0628,U+0618,U+0619,U+064E,U+064F,U+0654,U+0658,U+0653,U+0654,U+0651,U+0656,U+0651,U+065C,U+0655,U+0650:[uni0653.small=0 at 266,2508+0|uni0654=0 at 308,2151+0|uni0655=0 at 518,-1544+0|uni065C=0 at 501,-1453+0|uni0656=0 at 573,-659+0|uni0650=0 at 500,133+0|uni0619=0 at 300,1807+0|uni0618=0 at 357,1674+0|uni0651064E=0 at 387,1178+0|uni0651=0 at 402,764+0|uni0658=0 at 424,404+0|uni0654064F=0 at 540,-435+0|uni0628=0+1352]
-fonts/sha1sum/21b7fb9c1eeae260473809fbc1fe330f66a507cd.ttf::U+0649,U+0655,U+034F,U+0650:[uni0650.small2=0 at 727,-774+0|space=0+0|uni0655=0 at 727,-209+0|uni0649=0+1566]
-fonts/sha1sum/21b7fb9c1eeae260473809fbc1fe330f66a507cd.ttf::U+0649,U+0655,U+0650:[uni0650.small2=0 at 727,-774+0|uni0655=0 at 727,-209+0|uni0649=0+1566]
-fonts/sha1sum/21b7fb9c1eeae260473809fbc1fe330f66a507cd.ttf::U+0649,U+0650,U+0655:[uni0650.small2=0 at 727,-774+0|uni0655=0 at 727,-209+0|uni0649=0+1566]
-fonts/sha1sum/21b7fb9c1eeae260473809fbc1fe330f66a507cd.ttf::U+0649,U+0650,U+034F,U+0655:[uni0655=0+0|space=0+0|uni0650=0 at 166,0+0|uni0649=0+1566]
diff --git a/test/shaping/tests/misc/arabic-stch.tests b/test/shaping/tests/misc/arabic-stch.tests
deleted file mode 100644
index a21dfa22..00000000
--- a/test/shaping/tests/misc/arabic-stch.tests
+++ /dev/null
@@ -1 +0,0 @@
-fonts/sha1sum/d9b8bc10985f24796826c29f7ccba3d0ae11ec02.ttf:--no-glyph-names:U+0718,U+070F,U+0718,U+0718,U+002E:[1=4+168|3=3+502|3=2+502|4=1 at -1004,0+0|5=1 at -876,0+0|5=1 at -799,0+0|5=1 at -722,0+0|5=1 at -645,0+0|4=1 at -566,0+0|5=1 at -438,0+0|5=1 at -361,0+0|5=1 at -284,0+0|5=1 at -207,0+0|4=1 at -128,0+0|3=0+502]
diff --git a/test/shaping/tests/misc/automatic-fractions.tests b/test/shaping/tests/misc/automatic-fractions.tests
deleted file mode 100644
index f9510e26..00000000
--- a/test/shaping/tests/misc/automatic-fractions.tests
+++ /dev/null
@@ -1,3 +0,0 @@
-fonts/sha1sum/15dfc433a135a658b9f4b1a861b5cdd9658ccbb9.ttf::U+0031,U+0032,U+0033,U+2044,U+0034,U+0035,U+0036:[one.numr=0+600|two.numr=1+600|three.numr=2+600|fraction=3+252|four.small=4+600|five.small=5+600|six.small=6+600]
-fonts/sha1sum/15dfc433a135a658b9f4b1a861b5cdd9658ccbb9.ttf:--direction=l --script=arab:U+0031,U+0032,U+0033,U+2044,U+0034,U+0035,U+0036:[one.numr=0+600|two.numr=1+600|three.numr=2+600|fraction=3+252|four.small=4+600|five.small=5+600|six.small=6+600]
-fonts/sha1sum/15dfc433a135a658b9f4b1a861b5cdd9658ccbb9.ttf:--direction=l:U+0661,U+0662,U+0663,U+2044,U+0664,U+0665,U+0666:[uni0661.numr=0+600|uni0662.numr=1+600|uni0663.numr=2+600|fraction=3+252|uni0664.small=4+600|uni0665.small=5+600|uni0666.small=6+600]
diff --git a/test/shaping/tests/misc/cluster.tests b/test/shaping/tests/misc/cluster.tests
deleted file mode 100644
index 29580bfd..00000000
--- a/test/shaping/tests/misc/cluster.tests
+++ /dev/null
@@ -1,2 +0,0 @@
-fonts/sha1sum/4fac3929fc3332834e93673780ec0fe94342d193.ttf:--cluster-level=2:U+0078,U+030A,U+0058,U+030A:[gid2=0+1083|gid3=1 at -1131,-8+0|gid1=2+1200|gid3=3 at -1190,349+0]
-fonts/sha1sum/43ef465752be9af900745f72fe29cb853a1401a5.ttf:--cluster-level=1:U+05D4,U+05B7,U+05E9,U+05BC,U+05C1,U+05B8,U+05DE,U+05B4,U+05DD:[uni05DD=8+1359|uni05B4=7 at 111,0+0|uni05DE=6+1391|uni05B8=5+0|uni05BC=3+0|uni05C1=3+0|uni05E9=2+1451|uni05B7=1 at 28,0+0|uni05D4=0+1338]
diff --git a/test/shaping/tests/misc/color-fonts.tests b/test/shaping/tests/misc/color-fonts.tests
deleted file mode 100644
index 397796a0..00000000
--- a/test/shaping/tests/misc/color-fonts.tests
+++ /dev/null
@@ -1 +0,0 @@
-fonts/sha1sum/ee39587d13b2afa5499cc79e45780aa79293bbd4.ttf:--font-funcs=ot --show-extents:U+1F42F:[gid1=0+2963<0,2178,2963,-2788>]
diff --git a/test/shaping/tests/misc/context-matching.tests b/test/shaping/tests/misc/context-matching.tests
deleted file mode 100644
index e20616e4..00000000
--- a/test/shaping/tests/misc/context-matching.tests
+++ /dev/null
@@ -1,3 +0,0 @@
-fonts/sha1sum/4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf::U+1A48,U+1A58,U+1A25,U+1A48,U+1A58,U+1A25,U+1A6E,U+1A63:[uni1A48=0+1212|uni1A25=0+1912|uni1A58=0+0|uni1A48=3+1212|uni1A6E=3+0|uni1A25=3+1912|uni1A58=3+0|uni1A63=3+1212]
-fonts/sha1sum/d629e7fedc0b350222d7987345fe61613fa3929a.ttf::U+0915,U+093F,U+0915,U+093F:[ivowelsign03deva=0+530|kadeva=0+1561|ivowelsign03deva=2+530|kadeva=2+1561]
-fonts/sha1sum/f499fbc23865022234775c43503bba2e63978fe1.ttf::U+09B0,U+09CD,U+09A5,U+09CD,U+09AF,U+09C0:[gid1=0+1320|gid13=0+523|gid18=0+545]
diff --git a/test/shaping/tests/misc/cursive-positioning.tests b/test/shaping/tests/misc/cursive-positioning.tests
deleted file mode 100644
index ce63bd1f..00000000
--- a/test/shaping/tests/misc/cursive-positioning.tests
+++ /dev/null
@@ -1,4 +0,0 @@
-fonts/sha1sum/c4e48b0886ef460f532fb49f00047ec92c432ec0.ttf::U+0643,U+0645,U+0645,U+062B,U+0644:[gid8=4+738|gid5=3 at 441,1197+0|gid6=3 at 0,432+405|gid9=2 at 0,477+452|gid9=1 at 0,977+452|gid10=0 at 20,1577+207]
-fonts/sha1sum/298c9e1d955f10f6f72c6915c3c6ff9bf9695cec.ttf::U+0643,U+0645,U+0645,U+062B,U+0644:[gid8=4+738|gid5=3 at 441,1197+0|gid6=3 at 0,432+405|gid9=2 at 0,477+500|gid9=1 at 0,577+452|gid10=0 at 20,1177+207]
-#fonts/sha1sum/706c5d7b625f207bc0d874c67237aad6f1e9cd6f.ttf::U+0B1F,U+0B4D,U+0B1A,U+0B4D,U+0B1A:[ttaorya=0+1307|casubscriptorya=0 at -242,104+-231|casubscriptnarroworya=0 at 20,104+507]
-fonts/sha1sum/07f054357ff8638bac3711b422a1e31180bba863.ttf:--font-funcs=ot --no-glyph-names:U+0606,U+06E1:[2=0 at 40,502+0|1=0+1000]
diff --git a/test/shaping/tests/misc/default-ignorables.tests b/test/shaping/tests/misc/default-ignorables.tests
deleted file mode 100644
index 66ee7611..00000000
--- a/test/shaping/tests/misc/default-ignorables.tests
+++ /dev/null
@@ -1,2 +0,0 @@
-fonts/sha1sum/051d92f8bc6ff724511b296c27623f824de256e9.ttf::U+0075,U+0361,U+034F,U+0301,U+0069:[gid2=0+1266|gid7=0 at -617,442+0|gid5=0 at -7,0+0|gid1=4+528]
-fonts/sha1sum/bf962d3202883a820aed019d9b5c1838c2ff69c6.ttf::U+0020,U+06CC,U+064E,U+034F,U+0651:[uni0651=1+0|space=1+0|uni064E=1 at 236,-432+0|uni06CC=1+1266|space=0+452]
diff --git a/test/shaping/tests/misc/emoji-flag-tags.tests b/test/shaping/tests/misc/emoji-flag-tags.tests
deleted file mode 100644
index 9b6da778..00000000
--- a/test/shaping/tests/misc/emoji-flag-tags.tests
+++ /dev/null
@@ -1,2 +0,0 @@
-fonts/sha1sum/53374c7ca3657be37efde7ed02ae34229a56ae1f.ttf::U+1F3F4,U+E0055,U+E0053,U+E0064,U+E0065,U+E007F:[u1F3F4=0+2126|space=1+0|space=2+0|space=3+0|space=4+0|space=5+0]
-fonts/sha1sum/53374c7ca3657be37efde7ed02ae34229a56ae1f.ttf::U+1F3F4,U+E0064,U+E0065,U+E007F:[de=0+3200]
diff --git a/test/shaping/tests/misc/fallback-positioning.tests b/test/shaping/tests/misc/fallback-positioning.tests
deleted file mode 100644
index 86f5640c..00000000
--- a/test/shaping/tests/misc/fallback-positioning.tests
+++ /dev/null
@@ -1,2 +0,0 @@
-fonts/sha1sum/8228d035fcd65d62ec9728fb34f42c63be93a5d3.ttf::U+0078,U+0301,U+0058,U+0301:[x=0+1030|acutecomb=0 at -21,-27+0|X=2+1295|acutecomb=2 at -147,320+0]
-fonts/sha1sum/856ff9562451293cbeff6f396d4e3877c4f0a436.ttf::U+0061,U+035C,U+0062:[uni0061=0+512|uni035C=0 at -64,-128+0|uni0062=2+512]
diff --git a/test/shaping/tests/misc/fuzzed.tests b/test/shaping/tests/misc/fuzzed.tests
deleted file mode 100644
index 4afb3b56..00000000
--- a/test/shaping/tests/misc/fuzzed.tests
+++ /dev/null
@@ -1,22 +0,0 @@
-fonts/sha1sum/1a6f1687b7a221f9f2c834b0b360d3c8463b6daf.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
-fonts/sha1sum/5a5daf5eb5a4db77a2baa3ad9c7a6ed6e0655fa8.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
-fonts/sha1sum/0509e80afb379d16560e9e47bdd7d888bebdebc6.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
-fonts/sha1sum/641bd9db850193064d17575053ae2bf8ec149ddc.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
-fonts/sha1sum/375d6ae32a3cbe52fbf81a4e5777e3377675d5a3.ttf:--font-funcs=ot:U+0041:[gid0=0+4352]
-fonts/sha1sum/8240789f6d12d4cfc4b5e8e6f246c3701bcf861f.ttf:--font-funcs=ot:U+0041:[gid0=0+1024]
-fonts/sha1sum/b9e2aaa0d75fcef6971ec3a96d806ba4a6b31fe2.ttf:--font-funcs=ot:U+0041:[gid0=0+1000|gid1=0+1000|gid8=0+1000|gid3=0+1000|gid0=0+1000|gid1=0+1000|gid1=0+1000|gid8=0+1000|gid3=0+1000|gid0=0+1000|gid1=0+1000|gid8=0+1000|gid3=0+1000|gid0=0+1000|gid1=0+1000|gid1=0+1000]
-fonts/sha1sum/43979b90b2dd929723cf4fe1715990bcb9c9a56b.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
-fonts/sha1sum/3511ff5c1647150595846ac414c595cccac34f18.ttf:--font-funcs=ot --no-positions --no-clusters --no-glyph-names:U+0041:[0|512|15104|11004|3408|18244|17872|17961|0|992|15616|0|14151|20559|20992|5440|256|0|10|8960|256|1024|1490|0|768|4096|256|2216|0|256|256|0|768|10752|11004|3408|18244|17734|53248|256|0|512|14848|10793|57344|768|18227|20285|20480|0|256|0|810|0|11004|3408|18244|17734|53289|57344|768|15667|71|0|20559|21248|256|0|2816|2776|0|51516|0|32|26209|28005|65249|29690|0|51548|0|2454|28783|29556|1291|3458|80|0|2804|210|28786|25968|45763|50546|0|59136|0|38144|256|0|2560|30208|52224|580|17996|21504|6734|108|116|24846|1024|0|255|65280|256|0|8704|1345|23109|8192|10823|21076|8192|12877|20300|8192|6738|20301|8192|16980|21067|8251|18944|255|65280|15360|256|255|65280|256|768|255|65280|256|768|255|65280|256|1024|12|65280|256|1280|255|65280|256|1536|1899|25970|110|11264|27502|29285|12907|25974|28160|14443|25970|28288|3|118|18259|21826|45716|46369|0|0|1|16|17|256|4|16|18244|17734|28
 |12|0|284|0|28|18256|20307|45114|47616|226|10296|0|57927|1|0|0|21248|5440|256|0|10|768|256|1024|512|0|297|16|24833|28774|10794|2304|29|32|42|64515|42|42|64525|20551|17477|18128|10720|3|61|3408|18244|17734|53289|57344|768|15616|512|55|10576|20307|0|255|56063|53504|42|42|64525|12288|18176|80|20307|1|0|62]
-fonts/sha1sum/fab39d60d758cb586db5a504f218442cd1395725.ttf:--font-funcs=ot:U+0041,U+0041:[gid0=0+1000|gid0=1+1000]
-fonts/sha1sum/205edd09bd3d141cc9580f650109556cc28b22cb.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
-fonts/sha1sum/217a934cfe15c548b572c203dceb2befdf026462.ttf:--font-funcs=ot:U+0061,U+0061,U+0061:[]
-fonts/sha1sum/558661aa659912f4d30ecd27bd09835171a8e2b0.ttf:--font-funcs=ot:U+FFFD,U+E0100,U+FFFD,U+E0010:[]
-fonts/sha1sum/a34a9191d9376bda419836effeef7e75c1386016.ttf:--font-funcs=ot:U+0041:[]
-fonts/sha1sum/a69118c2c2ada48ff803d9149daa54c9ebdae30e.ttf:--font-funcs=ot:U+0041:[gid0=0+1229]
-fonts/sha1sum/b6acef662e0beb8d5fcf5b61c6b0ca69537b7402.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
-fonts/sha1sum/e88c339237f52d21e01c55f01b9c1b4cc14a0467.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
-fonts/sha1sum/243798dd281c1c77c065958e1ff467420faa9bde.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
-fonts/sha1sum/dd9f0c7c7c36f75a18be0cab1cddf8f3ab0f366b.ttf:--font-funcs=ot --no-positions --no-clusters --no-glyph-names:U+0041:[0|0|2|0|0|2|0|0|2|0|0|2|0|0|2|0|0|2|0|0|0|2|0|0|0|2|0|0|2|0|0|2|0|0|2|0|0|2|0|0|0|2|0|0|2|0|0|2|0|0|2|0]
-fonts/sha1sum/ef2511f215aa3ca847cbfffbf861793b42170875.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
-fonts/sha1sum/9d8a94a67932a3ab75a596fc8b5c6d0392ca9e49.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
-fonts/sha1sum/bbf4a308c402f0678c3e82844892a4da2ebe598f.ttf:--font-funcs=ot:U+0041:[gid0=0+1000]
diff --git a/test/shaping/tests/misc/hangul-jamo.tests b/test/shaping/tests/misc/hangul-jamo.tests
deleted file mode 100644
index fe9973f4..00000000
--- a/test/shaping/tests/misc/hangul-jamo.tests
+++ /dev/null
@@ -1,2 +0,0 @@
-fonts/sha1sum/757ebd573617a24aa9dfbf0b885c54875c6fe06b.ttf::U+115F,U+11A2:[gid3=0+920|gid4=0+0]
-fonts/sha1sum/7e14e7883ed152baa158b80e207b66114c823a8b.ttf::U+11A2:[gid1=0+920]
diff --git a/test/shaping/tests/misc/hyphens.tests b/test/shaping/tests/misc/hyphens.tests
deleted file mode 100644
index d2cb1865..00000000
--- a/test/shaping/tests/misc/hyphens.tests
+++ /dev/null
@@ -1,2 +0,0 @@
-fonts/sha1sum/1c04a16f32a39c26c851b7fc014d2e8d298ba2b8.ttf::U+2010:[gid1=0+739]
-fonts/sha1sum/1c04a16f32a39c26c851b7fc014d2e8d298ba2b8.ttf::U+2011:[gid1=0+739]
diff --git a/test/shaping/tests/misc/indic-consonant-with-stacker.tests b/test/shaping/tests/misc/indic-consonant-with-stacker.tests
deleted file mode 100644
index 97dc0404..00000000
--- a/test/shaping/tests/misc/indic-consonant-with-stacker.tests
+++ /dev/null
@@ -1,4 +0,0 @@
-fonts/sha1sum/a014549f766436cf55b2ceb40e462038938ee899.ttf:--no-glyph-names:U+0CF1,U+0C95:[2=0+1129|3=1+358]
-fonts/sha1sum/55c88ebbe938680b08f92c3de20713183e0c7481.ttf:--no-glyph-names:U+0CF2,U+0CAA:[2=0+1539|3=1+245]
-fonts/sha1sum/341421e629668b1a1242245d39238ca48432d35d.ttf:--no-glyph-names:U+0CF1:[1=0+1129]
-fonts/sha1sum/663aef6b019dbf45ffd74089e2b5f2496ceceb18.ttf:--no-glyph-names:U+0CF2:[1=0+1539]
diff --git a/test/shaping/tests/misc/indic-init.tests b/test/shaping/tests/misc/indic-init.tests
deleted file mode 100644
index 1231eabc..00000000
--- a/test/shaping/tests/misc/indic-init.tests
+++ /dev/null
@@ -1 +0,0 @@
-fonts/sha1sum/1a3d8f381387dd29be1e897e4b5100ac8b4829e1.ttf:--no-glyph-names:U+09AC,U+09C7,U+09AC,U+09C7:[3=0+273|1=0+460|2=2+307|1=2+460]
diff --git a/test/shaping/tests/misc/indic-joiner-candrabindu.tests b/test/shaping/tests/misc/indic-joiner-candrabindu.tests
deleted file mode 100644
index 80ad8ce2..00000000
--- a/test/shaping/tests/misc/indic-joiner-candrabindu.tests
+++ /dev/null
@@ -1,2 +0,0 @@
-fonts/sha1sum/5028afb650b1bb718ed2131e872fbcce57828fff.ttf::U+0B13,U+200D,U+0B01:[omorya=0+1450]
-fonts/sha1sum/5028afb650b1bb718ed2131e872fbcce57828fff.ttf::U+0B13,U+200C,U+0B01:[oorya=0+1309|space=0+0|candrabinduorya=0+0]
diff --git a/test/shaping/tests/misc/indic-joiners.tests b/test/shaping/tests/misc/indic-joiners.tests
deleted file mode 100644
index 63f67290..00000000
--- a/test/shaping/tests/misc/indic-joiners.tests
+++ /dev/null
@@ -1,2 +0,0 @@
-fonts/sha1sum/f443753e8ffe8e8aae606cfba158e00334b6efb1.ttf::U+179A,U+1784,U+17D2,U+179F,U+200C,U+17CA,U+17B8,U+0020:[uni179a=0+775|uni1784=1+1550|uni179f.sub=1+775|space=1+0|uni17ca=1+0|uni17b8=1 at 0,300+0|space=7+600]
-fonts/sha1sum/f443753e8ffe8e8aae606cfba158e00334b6efb1.ttf::U+179A,U+1784,U+17D2,U+179F,U+17CA,U+17B8:[uni179a=0+775|uni1784=1+1550|uni179f.sub=1+775|uni17bb=1 at -75,-700+0|uni17b8=1+0]
diff --git a/test/shaping/tests/misc/indic-old-spec.tests b/test/shaping/tests/misc/indic-old-spec.tests
deleted file mode 100644
index 5410a6ab..00000000
--- a/test/shaping/tests/misc/indic-old-spec.tests
+++ /dev/null
@@ -1,2 +0,0 @@
-fonts/sha1sum/57a9d9f83020155cbb1d2be1f43d82388cbecc88.ttf::U+0C9A,U+0CCD,U+0C9A,U+0CCD:[U0C9A_U0CCD.haln=0+1066|U0C9A_0CCD.blwf=0+0]
-fonts/sha1sum/270b89df543a7e48e206a2d830c0e10e5265c630.ttf::U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D:[glyph201=0+1183|U0D4D=0+0]
diff --git a/test/shaping/tests/misc/indic-pref-blocking.tests b/test/shaping/tests/misc/indic-pref-blocking.tests
deleted file mode 100644
index 204b92a4..00000000
--- a/test/shaping/tests/misc/indic-pref-blocking.tests
+++ /dev/null
@@ -1,2 +0,0 @@
-fonts/sha1sum/226bc2deab3846f1a682085f70c67d0421014144.ttf::U+0D2F,U+0D4D,U+0D30,U+0D46:[evowelsignmlym=0+1465|rapostmlym=0+499|yamlym=0+2120]
-fonts/sha1sum/e207635780b42f898d58654b65098763e340f5c7.ttf::U+0D2F,U+0D4D,U+0D30,U+0D46:[yamlym=0+2120|viramamlym=0+0|evowelsignmlym=0+1465|ramlym=0+1507]
diff --git a/test/shaping/tests/misc/indic-script-extensions.tests b/test/shaping/tests/misc/indic-script-extensions.tests
deleted file mode 100644
index 92bb978d..00000000
--- a/test/shaping/tests/misc/indic-script-extensions.tests
+++ /dev/null
@@ -1,2 +0,0 @@
-fonts/sha1sum/3493e92eaded2661cadde752a39f9d58b11f0326.ttf::U+0BA4,U+0BC6,U+1133C,U+0BAA,U+1133C,U+0BC6,U+1133C:[u0BC6=0+2093|u1133C=0+0|u0BA4=0+1863|u0BC6=3+2093|u1133C=3+0|u0BAA=3+1706|u1133C=3+0]
-fonts/sha1sum/b151cfcdaa77585d77f17a42158e0873fc8e2633.ttf:--no-glyph-names:U+0BAA,U+11301,U+11303:[1=0+535|2=0+0|3=0+310]
diff --git a/test/shaping/tests/misc/indic-special-cases.tests b/test/shaping/tests/misc/indic-special-cases.tests
deleted file mode 100644
index d45ee8c4..00000000
--- a/test/shaping/tests/misc/indic-special-cases.tests
+++ /dev/null
@@ -1,3 +0,0 @@
-fonts/sha1sum/3cae6bfe5b57c07ba81ddbd54c02fe4f3a1e3bf6.ttf::U+0CB0,U+0CCD,U+0C95:[gid1=0+1176|gid5=0+1161]
-fonts/sha1sum/3cae6bfe5b57c07ba81ddbd54c02fe4f3a1e3bf6.ttf::U+0CB0,U+200D,U+0CCD,U+0C95:[gid2=0+1334|gid6=0+358]
-fonts/sha1sum/3cae6bfe5b57c07ba81ddbd54c02fe4f3a1e3bf6.ttf::U+0CB0,U+0CCD,U+200D,U+0C95:[gid2=0+1334|gid6=0+358]
diff --git a/test/shaping/tests/misc/indic-syllable.tests b/test/shaping/tests/misc/indic-syllable.tests
deleted file mode 100644
index a8af26bb..00000000
--- a/test/shaping/tests/misc/indic-syllable.tests
+++ /dev/null
@@ -1,8 +0,0 @@
-fonts/sha1sum/54674a3111d209fb6be0ed31745314b7a8d2c244.ttf::U+0BA4,U+0BCD,U+00B3:[taprehalftamil=0+1509|uni00B3=2+674]
-fonts/sha1sum/3d0b77a2360aa6faa1385aaa510509ab70dfbeff.ttf::U+0CF1:[gid1=0+1129]
-fonts/sha1sum/3d0b77a2360aa6faa1385aaa510509ab70dfbeff.ttf::U+0CF2:[gid2=0+1539]
-fonts/sha1sum/87f85d17d26f1fe9ad28d7365101958edaefb967.ttf:--font-funcs=ot:U+0980,U+0981:[anjibeng=0+520|candrabindubeng=0+0]
-fonts/sha1sum/85fe0be440c64ac77699e21c2f1bd933a919167e.ttf::U+0A15,U+0A51,U+0A47:[kaguru=0+1273|udaatguru=0 at 75,0+0|eematraguru=0 at -40,0+0]
-fonts/sha1sum/1735326da89f0818cd8c51a0600e9789812c0f94.ttf::U+0A51:[uni25CC=0+1044|udaatguru=0+0]
-fonts/sha1sum/1735326da89f0818cd8c51a0600e9789812c0f94.ttf::U+25CC,U+0A51:[uni25CC=0+1044|udaatguru=0+0]
-fonts/sha1sum/81c368a33816fb20e9f647e8f24e2180f4720263.ttf:--no-glyph-names:U+0C80,U+0C82:[1=0+502|2=0+502]
diff --git a/test/shaping/tests/misc/language-tags.tests b/test/shaping/tests/misc/language-tags.tests
deleted file mode 100644
index 17adafaa..00000000
--- a/test/shaping/tests/misc/language-tags.tests
+++ /dev/null
@@ -1,12 +0,0 @@
-fonts/sha1sum/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf:--language=fa:U+004A:[gid2=0+1000]
-fonts/sha1sum/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf:--language=ja:U+004A:[gid2=0+1000]
-fonts/sha1sum/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf:--language=zh:U+004A:[gid4=0+1000]
-fonts/sha1sum/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf:--language=zh-cn:U+004A:[gid4=0+1000]
-fonts/sha1sum/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf:--language=zh-sg:U+004A:[gid4=0+1000]
-fonts/sha1sum/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf:--language=zh-tw:U+004A:[gid5=0+1000]
-fonts/sha1sum/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf:--language=zh-hans:U+004A:[gid4=0+1000]
-fonts/sha1sum/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf:--language=zh-hant:U+004A:[gid5=0+1000]
-fonts/sha1sum/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf:--language=zh-hant-hk:U+004A:[gid6=0+1000]
-fonts/sha1sum/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf:--language=zh-HK:U+004A:[gid6=0+1000]
-fonts/sha1sum/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf:--language=zh-mo:U+004A:[gid6=0+1000]
-fonts/sha1sum/6991b13ce889466be6de3f66e891de2bc0f117ee.ttf:--language=zh-Hant-mo:U+004A:[gid6=0+1000]
diff --git a/test/shaping/tests/misc/ligature-id.tests b/test/shaping/tests/misc/ligature-id.tests
deleted file mode 100644
index cd7f1659..00000000
--- a/test/shaping/tests/misc/ligature-id.tests
+++ /dev/null
@@ -1,36 +0,0 @@
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|space=3+213|u0995_u09B0_u09CD.blwf.vatu=4+643|u0995_u09CD.half_u09B2.pres=7+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|space=6+213|u0995_u09B0_u09CD.blwf.vatu=7+643|u0995_u09CD.half_u09B2.pres=10+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|space=9+213|u0995_u09B0_u09CD.blwf.vatu=10+643|u0995_u09CD.half_u09B2.pres=13+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|space=12+213|u0995_u09B0_u09CD.blwf.vatu=13+643|u0995_u09CD.half_u09B2.pres=16+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|space=15+213|u0995_u09B0_u09CD.blwf.vatu=16+643|u0995_u09CD.half_u09B2.pres=19+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|space=18+213|u0995_u09B0_u09CD.blwf.vatu=19+643|u0995_u09CD.half_u09B2.pres=22+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|space=21+213|u0995_u09B0_u09CD.blwf.vatu=22+643|u0995_u09CD.half_u09B2.pres=25+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|space=24+213|u0995_u09B0_u09CD.blwf.vatu=25+643|u0995_u09CD.half_u09B2.pres=28+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|space=27+213|u0995_u09B0_u09CD.blwf.vatu=28+643|u0995_u09CD.half_u09B2.pres=31+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|space=30+213|u0995_u09B0_u09CD.blwf.vatu=31+643|u0995_u09CD.half_u09B2.pres=34+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|space=33+213|u0995_u09B0_u09CD.blwf.vatu=34+643|u0995_u09CD.half_u09B2.pres=37+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|space=36+213|u0995_u09B0_u09CD.blwf.vatu=37+643|u0995_u09CD.half_u09B2.pres=40+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|space=39+213|u0995_u09B0_u09CD.blwf.vatu=40+643|u0995_u09CD.half_u09B2.pres=43+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|space=42+213|u0995_u09B0_u09CD.blwf.vatu=43+643|u0995_u09CD.half_u09B2.pres=46+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|space=45+213|u0995_u09B0_u09CD.blwf.vatu=46+643|u09
 95_u09CD.half_u09B2.pres=49+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45
 +566|space=48+213|u0995_u09B0_u09CD.blwf.vatu=49+643|u0995_u09CD.half_u09B2.pres=52+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09
 CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|space=51+213|u0995_u09B0_u09CD.blwf.vatu=52+643|u0995_u09CD.half_u09B2.pres=55+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.
 pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|space=54+213|u0995_u09B0_u09CD.blwf.vatu=55+643|u0995_u09CD.half_u09B2.pres=58+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0
 995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|space=57+213|u0995_u09B0_u09CD.blwf.vatu=58+643|u0995_u09CD.half_u09B2.pres=61+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half
 _u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|space=60+213|u0995_u09B0_u09CD.blwf.vatu=61+643|u0995_u09CD.half_u09B2.pres=64+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36
 +566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|space=63+213|u0995_u09B0_u09CD.blwf.vatu=64+643|u0995_u09CD.half_u09B2.pres=67+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09
 CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|space=66+213|u0995_u09B0_u09CD.blwf.vatu=67+643|u0995_u09CD.half_u09B2.pres=70+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.
 pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|space=69+213|u0995_u09B0_u09CD.blwf.vatu=70+643|u0995_u09CD.half_u09B2.pres=73+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0
 995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|space=72+213|u0995_u09B0_u09CD.blwf.vatu=73+643|u0995_u09CD.half_u09B2.pres=76+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half
 _u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|space=75+213|u0995_u09B0_u09CD.blwf.vatu=76+643|u0995_u09CD.half_u09B2.pres=79+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27
 +566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|space=78+213|u0995_u09B0_u09CD.blwf.vatu=79+643|u0995_u09CD.half_u09B2.pres=82+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09
 CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|u0995_u09CD.half_u0995.pres=78+566|space=81+213|u0995_u09B0_u09CD.blwf.vatu=82+643|u0995_u09CD.half_u09B2.pres=85+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.
 pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|u0995_u09CD.half_u0995.pres=78+566|u0995_u09CD.half_u0995.pres=81+566|space=84+213|u0995_u09B0_u09CD.blwf.vatu=85+643|u0995_u09CD.half_u09B2.pres=88+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0
 995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|u0995_u09CD.half_u0995.pres=78+566|u0995_u09CD.half_u0995.pres=81+566|u0995_u09CD.half_u0995.pres=84+566|space=87+213|u0995_u09B0_u09CD.blwf.vatu=88+643|u0995_u09CD.half_u09B2.pres=91+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half
 _u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|u0995_u09CD.half_u0995.pres=78+566|u0995_u09CD.half_u0995.pres=81+566|u0995_u09CD.half_u0995.pres=84+566|u0995_u09CD.half_u0995.pres=87+566|space=90+213|u0995_u09B0_u09CD.blwf.vatu=91+643|u0995_u09CD.half_u09B2.pres=94+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18
 +566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|u0995_u09CD.half_u0995.pres=78+566|u0995_u09CD.half_u0995.pres=81+566|u0995_u09CD.half_u0995.pres=84+566|u0995_u09CD.half_u0995.pres=87+566|u0995_u09CD.half_u0995.pres=90+566|space=93+213|u0995_u09B0_u09CD.blwf.vatu=94+643|u0995_u09CD.half_u09B2.pres=97+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09
 CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|u0995_u09CD.half_u0995.pres=78+566|u0995_u09CD.half_u0995.pres=81+566|u0995_u09CD.half_u0995.pres=84+566|u0995_u09CD.half_u0995.pres=87+566|u0995_u09CD.half_u0995.pres=90+566|u0995_u09CD.half_u0995.pres=93+566|space=96+213|u0995_u09B0_u09CD.blwf.vatu=97+643|u0995_u09CD.half_u09B2.pres=100+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0995_u09CD.half_u0995.
 pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|u0995_u09CD.half_u0995.pres=78+566|u0995_u09CD.half_u0995.pres=81+566|u0995_u09CD.half_u0995.pres=84+566|u0995_u09CD.half_u0995.pres=87+566|u0995_u09CD.half_u0995.pres=90+566|u0995_u09CD.half_u0995.pres=93+566|u0995_u09CD.half_u0995.pres=96+566|space=99+213|u0995_u09B0_u09CD.blwf.vatu
 =100+643|u0995_u09CD.half_u09B2.pres=103+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half_u0995.pres=12+566|u0
 995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|u0995_u09CD.half_u0995.pres=78+566|u0995_u09CD.half_u0995.pres=81+566|u0995_u09CD.half_u0995.pres=84+566|u0995_u09CD.half_u0995.pres=87+566|u0995_u09CD.half_u0995.pres=90+566|u0995_u09CD.half_u0995.pres=93+566|u0995_u09CD.half_u0995.pres=96+566|u0995_u09CD.half_u0
 995.pres=99+566|space=102+213|u0995_u09B0_u09CD.blwf.vatu=103+643|u0995_u09CD.half_u09B2.pres=106+602]
-fonts/sha1sum/1c2fb74c1b2aa173262734c1f616148f1648cfd6.ttf::U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0995,U+09CD,U+0995,U+0020,U+0995,U+09CD,U+09B0,U+0995,U+09CD,U+09B2:[u0995_u09CD.half_u0995.pres=0+566|u0995_u09CD.half_u0995.pres=3+566|u0995_u09CD.half_u0995.pres=6+566|u0995_u09CD.half_u0995.pres=9+566|u0995_u09CD.half
 _u0995.pres=12+566|u0995_u09CD.half_u0995.pres=15+566|u0995_u09CD.half_u0995.pres=18+566|u0995_u09CD.half_u0995.pres=21+566|u0995_u09CD.half_u0995.pres=24+566|u0995_u09CD.half_u0995.pres=27+566|u0995_u09CD.half_u0995.pres=30+566|u0995_u09CD.half_u0995.pres=33+566|u0995_u09CD.half_u0995.pres=36+566|u0995_u09CD.half_u0995.pres=39+566|u0995_u09CD.half_u0995.pres=42+566|u0995_u09CD.half_u0995.pres=45+566|u0995_u09CD.half_u0995.pres=48+566|u0995_u09CD.half_u0995.pres=51+566|u0995_u09CD.half_u0995.pres=54+566|u0995_u09CD.half_u0995.pres=57+566|u0995_u09CD.half_u0995.pres=60+566|u0995_u09CD.half_u0995.pres=63+566|u0995_u09CD.half_u0995.pres=66+566|u0995_u09CD.half_u0995.pres=69+566|u0995_u09CD.half_u0995.pres=72+566|u0995_u09CD.half_u0995.pres=75+566|u0995_u09CD.half_u0995.pres=78+566|u0995_u09CD.half_u0995.pres=81+566|u0995_u09CD.half_u0995.pres=84+566|u0995_u09CD.half_u0995.pres=87+566|u0995_u09CD.half_u0995.pres=90+566|u0995_u09CD.half_u0995.pres=93+566|u0995_u09CD.half_u0995.pres=96+56
 6|u0995_u09CD.half_u0995.pres=99+566|u0995_u09CD.half_u0995.pres=102+566|space=105+213|u0995_u09B0_u09CD.blwf.vatu=106+643|u0995_u09CD.half_u09B2.pres=109+602]
-fonts/sha1sum/a6c76d1bafde4a0b1026ebcc932d2e5c6fd02442.ttf::U+1004,U+103A,U+1039,U+101B,U+103D,U+102D:[uni101B103D=0+450|uni1004103A1039102D=0 at -50,0+0]
diff --git a/test/shaping/tests/misc/mark-attachment.tests b/test/shaping/tests/misc/mark-attachment.tests
deleted file mode 100644
index c3c2d278..00000000
--- a/test/shaping/tests/misc/mark-attachment.tests
+++ /dev/null
@@ -1 +0,0 @@
-fonts/sha1sum/98b7887cff91f722b92a8ff800120954606354f9.ttf::U+100F,U+103C,U+102F,U+1036:[uni103C102F=0+150|uni100F=0+550|uni1036=0 at -150,0+0]
diff --git a/test/shaping/tests/misc/mark-filtering-sets.tests b/test/shaping/tests/misc/mark-filtering-sets.tests
deleted file mode 100644
index 7b5c9100..00000000
--- a/test/shaping/tests/misc/mark-filtering-sets.tests
+++ /dev/null
@@ -1,5 +0,0 @@
-fonts/sha1sum/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf::U+062A,U+062E,U+062A,U+0629:[glyph837=3 at 299,1170+0|uni06C1.1=3+502|glyph837=2 at 149,690+0|uni0628.8=2+532|glyph836=1 at -51,1259+0|glyph514=1+196|glyph837=0 at 655,1751+0|glyph112=0 at 0,-358+905]
-fonts/sha1sum/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf::U+062A,U+062E,U+0646,U+0629:[glyph837=3 at 299,1170+0|uni06C1.1=3+502|glyph836=2 at 149,690+0|uni0628.8=2+532|glyph836=1 at -51,1259+0|glyph514=1+196|glyph837=0 at 655,1751+0|glyph112=0 at 0,-358+905]
-fonts/sha1sum/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf::U+062A,U+062E,U+0626,U+0629:[glyph837=3 at 299,1170+0|uni06C1.1=3+502|glyph847=2 at 149,690+0|uni0628.8=2+532|glyph836=1 at -51,1259+0|glyph514=1+196|glyph837=0 at 655,1751+0|glyph112=0 at 0,-358+905]
-fonts/sha1sum/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf::U+062A,U+062E,U+062B,U+0629:[glyph837=3 at 299,1520+0|uni06C1.1=3+502|glyph838=2 at 149,690+0|uni0628.8=2+532|glyph836=1 at -51,1259+0|glyph514=1+196|glyph837=0 at 655,1751+0|glyph112=0 at 0,-358+905]
-fonts/sha1sum/f22416c692720a7d46fadf4af99f4c9e094f00b9.ttf::U+062A,U+062E,U+0679,U+0629:[glyph837=3 at 299,1520+0|uni06C1.1=3+502|glyph842=2 at 149,690+0|uni0628.8=2+532|glyph836=1 at -51,1259+0|glyph514=1+196|glyph837=0 at 655,1751+0|glyph112=0 at 0,-358+905]
diff --git a/test/shaping/tests/misc/mongolian-variation-selector.tests b/test/shaping/tests/misc/mongolian-variation-selector.tests
deleted file mode 100644
index 0a2e5809..00000000
--- a/test/shaping/tests/misc/mongolian-variation-selector.tests
+++ /dev/null
@@ -1,4 +0,0 @@
-fonts/sha1sum/37033cc5cf37bb223d7355153016b6ccece93b28.ttf::U+1826,U+180B,U+1826:[uni1826.E85E_ue.init1=0+599|uni1826.E856_ue.fina=2+750]
-fonts/sha1sum/ef86fe710cfea877bbe0dbb6946a1f88d0661031.ttf::U+1820,U+180B:[uni1820.E821_a.isol1=0+1199]
-fonts/sha1sum/bb29ce50df2bdba2d10726427c6b7609bf460e04.ttf::U+183A,U+1823,U+182E,U+182B,U+1822,U+1826,U+180B,U+1832,U+180B,U+1827,U+1837,U+0020,U+182D,U+182D,U+180B,U+0020,U+182D,U+180C,U+0020,U+182D,U+180D,U+200D,U+0020,U+182D,U+200D,U+182D,U+180B,U+200D,U+0020,U+182D,U+180C,U+200D,U+0020,U+182D,U+180D,U+200D,U+0020,U+200D,U+182D,U+200D,U+200D,U+182D,U+180B,U+200D,U+0020,U+200D,U+182D,U+180C,U+200D,U+0020,U+200D,U+182D,U+180D,U+200D,U+0020,U+200D,U+182D,U+200D,U+182D,U+180B,U+0020,U+200D,U+182D,U+180C,U+0020,U+1820,U+200C,U+182D,U+1820,U+1837,U+0020,U+1830,U+1824,U+1837,U+200D,U+200D,U+182D,U+1820,U+200D,U+0020,U+200D,U+182D,U+1824,U+182F,U+1822,U+0020,U+182A,U+1820,U+1822,U+182D,U+180E,U+1820,U+202F,U+1836,U+1822,U+1828:[uni183A1823.E971_ko.init=0+950|uni182E.E904_m.medi=2+400|uni182B1822.E8A6_pi.medi=3+1150|uni1826.E854_ue.medi1=5+1100|uni1832.E916_t.medi1=7+1000|uni1827.E85C_ee.medi=9+750|uni1837.E931_r.fina=10+750|space=11+500|uni182D.E8E2_g.init=12+1000|uni182D.E8E8_g.fina1=13
 +1250|space=15+500|uni182D.EA1B_g.isol2=16+1000|space=18+500|uni182D.EA1E_g.init3=19+650|space=19+0|space=22+500|uni182D.E8E2_g.init=23+1000|space=23+0|uni182D.E8E5_g.medi1=25+800|space=25+0|space=28+500|uni182D.EA1D_g.init2=29+950|space=29+0|space=32+500|uni182D.EA1E_g.init3=33+650|space=33+0|space=36+500|space=36+0|uni182D.E8E4_g.medi=38+800|space=38+0|space=38+0|uni182D.E8E5_g.medi1=41+800|space=41+0|space=44+500|space=44+0|uni182D.E8E6_g.medi2=46+650|space=46+0|space=49+500|space=49+0|uni182D.E8E6_g.medi2=51+650|space=51+0|space=54+500|space=54+0|uni182D.E8E4_g.medi=56+800|space=56+0|uni182D.E8E8_g.fina1=58+1250|space=60+500|space=60+0|uni182D.E8E9_g.fina2=62+1050|space=64+500|uni1820.E820_a.isol=65+1550|space=65+0|uni182D.E8E2_g.init=67+1000|uni1820.E823_a.medi=68+400|uni1837.E931_r.fina=69+750|space=70+500|uni1830.E90B_s.init=71+850|uni1824.E844_u.medi=72+600|uni1837.E930_r.medi=73+600|space=73+0|space=73+0|uni182D.E8E5_g.medi1=76+800|uni1820.E823_a.medi=77+400|space=77+0|spac
 e=79+500|space=79+0|uni182D.E8E5_g.medi1=81+800|uni1824.E844_u.medi=82+600|uni182F.E908_l.medi=83+400|uni1822.E837_i.fina=84+600|space=85+500|uni182A1820.E875_ba.init=86+1000|uni1822.E836_i.medi2=88+1000|uni182D.E8E8_g.fina1=89+1250|space=90+0|uni1820.E827_a.fina2=91+600|uni202F.nobreak=92+500|uni1836.E92B_y.init1=93+500|uni1822.E834_i.medi=94+500|uni1828.E866_n.fina=95+850]
-fonts/sha1sum/a34a7b00f22ffb5fd7eef6933b81c7e71bc2cdfb.ttf::U+180A,U+1868,U+180A,U+1868,U+180B,U+180A,U+1868,U+180C,U+180A,U+1868,U+180D,U+180A:[gid1=0+268|gid10=1+778|gid1=2+268|gid9=3+575|gid1=5+268|gid10=6+778|gid1=8+268|gid8=9+575|gid1=11+268]
diff --git a/test/shaping/tests/misc/simple.tests b/test/shaping/tests/misc/simple.tests
deleted file mode 100644
index bebe008f..00000000
--- a/test/shaping/tests/misc/simple.tests
+++ /dev/null
@@ -1,2 +0,0 @@
-fonts/sha1sum/49c9f7485c1392fa09a1b801bc2ffea79275f22e.ttf:--shaper=ot:U+0056,U+0041,U+0042,U+0045,U+0061,U+0062,U+0063,U+0064:[V=0+1142|A=1+1295|B=2+1295|E=3+1123|a=4+1126|b=5+1164|c=6+1072|d=7+1164]
-fonts/sha1sum/49c9f7485c1392fa09a1b801bc2ffea79275f22e.ttf:--shaper=fallback:U+0056,U+0041,U+0042,U+0045,U+0061,U+0062,U+0063,U+0064:[V=0+1295|A=1+1295|B=2+1295|E=3+1123|a=4+1126|b=5+1164|c=6+1072|d=7+1164]
diff --git a/test/shaping/tests/misc/spaces.tests b/test/shaping/tests/misc/spaces.tests
deleted file mode 100644
index cb386de1..00000000
--- a/test/shaping/tests/misc/spaces.tests
+++ /dev/null
@@ -1,17 +0,0 @@
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+0020:[gid1=0+560]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+00A0:[gid1=0+560]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+1680:[gid0=0+692]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2000:[gid1=0+1024]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2001:[gid1=0+2048]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2002:[gid1=0+1024]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2003:[gid1=0+2048]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2004:[gid1=0+683]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2005:[gid1=0+512]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2006:[gid1=0+341]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2007:[gid1=0+560]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2008:[gid1=0+560]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+2009:[gid1=0+410]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+200A:[gid1=0+128]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+202F:[gid1=0+280]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+205F:[gid1=0+455]
-fonts/sha1sum/1c2c3fc37b2d4c3cb2ef726c6cdaaabd4b7f3eb9.ttf:--font-funcs=ot:U+3000:[gid1=0+2048]
diff --git a/test/shaping/tests/misc/tibetan-contractions-1.tests b/test/shaping/tests/misc/tibetan-contractions-1.tests
deleted file mode 100644
index 8577c9d0..00000000
--- a/test/shaping/tests/misc/tibetan-contractions-1.tests
+++ /dev/null
@@ -1,60 +0,0 @@
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+FEFF,U+0F40,U+0F72,U+0F72,U+0F0B,U+0F66,U+0FAD,U+0F7C,U+0F7C,U+0F0B:[uni0F40=0+680|uni0F720F72=0+0|uni0F0B=4+190|uni0F660FAD=5+680|uni0F7D=5+0|uni0F0B=9+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F40,U+0F74,U+0F72,U+0F66,U+0F0B:[uni0F400F740F72=0+680|uni0F66=3+680|uni0F0B=4+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F40,U+0F74,U+0F7A,U+0F53,U+0F0B:[uni0F400F74=0+680|uni0F7A=0+0|uni0F53=3+590|uni0F0B=4 at -30,0+160]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F40,U+0F74,U+0F7C,U+0F56,U+0F39,U+0F0B:[uni0F400F74=0+680|uni0F7C=0+0|uni0F56=3+610|uni0F39=3+0|uni0F0B=5+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F40,U+0F74,U+0F72,U+0F42,U+0F66,U+0F0B:[uni0F400F740F72=0+680|uni0F42=3+680|uni0F66=4+680|uni0F0B=5+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F40,U+0F74,U+0F7A,U+0F66,U+0F0B:[uni0F400F74=0+680|uni0F7A=0+0|uni0F66=3+680|uni0F0B=4+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F40,U+0FB3,U+0F74,U+0F7A,U+0F56,U+0F66,U+0F0B:[uni0F400FB30F740F7A=0+660|uni0F56=4+610|uni0F66=5+680|uni0F0B=6+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F40,U+0FB3,U+0F74,U+0F7C,U+0F42,U+0F0B:[uni0F400FB30F74=0+660|uni0F7C=0+0|uni0F42=4+680|uni0F0B=5+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F51,U+0F40,U+0F7C,U+0F7C,U+0F42,U+0F0B:[uni0F51=0+600|uni0F400F7D=1+680|uni0F42=4+680|uni0F0B=5+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F51,U+0F40,U+0F7C,U+0F7C,U+0F62,U+0F0B:[uni0F51=0+600|uni0F400F7D=1+680|uni0F62=4+620|uni0F0B=5 at -65,0+130]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F51,U+0F40,U+0FB1,U+0F7C,U+0F72,U+0F62,U+0F0B:[uni0F51=0+600|uni0F400FB10F7C0F72=1+660|uni0F62=5+620|uni0F0B=6 at -65,0+130]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F66,U+0F90,U+0FB1,U+0F74,U+0F7A,U+0F0B:[uni0F660F900FB10F74=0+680|uni0F7A=0+0|uni0F0B=5+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F56,U+0F66,U+0F90,U+0FB1,U+0F7A,U+0F7A,U+0F51,U+0F0B:[uni0F56=0+610|uni0F660F900FB1=1+660|uni0F7B=1+0|uni0F51=6+600|uni0F0B=7 at -70,0+106]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F56,U+0F66,U+0F90,U+0FB1,U+0F7A,U+0F7A,U+0F7A,U+0F51,U+0F0B:[uni0F56=0+610|uni0F660F900FB1=1+660|uni0F7B0F7A=1+0|uni0F51=7+600|uni0F0B=8 at -70,0+106]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F41,U+0F58,U+0F66,U+0F74,U+0F7E,U+0F0B:[uni0F41=0+660|uni0F58=1+660|uni0F660F740F7E=2+680|uni0F0B=5+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F41,U+0F74,U+0F7C,U+0F66,U+0F39,U+0F0B:[uni0F410F74=0+680|uni0F7C=0+0|uni0F66=3+680|uni0F39=3+0|uni0F0B=5+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F41,U+0FB1,U+0F74,U+0F7C,U+0F42,U+0F0B:[uni0F410FB10F74=0+670|uni0F7C=0+0|uni0F42=4+680|uni0F0B=5+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F41,U+0FB2,U+0F74,U+0F7A,U+0F51,U+0F0B:[uni0F410FB20F74=0+660|uni0F7A=0+0|uni0F51=4+600|uni0F0B=5 at -70,0+106]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F41,U+0FB2,U+0F74,U+0F72,U+0F44,U+0F0B:[uni0F410FB20F74=0+660|uni0F72=0+0|uni0F44=4+560|uni0F0B=5 at -20,0+110]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F41,U+0FB2,U+0F74,U+0F7C,U+0F51,U+0F0B:[uni0F410FB20F74=0+660|uni0F7C=0+0|uni0F51=4+600|uni0F0B=5 at -70,0+106]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F41,U+0FB2,U+0F74,U+0F7E,U+0F51,U+0F0B:[uni0F410FB20F740F7E=0+660|uni0F51=4+600|uni0F0B=5 at -70,0+106]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F58,U+0F41,U+0FB1,U+0F7A,U+0F7A,U+0F7A,U+0F53,U+0F0B:[uni0F58=0+660|uni0F410FB1=1+680|uni0F7B0F7A=1+0|uni0F53=6+590|uni0F0B=7 at -30,0+160]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F60,U+0F41,U+0F7C,U+0F7C,U+0F62,U+0F0B:[uni0F60=0+600|uni0F410F7D=1+660|uni0F62=4+620|uni0F0B=5 at -65,0+130]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F42,U+0F74,U+0F7C,U+0F42,U+0F0B:[uni0F420F74=0+680|uni0F7C=0+0|uni0F42=3+680|uni0F0B=4+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F42,U+0FB1,U+0F74,U+0F72,U+0F42,U+0F0B:[uni0F420FB10F74=0+700|uni0F72=0+0|uni0F42=4+680|uni0F0B=5+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F42,U+0FB2,U+0F74,U+0F72,U+0F53,U+0F0B:[uni0F420FB20F74=0+680|uni0F72=0+0|uni0F53=4+590|uni0F0B=5 at -30,0+160]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F42,U+0FB2,U+0F74,U+0F72,U+0F0B:[uni0F420FB20F74=0+680|uni0F72=0+0|uni0F0B=4+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F42,U+0FB2,U+0F74,U+0F7C,U+0F53,U+0F0B:[uni0F420FB20F74=0+680|uni0F7C=0+0|uni0F53=4+590|uni0F0B=5 at -30,0+160]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F42,U+0FB2,U+0F74,U+0F7C,U+0F56,U+0F0B:[uni0F420FB20F74=0+680|uni0F7C=0+0|uni0F56=4+610|uni0F0B=5+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F42,U+0FB2,U+0F7C,U+0F72,U+0F53,U+0F0B:[uni0F420FB2=0+680|uni0F7C0F72=0+0|uni0F53=4+590|uni0F0B=5 at -30,0+160]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F42,U+0FB2,U+0F7C,U+0F7A,U+0F62,U+0F0B:[uni0F420FB2=0+680|uni0F7C0F7A=0+0|uni0F62=4+620|uni0F0B=5 at -65,0+130]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F51,U+0F42,U+0F74,U+0F72,U+0F42,U+0F0B:[uni0F51=0+600|uni0F420F740F72=1+680|uni0F42=4+680|uni0F0B=5+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F51,U+0F42,U+0F74,U+0F7A,U+0F53,U+0F0B:[uni0F51=0+600|uni0F420F74=1+680|uni0F7A=1+0|uni0F53=4+590|uni0F0B=5 at -30,0+160]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F51,U+0F42,U+0F74,U+0F7A,U+0F42,U+0F66,U+0F0B:[uni0F51=0+600|uni0F420F74=1+680|uni0F7A=1+0|uni0F42=4+680|uni0F66=5+680|uni0F0B=6+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F51,U+0F42,U+0FB3,U+0F7C,U+0F7A,U+0F44,U+0F0B:[uni0F51=0+600|uni0F420FB3=1+680|uni0F7C0F7A=1+0|uni0F44=5+560|uni0F0B=6 at -20,0+110]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F58,U+0F42,U+0F7C,U+0F7C,U+0F53,U+0F0B:[uni0F58=0+660|uni0F420F7D=1+680|uni0F53=4+590|uni0F0B=5 at -30,0+160]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F44,U+0F74,U+0F72,U+0F42,U+0F0B:[uni0F440F74=0+610|uni0F72=0+0|uni0F42=3+680|uni0F0B=4+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F51,U+0F42,U+0FB2,U+0F74,U+0F7C,U+0F56,U+0F0B:[uni0F51=0+600|uni0F420FB20F74=1+680|uni0F7C=1+0|uni0F56=5+610|uni0F0B=6+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F56,U+0F45,U+0F74,U+0F72,U+0F42,U+0F0B:[uni0F56=0+610|uni0F450F740F72=1+630|uni0F42=4+680|uni0F0B=5+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F56,U+0F45,U+0F74,U+0F72,U+0F66,U+0F0B:[uni0F56=0+610|uni0F450F740F72=1+630|uni0F66=4+680|uni0F0B=5+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F56,U+0F45,U+0FB2,U+0F74,U+0F42,U+0F0B:[uni0F56=0+610|uni0F450FB20F74=1+640|uni0F42=4+680|uni0F0B=5+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F56,U+0F45,U+0F74,U+0F72,U+0F0B:[uni0F56=0+610|uni0F450F740F72=1+630|uni0F0B=4+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F56,U+0F45,U+0F74,U+0F7E,U+0F0B:[uni0F56=0+610|uni0F450F740F7E=1+630|uni0F0B=4+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F46,U+0F74,U+0F72,U+0F63,U+0F0B:[uni0F460F74=0+650|uni0F72=0+0|uni0F63=3+700|uni0F0B=4+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F46,U+0F74,U+0F7C,U+0F51,U+0F0B:[uni0F460F74=0+650|uni0F7C=0+0|uni0F51=3+600|uni0F0B=4 at -70,0+106]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F46,U+0F74,U+0F7C,U+0F51,U+0F0B:[uni0F460F74=0+650|uni0F7C=0+0|uni0F51=3+600|uni0F0B=4 at -70,0+106]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F46,U+0F74,U+0F7E,U+0F51,U+0F0B:[uni0F460F740F7E=0+650|uni0F51=3+600|uni0F0B=4 at -70,0+106]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F46,U+0F39,U+0F74,U+0F7C,U+0F51,U+0F0B:[uni0F46=0+620|uni0F39=0+0|uni0F74=0+0|uni0F7C=0+0|uni0F51=4+600|uni0F0B=5 at -70,0+106]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F46,U+0FB2,U+0F74,U+0F72,U+0F53,U+0F0B:[uni0F460FB20F740F72=0+660|uni0F53=4+590|uni0F0B=5 at -30,0+160]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F46,U+0FB2,U+0F74,U+0F7C,U+0F63,U+0F0B:[uni0F460FB20F74=0+660|uni0F7C=0+0|uni0F63=4+700|uni0F0B=5+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F58,U+0F46,U+0F7C,U+0F7A,U+0F53,U+0F0B:[uni0F58=0+660|uni0F46=1+620|uni0F7C0F7A=1+0|uni0F53=4+590|uni0F0B=5 at -30,0+160]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F60,U+0F46,U+0FB1,U+0F7C,U+0F72,U+0F62,U+0F0B:[uni0F60=0+600|uni0F460FB10F7C0F72=1+660|uni0F62=5+620|uni0F0B=6 at -65,0+130]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F47,U+0F7C,U+0F7C,U+0F0B:[uni0F470F7D=0+570|uni0F0B=3+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F62,U+0F97,U+0F74,U+0F7A,U+0F53,U+0F39,U+0F0B:[uni0F620F970F74=0+600|uni0F7A=0+0|uni0F53=4+590|uni0F39=4+0|uni0F0B=6+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F49,U+0F74,U+0F72,U+0F0B:[uni0F490F74=0+580|uni0F72=0+0|uni0F0B=3+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F49,U+0F74,U+0F72,U+0F44,U+0F0B:[uni0F490F74=0+580|uni0F72=0+0|uni0F44=3+560|uni0F0B=4 at -20,0+110]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F58,U+0F49,U+0F72,U+0F7E,U+0F51,U+0F0B:[uni0F58=0+660|uni0F49=1+580|uni0F720F7E=1+0|uni0F51=4+600|uni0F0B=5 at -70,0+106]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F42,U+0F4F,U+0F74,U+0F72,U+0F42,U+0F0B:[uni0F42=0+680|uni0F4F0F740F72=1+600|uni0F42=4+680|uni0F0B=5+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F56,U+0F4F,U+0F44,U+0F7C,U+0F7E,U+0F66,U+0F0B:[uni0F56=0+610|uni0F4F=1+560|uni0F44=2+560|uni0F7C0F7E=2+0|uni0F66=5+680|uni0F0B=6+190]
-fonts/sha1sum/a02a7f0ad42c2922cb37ad1358c9df4eb81f1bca.ttf::U+0F50,U+0F39,U+0F74,U+0F7A,U+0F4A,U+0F0B:[uni0F50=0+600|uni0F39=0+0|uni0F74=0+0|uni0F7A=0+0|uni0F4A=4+590|uni0F0B=5+190]
diff --git a/test/shaping/tests/misc/tibetan-contractions-2.tests b/test/shaping/tests/misc/tibetan-contractions-2.tests
deleted file mode 100644
index ac15d522..00000000
--- a/test/shaping/tests/misc/tibetan-contractions-2.tests
+++ /dev/null
@@ -1,53 +0,0 @@
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F50,U+0F74,U+0F72,U+0F53,U+0F0B:[uni0F500F74=0+600|uni0F72=0+0|uni0F53=3+590|uni0F0B=4 at -30,0+160]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F58,U+0F50,U+0F74,U+0F7C,U+0F44,U+0F0B:[uni0F58=0+660|uni0F500F74=1+600|uni0F7C=1+0|uni0F44=4+560|uni0F0B=5 at -20,0+110]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F58,U+0F50,U+0F7C,U+0F7A,U+0F44,U+0F0B:[uni0F58=0+660|uni0F50=1+600|uni0F7C0F7A=1+0|uni0F44=4+560|uni0F0B=5 at -20,0+110]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F58,U+0F50,U+0F7C,U+0F72,U+0F66,U+0F0B:[uni0F58=0+660|uni0F50=1+600|uni0F7C0F72=1+0|uni0F66=4+680|uni0F0B=5+190]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F51,U+0F74,U+0F62,U+0FB2,U+0F7C,U+0F51,U+0F0B:[uni0F510F74=0+600|uni0F620FB2=2+600|uni0F7C=2+0|uni0F51=5+600|uni0F0B=6 at -70,0+106]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F51,U+0FB2,U+0F74,U+0F72,U+0F42,U+0F0B:[uni0F510FB20F74=0+600|uni0F72=0+0|uni0F42=4+680|uni0F0B=5+190]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F42,U+0F51,U+0F74,U+0F7A,U+0F53,U+0F0B:[uni0F42=0+680|uni0F510F740F7A=1+600|uni0F53=4+590|uni0F0B=5 at -30,0+160]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F56,U+0F51,U+0F7B,U+0F42,U+0F66,U+0F0B:[uni0F56=0+610|uni0F510F7B=1+579|uni0F42=3+680|uni0F66=4+680|uni0F0B=5+190]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F60,U+0F51,U+0F74,U+0F7A,U+0F51,U+0F0B:[uni0F60=0+600|uni0F510F740F7A=1+600|uni0F51=4+600|uni0F0B=5 at -70,0+106]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F62,U+0FA1,U+0F7C,U+0F7A,U+0F0B:[uni0F620FA10F7C0F7A=0+580|uni0F0B=4+190]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F66,U+0FA1,U+0F74,U+0F72,U+0F56,U+0F0B:[uni0F660FA10F74=0+680|uni0F72=0+0|uni0F56=4+610|uni0F0B=5+190]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F53,U+0F74,U+0F7C,U+0F42,U+0F66,U+0F0B:[uni0F530F74=0+600|uni0F7C=0+0|uni0F42=3+680|uni0F66=4+680|uni0F0B=5+190]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F53,U+0F74,U+0F7C,U+0F62,U+0F0B:[uni0F530F74=0+600|uni0F7C=0+0|uni0F62=3+620|uni0F0B=4 at -65,0+130]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F42,U+0F53,U+0FB1,U+0F7C,U+0F7E,U+0F62,U+0F0B:[uni0F42=0+680|uni0F530FB1=1+600|uni0F7C0F7E=1+0|uni0F62=5+620|uni0F0B=6 at -65,0+130]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F51,U+0F54,U+0F74,U+0F7C,U+0F42,U+0F66,U+0F0B:[uni0F51=0+600|uni0F540F74=1+610|uni0F7C=1+0|uni0F42=4+680|uni0F66=5+680|uni0F0B=6+190]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F56,U+0FB1,U+0F74,U+0F7E,U+0F56,U+0F0B:[uni0F560FB10F74=0+620|uni0F7E=0+0|uni0F56=4+610|uni0F0B=5+190]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F56,U+0FB3,U+0F74,U+0F7C,U+0F53,U+0F0B:[uni0F560FB30F74=0+650|uni0F7C=0+0|uni0F53=4+590|uni0F0B=5 at -30,0+160]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F56,U+0FB3,U+0F7C,U+0F7C,U+0F53,U+0F0B:[uni0F560FB3=0+650|uni0F7D=0+0|uni0F53=4+590|uni0F0B=5 at -30,0+160]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F51,U+0F56,U+0F74,U+0F7C,U+0F51,U+0F0B:[uni0F51=0+600|uni0F560F74=1+610|uni0F7C=1+0|uni0F51=4+600|uni0F0B=5 at -70,0+106]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F51,U+0F56,U+0F74,U+0F7C,U+0F56,U+0F66,U+0F0B:[uni0F51=0+600|uni0F560F74=1+610|uni0F7C=1+0|uni0F56=4+610|uni0F66=5+680|uni0F0B=6+190]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F58,U+0F74,U+0F7A,U+0F42,U+0F66,U+0F0B:[uni0F580F74=0+680|uni0F7A=0+0|uni0F42=3+680|uni0F66=4+680|uni0F0B=5+190]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F58,U+0F74,U+0F72,U+0F42,U+0F0B:[uni0F580F74=0+680|uni0F72=0+0|uni0F42=3+680|uni0F0B=4+190]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F58,U+0F74,U+0F7A,U+0F42,U+0F66,U+0F0B:[uni0F580F74=0+680|uni0F7A=0+0|uni0F42=3+680|uni0F66=4+680|uni0F0B=5+190]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F58,U+0F74,U+0F7A,U+0F53,U+0F0B:[uni0F580F74=0+680|uni0F7A=0+0|uni0F53=3+590|uni0F0B=4 at -30,0+160]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F58,U+0F9F,U+0F7C,U+0F7A,U+0F42,U+0F0B:[uni0F580F9F0F7C0F7A=0+660|uni0F42=4+680|uni0F0B=5+190]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F58,U+0F7C,U+0F7A,U+0F44,U+0F0B:[uni0F58=0+660|uni0F7C0F7A=0+0|uni0F44=3+560|uni0F0B=4 at -20,0+110]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F42,U+0F59,U+0F74,U+0F7C,U+0F62,U+0F0B:[uni0F42=0+680|uni0F590F74=1+620|uni0F7C=1+0|uni0F62=4+620|uni0F0B=5 at -65,0+130]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F58,U+0F5A,U+0FAE,U+0F74,U+0F7E,U+0F66,U+0F0B:[uni0F58=0+660|uni0F5A0FAE0F740F7E=1+620|uni0F66=5+680|uni0F0B=6+190]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F62,U+0FAB,U+0F74,U+0F7A,U+0F66,U+0F0B:[uni0F620FAB0F74=0+660|uni0F7A=0+0|uni0F66=4+680|uni0F0B=5+190]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F62,U+0FAB,U+0F74,U+0F7A,U+0F53,U+0F0B:[uni0F620FAB0F74=0+660|uni0F7A=0+0|uni0F53=4+590|uni0F0B=5 at -30,0+160]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F5E,U+0F74,U+0F7C,U+0F63,U+0F0B:[uni0F5E0F74=0+660|uni0F7C=0+0|uni0F63=3+700|uni0F0B=4+190]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F42,U+0F5E,U+0F74,U+0F7C,U+0F42,U+0F0B:[uni0F42=0+680|uni0F5E0F74=1+660|uni0F7C=1+0|uni0F42=4+680|uni0F0B=5+190]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F42,U+0F5E,U+0F74,U+0F7C,U+0F58,U+0F66,U+0F0B:[uni0F42=0+680|uni0F5E0F74=1+660|uni0F7C=1+0|uni0F58=4+660|uni0F66=5+680|uni0F0B=6+190]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F42,U+0F5F,U+0F74,U+0F7C,U+0F0B:[uni0F42=0+680|uni0F5F0F74=1+610|uni0F7C=1+0|uni0F0B=4+190]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F42,U+0F5F,U+0F74,U+0F72,U+0F44,U+0F0B:[uni0F42=0+680|uni0F5F0F740F72=1+610|uni0F44=4+560|uni0F0B=5 at -20,0+110]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F42,U+0F5F,U+0F74,U+0F7A,U+0F62,U+0F0B:[uni0F42=0+680|uni0F5F0F74=1+610|uni0F7A=1+0|uni0F62=4+620|uni0F0B=5 at -65,0+130]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F42,U+0F5F,U+0F74,U+0F7A,U+0F62,U+0F0B:[uni0F42=0+680|uni0F5F0F74=1+610|uni0F7A=1+0|uni0F62=4+620|uni0F0B=5 at -65,0+130]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F42,U+0F5F,U+0F74,U+0F7A,U+0F51,U+0F0B:[uni0F42=0+680|uni0F5F0F74=1+610|uni0F7A=1+0|uni0F51=4+600|uni0F0B=5 at -70,0+106]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F60,U+0F7C,U+0F7A,U+0F62,U+0F0B:[uni0F60=0+600|uni0F7C0F7A=0+0|uni0F62=3+620|uni0F0B=4 at -65,0+130]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F61,U+0F72,U+0F7A,U+0F0B:[uni0F61=0+700|uni0F720F7A=0+0|uni0F0B=3+190]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F61,U+0F7A,U+0F7A,U+0F66,U+0F0B:[uni0F61=0+700|uni0F7B=0+0|uni0F66=3+680|uni0F0B=4+190]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F62,U+0F72,U+0F53,U+0F7C,U+0F7A,U+0F0B:[uni0F620F72=0+620|uni0F530F7C0F7A=2+590|uni0F0B=5+190]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F62,U+0F74,U+0F7C,U+0F63,U+0F0B:[uni0F620F74=0+601|uni0F7C=0+0|uni0F63=3+700|uni0F0B=4+190]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F66,U+0F7A,U+0F7E,U+0F53,U+0F0B:[uni0F66=0+680|uni0F7A0F7E=0+0|uni0F53=3+590|uni0F0B=4 at -30,0+160]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F66,U+0F7A,U+0F7E,U+0F51,U+0F60,U+0F0B:[uni0F66=0+680|uni0F7A0F7E=0+0|uni0F51=3+600|uni0F60=4+600|uni0F0B=5 at -40,0+150]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F66,U+0F7C,U+0F7C,U+0F56,U+0F0B:[uni0F660F7D=0+680|uni0F56=3+610|uni0F0B=4+190]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F66,U+0F7C,U+0F7C,U+0F62,U+0F0B:[uni0F660F7D=0+680|uni0F62=3+620|uni0F0B=4 at -65,0+130]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F66,U+0FB2,U+0F7C,U+0F7A,U+0F66,U+0F0B:[uni0F660FB2=0+680|uni0F7C0F7A=0+0|uni0F66=4+680|uni0F0B=5+190]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F66,U+0FB3,U+0F7C,U+0F7C,U+0F51,U+0F0B:[uni0F660FB3=0+680|uni0F7D=0+0|uni0F51=4+600|uni0F0B=5 at -70,0+106]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F66,U+0FB3,U+0F7C,U+0F7C,U+0F53,U+0F0B:[uni0F660FB3=0+680|uni0F7D=0+0|uni0F53=4+590|uni0F0B=5 at -30,0+160]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F56,U+0F66,U+0F99,U+0F7C,U+0F7E,U+0F51,U+0F66,U+0F0B:[uni0F56=0+610|uni0F660F99=1+670|uni0F7C0F7E=1+0|uni0F51=5+600|uni0F66=6+680|uni0F0B=7+190]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F63,U+0FB7,U+0FB1,U+0F7C,U+0F42,U+0F66,U+0F0B:[uni0F630FB70FB1=0+680|uni0F7C=0+0|uni0F42=4+680|uni0F66=5+680|uni0F0B=6+190]
-fonts/sha1sum/2de1ab4907ab688c0cfc236b0bf51151db38bf2e.ttf::U+0F68,U+0FB1,U+0F7C,U+0F53,U+0F0B:[uni0F680FB1=0+740|uni0F7C=0+0|uni0F53=3+590|uni0F0B=4 at -30,0+160]
diff --git a/test/shaping/tests/misc/tibetan-vowels.tests b/test/shaping/tests/misc/tibetan-vowels.tests
deleted file mode 100644
index 75e13c8a..00000000
--- a/test/shaping/tests/misc/tibetan-vowels.tests
+++ /dev/null
@@ -1,11 +0,0 @@
-fonts/sha1sum/82f4f3b57bb55344e72e70231380202a52af5805.ttf::U+0F68,U+0F72:[uni0F680F72=0+730]
-fonts/sha1sum/82f4f3b57bb55344e72e70231380202a52af5805.ttf::U+0F68,U+0F74:[uni0F680F74=0+730]
-fonts/sha1sum/82f4f3b57bb55344e72e70231380202a52af5805.ttf::U+0F68,U+0F7A:[uni0F680F7A=0+730]
-fonts/sha1sum/82f4f3b57bb55344e72e70231380202a52af5805.ttf::U+0F68,U+0F7C:[uni0F680F7C=0+730]
-fonts/sha1sum/82f4f3b57bb55344e72e70231380202a52af5805.ttf::U+0F68,U+0F71,U+0F72:[uni0F680F710F72=0+720]
-fonts/sha1sum/82f4f3b57bb55344e72e70231380202a52af5805.ttf::U+0F68,U+0F71,U+0F74:[uni0F680F75=0+720]
-fonts/sha1sum/82f4f3b57bb55344e72e70231380202a52af5805.ttf::U+0F68,U+0F7B:[uni0F680F7B=0+720]
-fonts/sha1sum/82f4f3b57bb55344e72e70231380202a52af5805.ttf::U+0F68,U+0F7D:[uni0F680F7D=0+730]
-fonts/sha1sum/82f4f3b57bb55344e72e70231380202a52af5805.ttf::U+0F68,U+0F7E:[uni0F680F7E=0+730]
-fonts/sha1sum/82f4f3b57bb55344e72e70231380202a52af5805.ttf::U+0F68,U+0F7F:[uni0F68=0+730|uni0F7F=0+408]
-fonts/sha1sum/82f4f3b57bb55344e72e70231380202a52af5805.ttf::U+0F00:[uni0F00=0+730]
diff --git a/test/shaping/tests/misc/use-marchen.tests b/test/shaping/tests/misc/use-marchen.tests
deleted file mode 100644
index 6497178a..00000000
--- a/test/shaping/tests/misc/use-marchen.tests
+++ /dev/null
@@ -1,35 +0,0 @@
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8F:[u11C8F=0+3000]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C71:[u11C71=0+1600]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8A,U+11CB5:[u11C8A=0+2000|u11CB5=0 at -2000,0+0]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C84,U+11C71:[u11C84=0+2200|u11C71=1+1600]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C7E,U+11C8A:[u11C7E=0+2600|u11C8A=1+2000]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8A,U+11C92,U+11CA9:[u11C8A.11C92.11CA9=0+2600]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8A,U+11C94,U+11CA9:[u11C8A.11C94.11CA9=0+2600]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8D,U+11C92,U+11CA9:[u11C8D.11C92.11CA9=0+2600]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8D,U+11C94,U+11CA9:[u11C8D.11C94.11CA9=0+2600]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8D,U+11C9E,U+11CA9:[u11C8D.11C9E.11CA9=0+3200]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8D,U+11CA0,U+11CA9:[u11C8D.11CA0.11CA9=0+3000]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8D,U+11C92,U+11CAA:[u11C8D.11C92.11CAA=0+2000]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8D,U+11C94,U+11CAA:[u11C8D.11C94.11CAA=0+2000]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8D,U+11C9D,U+11CAA:[u11C8D.11C9D.11CAA=0+2000]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8D,U+11C9E,U+11CAA:[u11C8D.11C9E.11CAA=0+2600]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8D,U+11CA0,U+11CAA:[u11C8D.11CA0.11CAA=0+2400]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C80,U+11C72,U+11CAA:[u11C80=0+2400|u11C72.11CAA=1+2000]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8C,U+11CB1,U+11C8D:[u11C8C.11CB1=0+2793|u11C8D=2+2000]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C80,U+11C7C,U+11CB3:[u11C80=0+2400|u11C7C.11CB3=1+2200]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C7F,U+11CB2,U+11C7D:[u11C7F.11CB2=0+2400|u11C7D=2+2000]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8D,U+11CB2,U+11C81:[u11C8D.11CB2=0+2000|u11C81=2+2400]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8C,U+11CB4,U+11C74:[u11C8C.11CB4=0+2800|u11C74=2+2000]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8A,U+11CA1,U+11CA9,U+11C71:[u11C8A.11CA1.11CA9=0+3000|u11C71=3+1600]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8D,U+11CA1,U+11CA9,U+11C71:[u11C8D.11CA1.11CA9=0+3000|u11C71=3+1600]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8D,U+11CA1,U+11CAA,U+11C71:[u11C8D.11CA1.11CAA=0+2400|u11C71=3+1600]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8F,U+11CB0,U+11CB4,U+11CB6:[u11C8F.11CB0.11CB4=0+3600|u11CB6=0 at -3200,0+0]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8E,U+11CB0,U+11CB2,U+11CB5:[u11C8E.11CB0.11CB2=0+2000|u11CB5=0 at -2000,0+0]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C74,U+11C89,U+11CB2,U+11C75:[u11C74=0+2000|u11C89.11CB2=1+2000|u11C75=3+2000]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C7C,U+11CAA,U+11CB2,U+11C75:[u11C7C.11CAA.11CB2=0+2200|u11C75=3+2000]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C81,U+11C74,U+11CB2,U+11C8B:[u11C81=0+2400|u11C74.11CB2=1+2000|u11C8B=3+2400]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8B,U+11CB3,U+11C74,U+11C8D:[u11C8B.11CB3=0+2400|u11C74=2+2000|u11C8D=3+2000]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C83,U+11CB4,U+11C74,U+11C8D:[u11C83.11CB4=0+2800|u11C74=2+2000|u11C8D=3+2000]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C8B,U+11CB3,U+11C74,U+11C8D,U+11C71:[u11C8B.11CB3=0+2400|u11C74=2+2000|u11C8D=3+2000|u11C71=4+1600]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C80,U+11C76,U+11CB1,U+11C75,U+11C8D:[u11C80=0+2400|u11C76.11CB1=1+3200|u11C75=3+2000|u11C8D=4+2000]
-fonts/sha1sum/85414f2552b654585b7a8d13dcc3e8fd9f7970a3.ttf::U+11C80,U+11C8D,U+11C94,U+11CAA,U+11CB1,U+11C74,U+11C8D:[u11C80=0+2400|u11C8D.11C94.11CAA.11CB1.shorti=1+2600|u11C74=5+2000|u11C8D=6+2000]
diff --git a/test/shaping/tests/misc/use-syllable.tests b/test/shaping/tests/misc/use-syllable.tests
deleted file mode 100644
index a48633b8..00000000
--- a/test/shaping/tests/misc/use-syllable.tests
+++ /dev/null
@@ -1,7 +0,0 @@
-fonts/sha1sum/96490dd2ff81233b335a650e7eb660e0e7b2eeea.ttf::U+AA00,U+AA2D,U+AA29:[a_cham=0+1121|uSign_cham=0 at 14,0+0|.notdef=0+600]
-fonts/sha1sum/e68a88939e0f06e34d2bc911f09b70890289c8fd.ttf::U+AA00,U+AA34,U+AA36:[raMedial_cham_pre=0+400|a_cham=0+1121|waMedial_cham=0 at -32,0+0]
-fonts/sha1sum/e68a88939e0f06e34d2bc911f09b70890289c8fd.ttf::U+AA00,U+AA35,U+AA33:[a_cham=0+1121|laMedial_cham=0 at -32,0+0|yaMedial_cham=0+542]
-fonts/sha1sum/e68a88939e0f06e34d2bc911f09b70890289c8fd.ttf::U+AA00,U+AA35,U+AA36:[a_cham=0+1121|laMedial_waMedial_cham=0 at 43,0+0]
-fonts/sha1sum/074a5ae6b19de8f29772fdd5df2d3d833f81f5e6.ttf:--no-glyph-names:U+11320,U+20F0,U+11367:[3=0+502|1=0 at 33,0+0|4=0 at 300,8+0]
-fonts/sha1sum/373e67bf41ca264e260a9716162b71a23549e885.ttf:--no-glyph-names:U+A8AC,U+A8B4,U+A8B5:[2=0+377|3=0+242|4=0+210]
-fonts/sha1sum/59a585a63b3df608fbeef00956c8c108deec7de6.ttf:--no-glyph-names:U+1BC7,U+1BEA,U+1BF3:[1=0+749|2=0+402|4=0+535|3=0+401]
diff --git a/test/shaping/tests/misc/use.tests b/test/shaping/tests/misc/use.tests
deleted file mode 100644
index 6ffd1264..00000000
--- a/test/shaping/tests/misc/use.tests
+++ /dev/null
@@ -1,4 +0,0 @@
-fonts/sha1sum/fbb6c84c9e1fe0c39e152fbe845e51fd81f6748e.ttf::U+1B1B,U+1B44,U+1B13,U+1B3E:[gid3=0+990|gid7=0+2473|gid5=0 at -293,-400+0]
-fonts/sha1sum/4cce528e99f600ed9c25a2b69e32eb94a03b4ae8.ttf::U+1A48,U+1A58,U+1A25,U+1A48,U+1A58,U+1A25,U+1A6E,U+1A63:[uni1A48=0+1212|uni1A25=0+1912|uni1A58=0+0|uni1A48=3+1212|uni1A6E=3+0|uni1A25=3+1912|uni1A58=3+0|uni1A63=3+1212]
-fonts/sha1sum/f518eb6f6b5eec2946c9fbbbde44e45d46f5e2ac.ttf::U+1A48,U+1A58,U+1A25,U+1A48,U+1A58,U+1A25,U+1A6E,U+1A63:[uni1A48=0+1212|uni1A25=0+1912|uni1A58=0+0|uni1A48=3+1212|uni1A6E=3+1211|uni1A25=3+1912|uni1A58=3+0|uni1A63=3+1212]
-fonts/sha1sum/6ff0fbead4462d9f229167b4e6839eceb8465058.ttf:--font-funcs=ot:U+11103,U+11128:[u11103=0+837|u11128=0+0]
diff --git a/test/shaping/tests/misc/variations-rvrn.tests b/test/shaping/tests/misc/variations-rvrn.tests
deleted file mode 100644
index a99c7f16..00000000
--- a/test/shaping/tests/misc/variations-rvrn.tests
+++ /dev/null
@@ -1,100 +0,0 @@
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=1:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=11:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=21:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=31:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=41:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=51:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=61:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=71:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=81:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=91:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=101:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=111:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=121:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=131:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=141:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=151:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=161:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=171:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=181:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=191:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=201:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=211:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=221:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=231:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=241:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=251:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=261:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=271:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=281:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=291:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=301:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=311:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=321:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=331:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=341:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=351:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=361:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=371:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=381:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=391:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=401:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=411:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=421:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=431:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=441:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=451:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=461:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=471:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=481:U+0072:[rvrn_base=0+1529]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=491:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=501:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=511:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=521:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=531:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=541:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=551:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=561:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=571:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=581:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=591:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=601:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=611:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=621:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=631:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=641:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=651:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=661:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=671:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=681:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=691:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=701:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=711:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=721:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=731:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=741:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=751:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=761:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=771:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=781:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=791:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=801:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=811:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=821:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=831:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=841:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=851:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=861:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=871:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=881:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=891:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=901:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=911:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=921:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=931:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=941:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=951:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=961:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=971:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=981:U+0072:[rvrn_subst=0+1825]
-fonts/sha1sum/d23d76ea0909c14972796937ba072b5a40c1e257.ttf:--variations=FVTT=991:U+0072:[rvrn_subst=0+1825]
diff --git a/test/shaping/tests/misc/vertical.tests b/test/shaping/tests/misc/vertical.tests
deleted file mode 100644
index e0b64d94..00000000
--- a/test/shaping/tests/misc/vertical.tests
+++ /dev/null
@@ -1,3 +0,0 @@
-fonts/sha1sum/191826b9643e3f124d865d617ae609db6a2ce203.ttf:--direction=t --font-funcs=ft:U+300C:[uni300C.vert=0 at -512,-578+0,-1024]
-fonts/sha1sum/f9b1dd4dcb515e757789a22cb4241107746fd3d0.ttf:--direction=t --font-funcs=ft:U+0041,U+0042:[gid1=0 at -654,-2128+0,-2789|gid2=1 at -665,-2125+0,-2789]
-fonts/sha1sum/f9b1dd4dcb515e757789a22cb4241107746fd3d0.ttf:--direction=t --font-funcs=ot:U+0041,U+0042:[gid1=0 at -654,-2189+0,-2789|gid2=1 at -665,-2189+0,-2789]
diff --git a/test/shaping/tests/misc/zero-width-marks.tests b/test/shaping/tests/misc/zero-width-marks.tests
deleted file mode 100644
index c08f26ba..00000000
--- a/test/shaping/tests/misc/zero-width-marks.tests
+++ /dev/null
@@ -1,11 +0,0 @@
-fonts/sha1sum/bb9473d2403488714043bcfb946c9f78b86ad627.ttf::U+1030:[circledash=0+636|u1030.med=0 at -162,0+0]
-fonts/sha1sum/8454d22037f892e76614e1645d066689a0200e61.ttf::U+05E0,U+05B8,U+0591,U+05DA,U+05B0:[uni05DA05B0=3+991|uni2009=0+200|uni0591=0 at 75,0+0|uni05B8=0 at 495,0+0|uni05E0=0+683]
-fonts/sha1sum/45855bc8d46332b39c4ab9e2ee1a26b1f896da6b.ttf::U+0E01,U+0E34,U+0E01:[gid1=0+1264|gid2=0 at 20,0+0|gid1=2+1264]
-fonts/sha1sum/7a37dc4d5bf018456aea291cee06daf004c0221c.ttf::U+0E01,U+0E34,U+0E01:[gid1=0+1264|gid2=0 at 20,0+1000|gid1=2+1264]
-fonts/sha1sum/8099955657a54e9ee38a6ba1d6f950ce58e3cc25.ttf::U+0E01,U+0E34,U+0E01:[gid1=0+1264|gid2=0+0|gid1=2+1264]
-fonts/sha1sum/bb0c53752e85c3d28973ebc913287b8987d3dfe8.ttf::U+0E01,U+0E34,U+0E01:[gid1=0+1264|gid2=0+0|gid1=2+1264]
-fonts/sha1sum/ffa0f5d2d9025486d8469d8b1fdd983e7632499b.ttf::U+0058,U+0303,U+0078,U+0303,U+006A,U+006A,U+006A,U+0303,U+006A,U+0303,U+006A,U+006A:[gid1=0+1200|gid6=0 at -1029,340+0|gid3=2+1083|gid6=2 at -992,0+0|gid2=4+528|gid2=5+528|gid5=6+528|gid6=6 at -693,0+0|gid5=8+528|gid6=8 at -693,0+0|gid2=10+528|gid2=11+528]
-fonts/sha1sum/cc5f3d2d717fb6bd4dfae1c16d48a2cb8e12233b.ttf::U+0058,U+0303,U+0078,U+0303,U+006A,U+006A,U+006A,U+0303,U+006A,U+0303,U+006A,U+006A:[gid1=0+1200|gid6=0 at -1029,340+1200|gid3=2+1083|gid6=2 at -992,0+1200|gid2=4+528|gid2=5+528|gid5=6+528|gid6=6 at -693,0+1200|gid5=8+528|gid6=8 at -693,0+1200|gid2=10+528|gid2=11+528]
-fonts/sha1sum/fcdcffbdf1c4c97c05308d7600e4c283eb47dbca.ttf::U+0058,U+0303,U+0078,U+0303,U+006A,U+006A,U+006A,U+0303,U+006A,U+0303,U+006A,U+006A:[gid1=0+1200|gid6=0+0|gid3=2+1083|gid6=2+0|gid2=4+528|gid2=5+528|gid5=6+528|gid6=6+0|gid5=8+528|gid6=8+0|gid2=10+528|gid2=11+528]
-fonts/sha1sum/56cfd0e18d07f41c38e9598545a6d369127fc6f9.ttf::U+0058,U+0303,U+0078,U+0303,U+006A,U+006A,U+006A,U+0303,U+006A,U+0303,U+006A,U+006A:[gid1=0+1200|gid6=0 at -1029,340+0|gid3=2+1083|gid6=2 at -992,0+0|gid2=4+528|gid2=5+528|gid5=6+528|gid6=6 at -693,0+0|gid5=8+528|gid6=8 at -693,0+0|gid2=10+528|gid2=11+528]
-fonts/sha1sum/a98e908e2ed21b22228ea59ebcc0f05034c86f2e.ttf::U+0041,U+0042,U+0041:[A=0+1368|B=1+0|A=2+1368]
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-persian/mehran.txt b/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-persian/mehran.txt
similarity index 95%
rename from test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-persian/mehran.txt
rename to test/shaping/texts/in-house/shaper-arabic/script-arabic/language-persian/mehran.txt
index 4be07864..b5b670fe 100755
--- a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-persian/mehran.txt
+++ b/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-persian/mehran.txt
@@ -1,8 +1,8 @@
-‫دَر فارسی گَچْ‌پَژْ هست. این «ی» فارسی است.‬
-‫حرف «ع» را به چٰهار شکلِ «ع‍» و «‍ع‍» و «‍ع» و «‌ع‌» می‌توان نشان داد.‬
-‫تشخیصِ اِعْ‌ًٌَُراب ناهمخوان از وظایف حروفْ‌چین است.‬
-‫دو اِعراب همخوان مانند « َ» و « ّ» به شکل « َّ» باهم ترکیب می‌شوند.‬
-‫لازم است حروف‌چین رفتار درستی با کشیدهٔ یونی‌کدی داشته باشد.‬
-‫مثلاً بتواند کلـمهٔ «پیِٓـــــــچ» یا حروف «ــٖٓـ» را به درستی نمایش دهد.‬
-‫حرف «لام» و «الف» باید به شکل لیگاتوری نمایش داده شوند.‬
+‫دَر فارسی گَچْ‌پَژْ هست. این «ی» فارسی است.‬
+‫حرف «ع» را به چٰهار شکلِ «ع‍» و «‍ع‍» و «‍ع» و «‌ع‌» می‌توان نشان داد.‬
+‫تشخیصِ اِعْ‌ًٌَُراب ناهمخوان از وظایف حروفْ‌چین است.‬
+‫دو اِعراب همخوان مانند « َ» و « ّ» به شکل « َّ» باهم ترکیب می‌شوند.‬
+‫لازم است حروف‌چین رفتار درستی با کشیدهٔ یونی‌کدی داشته باشد.‬
+‫مثلاً بتواند کلـمهٔ «پیِٓـــــــچ» یا حروف «ــٖٓـ» را به درستی نمایش دهد.‬
+‫حرف «لام» و «الف» باید به شکل لیگاتوری نمایش داده شوند.‬
 ‫کلمهٔ «بَلَاٰ» از آزمون‌های سطح پائین حروف‌چین است.‬
\ No newline at end of file
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/2grams.txt b/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/2grams.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/2grams.txt
rename to test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/2grams.txt
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/3grams.txt b/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/3grams.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/3grams.txt
rename to test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/3grams.txt
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/4grams.txt b/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/4grams.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/4grams.txt
rename to test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/4grams.txt
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/5grams.txt b/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/5grams.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/5grams.txt
rename to test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/5grams.txt
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/6grams.txt b/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/6grams.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/6grams.txt
rename to test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/6grams.txt
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/7grams.txt b/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/7grams.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/7grams.txt
rename to test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/7grams.txt
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/8grams.txt b/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/8grams.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/8grams.txt
rename to test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/8grams.txt
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/LICENSE b/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/LICENSE
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/LICENSE
rename to test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/LICENSE
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/README b/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/README
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/README
rename to test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/README
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/SOURCES b/test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/SOURCES
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/SOURCES
rename to test/shaping/texts/in-house/shaper-arabic/script-arabic/language-urdu/crulp/ligatures/SOURCES
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/lam-alef.txt b/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/lam-alef.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/lam-alef.txt
rename to test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/lam-alef.txt
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/language-arabic.txt b/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-arabic.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/language-arabic.txt
rename to test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-arabic.txt
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/language-persian.txt b/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-persian.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/language-persian.txt
rename to test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-persian.txt
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/language-urdu.txt b/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-urdu.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/language-urdu.txt
rename to test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/language-urdu.txt
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/ligature-components.txt b/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/ligature-components.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/ligature-components.txt
rename to test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/ligature-components.txt
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/ligature-diacritics.txt b/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/ligature-diacritics.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/ligature-diacritics.txt
rename to test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/ligature-diacritics.txt
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/mark-skipping.txt b/test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/mark-skipping.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-arabic/script-arabic/misc/diacritics/mark-skipping.txt
rename to test/shaping/texts/in-house/shaper-arabic/script-arabic/misc/diacritics/mark-skipping.txt
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-mongolian/misc/misc.txt b/test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/misc.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-arabic/script-mongolian/misc/misc.txt
rename to test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-mongolian/misc/non-joining.txt b/test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/non-joining.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-arabic/script-mongolian/misc/non-joining.txt
rename to test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/non-joining.txt
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-mongolian/misc/poem.txt b/test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/poem.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-arabic/script-mongolian/misc/poem.txt
rename to test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/poem.txt
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-mongolian/misc/variation-selectors.txt b/test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/variation-selectors.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-arabic/script-mongolian/misc/variation-selectors.txt
rename to test/shaping/texts/in-house/shaper-arabic/script-mongolian/misc/variation-selectors.txt
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-nko/misc/misc.txt b/test/shaping/texts/in-house/shaper-arabic/script-nko/misc/misc.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-arabic/script-nko/misc/misc.txt
rename to test/shaping/texts/in-house/shaper-arabic/script-nko/misc/misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-phags-pa/misc/misc.txt b/test/shaping/texts/in-house/shaper-arabic/script-phags-pa/misc/misc.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-arabic/script-phags-pa/misc/misc.txt
rename to test/shaping/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/shaping/texts/in-house/shaper-arabic/script-syriac/misc/abbreviation-mark.txt
new file mode 100644
index 00000000..52bdbea3
--- /dev/null
+++ b/test/shaping/texts/in-house/shaper-arabic/script-syriac/misc/abbreviation-mark.txt
@@ -0,0 +1,11 @@
+ܐܒ
+ܐ܏
+ܐ܏ܒ
+ܐ܏ܒܓ
+ܐ܏ܒܓܕ
+ܐ܏ܒܓܕܐ
+ܐ܏ܒܓܕܐܐܐܐܐܐܐܐܐ
+ܐ܏ܒܓܕܐ܏ܐܐܐ܏ܐ܏ܐܐܐܐ
+ܐ܏ܒܓܕܓܓܓܓܓܓ
+ܐ܏ܒܓ
+܏ܫܘabcܒ.
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-syriac/misc/alaph.txt b/test/shaping/texts/in-house/shaper-arabic/script-syriac/misc/alaph.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-arabic/script-syriac/misc/alaph.txt
rename to test/shaping/texts/in-house/shaper-arabic/script-syriac/misc/alaph.txt
diff --git a/test/shaping/texts/in-tree/shaper-default/script-ethiopic/misc/misc.txt b/test/shaping/texts/in-house/shaper-default/script-ethiopic/misc/misc.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-default/script-ethiopic/misc/misc.txt
rename to test/shaping/texts/in-house/shaper-default/script-ethiopic/misc/misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-default/script-han/misc/cjk-compat.txt b/test/shaping/texts/in-house/shaper-default/script-han/misc/cjk-compat.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-default/script-han/misc/cjk-compat.txt
rename to test/shaping/texts/in-house/shaper-default/script-han/misc/cjk-compat.txt
diff --git a/test/shaping/texts/in-tree/shaper-default/script-hiragana/misc/kazuraki-liga-lines.txt b/test/shaping/texts/in-house/shaper-default/script-hiragana/misc/kazuraki-liga-lines.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-default/script-hiragana/misc/kazuraki-liga-lines.txt
rename to test/shaping/texts/in-house/shaper-default/script-hiragana/misc/kazuraki-liga-lines.txt
diff --git a/test/shaping/texts/in-tree/shaper-default/script-hiragana/misc/kazuraki-liga.txt b/test/shaping/texts/in-house/shaper-default/script-hiragana/misc/kazuraki-liga.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-default/script-hiragana/misc/kazuraki-liga.txt
rename to test/shaping/texts/in-house/shaper-default/script-hiragana/misc/kazuraki-liga.txt
diff --git a/test/shaping/texts/in-tree/shaper-default/script-linear-b/misc/misc.txt b/test/shaping/texts/in-house/shaper-default/script-linear-b/misc/misc.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-default/script-linear-b/misc/misc.txt
rename to test/shaping/texts/in-house/shaper-default/script-linear-b/misc/misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-default/script-tifinagh/misc/misc.txt b/test/shaping/texts/in-house/shaper-default/script-tifinagh/misc/misc.txt
similarity index 98%
rename from test/shaping/texts/in-tree/shaper-default/script-tifinagh/misc/misc.txt
rename to test/shaping/texts/in-house/shaper-default/script-tifinagh/misc/misc.txt
index 0c307eb9..9fc069a3 100644
--- a/test/shaping/texts/in-tree/shaper-default/script-tifinagh/misc/misc.txt
+++ b/test/shaping/texts/in-house/shaper-default/script-tifinagh/misc/misc.txt
@@ -8,4 +8,3 @@
 ⵔ⵿ⵜ
 ⵙⵜ
 ⵙ⵿ⵜ
-
diff --git a/test/shaping/texts/in-tree/shaper-hangul/script-hangul/misc/misc.txt b/test/shaping/texts/in-house/shaper-hangul/script-hangul/misc/misc.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-hangul/script-hangul/misc/misc.txt
rename to test/shaping/texts/in-house/shaper-hangul/script-hangul/misc/misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-hebrew/script-hebrew/misc/diacritics.txt b/test/shaping/texts/in-house/shaper-hebrew/script-hebrew/misc/diacritics.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-hebrew/script-hebrew/misc/diacritics.txt
rename to test/shaping/texts/in-house/shaper-hebrew/script-hebrew/misc/diacritics.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/LICENSE b/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/LICENSE
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/LICENSE
rename to test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/LICENSE
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/README b/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/README
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/README
rename to test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/README
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/SOURCES b/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/SOURCES
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/SOURCES
rename to test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/SOURCES
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/gsub/IndicFontFeatureGSUB.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-assamese/utrrs/gsub/IndicFontFeatureGSUB.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-assamese/utrrs/gsub/IndicFontFeatureGSUB.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/misc/misc.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/misc/misc.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/misc/misc.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-bengali/misc/misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/misc/reph.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/misc/reph.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/misc/reph.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-bengali/misc/reph.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/LICENSE b/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/LICENSE
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/LICENSE
rename to test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/LICENSE
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/README b/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/README
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/README
rename to test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/README
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/SOURCES b/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/SOURCES
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/SOURCES
rename to test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/SOURCES
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/gsub/IndicFontFeatureGSUB.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-bengali/utrrs/gsub/IndicFontFeatureGSUB.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-bengali/utrrs/gsub/IndicFontFeatureGSUB.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/dottedcircle.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/dottedcircle.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/dottedcircle.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/dottedcircle.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/eyelash.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/eyelash.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/eyelash.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/eyelash.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/joiners.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/joiners.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/joiners.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/joiners.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/misc.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/misc.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/misc.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/spec-deviations.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/spec-deviations.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/spec-deviations.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/spec-deviations.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/tricky-reordering.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/tricky-reordering.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/misc/tricky-reordering.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/misc/tricky-reordering.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/LICENSE b/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/LICENSE
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/LICENSE
rename to test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/LICENSE
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/README b/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/README
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/README
rename to test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/README
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/SOURCES b/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/SOURCES
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/SOURCES
rename to test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/SOURCES
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DevnagariSpecificAddition.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DevnagariSpecificAddition.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DevnagariSpecificAddition.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-DevnagariSpecificAddition.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-GenericPunctuation.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-GenericPunctuation.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-GenericPunctuation.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-GenericPunctuation.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/gsub/IndicFontFeatureGSUB.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-devanagari/utrrs/gsub/IndicFontFeatureGSUB.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-devanagari/utrrs/gsub/IndicFontFeatureGSUB.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/LICENSE b/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/LICENSE
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/LICENSE
rename to test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/LICENSE
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/README b/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/README
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/README
rename to test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/README
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/SOURCES b/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/SOURCES
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/SOURCES
rename to test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/SOURCES
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/gsub/IndicFontFeatureGSUB.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-gujarati/utrrs/gsub/IndicFontFeatureGSUB.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-gujarati/utrrs/gsub/IndicFontFeatureGSUB.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/misc/misc.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/misc/misc.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/misc/misc.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/misc/misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/LICENSE b/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/LICENSE
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/LICENSE
rename to test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/LICENSE
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/README b/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/README
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/README
rename to test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/README
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/SOURCES b/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/SOURCES
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/SOURCES
rename to test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/SOURCES
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-GurmukhiSpecific.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-GurmukhiSpecific.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-GurmukhiSpecific.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-GurmukhiSpecific.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/gsub/IndicFontFeatureGSUB.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-gurmukhi/utrrs/gsub/IndicFontFeatureGSUB.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-gurmukhi/utrrs/gsub/IndicFontFeatureGSUB.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/misc/misc.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/misc/misc.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/misc/misc.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-kannada/misc/misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/misc/right-matras.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/misc/right-matras.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/misc/right-matras.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-kannada/misc/right-matras.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/LICENSE b/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/LICENSE
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/LICENSE
rename to test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/LICENSE
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/README b/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/README
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/README
rename to test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/README
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/SOURCES b/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/SOURCES
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/SOURCES
rename to test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/SOURCES
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/gsub/IndicFontFeatureGSUB.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-kannada/utrrs/gsub/IndicFontFeatureGSUB.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-kannada/utrrs/gsub/IndicFontFeatureGSUB.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/misc/cibu.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/misc/cibu.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/misc/cibu.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/misc/cibu.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/misc/dot-reph.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/misc/dot-reph.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/misc/dot-reph.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/misc/dot-reph.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/misc/misc.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/misc/misc.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/misc/misc.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/misc/misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/LICENSE b/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/LICENSE
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/LICENSE
rename to test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/LICENSE
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/README b/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/README
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/README
rename to test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/README
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/SOURCES b/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/SOURCES
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/SOURCES
rename to test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/SOURCES
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/gsub/IndicFontFeatureGSUB.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-malayalam/utrrs/gsub/IndicFontFeatureGSUB.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-malayalam/utrrs/gsub/IndicFontFeatureGSUB.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/misc/bindu.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/misc/bindu.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/misc/bindu.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-oriya/misc/bindu.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/misc/misc.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/misc/misc.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/misc/misc.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-oriya/misc/misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/LICENSE b/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/LICENSE
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/LICENSE
rename to test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/LICENSE
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/README b/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/README
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/README
rename to test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/README
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/SOURCES b/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/SOURCES
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/SOURCES
rename to test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/SOURCES
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalConsonants.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-OriyaSpecific.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-OriyaSpecific.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-OriyaSpecific.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-OriyaSpecific.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/gsub/IndicFontFeatureGSUB.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-oriya/utrrs/gsub/IndicFontFeatureGSUB.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-oriya/utrrs/gsub/IndicFontFeatureGSUB.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/misc/extensive.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/misc/extensive.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/misc/extensive.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/misc/extensive.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/misc/misc.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/misc/misc.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/misc/misc.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/misc/misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/misc/reph.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/misc/reph.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/misc/reph.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/misc/reph.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/misc/split-matras.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/misc/split-matras.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/misc/split-matras.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/misc/split-matras.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/LICENSE b/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/LICENSE
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/LICENSE
rename to test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/LICENSE
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/README b/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/README
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/README
rename to test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/README
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/SOURCES b/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/SOURCES
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/SOURCES
rename to test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/SOURCES
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Punctuation.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Punctuation.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Punctuation.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-Punctuation.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gpos/IndicFontFeatureGPOS.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gpos/IndicFontFeatureGPOS.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gpos/IndicFontFeatureGPOS.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gpos/IndicFontFeatureGPOS.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Conjunct.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Conjunct.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Conjunct.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Conjunct.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Rakaaraansaya.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Rakaaraansaya.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Rakaaraansaya.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Rakaaraansaya.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Repaya.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Repaya.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Repaya.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Repaya.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Special-Cases.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Special-Cases.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Special-Cases.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Special-Cases.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-TouchingLetters.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-TouchingLetters.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-TouchingLetters.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-TouchingLetters.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Yansaya.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Yansaya.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Yansaya.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB-Yansaya.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-sinhala/utrrs/gsub/IndicFontFeatureGSUB.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/misc/misc.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/misc/misc.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/misc/misc.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-tamil/misc/misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/LICENSE b/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/LICENSE
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/LICENSE
rename to test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/LICENSE
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/README b/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/README
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/README
rename to test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/README
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/SOURCES b/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/SOURCES
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/SOURCES
rename to test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/SOURCES
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-CurrencySymbols.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-CurrencySymbols.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-CurrencySymbols.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-CurrencySymbols.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Numerics.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Numerics.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Numerics.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Numerics.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Symbols.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Symbols.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Symbols.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-Symbols.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-TamilSymbol.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-TamilSymbol.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-TamilSymbol.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-TamilSymbol.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/gpos/IndicFontFeatureGPOS-BelowBase.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/gsub/IndicFontFeatureGSUB.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-tamil/utrrs/gsub/IndicFontFeatureGSUB.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-tamil/utrrs/gsub/IndicFontFeatureGSUB.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/misc/misc.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/misc/misc.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/misc/misc.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-telugu/misc/misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/LICENSE b/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/LICENSE
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/LICENSE
rename to test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/LICENSE
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/README b/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/README
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/README
rename to test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/README
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/SOURCES b/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/SOURCES
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/SOURCES
rename to test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/SOURCES
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-AdditionalVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Consonants.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-DependentVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Digits.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-IndependentVowels.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-Reserved.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/codepoint/IndicFontFeatureCodepoint-VariousSigns.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/gpos/IndicFontFeatureGPOS-AboveBase.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/gsub/IndicFontFeatureGSUB.txt b/test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/gsub/IndicFontFeatureGSUB.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/indic/script-telugu/utrrs/gsub/IndicFontFeatureGSUB.txt
rename to test/shaping/texts/in-house/shaper-indic/indic/script-telugu/utrrs/gsub/IndicFontFeatureGSUB.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/south-east-asian/script-javanese/misc.txt b/test/shaping/texts/in-house/shaper-indic/south-east-asian/script-javanese/misc.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/south-east-asian/script-javanese/misc.txt
rename to test/shaping/texts/in-house/shaper-indic/south-east-asian/script-javanese/misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/south-east-asian/script-khmer/misc/misc.txt b/test/shaping/texts/in-house/shaper-indic/south-east-asian/script-khmer/misc/misc.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/south-east-asian/script-khmer/misc/misc.txt
rename to test/shaping/texts/in-house/shaper-indic/south-east-asian/script-khmer/misc/misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/south-east-asian/script-khmer/misc/other-marks-invalid.txt b/test/shaping/texts/in-house/shaper-indic/south-east-asian/script-khmer/misc/other-marks-invalid.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/south-east-asian/script-khmer/misc/other-marks-invalid.txt
rename to test/shaping/texts/in-house/shaper-indic/south-east-asian/script-khmer/misc/other-marks-invalid.txt
diff --git a/test/shaping/texts/in-tree/shaper-indic/south-east-asian/script-khmer/misc/other-marks.txt b/test/shaping/texts/in-house/shaper-indic/south-east-asian/script-khmer/misc/other-marks.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-indic/south-east-asian/script-khmer/misc/other-marks.txt
rename to test/shaping/texts/in-house/shaper-indic/south-east-asian/script-khmer/misc/other-marks.txt
diff --git a/test/shaping/texts/in-tree/shaper-myanmar/script-myanmar/misc/misc.txt b/test/shaping/texts/in-house/shaper-myanmar/script-myanmar/misc/misc.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-myanmar/script-myanmar/misc/misc.txt
rename to test/shaping/texts/in-house/shaper-myanmar/script-myanmar/misc/misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-myanmar/script-myanmar/misc/otspec.txt b/test/shaping/texts/in-house/shaper-myanmar/script-myanmar/misc/otspec.txt
similarity index 98%
rename from test/shaping/texts/in-tree/shaper-myanmar/script-myanmar/misc/otspec.txt
rename to test/shaping/texts/in-house/shaper-myanmar/script-myanmar/misc/otspec.txt
index 66779cbd..e3d460de 100644
--- a/test/shaping/texts/in-tree/shaper-myanmar/script-myanmar/misc/otspec.txt
+++ b/test/shaping/texts/in-house/shaper-myanmar/script-myanmar/misc/otspec.txt
@@ -1,2 +1 @@
 င်္က္ကျြွှေို့်ာှီ့ၤဲံ့းႍ
-
diff --git a/test/shaping/texts/in-tree/shaper-myanmar/script-myanmar/misc/utn11.txt b/test/shaping/texts/in-house/shaper-myanmar/script-myanmar/misc/utn11.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-myanmar/script-myanmar/misc/utn11.txt
rename to test/shaping/texts/in-house/shaper-myanmar/script-myanmar/misc/utn11.txt
diff --git a/test/shaping/texts/in-tree/shaper-thai/script-lao/misc/sara-am.txt b/test/shaping/texts/in-house/shaper-thai/script-lao/misc/sara-am.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-thai/script-lao/misc/sara-am.txt
rename to test/shaping/texts/in-house/shaper-thai/script-lao/misc/sara-am.txt
diff --git a/test/shaping/texts/in-tree/shaper-thai/script-thai/misc/misc.txt b/test/shaping/texts/in-house/shaper-thai/script-thai/misc/misc.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-thai/script-thai/misc/misc.txt
rename to test/shaping/texts/in-house/shaper-thai/script-thai/misc/misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-thai/script-thai/misc/phinthu.txt b/test/shaping/texts/in-house/shaper-thai/script-thai/misc/phinthu.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-thai/script-thai/misc/phinthu.txt
rename to test/shaping/texts/in-house/shaper-thai/script-thai/misc/phinthu.txt
diff --git a/test/shaping/texts/in-tree/shaper-thai/script-thai/misc/pua-shaping.txt b/test/shaping/texts/in-house/shaper-thai/script-thai/misc/pua-shaping.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-thai/script-thai/misc/pua-shaping.txt
rename to test/shaping/texts/in-house/shaper-thai/script-thai/misc/pua-shaping.txt
diff --git a/test/shaping/texts/in-tree/shaper-thai/script-thai/misc/sara-am.txt b/test/shaping/texts/in-house/shaper-thai/script-thai/misc/sara-am.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-thai/script-thai/misc/sara-am.txt
rename to test/shaping/texts/in-house/shaper-thai/script-thai/misc/sara-am.txt
diff --git a/test/shaping/texts/in-tree/shaper-tibetan/script-tibetan/misc/contractions.txt b/test/shaping/texts/in-house/shaper-tibetan/script-tibetan/misc/contractions.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-tibetan/script-tibetan/misc/contractions.txt
rename to test/shaping/texts/in-house/shaper-tibetan/script-tibetan/misc/contractions.txt
diff --git a/test/shaping/texts/in-tree/shaper-tibetan/script-tibetan/misc/misc.txt b/test/shaping/texts/in-house/shaper-tibetan/script-tibetan/misc/misc.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-tibetan/script-tibetan/misc/misc.txt
rename to test/shaping/texts/in-house/shaper-tibetan/script-tibetan/misc/misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-use/script-batak/misc.txt b/test/shaping/texts/in-house/shaper-use/script-batak/misc.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-use/script-batak/misc.txt
rename to test/shaping/texts/in-house/shaper-use/script-batak/misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-use/script-buginese/misc.txt b/test/shaping/texts/in-house/shaper-use/script-buginese/misc.txt
similarity index 56%
rename from test/shaping/texts/in-tree/shaper-use/script-buginese/misc.txt
rename to test/shaping/texts/in-house/shaper-use/script-buginese/misc.txt
index fe1b76dd..5c1a03ad 100644
--- a/test/shaping/texts/in-tree/shaper-use/script-buginese/misc.txt
+++ b/test/shaping/texts/in-house/shaper-use/script-buginese/misc.txt
@@ -18,53 +18,53 @@
 ᨉᨙᨄ
 
 ᨆᨙᨒᨚ ᨀ ᨌᨛᨙᨆ
-ᨔᨙᨉᨗ	
-ᨉᨘᨓ	
-ᨈᨛᨒᨘ	
-ᨕᨛᨄ	
-ᨒᨗᨆ	
-ᨕᨛᨊᨛ	
-ᨄᨗᨈᨘ	
-ᨕᨑᨘᨓ	
-ᨕᨙᨔᨑ	
-ᨔᨄᨘᨒᨚ	
-ᨉᨘᨓᨄᨘᨒᨚ	
-ᨈᨛᨒᨘᨄᨘᨒᨚ	
-ᨄᨈᨄᨘᨒᨚ	
-ᨒᨗᨆᨄᨘᨒᨚ	
-ᨕᨛᨊᨛᨄᨘᨒᨚᨊ	
-ᨄᨗᨈᨘᨄᨘᨒᨚ	
-ᨕᨑᨘᨓᨄᨘᨒᨚᨊ	
-ᨕᨙᨔᨑᨄᨘᨒᨚᨊ	
-ᨔᨗᨑᨈᨘ	
-ᨔᨗᨔᨛᨅᨘ	
-ᨔᨗᨒᨔ	
-ᨔᨗᨀᨚᨈᨗ	
+ᨔᨙᨉᨗ
+ᨉᨘᨓ
+ᨈᨛᨒᨘ
+ᨕᨛᨄ
+ᨒᨗᨆ
+ᨕᨛᨊᨛ
+ᨄᨗᨈᨘ
+ᨕᨑᨘᨓ
+ᨕᨙᨔᨑ
+ᨔᨄᨘᨒᨚ
+ᨉᨘᨓᨄᨘᨒᨚ
+ᨈᨛᨒᨘᨄᨘᨒᨚ
+ᨄᨈᨄᨘᨒᨚ
+ᨒᨗᨆᨄᨘᨒᨚ
+ᨕᨛᨊᨛᨄᨘᨒᨚᨊ
+ᨄᨗᨈᨘᨄᨘᨒᨚ
+ᨕᨑᨘᨓᨄᨘᨒᨚᨊ
+ᨕᨙᨔᨑᨄᨘᨒᨚᨊ
+ᨔᨗᨑᨈᨘ
+ᨔᨗᨔᨛᨅᨘ
+ᨔᨗᨒᨔ
+ᨔᨗᨀᨚᨈᨗ
 
 ᨅᨔ ᨕᨘᨁᨗ
 
 ᨅᨔ ᨆᨀᨔᨑ
-ᨅᨒ	
-ᨅᨚᨒᨚ	
-ᨅᨅ	
-ᨌᨗᨄᨘᨑᨘ	
-ᨉᨚᨕᨙ	
-ᨕᨗᨐᨚ	
-ᨒᨚᨄᨚ	
-ᨔᨒᨚ	
-ᨈ ᨅᨙᨙ	
-ᨈᨙᨊ	
-ᨀᨑᨕᨙ	
-ᨕᨄ ᨀᨑᨙᨅ?	
-ᨒᨀᨙᨀᨚ ᨆᨕᨙ?	
-ᨅᨒ	
-ᨅᨚᨈᨚ	
-ᨑᨈᨔ	
-ᨅᨈᨒ	
-ᨅᨗᨒ	
-ᨁᨙᨒᨙ ᨁᨙᨒᨙ	
-ᨀᨚᨀᨚ	
-ᨍᨑ	
-ᨅᨙᨅᨙ	
-ᨆᨚᨈᨙᨑᨙ	
-ᨂᨑᨙ	
+ᨅᨒ
+ᨅᨚᨒᨚ
+ᨅᨅ
+ᨌᨗᨄᨘᨑᨘ
+ᨉᨚᨕᨙ
+ᨕᨗᨐᨚ
+ᨒᨚᨄᨚ
+ᨔᨒᨚ
+ᨈ ᨅᨙᨙ
+ᨈᨙᨊ
+ᨀᨑᨕᨙ
+ᨕᨄ ᨀᨑᨙᨅ?
+ᨒᨀᨙᨀᨚ ᨆᨕᨙ?
+ᨅᨒ
+ᨅᨚᨈᨚ
+ᨑᨈᨔ
+ᨅᨈᨒ
+ᨅᨗᨒ
+ᨁᨙᨒᨙ ᨁᨙᨒᨙ
+ᨀᨚᨀᨚ
+ᨍᨑ
+ᨅᨙᨅᨙ
+ᨆᨚᨈᨙᨑᨙ
+ᨂᨑᨙ
diff --git a/test/shaping/texts/in-tree/shaper-use/script-cham/misc.txt b/test/shaping/texts/in-house/shaper-use/script-cham/misc.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-use/script-cham/misc.txt
rename to test/shaping/texts/in-house/shaper-use/script-cham/misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-use/script-kaithi/misc.txt b/test/shaping/texts/in-house/shaper-use/script-kaithi/misc.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-use/script-kaithi/misc.txt
rename to test/shaping/texts/in-house/shaper-use/script-kaithi/misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-use/script-kharoshti/misc.txt b/test/shaping/texts/in-house/shaper-use/script-kharoshti/misc.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-use/script-kharoshti/misc.txt
rename to test/shaping/texts/in-house/shaper-use/script-kharoshti/misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-use/script-tai-tham/misc.txt b/test/shaping/texts/in-house/shaper-use/script-tai-tham/misc.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-use/script-tai-tham/misc.txt
rename to test/shaping/texts/in-house/shaper-use/script-tai-tham/misc.txt
diff --git a/test/shaping/texts/in-tree/shaper-use/script-tai-tham/torture.txt b/test/shaping/texts/in-house/shaper-use/script-tai-tham/torture.txt
similarity index 100%
rename from test/shaping/texts/in-tree/shaper-use/script-tai-tham/torture.txt
rename to test/shaping/texts/in-house/shaper-use/script-tai-tham/torture.txt
diff --git a/test/shaping/texts/in-tree/shaper-arabic/script-syriac/misc/abbreviation-mark.txt b/test/shaping/texts/in-tree/shaper-arabic/script-syriac/misc/abbreviation-mark.txt
deleted file mode 100644
index a450678d..00000000
--- a/test/shaping/texts/in-tree/shaper-arabic/script-syriac/misc/abbreviation-mark.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-ܐܒ 
-ܐ܏ 
-ܐ܏ܒ 
-ܐ܏ܒܓ 
-ܐ܏ܒܓܕ 
-ܐ܏ܒܓܕܐ 
-ܐ܏ܒܓܕܐܐܐܐܐܐܐܐܐ 
-ܐ܏ܒܓܕܐ܏ܐܐܐ܏ܐ܏ܐܐܐܐ 
-ܐ܏ܒܓܕܓܓܓܓܓܓ 
-ܐ܏ܒܓ 
-܏ܫܘabcܒ.
commit 9a3ad307ea91794712531dfc688700c11a1ff263
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Tue Jan 9 21:35:21 2018 +0100

    [test] Remove unused hb-diff-ngrams

diff --git a/test/shaping/Makefile.am b/test/shaping/Makefile.am
index fa1faf51..ffcba977 100644
--- a/test/shaping/Makefile.am
+++ b/test/shaping/Makefile.am
@@ -15,7 +15,6 @@ EXTRA_DIST += \
 	hb-diff \
 	hb-diff-colorize \
 	hb-diff-filter-failures \
-	hb-diff-ngrams \
 	hb-diff-stat \
 	hb-unicode-decode \
 	hb-unicode-encode \
diff --git a/test/shaping/hb-diff-ngrams b/test/shaping/hb-diff-ngrams
deleted file mode 100755
index c02f5415..00000000
--- a/test/shaping/hb-diff-ngrams
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/usr/bin/env python
-
-from hb_test_tools import *
-
-UtilMains.process_multiple_files (DiffSinks.print_ngrams)
diff --git a/test/shaping/hb_test_tools.py b/test/shaping/hb_test_tools.py
index c9bb1dd3..f7e59434 100644
--- a/test/shaping/hb_test_tools.py
+++ b/test/shaping/hb_test_tools.py
@@ -293,32 +293,6 @@ class DiffSinks:
 		total = passed + failed
 		print ("%d out of %d tests passed.  %d failed (%g%%)" % (passed, total, failed, 100. * failed / total))
 
-	@staticmethod
-	def print_ngrams (f, ns=(1,2,3)):
-		gens = tuple (Ngram.generator (n) for n in ns)
-		allstats = Stats ()
-		allgrams = {}
-		for key, lines in DiffHelpers.separate_test_cases (f):
-			test = Test (lines)
-			allstats.add (test)
-
-			for gen in gens:
-				for ngram in gen (test.unicodes):
-					if ngram not in allgrams:
-						allgrams[ngram] = Stats ()
-					allgrams[ngram].add (test)
-
-		importantgrams = {}
-		for ngram, stats in allgrams.iteritems ():
-			if stats.failed.count >= 30: # for statistical reasons
-				importantgrams[ngram] = stats
-		allgrams = importantgrams
-		del importantgrams
-
-		for ngram, stats in allgrams.iteritems ():
-			print ("zscore: %9f failed: %6d passed: %6d ngram: <%s>" % (stats.zscore (allstats), stats.failed.count, stats.passed.count, ','.join ("U+%04X" % u for u in ngram)))
-
-
 
 class Test:
 
commit b6b460024d29362914c72cc5f8fbaec215db5b16
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Tue Jan 9 21:33:38 2018 +0100

    [test] Remove unused manifest stuff

diff --git a/test/shaping/Makefile.am b/test/shaping/Makefile.am
index e2944f60..fa1faf51 100644
--- a/test/shaping/Makefile.am
+++ b/test/shaping/Makefile.am
@@ -10,9 +10,6 @@ MAINTAINERCLEANFILES =
 lib:
 	@$(MAKE) $(AM_MAKEFLAGS) -C $(top_builddir)/src lib
 
-manifests:
-	@$(srcdir)/hb-manifest-update "$(srcdir)/texts" "$(srcdir)/fonts" "$(srcdir)/tests"
-
 EXTRA_DIST += \
 	README.md \
 	hb-diff \
@@ -20,8 +17,6 @@ EXTRA_DIST += \
 	hb-diff-filter-failures \
 	hb-diff-ngrams \
 	hb-diff-stat \
-	hb-manifest-read \
-	hb-manifest-update \
 	hb-unicode-decode \
 	hb-unicode-encode \
 	hb-unicode-prettyname \
@@ -107,6 +102,4 @@ endif
 
 TESTS_LOG_COMPILER = $(srcdir)/run-tests.py
 
-.PHONY: manifests
-
 -include $(top_srcdir)/git.mk
diff --git a/test/shaping/hb-manifest-read b/test/shaping/hb-manifest-read
deleted file mode 100755
index b1b36ba8..00000000
--- a/test/shaping/hb-manifest-read
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/usr/bin/env python
-
-from hb_test_tools import *
-
-UtilMains.process_multiple_args (FilterHelpers.filter_printer_function (Manifest.read), mnemonic="DIR")
diff --git a/test/shaping/hb-manifest-update b/test/shaping/hb-manifest-update
deleted file mode 100755
index eeb84b86..00000000
--- a/test/shaping/hb-manifest-update
+++ /dev/null
@@ -1,5 +0,0 @@
-#!/usr/bin/env python
-
-from hb_test_tools import *
-
-UtilMains.process_multiple_args (Manifest.update_recursive, mnemonic="DIR")
commit ebbee7c2475db789b622250addbf549695da2890
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Tue Jan 9 18:23:19 2018 +0100

    [test] Move test files around

diff --git a/test/fuzzing/run-fuzzer-tests.py b/test/fuzzing/run-fuzzer-tests.py
index 673ee9a9..23922ccd 100755
--- a/test/fuzzing/run-fuzzer-tests.py
+++ b/test/fuzzing/run-fuzzer-tests.py
@@ -19,7 +19,7 @@ please provide it as the first argument to the tool""")
 print ('hb_fuzzer:', hb_fuzzer)
 fails = 0
 
-for line in open (os.path.join (srcdir, "..", "shaping", "tests", "fuzzed.tests")):
+for line in open (os.path.join (srcdir, "..", "shaping", "tests", "misc", "fuzzed.tests")):
 	font = line.split (":")[0]
 
 	p = subprocess.Popen (
diff --git a/test/shaping/Makefile.am b/test/shaping/Makefile.am
index 4379363f..e2944f60 100644
--- a/test/shaping/Makefile.am
+++ b/test/shaping/Makefile.am
@@ -42,47 +42,47 @@ CLEANFILES += \
 	$(NULL)
 
 TESTS = \
-	tests/arabic-fallback-shaping.tests \
-	tests/arabic-feature-order.tests \
-	tests/arabic-like-joining.tests \
-	tests/arabic-mark-order.tests \
-	tests/arabic-stch.tests \
-	tests/automatic-fractions.tests \
-	tests/cluster.tests \
-	tests/color-fonts.tests \
-	tests/context-matching.tests \
-	tests/cursive-positioning.tests \
-	tests/default-ignorables.tests \
-	tests/emoji-flag-tags.tests \
-	tests/fallback-positioning.tests \
-	tests/fuzzed.tests \
-	tests/hangul-jamo.tests \
-	tests/hyphens.tests \
-	tests/indic-consonant-with-stacker.tests \
-	tests/indic-init.tests \
-	tests/indic-joiner-candrabindu.tests \
-	tests/indic-joiners.tests \
-	tests/indic-old-spec.tests \
-	tests/indic-pref-blocking.tests \
-	tests/indic-script-extensions.tests \
-	tests/indic-special-cases.tests \
-	tests/indic-syllable.tests \
-	tests/language-tags.tests \
-	tests/ligature-id.tests \
-	tests/mark-attachment.tests \
-	tests/mark-filtering-sets.tests \
-	tests/mongolian-variation-selector.tests \
-	tests/spaces.tests \
-	tests/simple.tests \
-	tests/tibetan-contractions-1.tests \
-	tests/tibetan-contractions-2.tests \
-	tests/tibetan-vowels.tests \
-	tests/use.tests \
-	tests/use-marchen.tests \
-	tests/use-syllable.tests \
-	tests/variations-rvrn.tests \
-	tests/vertical.tests \
-	tests/zero-width-marks.tests \
+	tests/misc/arabic-fallback-shaping.tests \
+	tests/misc/arabic-feature-order.tests \
+	tests/misc/arabic-like-joining.tests \
+	tests/misc/arabic-mark-order.tests \
+	tests/misc/arabic-stch.tests \
+	tests/misc/automatic-fractions.tests \
+	tests/misc/cluster.tests \
+	tests/misc/color-fonts.tests \
+	tests/misc/context-matching.tests \
+	tests/misc/cursive-positioning.tests \
+	tests/misc/default-ignorables.tests \
+	tests/misc/emoji-flag-tags.tests \
+	tests/misc/fallback-positioning.tests \
+	tests/misc/fuzzed.tests \
+	tests/misc/hangul-jamo.tests \
+	tests/misc/hyphens.tests \
+	tests/misc/indic-consonant-with-stacker.tests \
+	tests/misc/indic-init.tests \
+	tests/misc/indic-joiner-candrabindu.tests \
+	tests/misc/indic-joiners.tests \
+	tests/misc/indic-old-spec.tests \
+	tests/misc/indic-pref-blocking.tests \
+	tests/misc/indic-script-extensions.tests \
+	tests/misc/indic-special-cases.tests \
+	tests/misc/indic-syllable.tests \
+	tests/misc/language-tags.tests \
+	tests/misc/ligature-id.tests \
+	tests/misc/mark-attachment.tests \
+	tests/misc/mark-filtering-sets.tests \
+	tests/misc/mongolian-variation-selector.tests \
+	tests/misc/spaces.tests \
+	tests/misc/simple.tests \
+	tests/misc/tibetan-contractions-1.tests \
+	tests/misc/tibetan-contractions-2.tests \
+	tests/misc/tibetan-vowels.tests \
+	tests/misc/use.tests \
+	tests/misc/use-marchen.tests \
+	tests/misc/use-syllable.tests \
+	tests/misc/variations-rvrn.tests \
+	tests/misc/vertical.tests \
+	tests/misc/zero-width-marks.tests \
 	$(NULL)
 
 TEST_EXTENSIONS = \
diff --git a/test/shaping/tests/arabic-fallback-shaping.tests b/test/shaping/tests/misc/arabic-fallback-shaping.tests
similarity index 100%
rename from test/shaping/tests/arabic-fallback-shaping.tests
rename to test/shaping/tests/misc/arabic-fallback-shaping.tests
diff --git a/test/shaping/tests/arabic-feature-order.tests b/test/shaping/tests/misc/arabic-feature-order.tests
similarity index 100%
rename from test/shaping/tests/arabic-feature-order.tests
rename to test/shaping/tests/misc/arabic-feature-order.tests
diff --git a/test/shaping/tests/arabic-like-joining.tests b/test/shaping/tests/misc/arabic-like-joining.tests
similarity index 100%
rename from test/shaping/tests/arabic-like-joining.tests
rename to test/shaping/tests/misc/arabic-like-joining.tests
diff --git a/test/shaping/tests/arabic-mark-order.tests b/test/shaping/tests/misc/arabic-mark-order.tests
similarity index 100%
rename from test/shaping/tests/arabic-mark-order.tests
rename to test/shaping/tests/misc/arabic-mark-order.tests
diff --git a/test/shaping/tests/arabic-stch.tests b/test/shaping/tests/misc/arabic-stch.tests
similarity index 100%
rename from test/shaping/tests/arabic-stch.tests
rename to test/shaping/tests/misc/arabic-stch.tests
diff --git a/test/shaping/tests/automatic-fractions.tests b/test/shaping/tests/misc/automatic-fractions.tests
similarity index 100%
rename from test/shaping/tests/automatic-fractions.tests
rename to test/shaping/tests/misc/automatic-fractions.tests
diff --git a/test/shaping/tests/cluster.tests b/test/shaping/tests/misc/cluster.tests
similarity index 100%
rename from test/shaping/tests/cluster.tests
rename to test/shaping/tests/misc/cluster.tests
diff --git a/test/shaping/tests/color-fonts.tests b/test/shaping/tests/misc/color-fonts.tests
similarity index 100%
rename from test/shaping/tests/color-fonts.tests
rename to test/shaping/tests/misc/color-fonts.tests
diff --git a/test/shaping/tests/context-matching.tests b/test/shaping/tests/misc/context-matching.tests
similarity index 100%
rename from test/shaping/tests/context-matching.tests
rename to test/shaping/tests/misc/context-matching.tests
diff --git a/test/shaping/tests/cursive-positioning.tests b/test/shaping/tests/misc/cursive-positioning.tests
similarity index 100%
rename from test/shaping/tests/cursive-positioning.tests
rename to test/shaping/tests/misc/cursive-positioning.tests
diff --git a/test/shaping/tests/default-ignorables.tests b/test/shaping/tests/misc/default-ignorables.tests
similarity index 100%
rename from test/shaping/tests/default-ignorables.tests
rename to test/shaping/tests/misc/default-ignorables.tests
diff --git a/test/shaping/tests/emoji-flag-tags.tests b/test/shaping/tests/misc/emoji-flag-tags.tests
similarity index 100%
rename from test/shaping/tests/emoji-flag-tags.tests
rename to test/shaping/tests/misc/emoji-flag-tags.tests
diff --git a/test/shaping/tests/fallback-positioning.tests b/test/shaping/tests/misc/fallback-positioning.tests
similarity index 100%
rename from test/shaping/tests/fallback-positioning.tests
rename to test/shaping/tests/misc/fallback-positioning.tests
diff --git a/test/shaping/tests/fuzzed.tests b/test/shaping/tests/misc/fuzzed.tests
similarity index 100%
rename from test/shaping/tests/fuzzed.tests
rename to test/shaping/tests/misc/fuzzed.tests
diff --git a/test/shaping/tests/hangul-jamo.tests b/test/shaping/tests/misc/hangul-jamo.tests
similarity index 100%
rename from test/shaping/tests/hangul-jamo.tests
rename to test/shaping/tests/misc/hangul-jamo.tests
diff --git a/test/shaping/tests/hyphens.tests b/test/shaping/tests/misc/hyphens.tests
similarity index 100%
rename from test/shaping/tests/hyphens.tests
rename to test/shaping/tests/misc/hyphens.tests
diff --git a/test/shaping/tests/indic-consonant-with-stacker.tests b/test/shaping/tests/misc/indic-consonant-with-stacker.tests
similarity index 100%
rename from test/shaping/tests/indic-consonant-with-stacker.tests
rename to test/shaping/tests/misc/indic-consonant-with-stacker.tests
diff --git a/test/shaping/tests/indic-init.tests b/test/shaping/tests/misc/indic-init.tests
similarity index 100%
rename from test/shaping/tests/indic-init.tests
rename to test/shaping/tests/misc/indic-init.tests
diff --git a/test/shaping/tests/indic-joiner-candrabindu.tests b/test/shaping/tests/misc/indic-joiner-candrabindu.tests
similarity index 100%
rename from test/shaping/tests/indic-joiner-candrabindu.tests
rename to test/shaping/tests/misc/indic-joiner-candrabindu.tests
diff --git a/test/shaping/tests/indic-joiners.tests b/test/shaping/tests/misc/indic-joiners.tests
similarity index 100%
rename from test/shaping/tests/indic-joiners.tests
rename to test/shaping/tests/misc/indic-joiners.tests
diff --git a/test/shaping/tests/indic-old-spec.tests b/test/shaping/tests/misc/indic-old-spec.tests
similarity index 100%
rename from test/shaping/tests/indic-old-spec.tests
rename to test/shaping/tests/misc/indic-old-spec.tests
diff --git a/test/shaping/tests/indic-pref-blocking.tests b/test/shaping/tests/misc/indic-pref-blocking.tests
similarity index 100%
rename from test/shaping/tests/indic-pref-blocking.tests
rename to test/shaping/tests/misc/indic-pref-blocking.tests
diff --git a/test/shaping/tests/indic-script-extensions.tests b/test/shaping/tests/misc/indic-script-extensions.tests
similarity index 100%
rename from test/shaping/tests/indic-script-extensions.tests
rename to test/shaping/tests/misc/indic-script-extensions.tests
diff --git a/test/shaping/tests/indic-special-cases.tests b/test/shaping/tests/misc/indic-special-cases.tests
similarity index 100%
rename from test/shaping/tests/indic-special-cases.tests
rename to test/shaping/tests/misc/indic-special-cases.tests
diff --git a/test/shaping/tests/indic-syllable.tests b/test/shaping/tests/misc/indic-syllable.tests
similarity index 100%
rename from test/shaping/tests/indic-syllable.tests
rename to test/shaping/tests/misc/indic-syllable.tests
diff --git a/test/shaping/tests/language-tags.tests b/test/shaping/tests/misc/language-tags.tests
similarity index 100%
rename from test/shaping/tests/language-tags.tests
rename to test/shaping/tests/misc/language-tags.tests
diff --git a/test/shaping/tests/ligature-id.tests b/test/shaping/tests/misc/ligature-id.tests
similarity index 100%
rename from test/shaping/tests/ligature-id.tests
rename to test/shaping/tests/misc/ligature-id.tests
diff --git a/test/shaping/tests/mark-attachment.tests b/test/shaping/tests/misc/mark-attachment.tests
similarity index 100%
rename from test/shaping/tests/mark-attachment.tests
rename to test/shaping/tests/misc/mark-attachment.tests
diff --git a/test/shaping/tests/mark-filtering-sets.tests b/test/shaping/tests/misc/mark-filtering-sets.tests
similarity index 100%
rename from test/shaping/tests/mark-filtering-sets.tests
rename to test/shaping/tests/misc/mark-filtering-sets.tests
diff --git a/test/shaping/tests/mongolian-variation-selector.tests b/test/shaping/tests/misc/mongolian-variation-selector.tests
similarity index 100%
rename from test/shaping/tests/mongolian-variation-selector.tests
rename to test/shaping/tests/misc/mongolian-variation-selector.tests
diff --git a/test/shaping/tests/simple.tests b/test/shaping/tests/misc/simple.tests
similarity index 100%
rename from test/shaping/tests/simple.tests
rename to test/shaping/tests/misc/simple.tests
diff --git a/test/shaping/tests/spaces.tests b/test/shaping/tests/misc/spaces.tests
similarity index 100%
rename from test/shaping/tests/spaces.tests
rename to test/shaping/tests/misc/spaces.tests
diff --git a/test/shaping/tests/tibetan-contractions-1.tests b/test/shaping/tests/misc/tibetan-contractions-1.tests
similarity index 100%
rename from test/shaping/tests/tibetan-contractions-1.tests
rename to test/shaping/tests/misc/tibetan-contractions-1.tests
diff --git a/test/shaping/tests/tibetan-contractions-2.tests b/test/shaping/tests/misc/tibetan-contractions-2.tests
similarity index 100%
rename from test/shaping/tests/tibetan-contractions-2.tests
rename to test/shaping/tests/misc/tibetan-contractions-2.tests
diff --git a/test/shaping/tests/tibetan-vowels.tests b/test/shaping/tests/misc/tibetan-vowels.tests
similarity index 100%
rename from test/shaping/tests/tibetan-vowels.tests
rename to test/shaping/tests/misc/tibetan-vowels.tests
diff --git a/test/shaping/tests/use-marchen.tests b/test/shaping/tests/misc/use-marchen.tests
similarity index 100%
rename from test/shaping/tests/use-marchen.tests
rename to test/shaping/tests/misc/use-marchen.tests
diff --git a/test/shaping/tests/use-syllable.tests b/test/shaping/tests/misc/use-syllable.tests
similarity index 100%
rename from test/shaping/tests/use-syllable.tests
rename to test/shaping/tests/misc/use-syllable.tests
diff --git a/test/shaping/tests/use.tests b/test/shaping/tests/misc/use.tests
similarity index 100%
rename from test/shaping/tests/use.tests
rename to test/shaping/tests/misc/use.tests
diff --git a/test/shaping/tests/variations-rvrn.tests b/test/shaping/tests/misc/variations-rvrn.tests
similarity index 100%
rename from test/shaping/tests/variations-rvrn.tests
rename to test/shaping/tests/misc/variations-rvrn.tests
diff --git a/test/shaping/tests/vertical.tests b/test/shaping/tests/misc/vertical.tests
similarity index 100%
rename from test/shaping/tests/vertical.tests
rename to test/shaping/tests/misc/vertical.tests
diff --git a/test/shaping/tests/zero-width-marks.tests b/test/shaping/tests/misc/zero-width-marks.tests
similarity index 100%
rename from test/shaping/tests/zero-width-marks.tests
rename to test/shaping/tests/misc/zero-width-marks.tests
commit 748b989a1fa931b011d6a4e3db39dfdc632946b2
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Tue Jan 9 17:55:17 2018 +0100

    [aat/morx] Implement NoncontextualSubtables
    
    Also makes hb-ot-shape call morx for now instead of GSUB... Just for testing.

diff --git a/src/hb-aat-layout-common-private.hh b/src/hb-aat-layout-common-private.hh
index 88a9cd84..47efb491 100644
--- a/src/hb-aat-layout-common-private.hh
+++ b/src/hb-aat-layout-common-private.hh
@@ -183,10 +183,10 @@ struct LookupFormat0
   friend struct Lookup<T>;
 
   private:
-  inline const T& get_value (hb_codepoint_t glyph_id, unsigned int num_glyphs) const
+  inline const T* get_value (hb_codepoint_t glyph_id, unsigned int num_glyphs) const
   {
-    if (unlikely (glyph_id >= num_glyphs)) return Null(T);
-    return arrayZ[glyph_id];
+    if (unlikely (glyph_id >= num_glyphs)) return nullptr;
+    return &arrayZ[glyph_id];
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
@@ -230,10 +230,10 @@ struct LookupFormat2
   friend struct Lookup<T>;
 
   private:
-  inline const T& get_value (hb_codepoint_t glyph_id) const
+  inline const T* get_value (hb_codepoint_t glyph_id) const
   {
     const LookupSegmentSingle<T> *v = segments.bsearch (glyph_id);
-    return v ? v->value : Null(T);
+    return v ? &v->value : nullptr;
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
@@ -255,9 +255,9 @@ struct LookupFormat2
 template <typename T>
 struct LookupSegmentArray
 {
-  inline const T& get_value (hb_codepoint_t glyph_id, const void *base) const
+  inline const T* get_value (hb_codepoint_t glyph_id, const void *base) const
   {
-    return first <= glyph_id && glyph_id <= last ? (base+valuesZ)[glyph_id - first] : Null(T);
+    return first <= glyph_id && glyph_id <= last ? &(base+valuesZ)[glyph_id - first] : nullptr;
   }
 
   inline int cmp (hb_codepoint_t g) const {
@@ -287,10 +287,10 @@ struct LookupFormat4
   friend struct Lookup<T>;
 
   private:
-  inline const T& get_value (hb_codepoint_t glyph_id) const
+  inline const T* get_value (hb_codepoint_t glyph_id) const
   {
     const LookupSegmentArray<T> *v = segments.bsearch (glyph_id);
-    return v ? v->get_value (glyph_id, this) : Null(T);
+    return v ? v->get_value (glyph_id, this) : nullptr;
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
@@ -332,10 +332,10 @@ struct LookupFormat6
   friend struct Lookup<T>;
 
   private:
-  inline const T& get_value (hb_codepoint_t glyph_id) const
+  inline const T* get_value (hb_codepoint_t glyph_id) const
   {
     const LookupSingle<T> *v = entries.bsearch (glyph_id);
-    return v ? v->value : Null(T);
+    return v ? &v->value : nullptr;
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
@@ -358,9 +358,9 @@ struct LookupFormat8
   friend struct Lookup<T>;
 
   private:
-  inline const T& get_value (hb_codepoint_t glyph_id) const
+  inline const T* get_value (hb_codepoint_t glyph_id) const
   {
-    return firstGlyph <= glyph_id && glyph_id - firstGlyph < glyphCount ? valueArrayZ[glyph_id - firstGlyph] : Null(T);
+    return firstGlyph <= glyph_id && glyph_id - firstGlyph < glyphCount ? &valueArrayZ[glyph_id - firstGlyph] : nullptr;
   }
 
   inline bool sanitize (hb_sanitize_context_t *c) const
@@ -384,7 +384,7 @@ struct LookupFormat8
 template <typename T>
 struct Lookup
 {
-  inline const T& get_value (hb_codepoint_t glyph_id, unsigned int num_glyphs) const
+  inline const T* get_value (hb_codepoint_t glyph_id, unsigned int num_glyphs) const
   {
     switch (u.format) {
     case 0: return u.format0.get_value (glyph_id, num_glyphs);
@@ -392,7 +392,7 @@ struct Lookup
     case 4: return u.format4.get_value (glyph_id);
     case 6: return u.format6.get_value (glyph_id);
     case 8: return u.format8.get_value (glyph_id);
-    default:return Null(T);
+    default:return nullptr;
     }
   }
 
@@ -423,10 +423,6 @@ struct Lookup
   DEFINE_SIZE_UNION (2, format);
 };
 
-// Instantiate, to catch compile errors.
-Lookup<GlyphID> g;
-Lookup<Tag> t;
-
 
 } /* namespace AAT */
 
diff --git a/src/hb-aat-layout-morx-table.hh b/src/hb-aat-layout-morx-table.hh
index 2cd7743b..c59616e3 100644
--- a/src/hb-aat-layout-morx-table.hh
+++ b/src/hb-aat-layout-morx-table.hh
@@ -27,8 +27,8 @@
 #ifndef HB_AAT_LAYOUT_MORX_TABLE_HH
 #define HB_AAT_LAYOUT_MORX_TABLE_HH
 
-#include <hb-open-type-private.hh>
-#include <hb-aat-layout-common-private.hh>
+#include "hb-open-type-private.hh"
+#include "hb-aat-layout-common-private.hh"
 
 #define HB_AAT_TAG_MORT HB_TAG('m','o','r','t')
 #define HB_AAT_TAG_MORX HB_TAG('m','o','r','x')
@@ -41,7 +41,13 @@ using namespace OT;
 
 struct RearrangementSubtable
 {
-  /* TODO */
+  inline bool apply (hb_apply_context_t *c) const
+  {
+    TRACE_APPLY (this);
+    /* TODO */
+    return_trace (false);
+  }
+
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
@@ -52,7 +58,13 @@ struct RearrangementSubtable
 
 struct ContextualSubtable
 {
-  /* TODO */
+  inline bool apply (hb_apply_context_t *c) const
+  {
+    TRACE_APPLY (this);
+    /* TODO */
+    return_trace (false);
+  }
+
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
@@ -63,7 +75,13 @@ struct ContextualSubtable
 
 struct LigatureSubtable
 {
-  /* TODO */
+  inline bool apply (hb_apply_context_t *c) const
+  {
+    TRACE_APPLY (this);
+    /* TODO */
+    return_trace (false);
+  }
+
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
@@ -74,6 +92,26 @@ struct LigatureSubtable
 
 struct NoncontextualSubtable
 {
+  inline bool apply (hb_apply_context_t *c) const
+  {
+    TRACE_APPLY (this);
+    hb_buffer_t *buffer = c->buffer;
+    hb_glyph_info_t *info = buffer->info;
+    unsigned int num_glyphs = c->face->get_num_glyphs ();
+    bool ret = false;
+    unsigned int count = buffer->len;
+    for (unsigned int i = 0; i < count; i++)
+    {
+      const GlyphID *replacement = substitute.get_value (info[i].codepoint, num_glyphs);
+      if (replacement)
+      {
+	info[i].codepoint = *replacement;
+	ret = true;
+      }
+    }
+    return_trace (ret);
+  }
+
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
@@ -88,7 +126,13 @@ struct NoncontextualSubtable
 
 struct InsertionSubtable
 {
-  /* TODO */
+  inline bool apply (hb_apply_context_t *c) const
+  {
+    TRACE_APPLY (this);
+    /* TODO */
+    return_trace (false);
+  }
+
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
@@ -136,6 +180,11 @@ struct ChainSubtable
     Insertion		= 5
   };
 
+  inline void apply (hb_apply_context_t *c) const
+  {
+    dispatch (c);
+  }
+
   template <typename context_t>
   inline typename context_t::return_t dispatch (context_t *c) const
   {
@@ -180,6 +229,16 @@ struct ChainSubtable
 template <typename UINT>
 struct Chain
 {
+  inline void apply (hb_apply_context_t *c) const
+  {
+    const ChainSubtable<UINT> *subtable = &StructAtOffset<ChainSubtable<UINT> > (featureZ, featureZ[0].static_size * featureCount);
+    unsigned int count = subtableCount;
+    for (unsigned int i = 0; i < count; i++)
+    {
+      subtable->apply (c);
+      subtable = &StructAfter<ChainSubtable<UINT> > (*subtable);
+    }
+  }
 
   inline unsigned int get_size (void) const { return length; }
 
@@ -231,6 +290,17 @@ struct mortmorx
   static const hb_tag_t mortTag	= HB_AAT_TAG_MORT;
   static const hb_tag_t morxTag	= HB_AAT_TAG_MORX;
 
+  inline void apply (hb_apply_context_t *c) const
+  {
+    const Chain<UINT> *chain = chains;
+    unsigned int count = chainCount;
+    for (unsigned int i = 0; i < count; i++)
+    {
+      chain->apply (c);
+      chain = &StructAfter<Chain<UINT> > (*chain);
+    }
+  }
+
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
diff --git a/src/hb-aat-layout-private.hh b/src/hb-aat-layout-private.hh
index 6adf084c..eb2cdd1c 100644
--- a/src/hb-aat-layout-private.hh
+++ b/src/hb-aat-layout-private.hh
@@ -34,4 +34,7 @@
 #include "hb-open-type-private.hh"
 
 
+HB_INTERNAL void
+hb_aat_layout_substitute (OT::hb_apply_context_t *c);
+
 #endif /* HB_AAT_LAYOUT_PRIVATE_HH */
diff --git a/src/hb-aat-layout.cc b/src/hb-aat-layout.cc
index bd647d5c..79f0ae65 100644
--- a/src/hb-aat-layout.cc
+++ b/src/hb-aat-layout.cc
@@ -25,7 +25,9 @@
  */
 
 #include "hb-open-type-private.hh"
+
 #include "hb-ot-layout-private.hh"
+#include "hb-ot-layout-gsubgpos-private.hh"
 
 #include "hb-aat-layout-private.hh"
 #include "hb-aat-layout-morx-table.hh"
@@ -39,10 +41,10 @@ _get_morx (hb_face_t *face)
 {
   if (unlikely (!hb_ot_shaper_face_data_ensure (face))) return OT::Null(AAT::morx);
   hb_ot_layout_t * layout = hb_ot_layout_from_face (face);
-  return *(layout->morx.get ());
+  return *(layout->morx.get ()); /* XXX this doesn't call set_num_glyphs on sanitizer. */
 }
 
-void
+static inline void
 _hb_aat_layout_create (hb_face_t *face)
 {
   OT::Sanitizer<AAT::morx> sanitizer;
@@ -55,3 +57,10 @@ _hb_aat_layout_create (hb_face_t *face)
     OT::Sanitizer<AAT::Lookup<OT::GlyphID> >::lock_instance (morx_blob)->get_value (1, face->get_num_glyphs ());
   }
 }
+
+void
+hb_aat_layout_substitute (OT::hb_apply_context_t *c)
+{
+  const AAT::morx& morx = _get_morx (c->face);
+  morx.apply (c);
+}
diff --git a/src/hb-ot-shape.cc b/src/hb-ot-shape.cc
index a19763d1..69302488 100644
--- a/src/hb-ot-shape.cc
+++ b/src/hb-ot-shape.cc
@@ -40,6 +40,8 @@
 #include "hb-unicode-private.hh"
 #include "hb-set-private.hh"
 
+#include "hb-ot-layout-gsubgpos-private.hh"
+#include "hb-aat-layout-private.hh"
 
 static hb_tag_t common_features[] = {
   HB_TAG('c','c','m','p'),
@@ -613,6 +615,10 @@ hb_ot_substitute_complex (hb_ot_shape_context_t *c)
     hb_synthesize_glyph_classes (c);
 
   c->plan->substitute (c->font, buffer);
+
+  /* XXX Call morx instead. */
+  OT::hb_apply_context_t ac (0, c->font, c->buffer);
+  hb_aat_layout_substitute (&ac);
 }
 
 static inline void
commit 4cf3ab1d8192862f8d3c52fdcaec567735916116
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Tue Jan 9 16:32:58 2018 +0100

    Minor

diff --git a/src/hb-ot-shape.cc b/src/hb-ot-shape.cc
index 2f28b562..a19763d1 100644
--- a/src/hb-ot-shape.cc
+++ b/src/hb-ot-shape.cc
@@ -613,8 +613,6 @@ hb_ot_substitute_complex (hb_ot_shape_context_t *c)
     hb_synthesize_glyph_classes (c);
 
   c->plan->substitute (c->font, buffer);
-
-  return;
 }
 
 static inline void
commit 470fe5b603b409bef136fdd4e9b33d2704dc77b7
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Tue Jan 9 15:48:51 2018 +0100

    [aat] Implement Lookup table
    
    Untested, but compiles.

diff --git a/src/hb-aat-layout-common-private.hh b/src/hb-aat-layout-common-private.hh
index e1abd07b..88a9cd84 100644
--- a/src/hb-aat-layout-common-private.hh
+++ b/src/hb-aat-layout-common-private.hh
@@ -41,7 +41,6 @@ using namespace OT;
 
 struct BinSearchHeader
 {
-  friend struct BinSearchArray;
 
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
@@ -49,7 +48,6 @@ struct BinSearchHeader
     return_trace (c->check_struct (this));
   }
 
-  protected:
   UINT16	unitSize;	/* Size of a lookup unit for this search in bytes. */
   UINT16	nUnits;		/* Number of units of the preceding size to be searched. */
   UINT16	searchRange;	/* The value of unitSize times the largest power of 2
@@ -106,9 +104,23 @@ struct BinSearchArrayOf
   }
 
   template <typename T>
-  inline Type *bsearch (const T &key) const
+  inline const Type *bsearch (const T &key) const
   {
-    return ::bsearch (&key, bytes, header.nUnits, header.unitSize, Type::cmp);
+    unsigned int size = header.unitSize;
+    int min = 0, max = (int) header.nUnits - 1;
+    while (min <= max)
+    {
+      int mid = (min + max) / 2;
+      const Type *p = (const Type *) (((const char *) bytes) + (mid * size));
+      int c = p->cmp (key);
+      if (c < 0)
+	max = mid - 1;
+      else if (c > 0)
+	min = mid + 1;
+      else
+	return p;
+    }
+    return NULL;
   }
 
   private:
@@ -128,6 +140,294 @@ struct BinSearchArrayOf
 };
 
 
+/* TODO Move this to hb-open-type-private.hh and use it in ArrayOf, HeadlessArrayOf,
+ * and other places around the code base?? */
+template <typename Type>
+struct UnsizedArrayOf
+{
+  inline const Type& operator [] (unsigned int i) const { return arrayZ[i]; }
+  inline Type& operator [] (unsigned int i) { return arrayZ[i]; }
+
+  inline bool sanitize (hb_sanitize_context_t *c, unsigned int count) const
+  {
+    TRACE_SANITIZE (this);
+
+    /* Note: for structs that do not reference other structs,
+     * we do not need to call their sanitize() as we already did
+     * a bound check on the aggregate array size.  We just include
+     * a small unreachable expression to make sure the structs
+     * pointed to do have a simple sanitize(), ie. they do not
+     * reference other structs via offsets.
+     */
+    (void) (false && count && arrayZ->sanitize (c));
+
+    return_trace (c->check_array (arrayZ, arrayZ[0].static_size, count));
+  }
+
+  protected:
+  Type	arrayZ[VAR];
+  public:
+  DEFINE_SIZE_ARRAY (0, arrayZ);
+};
+
+
+/*
+ * Lookup Table
+ */
+
+template <typename T> struct Lookup;
+
+template <typename T>
+struct LookupFormat0
+{
+  friend struct Lookup<T>;
+
+  private:
+  inline const T& get_value (hb_codepoint_t glyph_id, unsigned int num_glyphs) const
+  {
+    if (unlikely (glyph_id >= num_glyphs)) return Null(T);
+    return arrayZ[glyph_id];
+  }
+
+  inline bool sanitize (hb_sanitize_context_t *c) const
+  {
+    TRACE_SANITIZE (this);
+    return_trace (arrayZ.sanitize (c, c->num_glyphs));
+  }
+
+  protected:
+  UINT16	format;		/* Format identifier--format = 0 */
+  UnsizedArrayOf<T>
+		arrayZ;		/* Array of lookup values, indexed by glyph index. */
+  public:
+  DEFINE_SIZE_ARRAY (2, arrayZ);
+};
+
+
+template <typename T>
+struct LookupSegmentSingle
+{
+  inline int cmp (hb_codepoint_t g) const {
+    return g < first ? -1 : g <= last ? 0 : +1 ;
+  }
+
+  inline bool sanitize (hb_sanitize_context_t *c) const
+  {
+    TRACE_SANITIZE (this);
+    return_trace (c->check_struct (this) && value.sanitize (c));
+  }
+
+  GlyphID	last;		/* Last GlyphID in this segment */
+  GlyphID	first;		/* First GlyphID in this segment */
+  T		value;		/* The lookup value (only one) */
+  public:
+  DEFINE_SIZE_STATIC (4 + sizeof (T));
+};
+
+template <typename T>
+struct LookupFormat2
+{
+  friend struct Lookup<T>;
+
+  private:
+  inline const T& get_value (hb_codepoint_t glyph_id) const
+  {
+    const LookupSegmentSingle<T> *v = segments.bsearch (glyph_id);
+    return v ? v->value : Null(T);
+  }
+
+  inline bool sanitize (hb_sanitize_context_t *c) const
+  {
+    TRACE_SANITIZE (this);
+    return_trace (segments.sanitize (c));
+  }
+
+  protected:
+  UINT16	format;		/* Format identifier--format = 2 */
+  BinSearchArrayOf<LookupSegmentSingle<T> >
+		segments;	/* The actual segments. These must already be sorted,
+				 * according to the first word in each one (the last
+				 * glyph in each segment). */
+  public:
+  DEFINE_SIZE_ARRAY (8, segments);
+};
+
+template <typename T>
+struct LookupSegmentArray
+{
+  inline const T& get_value (hb_codepoint_t glyph_id, const void *base) const
+  {
+    return first <= glyph_id && glyph_id <= last ? (base+valuesZ)[glyph_id - first] : Null(T);
+  }
+
+  inline int cmp (hb_codepoint_t g) const {
+    return g < first ? -1 : g <= last ? 0 : +1 ;
+  }
+
+  inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+  {
+    TRACE_SANITIZE (this);
+    return_trace (c->check_struct (this) &&
+		  first <= last &&
+		  valuesZ.sanitize (c, base, last - first + 1));
+  }
+
+  GlyphID	last;		/* Last GlyphID in this segment */
+  GlyphID	first;		/* First GlyphID in this segment */
+  OffsetTo<UnsizedArrayOf<T> >
+		valuesZ;	/* A 16-bit offset from the start of
+				 * the table to the data. */
+  public:
+  DEFINE_SIZE_STATIC (6);
+};
+
+template <typename T>
+struct LookupFormat4
+{
+  friend struct Lookup<T>;
+
+  private:
+  inline const T& get_value (hb_codepoint_t glyph_id) const
+  {
+    const LookupSegmentArray<T> *v = segments.bsearch (glyph_id);
+    return v ? v->get_value (glyph_id, this) : Null(T);
+  }
+
+  inline bool sanitize (hb_sanitize_context_t *c) const
+  {
+    TRACE_SANITIZE (this);
+    return_trace (segments.sanitize (c, this));
+  }
+
+  protected:
+  UINT16	format;		/* Format identifier--format = 2 */
+  BinSearchArrayOf<LookupSegmentArray<T> >
+		segments;	/* The actual segments. These must already be sorted,
+				 * according to the first word in each one (the last
+				 * glyph in each segment). */
+  public:
+  DEFINE_SIZE_ARRAY (8, segments);
+};
+
+template <typename T>
+struct LookupSingle
+{
+  inline int cmp (hb_codepoint_t g) const { return glyph.cmp (g); }
+
+  inline bool sanitize (hb_sanitize_context_t *c) const
+  {
+    TRACE_SANITIZE (this);
+    return_trace (c->check_struct (this) && value.sanitize (c));
+  }
+
+  GlyphID	glyph;		/* Last GlyphID */
+  T		value;		/* The lookup value (only one) */
+  public:
+  DEFINE_SIZE_STATIC (4 + sizeof (T));
+};
+
+template <typename T>
+struct LookupFormat6
+{
+  friend struct Lookup<T>;
+
+  private:
+  inline const T& get_value (hb_codepoint_t glyph_id) const
+  {
+    const LookupSingle<T> *v = entries.bsearch (glyph_id);
+    return v ? v->value : Null(T);
+  }
+
+  inline bool sanitize (hb_sanitize_context_t *c) const
+  {
+    TRACE_SANITIZE (this);
+    return_trace (entries.sanitize (c));
+  }
+
+  protected:
+  UINT16	format;		/* Format identifier--format = 6 */
+  BinSearchArrayOf<LookupSingle<T> >
+		entries;	/* The actual entries, sorted by glyph index. */
+  public:
+  DEFINE_SIZE_ARRAY (8, entries);
+};
+
+template <typename T>
+struct LookupFormat8
+{
+  friend struct Lookup<T>;
+
+  private:
+  inline const T& get_value (hb_codepoint_t glyph_id) const
+  {
+    return firstGlyph <= glyph_id && glyph_id - firstGlyph < glyphCount ? valueArrayZ[glyph_id - firstGlyph] : Null(T);
+  }
+
+  inline bool sanitize (hb_sanitize_context_t *c) const
+  {
+    TRACE_SANITIZE (this);
+    return_trace (c->check_struct (this) && valueArrayZ.sanitize (c, glyphCount));
+  }
+
+  protected:
+  UINT16	format;		/* Format identifier--format = 6 */
+  GlyphID	firstGlyph;	/* First glyph index included in the trimmed array. */
+  UINT16	glyphCount;	/* Total number of glyphs (equivalent to the last
+				 * glyph minus the value of firstGlyph plus 1). */
+  UnsizedArrayOf<T>
+		valueArrayZ;	/* The lookup values (indexed by the glyph index
+				 * minus the value of firstGlyph). */
+  public:
+  DEFINE_SIZE_ARRAY (6, valueArrayZ);
+};
+
+template <typename T>
+struct Lookup
+{
+  inline const T& get_value (hb_codepoint_t glyph_id, unsigned int num_glyphs) const
+  {
+    switch (u.format) {
+    case 0: return u.format0.get_value (glyph_id, num_glyphs);
+    case 2: return u.format2.get_value (glyph_id);
+    case 4: return u.format4.get_value (glyph_id);
+    case 6: return u.format6.get_value (glyph_id);
+    case 8: return u.format8.get_value (glyph_id);
+    default:return Null(T);
+    }
+  }
+
+  inline bool sanitize (hb_sanitize_context_t *c) const
+  {
+    TRACE_SANITIZE (this);
+    if (!u.format.sanitize (c)) return_trace (false);
+    switch (u.format) {
+    case 0: return_trace (u.format0.sanitize (c));
+    case 2: return_trace (u.format2.sanitize (c));
+    case 4: return_trace (u.format4.sanitize (c));
+    case 6: return_trace (u.format6.sanitize (c));
+    case 8: return_trace (u.format8.sanitize (c));
+    default:return_trace (true);
+    }
+  }
+
+  protected:
+  union {
+  UINT16		format;		/* Format identifier */
+  LookupFormat0<T>	format0;
+  LookupFormat2<T>	format2;
+  LookupFormat4<T>	format4;
+  LookupFormat6<T>	format6;
+  LookupFormat8<T>	format8;
+  } u;
+  public:
+  DEFINE_SIZE_UNION (2, format);
+};
+
+// Instantiate, to catch compile errors.
+Lookup<GlyphID> g;
+Lookup<Tag> t;
+
+
 } /* namespace AAT */
 
 
diff --git a/src/hb-aat-layout-morx-table.hh b/src/hb-aat-layout-morx-table.hh
index a8a8de4d..2cd7743b 100644
--- a/src/hb-aat-layout-morx-table.hh
+++ b/src/hb-aat-layout-morx-table.hh
@@ -74,13 +74,16 @@ struct LigatureSubtable
 
 struct NoncontextualSubtable
 {
-  /* TODO */
   inline bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
-    /* TODO */
-    return_trace (false);
+    return_trace (substitute.sanitize (c));
   }
+
+  protected:
+  Lookup<GlyphID>	substitute;
+  public:
+  DEFINE_SIZE_MIN (2);
 };
 
 struct InsertionSubtable
diff --git a/src/hb-aat-layout.cc b/src/hb-aat-layout.cc
index 73ceafe3..bd647d5c 100644
--- a/src/hb-aat-layout.cc
+++ b/src/hb-aat-layout.cc
@@ -41,3 +41,17 @@ _get_morx (hb_face_t *face)
   hb_ot_layout_t * layout = hb_ot_layout_from_face (face);
   return *(layout->morx.get ());
 }
+
+void
+_hb_aat_layout_create (hb_face_t *face)
+{
+  OT::Sanitizer<AAT::morx> sanitizer;
+  sanitizer.set_num_glyphs (face->get_num_glyphs ());
+  hb_blob_t *morx_blob = sanitizer.sanitize (face->reference_table (HB_AAT_TAG_MORX));
+  OT::Sanitizer<AAT::morx>::lock_instance (morx_blob);
+
+  if (0)
+  {
+    OT::Sanitizer<AAT::Lookup<OT::GlyphID> >::lock_instance (morx_blob)->get_value (1, face->get_num_glyphs ());
+  }
+}
diff --git a/src/hb-face.cc b/src/hb-face.cc
index 26fddbe5..d8af8c1f 100644
--- a/src/hb-face.cc
+++ b/src/hb-face.cc
@@ -164,7 +164,7 @@ hb_face_create (hb_blob_t    *blob,
   if (unlikely (!blob))
     blob = hb_blob_get_empty ();
 
-  hb_face_for_data_closure_t *closure = _hb_face_for_data_closure_create (OT::Sanitizer<OT::OpenTypeFontFile>::sanitize (hb_blob_reference (blob)), index);
+  hb_face_for_data_closure_t *closure = _hb_face_for_data_closure_create (OT::Sanitizer<OT::OpenTypeFontFile>().sanitize (hb_blob_reference (blob)), index);
 
   if (unlikely (!closure))
     return hb_face_get_empty ();
@@ -424,7 +424,7 @@ hb_face_get_upem (hb_face_t *face)
 void
 hb_face_t::load_upem (void) const
 {
-  hb_blob_t *head_blob = OT::Sanitizer<OT::head>::sanitize (reference_table (HB_OT_TAG_head));
+  hb_blob_t *head_blob = OT::Sanitizer<OT::head>().sanitize (reference_table (HB_OT_TAG_head));
   const OT::head *head_table = OT::Sanitizer<OT::head>::lock_instance (head_blob);
   upem = head_table->get_upem ();
   hb_blob_destroy (head_blob);
@@ -468,7 +468,7 @@ hb_face_get_glyph_count (hb_face_t *face)
 void
 hb_face_t::load_num_glyphs (void) const
 {
-  hb_blob_t *maxp_blob = OT::Sanitizer<OT::maxp>::sanitize (reference_table (HB_OT_TAG_maxp));
+  hb_blob_t *maxp_blob = OT::Sanitizer<OT::maxp>().sanitize (reference_table (HB_OT_TAG_maxp));
   const OT::maxp *maxp_table = OT::Sanitizer<OT::maxp>::lock_instance (maxp_blob);
   num_glyphs = maxp_table->get_num_glyphs ();
   hb_blob_destroy (maxp_blob);
diff --git a/src/hb-open-type-private.hh b/src/hb-open-type-private.hh
index 2f4e1b9e..b68568cc 100644
--- a/src/hb-open-type-private.hh
+++ b/src/hb-open-type-private.hh
@@ -187,7 +187,8 @@ struct hb_sanitize_context_t :
 	debug_depth (0),
 	start (nullptr), end (nullptr),
 	writable (false), edit_count (0),
-	blob (nullptr) {}
+	blob (nullptr),
+	num_glyphs (0) {}
 
   inline const char *get_name (void) { return "SANITIZE"; }
   template <typename T, typename F>
@@ -298,6 +299,7 @@ struct hb_sanitize_context_t :
   bool writable;
   unsigned int edit_count;
   hb_blob_t *blob;
+  unsigned int num_glyphs;
 };
 
 
@@ -306,8 +308,9 @@ struct hb_sanitize_context_t :
 template <typename Type>
 struct Sanitizer
 {
-  static hb_blob_t *sanitize (hb_blob_t *blob) {
-    hb_sanitize_context_t c[1];
+  inline Sanitizer (void) {}
+
+  inline hb_blob_t *sanitize (hb_blob_t *blob) {
     bool sane;
 
     /* TODO is_sane() stuff */
@@ -370,6 +373,11 @@ struct Sanitizer
     const char *base = hb_blob_get_data (blob, nullptr);
     return unlikely (!base) ? &Null(Type) : CastP<Type> (base);
   }
+
+  inline void set_num_glyphs (unsigned int num_glyphs) { c->num_glyphs = num_glyphs; }
+
+  private:
+  hb_sanitize_context_t c[1];
 };
 
 
@@ -1154,7 +1162,7 @@ struct hb_lazy_table_loader_t
     T *p = (T *) hb_atomic_ptr_get (&instance);
     if (unlikely (!p))
     {
-      hb_blob_t *blob_ = OT::Sanitizer<T>::sanitize (face->reference_table (T::tableTag));
+      hb_blob_t *blob_ = OT::Sanitizer<T>().sanitize (face->reference_table (T::tableTag));
       p = const_cast<T *>(OT::Sanitizer<T>::lock_instance (blob_));
       if (!hb_atomic_ptr_cmpexch (const_cast<T **>(&instance), nullptr, p))
       {
diff --git a/src/hb-ot-cbdt-table.hh b/src/hb-ot-cbdt-table.hh
index 415625e5..dad34e27 100644
--- a/src/hb-ot-cbdt-table.hh
+++ b/src/hb-ot-cbdt-table.hh
@@ -379,8 +379,8 @@ struct CBDT
     {
       upem = face->get_upem();
 
-      cblc_blob = Sanitizer<CBLC>::sanitize (face->reference_table (HB_OT_TAG_CBLC));
-      cbdt_blob = Sanitizer<CBDT>::sanitize (face->reference_table (HB_OT_TAG_CBDT));
+      cblc_blob = Sanitizer<CBLC>().sanitize (face->reference_table (HB_OT_TAG_CBLC));
+      cbdt_blob = Sanitizer<CBDT>().sanitize (face->reference_table (HB_OT_TAG_CBDT));
       cbdt_len = hb_blob_get_length (cbdt_blob);
 
       if (hb_blob_get_length (cblc_blob) == 0) {
diff --git a/src/hb-ot-cmap-table.hh b/src/hb-ot-cmap-table.hh
index 883d7b3f..c61801cb 100644
--- a/src/hb-ot-cmap-table.hh
+++ b/src/hb-ot-cmap-table.hh
@@ -508,7 +508,7 @@ struct cmap
   {
     inline void init (hb_face_t *face)
     {
-      this->blob = OT::Sanitizer<OT::cmap>::sanitize (face->reference_table (HB_OT_TAG_cmap));
+      this->blob = OT::Sanitizer<OT::cmap>().sanitize (face->reference_table (HB_OT_TAG_cmap));
       const OT::cmap *cmap = OT::Sanitizer<OT::cmap>::lock_instance (this->blob);
       const OT::CmapSubtable *subtable = nullptr;
       const OT::CmapSubtableFormat14 *subtable_uvs = nullptr;
diff --git a/src/hb-ot-glyf-table.hh b/src/hb-ot-glyf-table.hh
index 88d3850b..c5a54e3a 100644
--- a/src/hb-ot-glyf-table.hh
+++ b/src/hb-ot-glyf-table.hh
@@ -96,7 +96,7 @@ struct glyf
   {
     inline void init (hb_face_t *face)
     {
-      hb_blob_t *head_blob = Sanitizer<head>::sanitize (face->reference_table (HB_OT_TAG_head));
+      hb_blob_t *head_blob = Sanitizer<head>().sanitize (face->reference_table (HB_OT_TAG_head));
       const head *head_table = Sanitizer<head>::lock_instance (head_blob);
       if ((unsigned int) head_table->indexToLocFormat > 1 || head_table->glyphDataFormat != 0)
       {
@@ -107,9 +107,9 @@ struct glyf
       short_offset = 0 == head_table->indexToLocFormat;
       hb_blob_destroy (head_blob);
 
-      loca_blob = Sanitizer<loca>::sanitize (face->reference_table (HB_OT_TAG_loca));
+      loca_blob = Sanitizer<loca>().sanitize (face->reference_table (HB_OT_TAG_loca));
       loca_table = Sanitizer<loca>::lock_instance (loca_blob);
-      glyf_blob = Sanitizer<glyf>::sanitize (face->reference_table (HB_OT_TAG_glyf));
+      glyf_blob = Sanitizer<glyf>().sanitize (face->reference_table (HB_OT_TAG_glyf));
       glyf_table = Sanitizer<glyf>::lock_instance (glyf_blob);
 
       num_glyphs = MAX (1u, hb_blob_get_length (loca_blob) / (short_offset ? 2 : 4)) - 1;
diff --git a/src/hb-ot-hmtx-table.hh b/src/hb-ot-hmtx-table.hh
index 29770f7a..934acde7 100644
--- a/src/hb-ot-hmtx-table.hh
+++ b/src/hb-ot-hmtx-table.hh
@@ -74,7 +74,7 @@ struct hmtxvmtx
       bool got_font_extents = false;
       if (T::os2Tag)
       {
-	hb_blob_t *os2_blob = Sanitizer<os2>::sanitize (face->reference_table (T::os2Tag));
+	hb_blob_t *os2_blob = Sanitizer<os2>().sanitize (face->reference_table (T::os2Tag));
 	const os2 *os2_table = Sanitizer<os2>::lock_instance (os2_blob);
 #define USE_TYPO_METRICS (1u<<7)
 	if (0 != (os2_table->fsSelection & USE_TYPO_METRICS))
@@ -87,7 +87,7 @@ struct hmtxvmtx
 	hb_blob_destroy (os2_blob);
       }
 
-      hb_blob_t *_hea_blob = Sanitizer<_hea>::sanitize (face->reference_table (T::headerTag));
+      hb_blob_t *_hea_blob = Sanitizer<_hea>().sanitize (face->reference_table (T::headerTag));
       const _hea *_hea_table = Sanitizer<_hea>::lock_instance (_hea_blob);
       num_advances = _hea_table->numberOfLongMetrics;
       if (!got_font_extents)
@@ -101,7 +101,7 @@ struct hmtxvmtx
 
       has_font_extents = got_font_extents;
 
-      blob = Sanitizer<hmtxvmtx>::sanitize (face->reference_table (T::tableTag));
+      blob = Sanitizer<hmtxvmtx>().sanitize (face->reference_table (T::tableTag));
 
       /* Cap num_metrics() and num_advances() based on table length. */
       unsigned int len = hb_blob_get_length (blob);
@@ -119,7 +119,7 @@ struct hmtxvmtx
       }
       table = Sanitizer<hmtxvmtx>::lock_instance (blob);
 
-      var_blob = Sanitizer<HVARVVAR>::sanitize (face->reference_table (T::variationsTag));
+      var_blob = Sanitizer<HVARVVAR>().sanitize (face->reference_table (T::variationsTag));
       var_table = Sanitizer<HVARVVAR>::lock_instance (var_blob);
     }
 
diff --git a/src/hb-ot-kern-table.hh b/src/hb-ot-kern-table.hh
index e07faca6..c9aaf03c 100644
--- a/src/hb-ot-kern-table.hh
+++ b/src/hb-ot-kern-table.hh
@@ -360,7 +360,7 @@ struct kern
   {
     inline void init (hb_face_t *face)
     {
-      blob = Sanitizer<kern>::sanitize (face->reference_table (HB_OT_TAG_kern));
+      blob = Sanitizer<kern>().sanitize (face->reference_table (HB_OT_TAG_kern));
       table = Sanitizer<kern>::lock_instance (blob);
       table_length = hb_blob_get_length (blob);
     }
diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc
index d4737393..14b64359 100644
--- a/src/hb-ot-layout.cc
+++ b/src/hb-ot-layout.cc
@@ -50,13 +50,13 @@ _hb_ot_layout_create (hb_face_t *face)
   if (unlikely (!layout))
     return nullptr;
 
-  layout->gdef_blob = OT::Sanitizer<OT::GDEF>::sanitize (face->reference_table (HB_OT_TAG_GDEF));
+  layout->gdef_blob = OT::Sanitizer<OT::GDEF>().sanitize (face->reference_table (HB_OT_TAG_GDEF));
   layout->gdef = OT::Sanitizer<OT::GDEF>::lock_instance (layout->gdef_blob);
 
-  layout->gsub_blob = OT::Sanitizer<OT::GSUB>::sanitize (face->reference_table (HB_OT_TAG_GSUB));
+  layout->gsub_blob = OT::Sanitizer<OT::GSUB>().sanitize (face->reference_table (HB_OT_TAG_GSUB));
   layout->gsub = OT::Sanitizer<OT::GSUB>::lock_instance (layout->gsub_blob);
 
-  layout->gpos_blob = OT::Sanitizer<OT::GPOS>::sanitize (face->reference_table (HB_OT_TAG_GPOS));
+  layout->gpos_blob = OT::Sanitizer<OT::GPOS>().sanitize (face->reference_table (HB_OT_TAG_GPOS));
   layout->gpos = OT::Sanitizer<OT::GPOS>::lock_instance (layout->gpos_blob);
 
   layout->math.init (face);
diff --git a/src/hb-ot-post-table.hh b/src/hb-ot-post-table.hh
index 7f1c2c42..523ba2a8 100644
--- a/src/hb-ot-post-table.hh
+++ b/src/hb-ot-post-table.hh
@@ -86,7 +86,7 @@ struct post
   {
     inline void init (hb_face_t *face)
     {
-      blob = Sanitizer<post>::sanitize (face->reference_table (HB_OT_TAG_post));
+      blob = Sanitizer<post>().sanitize (face->reference_table (HB_OT_TAG_post));
       const post *table = Sanitizer<post>::lock_instance (blob);
       unsigned int table_length = hb_blob_get_length (blob);
 
diff --git a/src/hb-uniscribe.cc b/src/hb-uniscribe.cc
index 0b0bad58..5e05baa8 100644
--- a/src/hb-uniscribe.cc
+++ b/src/hb-uniscribe.cc
@@ -351,7 +351,7 @@ _hb_rename_font (hb_blob_t *blob, wchar_t *new_name)
    * full, PS. All of them point to the same name data with our unique name.
    */
 
-  blob = OT::Sanitizer<OT::OpenTypeFontFile>::sanitize (blob);
+  blob = OT::Sanitizer<OT::OpenTypeFontFile>().sanitize (blob);
 
   unsigned int length, new_length, name_str_len;
   const char *orig_sfnt_data = hb_blob_get_data (blob, &length);
commit 4646a80a873fa164b9cf09128bc6b6fe2fc5cce2
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Tue Jan 9 12:06:38 2018 +0100

    Minor

diff --git a/src/hb-ot-layout-common-private.hh b/src/hb-ot-layout-common-private.hh
index cb308cd2..22e5b872 100644
--- a/src/hb-ot-layout-common-private.hh
+++ b/src/hb-ot-layout-common-private.hh
@@ -874,8 +874,8 @@ struct Coverage
   inline unsigned int get_coverage (hb_codepoint_t glyph_id) const
   {
     switch (u.format) {
-    case 1: return u.format1.get_coverage(glyph_id);
-    case 2: return u.format2.get_coverage(glyph_id);
+    case 1: return u.format1.get_coverage (glyph_id);
+    case 2: return u.format2.get_coverage (glyph_id);
     default:return NOT_COVERED;
     }
   }
@@ -1161,8 +1161,8 @@ struct ClassDef
   inline unsigned int get_class (hb_codepoint_t glyph_id) const
   {
     switch (u.format) {
-    case 1: return u.format1.get_class(glyph_id);
-    case 2: return u.format2.get_class(glyph_id);
+    case 1: return u.format1.get_class (glyph_id);
+    case 2: return u.format2.get_class (glyph_id);
     default:return 0;
     }
   }
commit 7c7cb42d8125d7e598bfa70f93053cafe38b325a
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Mon Jan 8 14:32:55 2018 +0000

    [aat] Update previous commits for rebase on master

diff --git a/src/hb-aat-layout-common-private.hh b/src/hb-aat-layout-common-private.hh
index 17c78332..e1abd07b 100644
--- a/src/hb-aat-layout-common-private.hh
+++ b/src/hb-aat-layout-common-private.hh
@@ -50,13 +50,13 @@ struct BinSearchHeader
   }
 
   protected:
-  USHORT	unitSize;	/* Size of a lookup unit for this search in bytes. */
-  USHORT	nUnits;		/* Number of units of the preceding size to be searched. */
-  USHORT	searchRange;	/* The value of unitSize times the largest power of 2
+  UINT16	unitSize;	/* Size of a lookup unit for this search in bytes. */
+  UINT16	nUnits;		/* Number of units of the preceding size to be searched. */
+  UINT16	searchRange;	/* The value of unitSize times the largest power of 2
 				 * that is less than or equal to the value of nUnits. */
-  USHORT	entrySelector;	/* The log base 2 of the largest power of 2 less than
+  UINT16	entrySelector;	/* The log base 2 of the largest power of 2 less than
 				 * or equal to the value of nUnits. */
-  USHORT	rangeShift;	/* The value of unitSize times the difference of the
+  UINT16	rangeShift;	/* The value of unitSize times the difference of the
 				 * value of nUnits minus the largest power of 2 less
 				 * than or equal to the value of nUnits. */
   public:
@@ -108,7 +108,7 @@ struct BinSearchArrayOf
   template <typename T>
   inline Type *bsearch (const T &key) const
   {
-    return ::bsearch (&key, bytes, header.nUnits, header.unitSize, (hb_compare_func_t) Type::cmp);
+    return ::bsearch (&key, bytes, header.nUnits, header.unitSize, Type::cmp);
   }
 
   private:
@@ -122,7 +122,7 @@ struct BinSearchArrayOf
 
   protected:
   BinSearchHeader	header;
-  BYTE bytes[VAR];
+  UINT8			bytes[VAR];
   public:
   DEFINE_SIZE_ARRAY (10, bytes);
 };
diff --git a/src/hb-aat-layout-morx-table.hh b/src/hb-aat-layout-morx-table.hh
index 0e366be0..a8a8de4d 100644
--- a/src/hb-aat-layout-morx-table.hh
+++ b/src/hb-aat-layout-morx-table.hh
@@ -104,11 +104,11 @@ struct Feature
   }
 
   public:
-  USHORT	featureType;	/* The type of feature. */
-  USHORT	featureSetting;	/* The feature's setting (aka selector). */
-  ULONG		enableFlags;	/* Flags for the settings that this feature
+  UINT16	featureType;	/* The type of feature. */
+  UINT16	featureSetting;	/* The feature's setting (aka selector). */
+  UINT32	enableFlags;	/* Flags for the settings that this feature
 				 * and setting enables. */
-  ULONG		disableFlags;	/* Complement of flags for the settings that this
+  UINT32	disableFlags;	/* Complement of flags for the settings that this
 				 * feature and setting disable. */
 
   public:
@@ -160,9 +160,9 @@ struct ChainSubtable
   }
 
   protected:
-  UINT	length;		/* Total subtable length, including this header. */
-  UINT	coverage;	/* Coverage flags and subtable type. */
-  ULONG	subFeatureFlags;/* The 32-bit mask identifying which subtable this is. */
+  UINT		length;		/* Total subtable length, including this header. */
+  UINT		coverage;	/* Coverage flags and subtable type. */
+  UINT32	subFeatureFlags;/* The 32-bit mask identifying which subtable this is. */
   union {
   RearrangementSubtable	rearrangement;
   ContextualSubtable	contextual;
@@ -204,10 +204,10 @@ struct Chain
   }
 
   protected:
-  ULONG	defaultFlags;		/* The default specification for subtables. */
-  ULONG	length;			/* Total byte count, including this header. */
-  UINT	featureCount;		/* Number of feature subtable entries. */
-  UINT	subtableCount;		/* The number of subtables in the chain. */
+  UINT32	defaultFlags;	/* The default specification for subtables. */
+  UINT32	length;		/* Total byte count, including this header. */
+  UINT		featureCount;	/* Number of feature subtable entries. */
+  UINT		subtableCount;	/* The number of subtables in the chain. */
 
   Feature		featureZ[VAR];	/* Features. */
   ChainSubtable<UINT>	subtableX[VAR];	/* Subtables. */
@@ -251,7 +251,7 @@ struct mortmorx
   protected:
   FixedVersion<>version;	/* Version number of the glyph metamorphosis table.
 				 * 1 for mort, 2 or 3 for morx. */
-  ULONG		chainCount;	/* Number of metamorphosis chains contained in this
+  UINT32	chainCount;	/* Number of metamorphosis chains contained in this
 				 * table. */
   Chain<UINT>	chains[VAR];	/* Chains. */
 
@@ -259,12 +259,12 @@ struct mortmorx
   DEFINE_SIZE_MIN (8);
 };
 
-struct mort : mortmorx<USHORT>
+struct mort : mortmorx<UINT16>
 {
   static const hb_tag_t tableTag	= HB_AAT_TAG_MORT;
 };
 
-struct morx : mortmorx<ULONG>
+struct morx : mortmorx<UINT32>
 {
   static const hb_tag_t tableTag	= HB_AAT_TAG_MORX;
 };
diff --git a/src/hb-open-type-private.hh b/src/hb-open-type-private.hh
index a8c3ee2b..2f4e1b9e 100644
--- a/src/hb-open-type-private.hh
+++ b/src/hb-open-type-private.hh
@@ -160,11 +160,6 @@ static_assert (Type::min_size + 1 <= sizeof (_Null##Type), "Null pool too small.
  * Dispatch
  */
 
-#define TRACE_DISPATCH(this, format) \
-	hb_auto_trace_t<context_t::max_debug_depth, typename context_t::return_t> trace \
-	(&c->debug_depth, c->get_name (), this, HB_FUNC, \
-	 "format %d", (int) format);
-
 template <typename Context, typename Return, unsigned int MaxDebugDepth>
 struct hb_dispatch_context_t
 {
commit a0175e75bc40b5496d7fd37afd434cb2000e5b9b
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Thu Aug 17 16:55:54 2017 -0700

    [aat] Start implementing common table formats

diff --git a/src/Makefile.sources b/src/Makefile.sources
index a728fc09..4349e0a7 100644
--- a/src/Makefile.sources
+++ b/src/Makefile.sources
@@ -83,7 +83,9 @@ HB_FALLBACK_sources = \
 
 HB_OT_sources = \
 	hb-aat-layout.cc \
+	hb-aat-layout-common-private.hh \
 	hb-aat-layout-morx-table.hh \
+	hb-aat-layout-private.hh \
 	hb-ot-font.cc \
 	hb-ot-layout.cc \
 	hb-ot-layout-common-private.hh \
diff --git a/src/hb-aat-layout-common-private.hh b/src/hb-aat-layout-common-private.hh
new file mode 100644
index 00000000..17c78332
--- /dev/null
+++ b/src/hb-aat-layout-common-private.hh
@@ -0,0 +1,134 @@
+/*
+ * Copyright © 2017  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 HB_AAT_LAYOUT_COMMON_PRIVATE_HH
+#define HB_AAT_LAYOUT_COMMON_PRIVATE_HH
+
+#include "hb-aat-layout-private.hh"
+
+
+namespace AAT {
+
+using namespace OT;
+
+
+/*
+ * Binary Searching Tables
+ */
+
+struct BinSearchHeader
+{
+  friend struct BinSearchArray;
+
+  inline bool sanitize (hb_sanitize_context_t *c) const
+  {
+    TRACE_SANITIZE (this);
+    return_trace (c->check_struct (this));
+  }
+
+  protected:
+  USHORT	unitSize;	/* Size of a lookup unit for this search in bytes. */
+  USHORT	nUnits;		/* Number of units of the preceding size to be searched. */
+  USHORT	searchRange;	/* The value of unitSize times the largest power of 2
+				 * that is less than or equal to the value of nUnits. */
+  USHORT	entrySelector;	/* The log base 2 of the largest power of 2 less than
+				 * or equal to the value of nUnits. */
+  USHORT	rangeShift;	/* The value of unitSize times the difference of the
+				 * value of nUnits minus the largest power of 2 less
+				 * than or equal to the value of nUnits. */
+  public:
+  DEFINE_SIZE_STATIC (10);
+};
+
+template <typename Type>
+struct BinSearchArrayOf
+{
+  inline const Type& operator [] (unsigned int i) const
+  {
+    if (unlikely (i >= header.nUnits)) return Null(Type);
+    return StructAtOffset<Type> (bytes, i * header.unitSize);
+  }
+  inline Type& operator [] (unsigned int i)
+  {
+    return StructAtOffset<Type> (bytes, i * header.unitSize);
+  }
+  inline unsigned int get_size (void) const
+  { return header.static_size + header.nUnits * header.unitSize; }
+
+  inline bool sanitize (hb_sanitize_context_t *c) const
+  {
+    TRACE_SANITIZE (this);
+    if (unlikely (!sanitize_shallow (c))) return_trace (false);
+
+    /* Note: for structs that do not reference other structs,
+     * we do not need to call their sanitize() as we already did
+     * a bound check on the aggregate array size.  We just include
+     * a small unreachable expression to make sure the structs
+     * pointed to do have a simple sanitize(), ie. they do not
+     * reference other structs via offsets.
+     */
+    (void) (false && StructAtOffset<Type> (bytes, 0).sanitize (c));
+
+    return_trace (true);
+  }
+  inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+  {
+    TRACE_SANITIZE (this);
+    if (unlikely (!sanitize_shallow (c))) return_trace (false);
+    unsigned int count = header.nUnits;
+    for (unsigned int i = 0; i < count; i++)
+      if (unlikely (!(*this)[i].sanitize (c, base)))
+        return_trace (false);
+    return_trace (true);
+  }
+
+  template <typename T>
+  inline Type *bsearch (const T &key) const
+  {
+    return ::bsearch (&key, bytes, header.nUnits, header.unitSize, (hb_compare_func_t) Type::cmp);
+  }
+
+  private:
+  inline bool sanitize_shallow (hb_sanitize_context_t *c) const
+  {
+    TRACE_SANITIZE (this);
+    return_trace (header.sanitize (c) &&
+		  Type::static_size >= header.unitSize &&
+		  c->check_array (bytes, header.unitSize, header.nUnits));
+  }
+
+  protected:
+  BinSearchHeader	header;
+  BYTE bytes[VAR];
+  public:
+  DEFINE_SIZE_ARRAY (10, bytes);
+};
+
+
+} /* namespace AAT */
+
+
+#endif /* HB_AAT_LAYOUT_COMMON_PRIVATE_HH */
diff --git a/src/hb-aat-layout-morx-table.hh b/src/hb-aat-layout-morx-table.hh
index d3a694b5..0e366be0 100644
--- a/src/hb-aat-layout-morx-table.hh
+++ b/src/hb-aat-layout-morx-table.hh
@@ -28,6 +28,7 @@
 #define HB_AAT_LAYOUT_MORX_TABLE_HH
 
 #include <hb-open-type-private.hh>
+#include <hb-aat-layout-common-private.hh>
 
 #define HB_AAT_TAG_MORT HB_TAG('m','o','r','t')
 #define HB_AAT_TAG_MORX HB_TAG('m','o','r','x')
diff --git a/src/hb-aat-layout-private.hh b/src/hb-aat-layout-private.hh
new file mode 100644
index 00000000..6adf084c
--- /dev/null
+++ b/src/hb-aat-layout-private.hh
@@ -0,0 +1,37 @@
+/*
+ * Copyright © 2017  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 HB_AAT_LAYOUT_PRIVATE_HH
+#define HB_AAT_LAYOUT_PRIVATE_HH
+
+#include "hb-private.hh"
+
+#include "hb-font-private.hh"
+#include "hb-buffer-private.hh"
+#include "hb-open-type-private.hh"
+
+
+#endif /* HB_AAT_LAYOUT_PRIVATE_HH */
diff --git a/src/hb-aat-layout.cc b/src/hb-aat-layout.cc
index c5277ed7..73ceafe3 100644
--- a/src/hb-aat-layout.cc
+++ b/src/hb-aat-layout.cc
@@ -27,6 +27,7 @@
 #include "hb-open-type-private.hh"
 #include "hb-ot-layout-private.hh"
 
+#include "hb-aat-layout-private.hh"
 #include "hb-aat-layout-morx-table.hh"
 
 /*
commit c71b55a223d14f8bb7fa355efc586e824b7d4d8f
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Mon Aug 14 17:24:36 2017 -0700

    [aat] Start implementing Apple AAT morx table

diff --git a/src/Makefile.sources b/src/Makefile.sources
index 63e0ddcd..a728fc09 100644
--- a/src/Makefile.sources
+++ b/src/Makefile.sources
@@ -82,6 +82,8 @@ HB_FALLBACK_sources = \
 	$(NULL)
 
 HB_OT_sources = \
+	hb-aat-layout.cc \
+	hb-aat-layout-morx-table.hh \
 	hb-ot-font.cc \
 	hb-ot-layout.cc \
 	hb-ot-layout-common-private.hh \
diff --git a/src/hb-aat-layout-morx-table.hh b/src/hb-aat-layout-morx-table.hh
new file mode 100644
index 00000000..d3a694b5
--- /dev/null
+++ b/src/hb-aat-layout-morx-table.hh
@@ -0,0 +1,275 @@
+/*
+ * Copyright © 2017  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 HB_AAT_LAYOUT_MORX_TABLE_HH
+#define HB_AAT_LAYOUT_MORX_TABLE_HH
+
+#include <hb-open-type-private.hh>
+
+#define HB_AAT_TAG_MORT HB_TAG('m','o','r','t')
+#define HB_AAT_TAG_MORX HB_TAG('m','o','r','x')
+
+
+namespace AAT {
+
+using namespace OT;
+
+
+struct RearrangementSubtable
+{
+  /* TODO */
+  inline bool sanitize (hb_sanitize_context_t *c) const
+  {
+    TRACE_SANITIZE (this);
+    /* TODO */
+    return_trace (false);
+  }
+};
+
+struct ContextualSubtable
+{
+  /* TODO */
+  inline bool sanitize (hb_sanitize_context_t *c) const
+  {
+    TRACE_SANITIZE (this);
+    /* TODO */
+    return_trace (false);
+  }
+};
+
+struct LigatureSubtable
+{
+  /* TODO */
+  inline bool sanitize (hb_sanitize_context_t *c) const
+  {
+    TRACE_SANITIZE (this);
+    /* TODO */
+    return_trace (false);
+  }
+};
+
+struct NoncontextualSubtable
+{
+  /* TODO */
+  inline bool sanitize (hb_sanitize_context_t *c) const
+  {
+    TRACE_SANITIZE (this);
+    /* TODO */
+    return_trace (false);
+  }
+};
+
+struct InsertionSubtable
+{
+  /* TODO */
+  inline bool sanitize (hb_sanitize_context_t *c) const
+  {
+    TRACE_SANITIZE (this);
+    /* TODO */
+    return_trace (false);
+  }
+};
+
+
+struct Feature
+{
+  inline bool sanitize (hb_sanitize_context_t *c) const
+  {
+    TRACE_SANITIZE (this);
+    return_trace (c->check_struct (this));
+  }
+
+  public:
+  USHORT	featureType;	/* The type of feature. */
+  USHORT	featureSetting;	/* The feature's setting (aka selector). */
+  ULONG		enableFlags;	/* Flags for the settings that this feature
+				 * and setting enables. */
+  ULONG		disableFlags;	/* Complement of flags for the settings that this
+				 * feature and setting disable. */
+
+  public:
+  DEFINE_SIZE_STATIC (12);
+};
+
+
+template <typename UINT>
+struct ChainSubtable
+{
+  template <typename> struct Chain;
+  friend struct Chain<UINT>;
+
+  inline unsigned int get_size (void) const { return length; }
+  inline unsigned int get_type (void) const { return coverage & 0xFF; }
+
+  enum Type {
+    Rearrangement	= 0,
+    Contextual		= 1,
+    Ligature		= 2,
+    Noncontextual	= 4,
+    Insertion		= 5
+  };
+
+  template <typename context_t>
+  inline typename context_t::return_t dispatch (context_t *c) const
+  {
+    unsigned int subtable_type = get_type ();
+    TRACE_DISPATCH (this, subtable_type);
+    switch (subtable_type) {
+    case Rearrangement:		return_trace (c->dispatch (u.rearrangement));
+    case Contextual:		return_trace (c->dispatch (u.contextual));
+    case Ligature:		return_trace (c->dispatch (u.ligature));
+    case Noncontextual:		return_trace (c->dispatch (u.noncontextual));
+    case Insertion:		return_trace (c->dispatch (u.insertion));
+    default:			return_trace (c->default_return_value ());
+    }
+  }
+
+  inline bool sanitize (hb_sanitize_context_t *c) const
+  {
+    TRACE_SANITIZE (this);
+    if (!length.sanitize (c) ||
+	length < min_size ||
+	!c->check_range (this, length))
+      return_trace (false);
+
+    return_trace (dispatch (c));
+  }
+
+  protected:
+  UINT	length;		/* Total subtable length, including this header. */
+  UINT	coverage;	/* Coverage flags and subtable type. */
+  ULONG	subFeatureFlags;/* The 32-bit mask identifying which subtable this is. */
+  union {
+  RearrangementSubtable	rearrangement;
+  ContextualSubtable	contextual;
+  LigatureSubtable	ligature;
+  NoncontextualSubtable	noncontextual;
+  InsertionSubtable	insertion;
+  } u;
+  public:
+  DEFINE_SIZE_MIN (2 * sizeof (UINT) + 4);
+};
+
+template <typename UINT>
+struct Chain
+{
+
+  inline unsigned int get_size (void) const { return length; }
+
+  inline bool sanitize (hb_sanitize_context_t *c, unsigned int major) const
+  {
+    TRACE_SANITIZE (this);
+    if (!length.sanitize (c) ||
+	length < min_size ||
+	!c->check_range (this, length))
+      return_trace (false);
+
+    if (!c->check_array (featureZ, featureZ[0].static_size, featureCount))
+      return_trace (false);
+
+    const ChainSubtable<UINT> *subtable = &StructAtOffset<ChainSubtable<UINT> > (featureZ, featureZ[0].static_size * featureCount);
+    unsigned int count = subtableCount;
+    for (unsigned int i = 0; i < count; i++)
+    {
+      if (!subtable->sanitize (c))
+	return_trace (false);
+      subtable = &StructAfter<ChainSubtable<UINT> > (*subtable);
+    }
+
+    return_trace (true);
+  }
+
+  protected:
+  ULONG	defaultFlags;		/* The default specification for subtables. */
+  ULONG	length;			/* Total byte count, including this header. */
+  UINT	featureCount;		/* Number of feature subtable entries. */
+  UINT	subtableCount;		/* The number of subtables in the chain. */
+
+  Feature		featureZ[VAR];	/* Features. */
+  ChainSubtable<UINT>	subtableX[VAR];	/* Subtables. */
+  // subtableGlyphCoverageArray if major == 3
+
+  public:
+  DEFINE_SIZE_MIN (8 + 2 * sizeof (UINT));
+};
+
+
+/*
+ * The 'mort'/'morx' Tables
+ */
+
+template <typename UINT>
+struct mortmorx
+{
+  static const hb_tag_t mortTag	= HB_AAT_TAG_MORT;
+  static const hb_tag_t morxTag	= HB_AAT_TAG_MORX;
+
+  inline bool sanitize (hb_sanitize_context_t *c) const
+  {
+    TRACE_SANITIZE (this);
+    if (!version.sanitize (c) ||
+	version.major >> (sizeof (UINT) == 4) != 1 ||
+	!chainCount.sanitize (c))
+      return_trace (false);
+
+    const Chain<UINT> *chain = chains;
+    unsigned int count = chainCount;
+    for (unsigned int i = 0; i < count; i++)
+    {
+      if (!chain->sanitize (c, version.major))
+	return_trace (false);
+      chain = &StructAfter<Chain<UINT> > (*chain);
+    }
+
+    return_trace (true);
+  }
+
+  protected:
+  FixedVersion<>version;	/* Version number of the glyph metamorphosis table.
+				 * 1 for mort, 2 or 3 for morx. */
+  ULONG		chainCount;	/* Number of metamorphosis chains contained in this
+				 * table. */
+  Chain<UINT>	chains[VAR];	/* Chains. */
+
+  public:
+  DEFINE_SIZE_MIN (8);
+};
+
+struct mort : mortmorx<USHORT>
+{
+  static const hb_tag_t tableTag	= HB_AAT_TAG_MORT;
+};
+
+struct morx : mortmorx<ULONG>
+{
+  static const hb_tag_t tableTag	= HB_AAT_TAG_MORX;
+};
+
+
+} /* namespace AAT */
+
+
+#endif /* HB_AAT_LAYOUT_MORX_TABLE_HH */
diff --git a/src/hb-aat-layout.cc b/src/hb-aat-layout.cc
new file mode 100644
index 00000000..c5277ed7
--- /dev/null
+++ b/src/hb-aat-layout.cc
@@ -0,0 +1,42 @@
+/*
+ * Copyright © 2017  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
+ */
+
+#include "hb-open-type-private.hh"
+#include "hb-ot-layout-private.hh"
+
+#include "hb-aat-layout-morx-table.hh"
+
+/*
+ * mort/morx
+ */
+
+static inline const AAT::morx&
+_get_morx (hb_face_t *face)
+{
+  if (unlikely (!hb_ot_shaper_face_data_ensure (face))) return OT::Null(AAT::morx);
+  hb_ot_layout_t * layout = hb_ot_layout_from_face (face);
+  return *(layout->morx.get ());
+}
diff --git a/src/hb-open-type-private.hh b/src/hb-open-type-private.hh
index 2f4e1b9e..a8c3ee2b 100644
--- a/src/hb-open-type-private.hh
+++ b/src/hb-open-type-private.hh
@@ -160,6 +160,11 @@ static_assert (Type::min_size + 1 <= sizeof (_Null##Type), "Null pool too small.
  * Dispatch
  */
 
+#define TRACE_DISPATCH(this, format) \
+	hb_auto_trace_t<context_t::max_debug_depth, typename context_t::return_t> trace \
+	(&c->debug_depth, c->get_name (), this, HB_FUNC, \
+	 "format %d", (int) format);
+
 template <typename Context, typename Return, unsigned int MaxDebugDepth>
 struct hb_dispatch_context_t
 {
diff --git a/src/hb-ot-layout-private.hh b/src/hb-ot-layout-private.hh
index be5695d9..39d1a672 100644
--- a/src/hb-ot-layout-private.hh
+++ b/src/hb-ot-layout-private.hh
@@ -130,6 +130,10 @@ namespace OT {
   struct avar;
 }
 
+namespace AAT {
+  struct morx;
+}
+
 struct hb_ot_layout_lookup_accelerator_t
 {
   template <typename TLookup>
@@ -165,6 +169,7 @@ struct hb_ot_layout_t
   OT::hb_lazy_table_loader_t<struct OT::MATH> math;
   OT::hb_lazy_table_loader_t<struct OT::fvar> fvar;
   OT::hb_lazy_table_loader_t<struct OT::avar> avar;
+  OT::hb_lazy_table_loader_t<struct AAT::morx> morx;
 
   unsigned int gsub_lookup_count;
   unsigned int gpos_lookup_count;
diff --git a/src/hb-ot-layout.cc b/src/hb-ot-layout.cc
index 88458898..d4737393 100644
--- a/src/hb-ot-layout.cc
+++ b/src/hb-ot-layout.cc
@@ -62,6 +62,7 @@ _hb_ot_layout_create (hb_face_t *face)
   layout->math.init (face);
   layout->fvar.init (face);
   layout->avar.init (face);
+  layout->morx.init (face);
 
   {
     /*
@@ -209,6 +210,7 @@ _hb_ot_layout_destroy (hb_ot_layout_t *layout)
   layout->math.fini ();
   layout->fvar.fini ();
   layout->avar.fini ();
+  layout->morx.fini ();
 
   free (layout);
 }
commit 3c7aeb5c6437b26ad638ab993b724e28376d3ff8
Author: Ebrahim Byagowi <ebrahim at gnu.org>
Date:   Tue Jan 9 01:39:42 2018 +0330

    [cmake] Add autotools like feature testing (#683)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index ebbfbe3c..b61d6605 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -39,6 +39,7 @@ option(HB_HAVE_GLIB "Enable glib unicode functions" OFF)
 option(HB_HAVE_ICU "Enable icu unicode functions" OFF)
 if (APPLE)
   option(HB_HAVE_CORETEXT "Enable CoreText shaper backend on macOS" ON)
+  set (CMAKE_MACOSX_RPATH ON)
 endif ()
 if (WIN32)
   option(HB_HAVE_UNISCRIBE "Enable Uniscribe shaper backend on Windows" OFF)
@@ -88,12 +89,15 @@ include_directories(AFTER
 add_definitions(-DHAVE_OT)
 add_definitions(-DHAVE_FALLBACK)
 
-if (BUILD_SHARED_LIBS)
-  add_definitions(-DHAVE_ATEXIT)
-  if (APPLE)
-    set (CMAKE_MACOSX_RPATH ON)
-  endif ()
-endif ()
+include(CheckFunctionExists)
+check_function_exists(atexit HAVE_ATEXIT)
+check_function_exists(mprotect HAVE_MPROTECT)
+check_function_exists(sysconf HAVE_SYSCONF)
+check_function_exists(getpagesize HAVE_GETPAGESIZE)
+check_function_exists(mmap HAVE_MMAP)
+check_function_exists(isatty HAVE_ISATTY)
+check_function_exists(newlocale HAVE_NEWLOCALE)
+check_function_exists(strtod_l HAVE_STRTOD_L)
 
 if (MSVC)
   add_definitions(-wd4244 -wd4267 -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS)
@@ -244,6 +248,12 @@ if (HB_HAVE_FREETYPE)
 
   list(APPEND project_sources ${PROJECT_SOURCE_DIR}/src/hb-ft.cc)
   list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-ft.h)
+
+  set (CMAKE_REQUIRED_INCLUDES ${FREETYPE_INCLUDE_DIRS})
+  set (CMAKE_REQUIRED_LIBRARIES ${FREETYPE_LIBRARIES})
+  check_function_exists(FT_Get_Var_Blend_Coordinates HAVE_FT_GET_VAR_BLEND_COORDINATES)
+  check_function_exists(FT_Set_Var_Blend_Coordinates HAVE_FT_SET_VAR_BLEND_COORDINATES)
+  check_function_exists(FT_Done_MM_Var HAVE_FT_DONE_MM_VAR)
 endif ()
 
 if (HB_HAVE_GRAPHITE2)


More information about the HarfBuzz mailing list