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

Behdad Esfahbod behdad at kemper.freedesktop.org
Wed Jan 10 02:42:30 UTC 2018


 src/hb-buffer.h                                                           |   17 ++
 src/hb-ot-shape.cc                                                        |    6 -
 test/shaping/Makefile.am                                                  |   44 +++++++
 test/shaping/data/text-rendering-tests/extract-tests.py                   |    6 -
 test/shaping/data/text-rendering-tests/fonts/AdobeVFPrototype-Subset.otf  |binary
 test/shaping/data/text-rendering-tests/fonts/FDArrayTest257.otf           |binary
 test/shaping/data/text-rendering-tests/fonts/FDArrayTest65535.otf         |binary
 test/shaping/data/text-rendering-tests/fonts/NotoSansBalinese-Regular.ttf |binary
 test/shaping/data/text-rendering-tests/fonts/NotoSansKannada-Regular.ttf  |binary
 test/shaping/data/text-rendering-tests/fonts/NotoSerifKannada-Regular.ttf |binary
 test/shaping/data/text-rendering-tests/fonts/Selawik-README.md            |   60 ++++++++++
 test/shaping/data/text-rendering-tests/fonts/Selawik-variable.ttf         |binary
 test/shaping/data/text-rendering-tests/fonts/TestAVAR.ttf                 |binary
 test/shaping/data/text-rendering-tests/fonts/TestCMAP14.otf               |binary
 test/shaping/data/text-rendering-tests/fonts/TestCMAPMacTurkish.ttf       |binary
 test/shaping/data/text-rendering-tests/fonts/TestCVARGVAROne.ttf          |binary
 test/shaping/data/text-rendering-tests/fonts/TestCVARGVARTwo.ttf          |binary
 test/shaping/data/text-rendering-tests/fonts/TestGLYFOne.ttf              |binary
 test/shaping/data/text-rendering-tests/fonts/TestGPOSFour.ttf             |binary
 test/shaping/data/text-rendering-tests/fonts/TestGPOSOne.ttf              |binary
 test/shaping/data/text-rendering-tests/fonts/TestGPOSThree.ttf            |binary
 test/shaping/data/text-rendering-tests/fonts/TestGPOSTwo.otf              |binary
 test/shaping/data/text-rendering-tests/fonts/TestGSUBOne.otf              |binary
 test/shaping/data/text-rendering-tests/fonts/TestGVAREight.ttf            |binary
 test/shaping/data/text-rendering-tests/fonts/TestGVARFour.ttf             |binary
 test/shaping/data/text-rendering-tests/fonts/TestGVARNine.ttf             |binary
 test/shaping/data/text-rendering-tests/fonts/TestGVAROne.ttf              |binary
 test/shaping/data/text-rendering-tests/fonts/TestGVARThree.ttf            |binary
 test/shaping/data/text-rendering-tests/fonts/TestGVARTwo.ttf              |binary
 test/shaping/data/text-rendering-tests/fonts/TestHVAROne.otf              |binary
 test/shaping/data/text-rendering-tests/fonts/TestHVARTwo.ttf              |binary
 test/shaping/data/text-rendering-tests/fonts/TestKERNOne.otf              |binary
 test/shaping/data/text-rendering-tests/fonts/TestMORXFour.ttf             |binary
 test/shaping/data/text-rendering-tests/fonts/TestMORXOne.ttf              |binary
 test/shaping/data/text-rendering-tests/fonts/TestMORXThree.ttf            |binary
 test/shaping/data/text-rendering-tests/fonts/TestMORXTwo.ttf              |binary
 test/shaping/data/text-rendering-tests/fonts/TestShapeAran.ttf            |binary
 test/shaping/data/text-rendering-tests/fonts/TestShapeEthi.ttf            |binary
 test/shaping/data/text-rendering-tests/fonts/Zycon.ttf                    |binary
 test/shaping/data/text-rendering-tests/tests/AVAR-1.tests                 |   17 ++
 test/shaping/data/text-rendering-tests/tests/CFF-1.tests                  |   13 ++
 test/shaping/data/text-rendering-tests/tests/CFF-2.tests                  |   13 ++
 test/shaping/data/text-rendering-tests/tests/CFF2-1.tests                 |    9 +
 test/shaping/data/text-rendering-tests/tests/CMAP-1.tests                 |    4 
 test/shaping/data/text-rendering-tests/tests/CMAP-2.tests                 |    2 
 test/shaping/data/text-rendering-tests/tests/CMAP-3.tests                 |   20 +++
 test/shaping/data/text-rendering-tests/tests/CVAR-1.tests                 |    3 
 test/shaping/data/text-rendering-tests/tests/CVAR-2.tests                 |    3 
 test/shaping/data/text-rendering-tests/tests/GLYF-1.tests                 |    1 
 test/shaping/data/text-rendering-tests/tests/GPOS-1.tests                 |   19 +++
 test/shaping/data/text-rendering-tests/tests/GPOS-2.tests                 |    3 
 test/shaping/data/text-rendering-tests/tests/GPOS-3.tests                 |    4 
 test/shaping/data/text-rendering-tests/tests/GPOS-4.tests                 |    4 
 test/shaping/data/text-rendering-tests/tests/GPOS-5.tests                 |    5 
 test/shaping/data/text-rendering-tests/tests/GSUB-1.tests                 |    1 
 test/shaping/data/text-rendering-tests/tests/GSUB-2.tests                 |   11 +
 test/shaping/data/text-rendering-tests/tests/GVAR-1.tests                 |    9 +
 test/shaping/data/text-rendering-tests/tests/GVAR-2.tests                 |    9 +
 test/shaping/data/text-rendering-tests/tests/GVAR-3.tests                 |    9 +
 test/shaping/data/text-rendering-tests/tests/GVAR-4.tests                 |   11 +
 test/shaping/data/text-rendering-tests/tests/GVAR-5.tests                 |   11 +
 test/shaping/data/text-rendering-tests/tests/GVAR-6.tests                 |   11 +
 test/shaping/data/text-rendering-tests/tests/GVAR-7.tests                 |    7 +
 test/shaping/data/text-rendering-tests/tests/GVAR-8.tests                 |    6 +
 test/shaping/data/text-rendering-tests/tests/GVAR-9.tests                 |   10 +
 test/shaping/data/text-rendering-tests/tests/HVAR-1.tests                 |    6 +
 test/shaping/data/text-rendering-tests/tests/HVAR-2.tests                 |    6 +
 test/shaping/data/text-rendering-tests/tests/KERN-1.tests                 |    1 
 test/shaping/data/text-rendering-tests/tests/KERN-2.tests                 |    1 
 test/shaping/data/text-rendering-tests/tests/MORX-1.tests                 |    1 
 test/shaping/data/text-rendering-tests/tests/MORX-2.tests                 |   16 ++
 test/shaping/data/text-rendering-tests/tests/MORX-3.tests                 |   16 ++
 test/shaping/data/text-rendering-tests/tests/MORX-4.tests                 |   15 ++
 test/shaping/data/text-rendering-tests/tests/SHARAN-1.tests               |    6 +
 test/shaping/data/text-rendering-tests/tests/SHBALI-1.tests               |   22 +++
 test/shaping/data/text-rendering-tests/tests/SHBALI-2.tests               |   12 ++
 test/shaping/data/text-rendering-tests/tests/SHBALI-3.tests               |    9 +
 test/shaping/data/text-rendering-tests/tests/SHKNDA-1.tests               |   34 +++++
 test/shaping/data/text-rendering-tests/tests/SHKNDA-2.tests               |   16 ++
 test/shaping/data/text-rendering-tests/tests/SHKNDA-3.tests               |   31 +++++
 util/options.cc                                                           |    1 
 util/options.hh                                                           |   14 +-
 82 files changed, 542 insertions(+), 13 deletions(-)

New commits:
commit a938d105b8d6e2d654079ea7d89e2e3ef5e0aed4
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Wed Jan 10 03:41:55 2018 +0100

    [test/text-rendering-tests] Disable failing tests

diff --git a/test/shaping/Makefile.am b/test/shaping/Makefile.am
index d25deeb1..ebd37c06 100644
--- a/test/shaping/Makefile.am
+++ b/test/shaping/Makefile.am
@@ -84,7 +84,7 @@ TESTS = \
 	data/text-rendering-tests/tests/CFF-2.tests \
 	data/text-rendering-tests/tests/CMAP-1.tests \
 	data/text-rendering-tests/tests/CMAP-2.tests \
-	#data/text-rendering-tests/tests/CMAP-3.tests \
+	#data/text-rendering-tests/tests/CMAP-3.tests # Non-Unicode cmap \
 	data/text-rendering-tests/tests/CVAR-1.tests \
 	data/text-rendering-tests/tests/CVAR-2.tests \
 	data/text-rendering-tests/tests/GLYF-1.tests \
@@ -92,7 +92,7 @@ TESTS = \
 	data/text-rendering-tests/tests/GPOS-2.tests \
 	data/text-rendering-tests/tests/GPOS-3.tests \
 	data/text-rendering-tests/tests/GPOS-4.tests \
-	data/text-rendering-tests/tests/GPOS-5.tests \
+	#data/text-rendering-tests/tests/GPOS-5.tests # Rounding difference \
 	data/text-rendering-tests/tests/GSUB-1.tests \
 	data/text-rendering-tests/tests/GSUB-2.tests \
 	data/text-rendering-tests/tests/GVAR-1.tests \
@@ -108,14 +108,14 @@ TESTS = \
 	data/text-rendering-tests/tests/HVAR-2.tests \
 	data/text-rendering-tests/tests/KERN-1.tests \
 	data/text-rendering-tests/tests/KERN-2.tests \
-	data/text-rendering-tests/tests/MORX-1.tests \
-	data/text-rendering-tests/tests/MORX-2.tests \
-	data/text-rendering-tests/tests/MORX-3.tests \
+	#data/text-rendering-tests/tests/MORX-1.tests # Not implemented \
+	#data/text-rendering-tests/tests/MORX-2.tests # Not implemented \
+	#data/text-rendering-tests/tests/MORX-3.tests # Not implemented \
 	data/text-rendering-tests/tests/MORX-4.tests \
-	data/text-rendering-tests/tests/SHARAN-1.tests \
+	#data/text-rendering-tests/tests/SHARAN-1.tests # Rounding difference \
 	data/text-rendering-tests/tests/SHBALI-1.tests \
-	data/text-rendering-tests/tests/SHBALI-2.tests \
-	data/text-rendering-tests/tests/SHBALI-3.tests \
+	#data/text-rendering-tests/tests/SHBALI-2.tests # Rounding difference \
+	#data/text-rendering-tests/tests/SHBALI-3.tests # Rounding difference \
 	data/text-rendering-tests/tests/SHKNDA-1.tests \
 	data/text-rendering-tests/tests/SHKNDA-2.tests \
 	data/text-rendering-tests/tests/SHKNDA-3.tests \
commit ed95d5e374a10770eb305dfa43a9f5b39933aac7
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Wed Jan 10 03:38:52 2018 +0100

    [test/text-rendering-tests] Disable failing tests

diff --git a/test/shaping/Makefile.am b/test/shaping/Makefile.am
index 33b6b9e3..d25deeb1 100644
--- a/test/shaping/Makefile.am
+++ b/test/shaping/Makefile.am
@@ -84,7 +84,7 @@ TESTS = \
 	data/text-rendering-tests/tests/CFF-2.tests \
 	data/text-rendering-tests/tests/CMAP-1.tests \
 	data/text-rendering-tests/tests/CMAP-2.tests \
-	data/text-rendering-tests/tests/CMAP-3.tests \
+	#data/text-rendering-tests/tests/CMAP-3.tests \
 	data/text-rendering-tests/tests/CVAR-1.tests \
 	data/text-rendering-tests/tests/CVAR-2.tests \
 	data/text-rendering-tests/tests/GLYF-1.tests \
commit 3b1e97f364e5ffdc08b52f889e3fea80a7e83e99
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Wed Jan 10 03:35:20 2018 +0100

    Add HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES
    
    New API:
    HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES
    hb-shape / hb-view --remove-default-ignorables
    
    One more text-rendering-tests test passing.  Eleven failing.

diff --git a/src/hb-buffer.h b/src/hb-buffer.h
index 1341be52..655a22ee 100644
--- a/src/hb-buffer.h
+++ b/src/hb-buffer.h
@@ -251,9 +251,17 @@ hb_buffer_guess_segment_properties (hb_buffer_t *buffer);
  * @HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES:
  *                      flag indication that character with Default_Ignorable
  *                      Unicode property should use the corresponding glyph
- *                      from the font, instead of hiding them (currently done
- *                      by replacing them with the space glyph and zeroing the
- *                      advance width.)
+ *                      from the font, instead of hiding them (done by
+ *                      replacing them with the space glyph and zeroing the
+ *                      advance width.)  This flag takes precendence over
+ *                      @HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES.
+ * @HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES:
+ *                      flag indication that character with Default_Ignorable
+ *                      Unicode property should be removed from glyph string
+ *                      instead of hiding them (done by replacing them with the
+ *                      space glyph and zeroing the advance width.)
+ *                      @HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES takes
+ *                      precedence over this flag. Since: 1.8.0
  *
  * Since: 0.9.20
  */
@@ -261,7 +269,8 @@ typedef enum { /*< flags >*/
   HB_BUFFER_FLAG_DEFAULT			= 0x00000000u,
   HB_BUFFER_FLAG_BOT				= 0x00000001u, /* Beginning-of-text */
   HB_BUFFER_FLAG_EOT				= 0x00000002u, /* End-of-text */
-  HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES	= 0x00000004u
+  HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES	= 0x00000004u,
+  HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES	= 0x00000008u
 } hb_buffer_flags_t;
 
 HB_EXTERN void
diff --git a/src/hb-ot-shape.cc b/src/hb-ot-shape.cc
index 21f6eda0..64e118a7 100644
--- a/src/hb-ot-shape.cc
+++ b/src/hb-ot-shape.cc
@@ -452,7 +452,8 @@ hb_ot_zero_width_default_ignorables (hb_ot_shape_context_t *c)
   hb_buffer_t *buffer = c->buffer;
 
   if (!(buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_DEFAULT_IGNORABLES) ||
-      (buffer->flags & HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES))
+      (buffer->flags & HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES) ||
+      (buffer->flags & HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES))
     return;
 
   unsigned int count = buffer->len;
@@ -488,7 +489,8 @@ hb_ot_hide_default_ignorables (hb_ot_shape_context_t *c)
     return;
 
   hb_codepoint_t space;
-  if (c->font->get_nominal_glyph (' ', &space))
+  if (!(buffer->flags & HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES) &&
+      c->font->get_nominal_glyph (' ', &space))
   {
     /* Replace default-ignorables with a zero-advance space glyph. */
     for (/*continue*/; i < count; i++)
diff --git a/test/shaping/data/text-rendering-tests/extract-tests.py b/test/shaping/data/text-rendering-tests/extract-tests.py
index 06978b13..8e5909fa 100755
--- a/test/shaping/data/text-rendering-tests/extract-tests.py
+++ b/test/shaping/data/text-rendering-tests/extract-tests.py
@@ -41,7 +41,7 @@ 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))
-	opts = '--font-size=1000 --ned --font-funcs=ft'
+	opts = '--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft'
 	if vars:
 		opts = opts + ' --variations=%s' % vars
 	print ("../fonts/%s:%s:%s:%s" % (font, opts, unistr(text), glyphstr(glyphs)))
diff --git a/test/shaping/data/text-rendering-tests/tests/AVAR-1.tests b/test/shaping/data/text-rendering-tests/tests/AVAR-1.tests
index 63172d6a..19223eb6 100644
--- a/test/shaping/data/text-rendering-tests/tests/AVAR-1.tests
+++ b/test/shaping/data/text-rendering-tests/tests/AVAR-1.tests
@@ -1,17 +1,17 @@
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=100:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=150:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=200:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=250:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=300:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=350:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=400:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=450:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=500:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=550:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=600:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=650:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=700:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=750:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=800:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=850:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=900:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=TEST=100:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=TEST=150:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=TEST=200:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=TEST=250:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=TEST=300:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=TEST=350:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=TEST=400:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=TEST=450:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=TEST=500:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=TEST=550:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=TEST=600:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=TEST=650:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=TEST=700:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=TEST=750:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=TEST=800:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=TEST=850:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=TEST=900:U+2A01:[gid1]
diff --git a/test/shaping/data/text-rendering-tests/tests/CFF-1.tests b/test/shaping/data/text-rendering-tests/tests/CFF-1.tests
index 7ef9b6d9..67882532 100644
--- a/test/shaping/data/text-rendering-tests/tests/CFF-1.tests
+++ b/test/shaping/data/text-rendering-tests/tests/CFF-1.tests
@@ -1,13 +1,13 @@
-../fonts/FDArrayTest257.otf:--font-size=1000 --ned --font-funcs=ft:U+0041:[gid66]
-../fonts/FDArrayTest257.otf:--font-size=1000 --ned --font-funcs=ft:U+211D:[gid30]
-../fonts/FDArrayTest257.otf:--font-size=1000 --ned --font-funcs=ft:U+24EA:[gid235]
-../fonts/FDArrayTest257.otf:--font-size=1000 --ned --font-funcs=ft:U+2460:[gid97]
-../fonts/FDArrayTest257.otf:--font-size=1000 --ned --font-funcs=ft:U+2461:[gid98]
-../fonts/FDArrayTest257.otf:--font-size=1000 --ned --font-funcs=ft:U+4EFF:[gid256]
-../fonts/FDArrayTest257.otf:--font-size=1000 --ned --font-funcs=ft:U+FF21:[gid34]
-../fonts/FDArrayTest257.otf:--font-size=1000 --ned --font-funcs=ft:U+10133:[gid52]
-../fonts/FDArrayTest257.otf:--font-size=1000 --ned --font-funcs=ft:U+1D4D0:[gid209]
-../fonts/FDArrayTest257.otf:--font-size=1000 --ned --font-funcs=ft:U+1F33A:[gid59]
-../fonts/FDArrayTest257.otf:--font-size=1000 --ned --font-funcs=ft:U+1F33B:[gid60]
-../fonts/FDArrayTest257.otf:--font-size=1000 --ned --font-funcs=ft:U+1F4A7:[gid168]
-../fonts/FDArrayTest257.otf:--font-size=1000 --ned --font-funcs=ft:U+1F95D:[gid94]
+../fonts/FDArrayTest257.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041:[gid66]
+../fonts/FDArrayTest257.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+211D:[gid30]
+../fonts/FDArrayTest257.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+24EA:[gid235]
+../fonts/FDArrayTest257.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+2460:[gid97]
+../fonts/FDArrayTest257.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+2461:[gid98]
+../fonts/FDArrayTest257.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+4EFF:[gid256]
+../fonts/FDArrayTest257.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+FF21:[gid34]
+../fonts/FDArrayTest257.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+10133:[gid52]
+../fonts/FDArrayTest257.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1D4D0:[gid209]
+../fonts/FDArrayTest257.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1F33A:[gid59]
+../fonts/FDArrayTest257.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1F33B:[gid60]
+../fonts/FDArrayTest257.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1F4A7:[gid168]
+../fonts/FDArrayTest257.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1F95D:[gid94]
diff --git a/test/shaping/data/text-rendering-tests/tests/CFF-2.tests b/test/shaping/data/text-rendering-tests/tests/CFF-2.tests
index e25040b2..6f190a8e 100644
--- a/test/shaping/data/text-rendering-tests/tests/CFF-2.tests
+++ b/test/shaping/data/text-rendering-tests/tests/CFF-2.tests
@@ -1,13 +1,13 @@
-../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --font-funcs=ft:U+0041:[gid66]
-../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --font-funcs=ft:U+211D:[gid8478]
-../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --font-funcs=ft:U+24EA:[gid9451]
-../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --font-funcs=ft:U+2460:[gid9313]
-../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --font-funcs=ft:U+2461:[gid9314]
-../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --font-funcs=ft:U+4EFF:[gid20224]
-../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --font-funcs=ft:U+FF21:[gid65314]
-../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --font-funcs=ft:U+10133:[gid308]
-../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --font-funcs=ft:U+1D4D0:[gid54481]
-../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --font-funcs=ft:U+1F33A:[gid62267]
-../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --font-funcs=ft:U+1F33B:[gid62268]
-../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --font-funcs=ft:U+1F4A7:[gid62632]
-../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --font-funcs=ft:U+1F95D:[gid63838]
+../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041:[gid66]
+../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+211D:[gid8478]
+../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+24EA:[gid9451]
+../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+2460:[gid9313]
+../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+2461:[gid9314]
+../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+4EFF:[gid20224]
+../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+FF21:[gid65314]
+../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+10133:[gid308]
+../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1D4D0:[gid54481]
+../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1F33A:[gid62267]
+../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1F33B:[gid62268]
+../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1F4A7:[gid62632]
+../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1F95D:[gid63838]
diff --git a/test/shaping/data/text-rendering-tests/tests/CFF2-1.tests b/test/shaping/data/text-rendering-tests/tests/CFF2-1.tests
index 51da1ec9..84cb14d0 100644
--- a/test/shaping/data/text-rendering-tests/tests/CFF2-1.tests
+++ b/test/shaping/data/text-rendering-tests/tests/CFF2-1.tests
@@ -1,9 +1,9 @@
-../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=100:U+0024:[dollar]
-../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=200:U+0024:[dollar]
-../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=300:U+0024:[dollar]
-../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=400:U+0024:[dollar]
-../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=500:U+0024:[dollar]
-../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=600:U+0024:[dollar]
-../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=700:U+0024:[dollar]
-../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=800:U+0024:[dollar.nostroke]
-../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=900:U+0024:[dollar.nostroke]
+../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=100:U+0024:[dollar]
+../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=200:U+0024:[dollar]
+../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=300:U+0024:[dollar]
+../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=400:U+0024:[dollar]
+../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=500:U+0024:[dollar]
+../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=600:U+0024:[dollar]
+../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=700:U+0024:[dollar]
+../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=800:U+0024:[dollar.nostroke]
+../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=900:U+0024:[dollar.nostroke]
diff --git a/test/shaping/data/text-rendering-tests/tests/CMAP-1.tests b/test/shaping/data/text-rendering-tests/tests/CMAP-1.tests
index 309b2d6d..337b9f86 100644
--- a/test/shaping/data/text-rendering-tests/tests/CMAP-1.tests
+++ b/test/shaping/data/text-rendering-tests/tests/CMAP-1.tests
@@ -1,4 +1,4 @@
-../fonts/TestCMAP14.otf:--font-size=1000 --ned --font-funcs=ft:U+82A6:[uni82A6_uE0100]
-../fonts/TestCMAP14.otf:--font-size=1000 --ned --font-funcs=ft:U+82A6,U+E0100:[uni82A6_uE0100]
-../fonts/TestCMAP14.otf:--font-size=1000 --ned --font-funcs=ft:U+82A6,U+E0101:[uni82A6_uE0101]
-../fonts/TestCMAP14.otf:--font-size=1000 --ned --font-funcs=ft:U+82A6,U+E0102:[uni82A6_uE0100]
+../fonts/TestCMAP14.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+82A6:[uni82A6_uE0100]
+../fonts/TestCMAP14.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+82A6,U+E0100:[uni82A6_uE0100]
+../fonts/TestCMAP14.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+82A6,U+E0101:[uni82A6_uE0101]
+../fonts/TestCMAP14.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+82A6,U+E0102:[uni82A6_uE0100]
diff --git a/test/shaping/data/text-rendering-tests/tests/CMAP-2.tests b/test/shaping/data/text-rendering-tests/tests/CMAP-2.tests
index ef315632..861f2e48 100644
--- a/test/shaping/data/text-rendering-tests/tests/CMAP-2.tests
+++ b/test/shaping/data/text-rendering-tests/tests/CMAP-2.tests
@@ -1,2 +1,2 @@
-../fonts/TestCMAP14.otf:--font-size=1000 --ned --font-funcs=ft:U+2269:[uni2269]
-../fonts/TestCMAP14.otf:--font-size=1000 --ned --font-funcs=ft:U+2269,U+FE00:[uni2269FE00]
+../fonts/TestCMAP14.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+2269:[uni2269]
+../fonts/TestCMAP14.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+2269,U+FE00:[uni2269FE00]
diff --git a/test/shaping/data/text-rendering-tests/tests/CMAP-3.tests b/test/shaping/data/text-rendering-tests/tests/CMAP-3.tests
index 9a3525b7..d8758d3b 100644
--- a/test/shaping/data/text-rendering-tests/tests/CMAP-3.tests
+++ b/test/shaping/data/text-rendering-tests/tests/CMAP-3.tests
@@ -1,20 +1,20 @@
-../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+201C:[gid200]
-../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041:[gid34]
-../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+0042:[gid35]
-../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+00C7:[gid126]
-../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+011E:[gid176]
-../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+0049:[gid42]
-../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+0130:[gid178]
-../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+00D6:[gid140]
-../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+015E:[gid181]
-../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+00DC:[gid145]
-../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+201D:[gid201]
-../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+0061:[gid66]
-../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+0062:[gid67]
-../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+00E7:[gid154]
-../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+011F:[gid177]
-../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+0131:[gid222]
-../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+0069:[gid74]
-../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+00F6:[gid168]
-../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+015F:[gid182]
-../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+00FC:[gid174]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+201C:[gid200]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041:[gid34]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0042:[gid35]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+00C7:[gid126]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+011E:[gid176]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0049:[gid42]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0130:[gid178]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+00D6:[gid140]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+015E:[gid181]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+00DC:[gid145]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+201D:[gid201]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0061:[gid66]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0062:[gid67]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+00E7:[gid154]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+011F:[gid177]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0131:[gid222]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0069:[gid74]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+00F6:[gid168]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+015F:[gid182]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+00FC:[gid174]
diff --git a/test/shaping/data/text-rendering-tests/tests/CVAR-1.tests b/test/shaping/data/text-rendering-tests/tests/CVAR-1.tests
index 98f92757..c874a140 100644
--- a/test/shaping/data/text-rendering-tests/tests/CVAR-1.tests
+++ b/test/shaping/data/text-rendering-tests/tests/CVAR-1.tests
@@ -1,3 +1,3 @@
-../fonts/TestCVARGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=28,wdth=100,opsz=72:U+0068,U+006F,U+006E:[uni0068|uni006F at 595,0|uni006E at 1126,0]
-../fonts/TestCVARGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=94,wdth=100,opsz=72:U+0068,U+006F,U+006E:[uni0068|uni006F at 635,0|uni006E at 1212,0]
-../fonts/TestCVARGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=194,wdth=100,opsz=72:U+0068,U+006F,U+006E:[uni0068|uni006F at 691,0|uni006E at 1331,0]
+../fonts/TestCVARGVARTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=28,wdth=100,opsz=72:U+0068,U+006F,U+006E:[uni0068|uni006F at 595,0|uni006E at 1126,0]
+../fonts/TestCVARGVARTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=94,wdth=100,opsz=72:U+0068,U+006F,U+006E:[uni0068|uni006F at 635,0|uni006E at 1212,0]
+../fonts/TestCVARGVARTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=194,wdth=100,opsz=72:U+0068,U+006F,U+006E:[uni0068|uni006F at 691,0|uni006E at 1331,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/CVAR-2.tests b/test/shaping/data/text-rendering-tests/tests/CVAR-2.tests
index 0db163a6..6bd42e15 100644
--- a/test/shaping/data/text-rendering-tests/tests/CVAR-2.tests
+++ b/test/shaping/data/text-rendering-tests/tests/CVAR-2.tests
@@ -1,3 +1,3 @@
-../fonts/TestCVARGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=28,wdth=100,opsz=72:U+0068,U+006F,U+006E:[uni0068|uni006F at 595,0|uni006E at 1126,0]
-../fonts/TestCVARGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=94,wdth=100,opsz=72:U+0068,U+006F,U+006E:[uni0068|uni006F at 635,0|uni006E at 1212,0]
-../fonts/TestCVARGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=194,wdth=100,opsz=72:U+0068,U+006F,U+006E:[uni0068|uni006F at 691,0|uni006E at 1331,0]
+../fonts/TestCVARGVAROne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=28,wdth=100,opsz=72:U+0068,U+006F,U+006E:[uni0068|uni006F at 595,0|uni006E at 1126,0]
+../fonts/TestCVARGVAROne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=94,wdth=100,opsz=72:U+0068,U+006F,U+006E:[uni0068|uni006F at 635,0|uni006E at 1212,0]
+../fonts/TestCVARGVAROne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=194,wdth=100,opsz=72:U+0068,U+006F,U+006E:[uni0068|uni006F at 691,0|uni006E at 1331,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/GLYF-1.tests b/test/shaping/data/text-rendering-tests/tests/GLYF-1.tests
index 90adae9c..bdc0346e 100644
--- a/test/shaping/data/text-rendering-tests/tests/GLYF-1.tests
+++ b/test/shaping/data/text-rendering-tests/tests/GLYF-1.tests
@@ -1 +1 @@
-../fonts/TestGLYFOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0123:[gcommaabove]
+../fonts/TestGLYFOne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0123:[gcommaabove]
diff --git a/test/shaping/data/text-rendering-tests/tests/GPOS-1.tests b/test/shaping/data/text-rendering-tests/tests/GPOS-1.tests
index 96f84fe0..221d16bd 100644
--- a/test/shaping/data/text-rendering-tests/tests/GPOS-1.tests
+++ b/test/shaping/data/text-rendering-tests/tests/GPOS-1.tests
@@ -1,19 +1,19 @@
-../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0104,U+004A:[Aogonek|J at 732,0]
-../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0104,U+0067:[Aogonek|g at 692,0]
-../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0104,U+0123:[Aogonek|gcommaabove at 692,0]
-../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0104,U+006A:[Aogonek|j at 752,0]
-../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0104,U+0237:[Aogonek|dotlessj at 752,0]
-../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0051,U+0237:[Q|dotlessj at 734,0]
-../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0105,U+006A:[aogonek|j at 588,0]
-../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0105,U+0237:[aogonek|dotlessj at 588,0]
-../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0067,U+0237:[g|dotlessj at 563,0]
-../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0123,U+0237:[gcommaabove|dotlessj at 563,0]
-../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0131,U+0237:[dotlessi|dotlessj at 334,0]
-../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0173,U+0237:[uogonek|dotlessj at 656,0]
-../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0076,U+0237:[v|dotlessj at 587,0]
-../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0056,U+0061:[V|a at 594,0]
-../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0056,U+00E1:[V|aacute at 594,0]
-../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0056,U+0105:[V|aogonek at 594,0]
-../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0056,U+0066:[V|f at 634,0]
-../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0056,U+FB02:[V|fl at 634,0]
-../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0056,U+002E:[V|period at 504,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0104,U+004A:[Aogonek|J at 732,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0104,U+0067:[Aogonek|g at 692,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0104,U+0123:[Aogonek|gcommaabove at 692,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0104,U+006A:[Aogonek|j at 752,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0104,U+0237:[Aogonek|dotlessj at 752,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0051,U+0237:[Q|dotlessj at 734,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0105,U+006A:[aogonek|j at 588,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0105,U+0237:[aogonek|dotlessj at 588,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0067,U+0237:[g|dotlessj at 563,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0123,U+0237:[gcommaabove|dotlessj at 563,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0131,U+0237:[dotlessi|dotlessj at 334,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0173,U+0237:[uogonek|dotlessj at 656,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0076,U+0237:[v|dotlessj at 587,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0056,U+0061:[V|a at 594,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0056,U+00E1:[V|aacute at 594,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0056,U+0105:[V|aogonek at 594,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0056,U+0066:[V|f at 634,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0056,U+FB02:[V|fl at 634,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0056,U+002E:[V|period at 504,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/GPOS-2.tests b/test/shaping/data/text-rendering-tests/tests/GPOS-2.tests
index cc31a07a..03fcc369 100644
--- a/test/shaping/data/text-rendering-tests/tests/GPOS-2.tests
+++ b/test/shaping/data/text-rendering-tests/tests/GPOS-2.tests
@@ -1,3 +1,3 @@
-../fonts/TestGPOSTwo.otf:--font-size=1000 --ned --font-funcs=ft:U+25EF:[uni25EF]
-../fonts/TestGPOSTwo.otf:--font-size=1000 --ned --font-funcs=ft:U+263C:[sun]
-../fonts/TestGPOSTwo.otf:--font-size=1000 --ned --font-funcs=ft:U+25EF,U+263C:[uni25EF|sun]
+../fonts/TestGPOSTwo.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+25EF:[uni25EF]
+../fonts/TestGPOSTwo.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+263C:[sun]
+../fonts/TestGPOSTwo.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+25EF,U+263C:[uni25EF|sun]
diff --git a/test/shaping/data/text-rendering-tests/tests/GPOS-3.tests b/test/shaping/data/text-rendering-tests/tests/GPOS-3.tests
index b1c3be7d..32aeb6ea 100644
--- a/test/shaping/data/text-rendering-tests/tests/GPOS-3.tests
+++ b/test/shaping/data/text-rendering-tests/tests/GPOS-3.tests
@@ -1,4 +1,4 @@
-../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+1208:[uni1208]
-../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+1208,U+135E:[uni1208|uni135E at 303,0]
-../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+1208,U+135F:[uni1208|uni135F at 303,0]
-../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+1208,U+135D:[uni1208|uni135D at 303,0]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1208:[uni1208]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1208,U+135E:[uni1208|uni135E at 303,0]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1208,U+135F:[uni1208|uni135F at 303,0]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1208,U+135D:[uni1208|uni135D at 303,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/GPOS-4.tests b/test/shaping/data/text-rendering-tests/tests/GPOS-4.tests
index 7a68b5aa..fd775421 100644
--- a/test/shaping/data/text-rendering-tests/tests/GPOS-4.tests
+++ b/test/shaping/data/text-rendering-tests/tests/GPOS-4.tests
@@ -1,4 +1,4 @@
-../fonts/TestGPOSThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0075,U+0308,U+0301:[u|uni0308 at 529,-31|acutecomb at 537,138]
-../fonts/TestGPOSThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0075,U+0308,U+0304:[u|uni0308 at 529,-31|uni0304 at 526,138]
-../fonts/TestGPOSThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0075,U+0308,U+0308:[u|uni0308 at 529,-31|uni0308 at 529,138]
-../fonts/TestGPOSThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0075,U+0308,U+0308,U+0308:[u|uni0308 at 529,-31|uni0308 at 529,138|uni0308 at 529,307]
+../fonts/TestGPOSThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0075,U+0308,U+0301:[u|uni0308 at 529,-31|acutecomb at 537,138]
+../fonts/TestGPOSThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0075,U+0308,U+0304:[u|uni0308 at 529,-31|uni0304 at 526,138]
+../fonts/TestGPOSThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0075,U+0308,U+0308:[u|uni0308 at 529,-31|uni0308 at 529,138]
+../fonts/TestGPOSThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0075,U+0308,U+0308,U+0308:[u|uni0308 at 529,-31|uni0308 at 529,138|uni0308 at 529,307]
diff --git a/test/shaping/data/text-rendering-tests/tests/GPOS-5.tests b/test/shaping/data/text-rendering-tests/tests/GPOS-5.tests
index f0a73571..2d7ce14a 100644
--- a/test/shaping/data/text-rendering-tests/tests/GPOS-5.tests
+++ b/test/shaping/data/text-rendering-tests/tests/GPOS-5.tests
@@ -1,5 +1,5 @@
-../fonts/TestGPOSFour.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=100:U+0634,U+0652:[uni0652 at 663,144|uni0634]
-../fonts/TestGPOSFour.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=300:U+0634,U+0652:[uni0652 at 680,165|uni0634]
-../fonts/TestGPOSFour.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=600:U+0634,U+0652:[uni0652 at 730,246|uni0634]
-../fonts/TestGPOSFour.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=700:U+0634,U+0652:[uni0652 at 750,282|uni0634]
-../fonts/TestGPOSFour.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=900:U+0634,U+0652:[uni0652 at 784,351|uni0634]
+../fonts/TestGPOSFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=100:U+0634,U+0652:[uni0652 at 663,144|uni0634]
+../fonts/TestGPOSFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=300:U+0634,U+0652:[uni0652 at 680,165|uni0634]
+../fonts/TestGPOSFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=600:U+0634,U+0652:[uni0652 at 730,246|uni0634]
+../fonts/TestGPOSFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=700:U+0634,U+0652:[uni0652 at 750,282|uni0634]
+../fonts/TestGPOSFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=900:U+0634,U+0652:[uni0652 at 784,351|uni0634]
diff --git a/test/shaping/data/text-rendering-tests/tests/GSUB-1.tests b/test/shaping/data/text-rendering-tests/tests/GSUB-1.tests
index 591a9e55..e33a6f17 100644
--- a/test/shaping/data/text-rendering-tests/tests/GSUB-1.tests
+++ b/test/shaping/data/text-rendering-tests/tests/GSUB-1.tests
@@ -1 +1 @@
-../fonts/TestGSUBOne.otf:--font-size=1000 --ned --font-funcs=ft:U+0061,U+0020,U+0061:[a.alt|space at 500,0|a at 1000,0]
+../fonts/TestGSUBOne.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0061,U+0020,U+0061:[a.alt|space at 500,0|a at 1000,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/GSUB-2.tests b/test/shaping/data/text-rendering-tests/tests/GSUB-2.tests
index 601b483e..34c8debd 100644
--- a/test/shaping/data/text-rendering-tests/tests/GSUB-2.tests
+++ b/test/shaping/data/text-rendering-tests/tests/GSUB-2.tests
@@ -1,11 +1,11 @@
-../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+1373:[uni1373]
-../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+136B:[uni136B]
-../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+1375:[uni1375]
-../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+136D:[uni136D]
-../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+1373,U+136B:[uni1373.init|uni136B.fina at 621,0]
-../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+1375,U+136D:[uni1375.init|uni136D.fina at 662,0]
-../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+137B:[uni137B]
-../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+1373,U+136B,U+137B:[uni1373.init|uni136B.medi at 621,0|uni137B.fina at 1102,0]
-../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+1373,U+136B,U+137B,U+1373,U+136B:[uni1373.init|uni136B.medi at 621,0|uni137B.medi at 1102,0|uni1373.medi at 1489,0|uni136B.fina at 2110,0]
-../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+1373,U+136B,U+137B,U+1375,U+136D:[uni1373.init|uni136B.medi at 621,0|uni137B.medi at 1102,0|uni1375.medi at 1489,0|uni136D.fina at 2157,0]
-../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+1375,U+136D,U+137B,U+1373,U+136B:[uni1375.init|uni136D.medi at 662,0|uni137B.medi at 1203,0|uni1373.medi at 1590,0|uni136B.fina at 2211,0]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1373:[uni1373]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+136B:[uni136B]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1375:[uni1375]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+136D:[uni136D]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1373,U+136B:[uni1373.init|uni136B.fina at 621,0]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1375,U+136D:[uni1375.init|uni136D.fina at 662,0]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+137B:[uni137B]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1373,U+136B,U+137B:[uni1373.init|uni136B.medi at 621,0|uni137B.fina at 1102,0]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1373,U+136B,U+137B,U+1373,U+136B:[uni1373.init|uni136B.medi at 621,0|uni137B.medi at 1102,0|uni1373.medi at 1489,0|uni136B.fina at 2110,0]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1373,U+136B,U+137B,U+1375,U+136D:[uni1373.init|uni136B.medi at 621,0|uni137B.medi at 1102,0|uni1375.medi at 1489,0|uni136D.fina at 2157,0]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1375,U+136D,U+137B,U+1373,U+136B:[uni1375.init|uni136D.medi at 662,0|uni137B.medi at 1203,0|uni1373.medi at 1590,0|uni136B.fina at 2211,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-1.tests b/test/shaping/data/text-rendering-tests/tests/GVAR-1.tests
index 620fcfc7..fc00a4ea 100644
--- a/test/shaping/data/text-rendering-tests/tests/GVAR-1.tests
+++ b/test/shaping/data/text-rendering-tests/tests/GVAR-1.tests
@@ -1,9 +1,9 @@
-../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=300:U+5F4C:[gid2]
-../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=350:U+5F4C:[gid2]
-../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=400:U+5F4C:[gid2]
-../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=450:U+5F4C:[gid2]
-../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=500:U+5F4C:[gid2]
-../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=550:U+5F4C:[gid2]
-../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=600:U+5F4C:[gid2]
-../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=650:U+5F4C:[gid2]
-../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=700:U+5F4C:[gid2]
+../fonts/TestGVAROne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=300:U+5F4C:[gid2]
+../fonts/TestGVAROne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=350:U+5F4C:[gid2]
+../fonts/TestGVAROne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=400:U+5F4C:[gid2]
+../fonts/TestGVAROne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=450:U+5F4C:[gid2]
+../fonts/TestGVAROne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=500:U+5F4C:[gid2]
+../fonts/TestGVAROne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=550:U+5F4C:[gid2]
+../fonts/TestGVAROne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=600:U+5F4C:[gid2]
+../fonts/TestGVAROne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=650:U+5F4C:[gid2]
+../fonts/TestGVAROne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=700:U+5F4C:[gid2]
diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-2.tests b/test/shaping/data/text-rendering-tests/tests/GVAR-2.tests
index 3b2932c9..10e22e46 100644
--- a/test/shaping/data/text-rendering-tests/tests/GVAR-2.tests
+++ b/test/shaping/data/text-rendering-tests/tests/GVAR-2.tests
@@ -1,9 +1,9 @@
-../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=300:U+5F4C:[gid2]
-../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=350:U+5F4C:[gid2]
-../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=400:U+5F4C:[gid2]
-../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=450:U+5F4C:[gid2]
-../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=500:U+5F4C:[gid2]
-../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=550:U+5F4C:[gid2]
-../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=600:U+5F4C:[gid2]
-../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=650:U+5F4C:[gid2]
-../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=700:U+5F4C:[gid2]
+../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=300:U+5F4C:[gid2]
+../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=350:U+5F4C:[gid2]
+../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=400:U+5F4C:[gid2]
+../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=450:U+5F4C:[gid2]
+../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=500:U+5F4C:[gid2]
+../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=550:U+5F4C:[gid2]
+../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=600:U+5F4C:[gid2]
+../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=650:U+5F4C:[gid2]
+../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=700:U+5F4C:[gid2]
diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-3.tests b/test/shaping/data/text-rendering-tests/tests/GVAR-3.tests
index 05d07438..c3b80493 100644
--- a/test/shaping/data/text-rendering-tests/tests/GVAR-3.tests
+++ b/test/shaping/data/text-rendering-tests/tests/GVAR-3.tests
@@ -1,9 +1,9 @@
-../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=300:U+5F4C:[gid2]
-../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=350:U+5F4C:[gid2]
-../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=400:U+5F4C:[gid2]
-../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=450:U+5F4C:[gid2]
-../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=500:U+5F4C:[gid2]
-../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=550:U+5F4C:[gid2]
-../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=600:U+5F4C:[gid2]
-../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=650:U+5F4C:[gid2]
-../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=700:U+5F4C:[gid2]
+../fonts/TestGVARThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=300:U+5F4C:[gid2]
+../fonts/TestGVARThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=350:U+5F4C:[gid2]
+../fonts/TestGVARThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=400:U+5F4C:[gid2]
+../fonts/TestGVARThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=450:U+5F4C:[gid2]
+../fonts/TestGVARThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=500:U+5F4C:[gid2]
+../fonts/TestGVARThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=550:U+5F4C:[gid2]
+../fonts/TestGVARThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=600:U+5F4C:[gid2]
+../fonts/TestGVARThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=650:U+5F4C:[gid2]
+../fonts/TestGVARThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=700:U+5F4C:[gid2]
diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-4.tests b/test/shaping/data/text-rendering-tests/tests/GVAR-4.tests
index 700a287b..1c0964d2 100644
--- a/test/shaping/data/text-rendering-tests/tests/GVAR-4.tests
+++ b/test/shaping/data/text-rendering-tests/tests/GVAR-4.tests
@@ -1,11 +1,11 @@
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=-1.0,T1=0.0:U+1F98E:[gid5]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=-0.8,T1=0.1:U+1F98E:[gid5]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=-0.6,T1=0.2:U+1F98E:[gid5]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=-0.4,T1=0.3:U+1F98E:[gid5]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=-0.2,T1=0.4:U+1F98E:[gid5]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=0.0,T1=0.5:U+1F98E:[gid5]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=0.2,T1=0.6:U+1F98E:[gid5]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=0.4,T1=0.7:U+1F98E:[gid5]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=0.6,T1=0.8:U+1F98E:[gid5]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=0.8,T1=0.9:U+1F98E:[gid5]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=1.0,T1=1.0:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=M1=-1.0,T1=0.0:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=M1=-0.8,T1=0.1:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=M1=-0.6,T1=0.2:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=M1=-0.4,T1=0.3:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=M1=-0.2,T1=0.4:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=M1=0.0,T1=0.5:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=M1=0.2,T1=0.6:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=M1=0.4,T1=0.7:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=M1=0.6,T1=0.8:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=M1=0.8,T1=0.9:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=M1=1.0,T1=1.0:U+1F98E:[gid5]
diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-5.tests b/test/shaping/data/text-rendering-tests/tests/GVAR-5.tests
index 27670f12..b2ff7106 100644
--- a/test/shaping/data/text-rendering-tests/tests/GVAR-5.tests
+++ b/test/shaping/data/text-rendering-tests/tests/GVAR-5.tests
@@ -1,11 +1,11 @@
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=-1.0:U+1F31D:[gid15]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=-0.8:U+1F31D:[gid15]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=-0.6:U+1F31D:[gid15]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=-0.4:U+1F31D:[gid15]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=-0.2:U+1F31D:[gid15]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=0.0:U+1F31D:[gid15]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=0.2:U+1F31D:[gid15]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=0.4:U+1F31D:[gid15]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=0.6:U+1F31D:[gid15]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=0.8:U+1F31D:[gid15]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=1.0:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=M1=-1.0:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=M1=-0.8:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=M1=-0.6:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=M1=-0.4:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=M1=-0.2:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=M1=0.0:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=M1=0.2:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=M1=0.4:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=M1=0.6:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=M1=0.8:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=M1=1.0:U+1F31D:[gid15]
diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-6.tests b/test/shaping/data/text-rendering-tests/tests/GVAR-6.tests
index 61e060ad..f96292b5 100644
--- a/test/shaping/data/text-rendering-tests/tests/GVAR-6.tests
+++ b/test/shaping/data/text-rendering-tests/tests/GVAR-6.tests
@@ -1,11 +1,11 @@
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=T1=0.0:U+1F422:[gid12]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=T1=0.1:U+1F422:[gid12]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=T1=0.2:U+1F422:[gid12]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=T1=0.3:U+1F422:[gid12]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=T1=0.4:U+1F422:[gid12]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=T1=0.5:U+1F422:[gid12]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=T1=0.6:U+1F422:[gid12]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=T1=0.7:U+1F422:[gid12]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=T1=0.8:U+1F422:[gid12]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=T1=0.9:U+1F422:[gid12]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=T1=1.0:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=T1=0.0:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=T1=0.1:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=T1=0.2:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=T1=0.3:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=T1=0.4:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=T1=0.5:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=T1=0.6:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=T1=0.7:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=T1=0.8:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=T1=0.9:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=T1=1.0:U+1F422:[gid12]
diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-7.tests b/test/shaping/data/text-rendering-tests/tests/GVAR-7.tests
index 1280d714..594da3ba 100644
--- a/test/shaping/data/text-rendering-tests/tests/GVAR-7.tests
+++ b/test/shaping/data/text-rendering-tests/tests/GVAR-7.tests
@@ -1,7 +1,7 @@
-../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=150:U+004F,U+0049,U+004F:[uni004F|uni0049 at 706,0|uni004F at 1072,0]
-../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=200:U+004F,U+0049,U+004F:[uni004F|uni0049 at 707,0|uni004F at 1074,0]
-../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=250:U+004F,U+0049,U+004F:[uni004F|uni0049 at 707,0|uni004F at 1075,0]
-../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=300:U+004F,U+0049,U+004F:[uni004F|uni0049 at 707,0|uni004F at 1076,0]
-../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=350:U+004F,U+0049,U+004F:[uni004F|uni0049 at 707,0|uni004F at 1077,0]
-../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=400:U+004F,U+0049,U+004F:[uni004F|uni0049 at 707,0|uni004F at 1078,0]
-../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=450:U+004F,U+0049,U+004F:[uni004F|uni0049 at 706,0|uni004F at 1079,0]
+../fonts/TestGVARFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=150:U+004F,U+0049,U+004F:[uni004F|uni0049 at 706,0|uni004F at 1072,0]
+../fonts/TestGVARFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=200:U+004F,U+0049,U+004F:[uni004F|uni0049 at 707,0|uni004F at 1074,0]
+../fonts/TestGVARFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=250:U+004F,U+0049,U+004F:[uni004F|uni0049 at 707,0|uni004F at 1075,0]
+../fonts/TestGVARFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=300:U+004F,U+0049,U+004F:[uni004F|uni0049 at 707,0|uni004F at 1076,0]
+../fonts/TestGVARFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=350:U+004F,U+0049,U+004F:[uni004F|uni0049 at 707,0|uni004F at 1077,0]
+../fonts/TestGVARFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=400:U+004F,U+0049,U+004F:[uni004F|uni0049 at 707,0|uni004F at 1078,0]
+../fonts/TestGVARFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=450:U+004F,U+0049,U+004F:[uni004F|uni0049 at 706,0|uni004F at 1079,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-8.tests b/test/shaping/data/text-rendering-tests/tests/GVAR-8.tests
index 209f3253..e5c82090 100644
--- a/test/shaping/data/text-rendering-tests/tests/GVAR-8.tests
+++ b/test/shaping/data/text-rendering-tests/tests/GVAR-8.tests
@@ -1,6 +1,6 @@
-../fonts/TestGVAREight.ttf:--font-size=1000 --ned --font-funcs=ft --variations=HV=0.0:U+0048:[H]
-../fonts/TestGVAREight.ttf:--font-size=1000 --ned --font-funcs=ft --variations=HV=-0.2:U+0048:[H]
-../fonts/TestGVAREight.ttf:--font-size=1000 --ned --font-funcs=ft --variations=HV=-0.4:U+0048:[H]
-../fonts/TestGVAREight.ttf:--font-size=1000 --ned --font-funcs=ft --variations=HV=-0.6:U+0048:[H]
-../fonts/TestGVAREight.ttf:--font-size=1000 --ned --font-funcs=ft --variations=HV=-0.8:U+0048:[H]
-../fonts/TestGVAREight.ttf:--font-size=1000 --ned --font-funcs=ft --variations=HV=-1.0:U+0048:[H]
+../fonts/TestGVAREight.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=HV=0.0:U+0048:[H]
+../fonts/TestGVAREight.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=HV=-0.2:U+0048:[H]
+../fonts/TestGVAREight.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=HV=-0.4:U+0048:[H]
+../fonts/TestGVAREight.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=HV=-0.6:U+0048:[H]
+../fonts/TestGVAREight.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=HV=-0.8:U+0048:[H]
+../fonts/TestGVAREight.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=HV=-1.0:U+0048:[H]
diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-9.tests b/test/shaping/data/text-rendering-tests/tests/GVAR-9.tests
index ababf5d6..19e2ed8e 100644
--- a/test/shaping/data/text-rendering-tests/tests/GVAR-9.tests
+++ b/test/shaping/data/text-rendering-tests/tests/GVAR-9.tests
@@ -1,10 +1,10 @@
-../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=-1.0:U+0041:[A]
-../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=-0.5:U+0041:[A]
-../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=0.0:U+0041:[A]
-../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=0.5:U+0041:[A]
-../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=0.6:U+0041:[A]
-../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=0.7:U+0041:[A]
-../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=0.8:U+0041:[A]
-../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=0.9:U+0041:[A]
-../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=0.944444:U+0041:[A]
-../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=1.0:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=TEST=-1.0:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=TEST=-0.5:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=TEST=0.0:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=TEST=0.5:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=TEST=0.6:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=TEST=0.7:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=TEST=0.8:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=TEST=0.9:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=TEST=0.944444:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=TEST=1.0:U+0041:[A]
diff --git a/test/shaping/data/text-rendering-tests/tests/HVAR-1.tests b/test/shaping/data/text-rendering-tests/tests/HVAR-1.tests
index d5dea06d..189d9f0b 100644
--- a/test/shaping/data/text-rendering-tests/tests/HVAR-1.tests
+++ b/test/shaping/data/text-rendering-tests/tests/HVAR-1.tests
@@ -1,6 +1,6 @@
-../fonts/TestHVAROne.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=0:U+0041,U+0042,U+0043:[A|B at 520,0|C at 1094,0]
-../fonts/TestHVAROne.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=200:U+0041,U+0042,U+0043:[A|B at 533,0|C at 1115,0]
-../fonts/TestHVAROne.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=400:U+0041,U+0042,U+0043:[A|B at 546,0|C at 1135,0]
-../fonts/TestHVAROne.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=600:U+0041,U+0042,U+0043:[A|B at 558,0|C at 1155,0]
-../fonts/TestHVAROne.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=800:U+0041,U+0042,U+0043:[A|B at 571,0|C at 1175,0]
-../fonts/TestHVAROne.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=1000:U+0041,U+0042,U+0043:[A|B at 584,0|C at 1196,0]
+../fonts/TestHVAROne.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=0:U+0041,U+0042,U+0043:[A|B at 520,0|C at 1094,0]
+../fonts/TestHVAROne.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=200:U+0041,U+0042,U+0043:[A|B at 533,0|C at 1115,0]
+../fonts/TestHVAROne.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=400:U+0041,U+0042,U+0043:[A|B at 546,0|C at 1135,0]
+../fonts/TestHVAROne.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=600:U+0041,U+0042,U+0043:[A|B at 558,0|C at 1155,0]
+../fonts/TestHVAROne.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=800:U+0041,U+0042,U+0043:[A|B at 571,0|C at 1175,0]
+../fonts/TestHVAROne.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=1000:U+0041,U+0042,U+0043:[A|B at 584,0|C at 1196,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/HVAR-2.tests b/test/shaping/data/text-rendering-tests/tests/HVAR-2.tests
index 23113b05..db93be98 100644
--- a/test/shaping/data/text-rendering-tests/tests/HVAR-2.tests
+++ b/test/shaping/data/text-rendering-tests/tests/HVAR-2.tests
@@ -1,6 +1,6 @@
-../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=0:U+0041,U+0042:[uni0041|uni0042 at 450,0]
-../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=200:U+0041,U+0042:[uni0041|uni0042 at 515,0]
-../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=400:U+0041,U+0042:[uni0041|uni0042 at 584,0]
-../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=600:U+0041,U+0042:[uni0041|uni0042 at 673,0]
-../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=800:U+0041,U+0042:[uni0041|uni0042 at 761,0]
-../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=1000:U+0041,U+0042:[uni0041|uni0042 at 850,0]
+../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=0:U+0041,U+0042:[uni0041|uni0042 at 450,0]
+../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=200:U+0041,U+0042:[uni0041|uni0042 at 515,0]
+../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=400:U+0041,U+0042:[uni0041|uni0042 at 584,0]
+../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=600:U+0041,U+0042:[uni0041|uni0042 at 673,0]
+../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=800:U+0041,U+0042:[uni0041|uni0042 at 761,0]
+../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft --variations=wght=1000:U+0041,U+0042:[uni0041|uni0042 at 850,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/KERN-1.tests b/test/shaping/data/text-rendering-tests/tests/KERN-1.tests
index 7bc66b8a..f0c02140 100644
--- a/test/shaping/data/text-rendering-tests/tests/KERN-1.tests
+++ b/test/shaping/data/text-rendering-tests/tests/KERN-1.tests
@@ -1 +1 @@
-../fonts/TestKERNOne.otf:--font-size=1000 --ned --font-funcs=ft:U+0131,U+0054,U+0075,U+0054,U+0075,U+0054,U+0131:[dotlessi|T|u at 400,0|T at 600,0|u at 1000,0|T at 1200,0|dotlessi at 1600,0]
+../fonts/TestKERNOne.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0131,U+0054,U+0075,U+0054,U+0075,U+0054,U+0131:[dotlessi|T|u at 400,0|T at 600,0|u at 1000,0|T at 1200,0|dotlessi at 1600,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/KERN-2.tests b/test/shaping/data/text-rendering-tests/tests/KERN-2.tests
index 9c2cc9ac..fdffa4a4 100644
--- a/test/shaping/data/text-rendering-tests/tests/KERN-2.tests
+++ b/test/shaping/data/text-rendering-tests/tests/KERN-2.tests
@@ -1 +1 @@
-../fonts/TestKERNOne.otf:--font-size=1000 --ned --font-funcs=ft:U+0075,U+0131,U+0131,U+0054,U+0131,U+0131,U+0054,U+0131,U+0131,U+0075:[u|dotlessi at 400,0|dotlessi at 1100,0|T at 1100,0|dotlessi at 1500,0|dotlessi at 2200,0|T at 2200,0|dotlessi at 2600,0|dotlessi at 3300,0|u at 3500,0]
+../fonts/TestKERNOne.otf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0075,U+0131,U+0131,U+0054,U+0131,U+0131,U+0054,U+0131,U+0131,U+0075:[u|dotlessi at 400,0|dotlessi at 1100,0|T at 1100,0|dotlessi at 1500,0|dotlessi at 2200,0|T at 2200,0|dotlessi at 2600,0|dotlessi at 3300,0|u at 3500,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-1.tests b/test/shaping/data/text-rendering-tests/tests/MORX-1.tests
index 27214cfd..794b01bf 100644
--- a/test/shaping/data/text-rendering-tests/tests/MORX-1.tests
+++ b/test/shaping/data/text-rendering-tests/tests/MORX-1.tests
@@ -1 +1 @@
-../fonts/TestMORXOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0043:[A.alt|B at 1000,0|C.alt at 2000,0]
+../fonts/TestMORXOne.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041,U+0042,U+0043:[A.alt|B at 1000,0|C.alt at 2000,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-2.tests b/test/shaping/data/text-rendering-tests/tests/MORX-2.tests
index 4d7a965c..3e64d234 100644
--- a/test/shaping/data/text-rendering-tests/tests/MORX-2.tests
+++ b/test/shaping/data/text-rendering-tests/tests/MORX-2.tests
@@ -1,16 +1,16 @@
-../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+24FF:[O|O at 418,0|O at 836,0|A at 1254,0|B at 2084,0|X at 2914,0|Y at 3744,0|Z at 4574,0|C at 5404,0|D at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|zero at 8318,0]
-../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+278A:[O|O at 418,0|O at 836,0|B at 1254,0|X at 2084,0|Y at 2914,0|Z at 3744,0|C at 4574,0|D at 5404,0|A at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|one at 8318,0]
-../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+278B:[O|O at 418,0|O at 836,0|D at 1254,0|A at 2084,0|B at 2914,0|X at 3744,0|Y at 4574,0|Z at 5404,0|C at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|two at 8318,0]
-../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+0033:[O|O at 418,0|O at 836,0|D at 1254,0|B at 2084,0|X at 2914,0|Y at 3744,0|Z at 4574,0|C at 5404,0|A at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|three at 8318,0]
-../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+0034:[O|O at 418,0|O at 836,0|X at 1254,0|Y at 2084,0|Z at 2914,0|C at 3744,0|D at 4574,0|A at 5404,0|B at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|four at 8318,0]
-../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+0035:[O|O at 418,0|O at 836,0|X at 1254,0|Y at 2084,0|Z at 2914,0|C at 3744,0|D at 4574,0|B at 5404,0|A at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|five at 8318,0]
-../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+0036:[O|O at 418,0|O at 836,0|C at 1254,0|D at 2084,0|A at 2914,0|B at 3744,0|X at 4574,0|Y at 5404,0|Z at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|six at 8318,0]
-../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+0037:[O|O at 418,0|O at 836,0|D at 1254,0|C at 2084,0|A at 2914,0|B at 3744,0|X at 4574,0|Y at 5404,0|Z at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|seven at 8318,0]
-../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+0038:[O|O at 418,0|O at 836,0|C at 1254,0|D at 2084,0|B at 2914,0|X at 3744,0|Y at 4574,0|Z at 5404,0|A at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|eight at 8318,0]
-../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+0039:[O|O at 418,0|O at 836,0|D at 1254,0|C at 2084,0|B at 2914,0|X at 3744,0|Y at 4574,0|Z at 5404,0|A at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|nine at 8318,0]
-../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+2793:[O|O at 418,0|O at 836,0|D at 1254,0|X at 2084,0|Y at 2914,0|Z at 3744,0|C at 4574,0|A at 5404,0|B at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|one_zero at 8318,0]
-../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+24EB:[O|O at 418,0|O at 836,0|D at 1254,0|X at 2084,0|Y at 2914,0|Z at 3744,0|C at 4574,0|B at 5404,0|A at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|one_one at 8318,0]
-../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+24EC:[O|O at 418,0|O at 836,0|C at 1254,0|D at 2084,0|X at 2914,0|Y at 3744,0|Z at 4574,0|A at 5404,0|B at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|one_two at 8318,0]
-../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+24ED:[O|O at 418,0|O at 836,0|C at 1254,0|D at 2084,0|X at 2914,0|Y at 3744,0|Z at 4574,0|B at 5404,0|A at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|one_three at 8318,0]
-../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+24EE:[O|O at 418,0|O at 836,0|D at 1254,0|C at 2084,0|X at 2914,0|Y at 3744,0|Z at 4574,0|A at 5404,0|B at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|one_four at 8318,0]
-../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+24EF:[O|O at 418,0|O at 836,0|D at 1254,0|C at 2084,0|X at 2914,0|Y at 3744,0|Z at 4574,0|B at 5404,0|A at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|one_five at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+24FF:[O|O at 418,0|O at 836,0|A at 1254,0|B at 2084,0|X at 2914,0|Y at 3744,0|Z at 4574,0|C at 5404,0|D at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|zero at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+278A:[O|O at 418,0|O at 836,0|B at 1254,0|X at 2084,0|Y at 2914,0|Z at 3744,0|C at 4574,0|D at 5404,0|A at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|one at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+278B:[O|O at 418,0|O at 836,0|D at 1254,0|A at 2084,0|B at 2914,0|X at 3744,0|Y at 4574,0|Z at 5404,0|C at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|two at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+0033:[O|O at 418,0|O at 836,0|D at 1254,0|B at 2084,0|X at 2914,0|Y at 3744,0|Z at 4574,0|C at 5404,0|A at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|three at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+0034:[O|O at 418,0|O at 836,0|X at 1254,0|Y at 2084,0|Z at 2914,0|C at 3744,0|D at 4574,0|A at 5404,0|B at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|four at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+0035:[O|O at 418,0|O at 836,0|X at 1254,0|Y at 2084,0|Z at 2914,0|C at 3744,0|D at 4574,0|B at 5404,0|A at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|five at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+0036:[O|O at 418,0|O at 836,0|C at 1254,0|D at 2084,0|A at 2914,0|B at 3744,0|X at 4574,0|Y at 5404,0|Z at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|six at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+0037:[O|O at 418,0|O at 836,0|D at 1254,0|C at 2084,0|A at 2914,0|B at 3744,0|X at 4574,0|Y at 5404,0|Z at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|seven at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+0038:[O|O at 418,0|O at 836,0|C at 1254,0|D at 2084,0|B at 2914,0|X at 3744,0|Y at 4574,0|Z at 5404,0|A at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|eight at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+0039:[O|O at 418,0|O at 836,0|D at 1254,0|C at 2084,0|B at 2914,0|X at 3744,0|Y at 4574,0|Z at 5404,0|A at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|nine at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+2793:[O|O at 418,0|O at 836,0|D at 1254,0|X at 2084,0|Y at 2914,0|Z at 3744,0|C at 4574,0|A at 5404,0|B at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|one_zero at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+24EB:[O|O at 418,0|O at 836,0|D at 1254,0|X at 2084,0|Y at 2914,0|Z at 3744,0|C at 4574,0|B at 5404,0|A at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|one_one at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+24EC:[O|O at 418,0|O at 836,0|C at 1254,0|D at 2084,0|X at 2914,0|Y at 3744,0|Z at 4574,0|A at 5404,0|B at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|one_two at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+24ED:[O|O at 418,0|O at 836,0|C at 1254,0|D at 2084,0|X at 2914,0|Y at 3744,0|Z at 4574,0|B at 5404,0|A at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|one_three at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+24EE:[O|O at 418,0|O at 836,0|D at 1254,0|C at 2084,0|X at 2914,0|Y at 3744,0|Z at 4574,0|A at 5404,0|B at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|one_four at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+24EF:[O|O at 418,0|O at 836,0|D at 1254,0|C at 2084,0|X at 2914,0|Y at 3744,0|Z at 4574,0|B at 5404,0|A at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|one_five at 8318,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-3.tests b/test/shaping/data/text-rendering-tests/tests/MORX-3.tests
index 2ec51578..fc7fe946 100644
--- a/test/shaping/data/text-rendering-tests/tests/MORX-3.tests
+++ b/test/shaping/data/text-rendering-tests/tests/MORX-3.tests
@@ -1,16 +1,16 @@
-../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0030:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|zero at 1793,0]
-../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0031:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|one at 1793,0]
-../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0032:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|two at 1793,0]
-../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0033:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|three at 1793,0]
-../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0034:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|four at 1793,0]
-../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0035:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|five at 1793,0]
-../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0036:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|six at 1793,0]
-../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0037:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|seven at 1793,0]
-../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0038:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|eight at 1793,0]
-../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0039:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|nine at 1793,0]
-../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+2793:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|one_zero at 1793,0]
-../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+24EB:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|one_one at 1793,0]
-../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+24EC:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|one_two at 1793,0]
-../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+24ED:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|one_three at 1793,0]
-../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+24EE:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|one_four at 1793,0]
-../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+24EF:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|one_five at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0030:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|zero at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0031:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|one at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0032:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|two at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0033:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|three at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0034:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|four at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0035:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|five at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0036:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|six at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0037:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|seven at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0038:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|eight at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0039:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|nine at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+2793:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|one_zero at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+24EB:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|one_one at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+24EC:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|one_two at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+24ED:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|one_three at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+24EE:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|one_four at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+24EF:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|one_five at 1793,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-4.tests b/test/shaping/data/text-rendering-tests/tests/MORX-4.tests
index dae1d13d..cbb1ce8a 100644
--- a/test/shaping/data/text-rendering-tests/tests/MORX-4.tests
+++ b/test/shaping/data/text-rendering-tests/tests/MORX-4.tests
@@ -1,15 +1,15 @@
-../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0058,U+0059,U+005A,U+0031:[P|Q at 333,0|R at 699,0|A at 1050,0|X at 1880,0|Y at 2244,0|Z at 2576,0|one at 2898,0]
-../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0058,U+0059,U+005A,U+0032:[P|Q at 333,0|R at 699,0|A at 1050,0|X at 1880,0|Y at 2244,0|Z at 2576,0|two at 2898,0]
-../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0044,U+0058,U+0059,U+005A,U+0033:[P|Q at 333,0|R at 699,0|D at 1050,0|A at 1880,0|X at 2710,0|Y at 3074,0|Z at 3406,0|three at 3728,0]
-../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0058,U+0059,U+005A,U+0034:[P|Q at 333,0|R at 699,0|A at 1050,0|B at 1880,0|X at 2710,0|Y at 3074,0|Z at 3406,0|four at 3728,0]
-../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0058,U+0059,U+005A,U+0035:[P|Q at 333,0|R at 699,0|B at 1050,0|A at 1880,0|X at 2710,0|Y at 3074,0|Z at 3406,0|five at 3728,0]
-../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0058,U+0059,U+005A,U+0036:[P|Q at 333,0|R at 699,0|A at 1050,0|B at 1880,0|X at 2710,0|Y at 3074,0|Z at 3406,0|six at 3728,0]
-../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0058,U+0059,U+005A,U+0037:[P|Q at 333,0|R at 699,0|B at 1050,0|A at 1880,0|X at 2710,0|Y at 3074,0|Z at 3406,0|seven at 3728,0]
-../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0043,U+0044,U+0058,U+0059,U+005A,U+0038:[P|Q at 333,0|R at 699,0|C at 1050,0|D at 1880,0|A at 2710,0|X at 3540,0|Y at 3904,0|Z at 4236,0|eight at 4558,0]
-../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0043,U+0044,U+0058,U+0059,U+005A,U+0039:[P|Q at 333,0|R at 699,0|D at 1050,0|C at 1880,0|A at 2710,0|X at 3540,0|Y at 3904,0|Z at 4236,0|nine at 4558,0]
-../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0044,U+0058,U+0059,U+005A,U+2793:[P|Q at 333,0|R at 699,0|D at 1050,0|A at 1880,0|B at 2710,0|X at 3540,0|Y at 3904,0|Z at 4236,0|one_zero at 4558,0]
-../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0044,U+0058,U+0059,U+005A,U+24EB:[P|Q at 333,0|R at 699,0|D at 1050,0|B at 1880,0|A at 2710,0|X at 3540,0|Y at 3904,0|Z at 4236,0|one_one at 4558,0]
-../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0043,U+0044,U+0058,U+0059,U+005A,U+24EC:[P|Q at 333,0|R at 699,0|C at 1050,0|D at 1880,0|A at 2710,0|B at 3540,0|X at 4370,0|Y at 4734,0|Z at 5066,0|one_two at 5388,0]
-../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0043,U+0044,U+0058,U+0059,U+005A,U+24ED:[P|Q at 333,0|R at 699,0|C at 1050,0|D at 1880,0|B at 2710,0|A at 3540,0|X at 4370,0|Y at 4734,0|Z at 5066,0|one_three at 5388,0]
-../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0043,U+0044,U+0058,U+0059,U+005A,U+24EE:[P|Q at 333,0|R at 699,0|D at 1050,0|C at 1880,0|A at 2710,0|B at 3540,0|X at 4370,0|Y at 4734,0|Z at 5066,0|one_four at 5388,0]
-../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0043,U+0044,U+0058,U+0059,U+005A,U+24EF:[P|Q at 333,0|R at 699,0|D at 1050,0|C at 1880,0|B at 2710,0|A at 3540,0|X at 4370,0|Y at 4734,0|Z at 5066,0|one_five at 5388,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0058,U+0059,U+005A,U+0031:[P|Q at 333,0|R at 699,0|A at 1050,0|X at 1880,0|Y at 2244,0|Z at 2576,0|one at 2898,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0058,U+0059,U+005A,U+0032:[P|Q at 333,0|R at 699,0|A at 1050,0|X at 1880,0|Y at 2244,0|Z at 2576,0|two at 2898,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0044,U+0058,U+0059,U+005A,U+0033:[P|Q at 333,0|R at 699,0|D at 1050,0|A at 1880,0|X at 2710,0|Y at 3074,0|Z at 3406,0|three at 3728,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0058,U+0059,U+005A,U+0034:[P|Q at 333,0|R at 699,0|A at 1050,0|B at 1880,0|X at 2710,0|Y at 3074,0|Z at 3406,0|four at 3728,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0058,U+0059,U+005A,U+0035:[P|Q at 333,0|R at 699,0|B at 1050,0|A at 1880,0|X at 2710,0|Y at 3074,0|Z at 3406,0|five at 3728,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0058,U+0059,U+005A,U+0036:[P|Q at 333,0|R at 699,0|A at 1050,0|B at 1880,0|X at 2710,0|Y at 3074,0|Z at 3406,0|six at 3728,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0058,U+0059,U+005A,U+0037:[P|Q at 333,0|R at 699,0|B at 1050,0|A at 1880,0|X at 2710,0|Y at 3074,0|Z at 3406,0|seven at 3728,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0043,U+0044,U+0058,U+0059,U+005A,U+0038:[P|Q at 333,0|R at 699,0|C at 1050,0|D at 1880,0|A at 2710,0|X at 3540,0|Y at 3904,0|Z at 4236,0|eight at 4558,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0043,U+0044,U+0058,U+0059,U+005A,U+0039:[P|Q at 333,0|R at 699,0|D at 1050,0|C at 1880,0|A at 2710,0|X at 3540,0|Y at 3904,0|Z at 4236,0|nine at 4558,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0044,U+0058,U+0059,U+005A,U+2793:[P|Q at 333,0|R at 699,0|D at 1050,0|A at 1880,0|B at 2710,0|X at 3540,0|Y at 3904,0|Z at 4236,0|one_zero at 4558,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0044,U+0058,U+0059,U+005A,U+24EB:[P|Q at 333,0|R at 699,0|D at 1050,0|B at 1880,0|A at 2710,0|X at 3540,0|Y at 3904,0|Z at 4236,0|one_one at 4558,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0043,U+0044,U+0058,U+0059,U+005A,U+24EC:[P|Q at 333,0|R at 699,0|C at 1050,0|D at 1880,0|A at 2710,0|B at 3540,0|X at 4370,0|Y at 4734,0|Z at 5066,0|one_two at 5388,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0043,U+0044,U+0058,U+0059,U+005A,U+24ED:[P|Q at 333,0|R at 699,0|C at 1050,0|D at 1880,0|B at 2710,0|A at 3540,0|X at 4370,0|Y at 4734,0|Z at 5066,0|one_three at 5388,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0043,U+0044,U+0058,U+0059,U+005A,U+24EE:[P|Q at 333,0|R at 699,0|D at 1050,0|C at 1880,0|A at 2710,0|B at 3540,0|X at 4370,0|Y at 4734,0|Z at 5066,0|one_four at 5388,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0043,U+0044,U+0058,U+0059,U+005A,U+24EF:[P|Q at 333,0|R at 699,0|D at 1050,0|C at 1880,0|B at 2710,0|A at 3540,0|X at 4370,0|Y at 4734,0|Z at 5066,0|one_five at 5388,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/SHARAN-1.tests b/test/shaping/data/text-rendering-tests/tests/SHARAN-1.tests
index f4c92d90..56e83abf 100644
--- a/test/shaping/data/text-rendering-tests/tests/SHARAN-1.tests
+++ b/test/shaping/data/text-rendering-tests/tests/SHARAN-1.tests
@@ -1,6 +1,6 @@
-../fonts/TestShapeAran.ttf:--font-size=1000 --ned --font-funcs=ft:U+0644,U+0633,U+0627,U+0646:[OneDotEnclNS at 398,-1|NoonxSep|AlefFin at 861,0|SeenMed.inT2outT1 at 1125,0|sp0 at 1664,0|LamIni.outT2 at 1664,223]
-../fonts/TestShapeAran.ttf:--font-size=1000 --ned --font-funcs=ft:U+06CC,U+0648,U+0646,U+06CC,U+06A9,U+0648,U+0688:[TahSmallNS at 118,-213|DalSep|WawFin.cut at 300,0|KafMed.outT3 at 573,206|TwoDotsBelowNS at 1115,220|BehxMed.inT2outT1 at 903,304|OneDotAboveNS at 1271,-71|sp1 at 1170,0|BehxIni.outT2 at 1170,449|WawFin.inD2 at 1387,0|TwoDotsBelowNS at 1867,1|sp0 at 1758,0|BehxIni.outD2WQ at 1758,323]
-../fonts/TestShapeAran.ttf:--font-size=1000 --ned --font-funcs=ft:U+0641,U+0648,U+0646,U+0679:[TahSmallNS at 595,-331|BehxFin.soft|OneDotAboveNS at 1163,-182|sp0 at 1184,0|BehxIni.outT2B at 1184,300|WawFin.inD2alt at 1340,0|OneDotAboveNS at 1784,108|sp0 at 1599,0|FehxIni.outD2WQ at 1599,237]
-../fonts/TestShapeAran.ttf:--font-size=1000 --ned --font-funcs=ft:U+0679,U+0627,U+0626,U+067E,U+0020,U+0641,U+06CC,U+0633:[SeenFin|TwoDotsBelowNS at 1216,269|BehxMed.inT1outT2SeenWide at 1041,455|OneDotAboveNS at 1454,224|sp0 at 1271,0|FehxIni at 1271,490|space at 1584,0|ThreeDotsDownBelowNS at 2290,-159|BehxFin.soft at 1715,0|HamzaAboveNS at 2878,-201|sp0 at 2899,0|BehxIni.outT2B at 2899,300|AlefFin.narrow at 3056,0|TahSmallNS at 3442,-420|sp0 at 3295,0|BehxIni.A at 3295,0]
-../fonts/TestShapeAran.ttf:--font-size=1000 --ned --font-funcs=ft:U+0641,U+0646,U+0020,U+062E,U+0637,U+0627,U+0637,U+06CC:[YehxFin|sp0 at 521,0|TahIni.outD2 at 521,380|AlefFin at 1119,0|TahMed.inD1outT1 at 1382,0|OneDotAboveNS at 2081,-47|sp0 at 1451,0|HahIni.outD1 at 1451,36|space at 2326,0|OneDotEnclNS at 2855,-2|NoonxFin at 2458,0|OneDotAboveNS at 3361,188|sp0 at 3208,0|FehxIni.outT2N at 3208,336]
-../fonts/TestShapeAran.ttf:--font-size=1000 --ned --font-funcs=ft:U+0646,U+0633,U+062A,U+0639,U+0644,U+06CC,U+0642:[TwoDotsAboveNS at 519,-199|QafxFin.cut|TwoDotsBelowNS at 977,141|BehxMed.inT2outD2WQ at 692,272|LamMed.outT2 at 1023,434|AinMed.inT3outT1 at 1301,507|TwoDotsAboveNS at 1785,209|BehxMed.inT2outT3 at 1563,603|SeenMed.inT2outT2 at 1865,735|OneDotAboveNS at 2574,670|sp0 at 2434,0|BehxIni.outT2tall at 2434,952]
+../fonts/TestShapeAran.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0644,U+0633,U+0627,U+0646:[OneDotEnclNS at 398,-1|NoonxSep|AlefFin at 861,0|SeenMed.inT2outT1 at 1125,0|sp0 at 1664,0|LamIni.outT2 at 1664,223]
+../fonts/TestShapeAran.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+06CC,U+0648,U+0646,U+06CC,U+06A9,U+0648,U+0688:[TahSmallNS at 118,-213|DalSep|WawFin.cut at 300,0|KafMed.outT3 at 573,206|TwoDotsBelowNS at 1115,220|BehxMed.inT2outT1 at 903,304|OneDotAboveNS at 1271,-71|sp1 at 1170,0|BehxIni.outT2 at 1170,449|WawFin.inD2 at 1387,0|TwoDotsBelowNS at 1867,1|sp0 at 1758,0|BehxIni.outD2WQ at 1758,323]
+../fonts/TestShapeAran.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0641,U+0648,U+0646,U+0679:[TahSmallNS at 595,-331|BehxFin.soft|OneDotAboveNS at 1163,-182|sp0 at 1184,0|BehxIni.outT2B at 1184,300|WawFin.inD2alt at 1340,0|OneDotAboveNS at 1784,108|sp0 at 1599,0|FehxIni.outD2WQ at 1599,237]
+../fonts/TestShapeAran.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0679,U+0627,U+0626,U+067E,U+0020,U+0641,U+06CC,U+0633:[SeenFin|TwoDotsBelowNS at 1216,269|BehxMed.inT1outT2SeenWide at 1041,455|OneDotAboveNS at 1454,224|sp0 at 1271,0|FehxIni at 1271,490|space at 1584,0|ThreeDotsDownBelowNS at 2290,-159|BehxFin.soft at 1715,0|HamzaAboveNS at 2878,-201|sp0 at 2899,0|BehxIni.outT2B at 2899,300|AlefFin.narrow at 3056,0|TahSmallNS at 3442,-420|sp0 at 3295,0|BehxIni.A at 3295,0]
+../fonts/TestShapeAran.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0641,U+0646,U+0020,U+062E,U+0637,U+0627,U+0637,U+06CC:[YehxFin|sp0 at 521,0|TahIni.outD2 at 521,380|AlefFin at 1119,0|TahMed.inD1outT1 at 1382,0|OneDotAboveNS at 2081,-47|sp0 at 1451,0|HahIni.outD1 at 1451,36|space at 2326,0|OneDotEnclNS at 2855,-2|NoonxFin at 2458,0|OneDotAboveNS at 3361,188|sp0 at 3208,0|FehxIni.outT2N at 3208,336]
+../fonts/TestShapeAran.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0646,U+0633,U+062A,U+0639,U+0644,U+06CC,U+0642:[TwoDotsAboveNS at 519,-199|QafxFin.cut|TwoDotsBelowNS at 977,141|BehxMed.inT2outD2WQ at 692,272|LamMed.outT2 at 1023,434|AinMed.inT3outT1 at 1301,507|TwoDotsAboveNS at 1785,209|BehxMed.inT2outT3 at 1563,603|SeenMed.inT2outT2 at 1865,735|OneDotAboveNS at 2574,670|sp0 at 2434,0|BehxIni.outT2tall at 2434,952]
diff --git a/test/shaping/data/text-rendering-tests/tests/SHBALI-1.tests b/test/shaping/data/text-rendering-tests/tests/SHBALI-1.tests
index fde96aaf..4c727b04 100644
--- a/test/shaping/data/text-rendering-tests/tests/SHBALI-1.tests
+++ b/test/shaping/data/text-rendering-tests/tests/SHBALI-1.tests
@@ -1,22 +1,22 @@
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B38,U+1B00:[gid23|gid60 at 1113,0|gid4 at 1064,0]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B15,U+1B44,U+1B16,U+1B02:[gid25|gid132 at 1092,0|gid6 at 942,0]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B18,U+1B3B:[gid28|gid62 at 796,0|gid57 at 794,0]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B19,U+1B40:[gid66|gid29 at 483,0|gid57 at 1536,0]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B1A,U+1B3F:[gid67|gid30 at 483,0]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B14,U+1B36:[gid24|gid58 at 828,0]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B13,U+1B01:[gid23|gid129 at 1111,0|gid5 at 1064,0]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B1B,U+1B01:[gid23|gid137 at 1111,0|gid5 at 1379,181]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B26,U+1B03:[gid23|gid148 at 1111,0|gid7 at 991,0]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B13,U+1B38:[gid23|gid129 at 1111,0|gid60 at 1111,-488]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B13,U+1B3C:[gid23|gid129 at 1111,0|gid70 at 1128,0|gid170 at 1113,0]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B13,U+1B3D:[gid23|gid129 at 1111,0|gid70 at 1128,0|gid170 at 1113,0|gid57 at 1111,0]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B3E:[gid66|gid23 at 483,0]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B36,U+1B3E:[gid23|gid58 at 1064,0|gid66 at 1111,0|gid128 at 1594,0]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B38,U+1B3E:[gid23|gid60 at 1113,0|gid66 at 1111,0|gid128 at 1594,0]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B15,U+1B3E:[gid66|gid23 at 483,0|gid131 at 1594,0]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B40:[gid66|gid23 at 483,0|gid57 at 1594,0]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B3E:[gid66|gid23 at 483,0]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B3E,U+1B36:[gid66|gid23 at 483,0|gid58 at 1548,0]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B3E,U+1B38:[gid66|gid23 at 483,0|gid60 at 1597,0]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B15,U+1B3E:[gid66|gid23 at 483,0|gid131 at 1594,0]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B40:[gid66|gid23 at 483,0|gid57 at 1594,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B13,U+1B38,U+1B00:[gid23|gid60 at 1113,0|gid4 at 1064,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B15,U+1B44,U+1B16,U+1B02:[gid25|gid132 at 1092,0|gid6 at 942,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B18,U+1B3B:[gid28|gid62 at 796,0|gid57 at 794,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B19,U+1B40:[gid66|gid29 at 483,0|gid57 at 1536,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B1A,U+1B3F:[gid67|gid30 at 483,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B14,U+1B36:[gid24|gid58 at 828,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B13,U+1B44,U+1B13,U+1B01:[gid23|gid129 at 1111,0|gid5 at 1064,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B13,U+1B44,U+1B1B,U+1B01:[gid23|gid137 at 1111,0|gid5 at 1379,181]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B13,U+1B44,U+1B26,U+1B03:[gid23|gid148 at 1111,0|gid7 at 991,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B13,U+1B44,U+1B13,U+1B38:[gid23|gid129 at 1111,0|gid60 at 1111,-488]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B13,U+1B44,U+1B13,U+1B3C:[gid23|gid129 at 1111,0|gid70 at 1128,0|gid170 at 1113,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B13,U+1B44,U+1B13,U+1B3D:[gid23|gid129 at 1111,0|gid70 at 1128,0|gid170 at 1113,0|gid57 at 1111,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B13,U+1B3E:[gid66|gid23 at 483,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B13,U+1B36,U+1B3E:[gid23|gid58 at 1064,0|gid66 at 1111,0|gid128 at 1594,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B13,U+1B38,U+1B3E:[gid23|gid60 at 1113,0|gid66 at 1111,0|gid128 at 1594,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B13,U+1B44,U+1B15,U+1B3E:[gid66|gid23 at 483,0|gid131 at 1594,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B13,U+1B40:[gid66|gid23 at 483,0|gid57 at 1594,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B13,U+1B3E:[gid66|gid23 at 483,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B13,U+1B3E,U+1B36:[gid66|gid23 at 483,0|gid58 at 1548,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B13,U+1B3E,U+1B38:[gid66|gid23 at 483,0|gid60 at 1597,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B13,U+1B44,U+1B15,U+1B3E:[gid66|gid23 at 483,0|gid131 at 1594,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B13,U+1B40:[gid66|gid23 at 483,0|gid57 at 1594,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/SHBALI-2.tests b/test/shaping/data/text-rendering-tests/tests/SHBALI-2.tests
index 6b0f0b73..3878fcc2 100644
--- a/test/shaping/data/text-rendering-tests/tests/SHBALI-2.tests
+++ b/test/shaping/data/text-rendering-tests/tests/SHBALI-2.tests
@@ -1,12 +1,12 @@
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B27,U+1B3E:[gid66|gid23 at 483,0|gid149 at 1594,0]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B28,U+1B3F:[gid67|gid23 at 483,0|gid150 at 1594,0]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B31,U+1B3E:[gid66|gid23 at 483,0|gid159 at 1594,0]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B32,U+1B3E:[gid66|gid23 at 483,0|gid60 at 1597,0|gid149 at 1594,0]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B4A,U+1B3E:[gid66|gid23 at 483,0|gid60 at 1597,0|gid165 at 1594,0]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B1B,U+1B44,U+1B13:[gid181|gid129 at 1064,-195]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B1B,U+1B44,U+1B13,U+1B3E:[gid66|gid181 at 483,0|gid129 at 1548,-195]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B1B,U+1B44,U+1B13,U+1B38,U+1B00:[gid181|gid129 at 1064,-195|gid60 at 1064,-684|gid4 at 855,0]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B13,U+1B38:[gid23|gid129 at 1111,0|gid60 at 1111,-488]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B1B,U+1B39:[gid23|gid137 at 1111,0|gid61 at 1261,-488]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B31,U+1B3A:[gid23|gid159 at 1111,0|gid62 at 1753,0]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B45,U+1B38:[gid23|gid162 at 1111,0|gid60 at 1111,-488]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B13,U+1B44,U+1B27,U+1B3E:[gid66|gid23 at 483,0|gid149 at 1594,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B13,U+1B44,U+1B28,U+1B3F:[gid67|gid23 at 483,0|gid150 at 1594,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B13,U+1B44,U+1B31,U+1B3E:[gid66|gid23 at 483,0|gid159 at 1594,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B13,U+1B44,U+1B32,U+1B3E:[gid66|gid23 at 483,0|gid60 at 1597,0|gid149 at 1594,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B13,U+1B44,U+1B4A,U+1B3E:[gid66|gid23 at 483,0|gid60 at 1597,0|gid165 at 1594,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B1B,U+1B44,U+1B13:[gid181|gid129 at 1064,-195]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B1B,U+1B44,U+1B13,U+1B3E:[gid66|gid181 at 483,0|gid129 at 1548,-195]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B1B,U+1B44,U+1B13,U+1B38,U+1B00:[gid181|gid129 at 1064,-195|gid60 at 1064,-684|gid4 at 855,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B13,U+1B44,U+1B13,U+1B38:[gid23|gid129 at 1111,0|gid60 at 1111,-488]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B13,U+1B44,U+1B1B,U+1B39:[gid23|gid137 at 1111,0|gid61 at 1261,-488]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B13,U+1B44,U+1B31,U+1B3A:[gid23|gid159 at 1111,0|gid62 at 1753,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B13,U+1B44,U+1B45,U+1B38:[gid23|gid162 at 1111,0|gid60 at 1111,-488]
diff --git a/test/shaping/data/text-rendering-tests/tests/SHBALI-3.tests b/test/shaping/data/text-rendering-tests/tests/SHBALI-3.tests
index 661a282f..a0f3a32d 100644
--- a/test/shaping/data/text-rendering-tests/tests/SHBALI-3.tests
+++ b/test/shaping/data/text-rendering-tests/tests/SHBALI-3.tests
@@ -1,9 +1,9 @@
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B66,U+1B6B:[gid102|gid107 at 560,-10]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B66,U+1B6C:[gid102|gid108 at 573,49]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B66,U+1B6D:[gid102|gid109 at 652,-10]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B66,U+1B6E:[gid102|gid110 at 652,-98]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B66,U+1B6F:[gid102|gid111 at 667,-10]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B66,U+1B70:[gid102|gid112 at 667,-10]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B66,U+1B71:[gid102|gid113 at 667,-10]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B66,U+1B72:[gid102|gid114 at 667,-10]
-../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B66,U+1B73:[gid102|gid115 at 599,-10]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B66,U+1B6B:[gid102|gid107 at 560,-10]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B66,U+1B6C:[gid102|gid108 at 573,49]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B66,U+1B6D:[gid102|gid109 at 652,-10]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B66,U+1B6E:[gid102|gid110 at 652,-98]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B66,U+1B6F:[gid102|gid111 at 667,-10]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B66,U+1B70:[gid102|gid112 at 667,-10]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B66,U+1B71:[gid102|gid113 at 667,-10]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B66,U+1B72:[gid102|gid114 at 667,-10]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+1B66,U+1B73:[gid102|gid115 at 599,-10]
diff --git a/test/shaping/data/text-rendering-tests/tests/SHKNDA-1.tests b/test/shaping/data/text-rendering-tests/tests/SHKNDA-1.tests
index 528a097a..adb5aa71 100644
--- a/test/shaping/data/text-rendering-tests/tests/SHKNDA-1.tests
+++ b/test/shaping/data/text-rendering-tests/tests/SHKNDA-1.tests
@@ -1,34 +1,34 @@
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB2,U+0CCD,U+0CB2,U+0CBF:[knLI|knLAc2 at 757,0]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9F,U+0CCD,U+0CB8,U+0CCD:[knTT|knSAc2 at 1021,0]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB3,U+0CBF:[knLLI]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA1,U+0CBF:[knDDI]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAE,U+0CC6:[knME]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB0,U+0CBF:[knRI]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C96,U+0CCD,U+0CAF,U+0CC6:[knKHE|knYAc2 at 846,0]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAB,U+0CCD,U+0CB0,U+0CBF:[knPHI|knRAc2 at 735,0]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA8,U+0CC6:[knNE]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C97,U+0CBF:[knGI]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB7,U+0CCD,U+0C9F,U+0CBF:[knSSI|knTTAc2 at 746,0]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAF,U+0CBF,U+0C82:[knYI|knAnusvara at 1252,0]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9A,U+0CC0:[knCI|knLengthmark at 766,0]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA8,U+0CBF:[knNI]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C97,U+0CCD,U+0CB2,U+0CBF:[knGI|knLAc2 at 621,0]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB7,U+0CBF:[knSSI]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C97,U+0CC6:[knGE]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA6,U+0CCD,U+0CB5,U+0CBF:[knDI|knVAc2 at 740,0]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA4,U+0CC0:[knTI|knLengthmark at 613,0]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAE,U+0CBF:[knMI]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB2,U+0CBF:[knLI]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C97,U+0CBF:[knGI]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA8,U+0CCD:[knN]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAC,U+0CBF:[knBI]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB2,U+0CBF:[knLI]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA8,U+0CCD,U+0CA8,U+0CBF,U+0C82:[knNI|knNAc2 at 678,0|knAnusvara at 755,0]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB2,U+0CCD,U+0CB2,U+0CBF:[knLI|knLAc2 at 757,0]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA7,U+0CBF:[knDHI]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAA,U+0CCC:[knPA.base|knmAU at 739,0]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB5,U+0CBF,U+0C82:[knVI|knAnusvara at 749,0]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA1,U+0CBF:[knDDI]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9F,U+0CBF:[knTTI]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA8,U+0CBF:[knNI]
-../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA7,U+0CBF:[knDHI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CB2,U+0CCD,U+0CB2,U+0CBF:[knLI|knLAc2 at 757,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C9F,U+0CCD,U+0CB8,U+0CCD:[knTT|knSAc2 at 1021,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CB3,U+0CBF:[knLLI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CA1,U+0CBF:[knDDI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CAE,U+0CC6:[knME]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CB0,U+0CBF:[knRI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C96,U+0CCD,U+0CAF,U+0CC6:[knKHE|knYAc2 at 846,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CAB,U+0CCD,U+0CB0,U+0CBF:[knPHI|knRAc2 at 735,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CA8,U+0CC6:[knNE]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C97,U+0CBF:[knGI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CB7,U+0CCD,U+0C9F,U+0CBF:[knSSI|knTTAc2 at 746,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CAF,U+0CBF,U+0C82:[knYI|knAnusvara at 1252,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C9A,U+0CC0:[knCI|knLengthmark at 766,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CA8,U+0CBF:[knNI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C97,U+0CCD,U+0CB2,U+0CBF:[knGI|knLAc2 at 621,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CB7,U+0CBF:[knSSI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C97,U+0CC6:[knGE]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CA6,U+0CCD,U+0CB5,U+0CBF:[knDI|knVAc2 at 740,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CA4,U+0CC0:[knTI|knLengthmark at 613,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CAE,U+0CBF:[knMI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CB2,U+0CBF:[knLI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C97,U+0CBF:[knGI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CA8,U+0CCD:[knN]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CAC,U+0CBF:[knBI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CB2,U+0CBF:[knLI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CA8,U+0CCD,U+0CA8,U+0CBF,U+0C82:[knNI|knNAc2 at 678,0|knAnusvara at 755,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CB2,U+0CCD,U+0CB2,U+0CBF:[knLI|knLAc2 at 757,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CA7,U+0CBF:[knDHI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CAA,U+0CCC:[knPA.base|knmAU at 739,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CB5,U+0CBF,U+0C82:[knVI|knAnusvara at 749,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CA1,U+0CBF:[knDDI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C9F,U+0CBF:[knTTI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CA8,U+0CBF:[knNI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CA7,U+0CBF:[knDHI]
diff --git a/test/shaping/data/text-rendering-tests/tests/SHKNDA-2.tests b/test/shaping/data/text-rendering-tests/tests/SHKNDA-2.tests
index 81d75637..7936308f 100644
--- a/test/shaping/data/text-rendering-tests/tests/SHKNDA-2.tests
+++ b/test/shaping/data/text-rendering-tests/tests/SHKNDA-2.tests
@@ -1,16 +1,16 @@
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA8,U+0CCD,U+0CA8,U+0CBE:[gid150|gid57 at 711,0|gid116 at 1160,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA8,U+0CCD,U+0CA8,U+0CBE:[gid150|gid57 at 711,0|gid116 at 1160,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA4,U+0CCD,U+0CA4,U+0CBE:[gid146|gid57 at 623,0|gid112 at 1071,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9F,U+0CCD,U+0C9F,U+0CBE:[gid141|gid57 at 815,0|gid107 at 1264,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA1,U+0CCB,U+0C82,U+0C97,U+0CBF:[gid249|gid61 at 768,0|gid71 at 1513,0|gid4 at 1925,0|gid207 at 2475,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9C,U+0CBF,U+0CBC,U+0CD5,U+0CAC,U+0CC6,U+0CA8,U+0CCD:[gid211|gid55 at 652,0|gid71 at 776,0|gid259 at 1188,0|gid186 at 1994,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9C,U+0CBE,U+0CBC,U+0C95,U+0CBF,U+0CB0,U+0CCD:[gid139|gid57 at 776,0|gid55 at 652,0|gid205 at 1225,0|gid193 at 1799,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C87,U+0CA8,U+0CCD,U+0CAB,U+0CCD,U+0CB2,U+0CC6,U+0C95,U+0CCD,U+0CB7,U+0CA8,U+0CB2,U+0CCD:[gid8|gid256 at 711,0|gid118 at 1422,0|gid335 at 1591,0|gid282 at 1978,0|gid39 at 2552,0|gid195 at 3263,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C87,U+0CA8,U+0CCD,U+0CAB,U+0CCD,U+0CB2,U+0CC6,U+0C95,U+0CCD,U+0CB7,U+0CA8,U+0CCD:[gid8|gid256 at 711,0|gid118 at 1422,0|gid335 at 1591,0|gid282 at 1978,0|gid186 at 2552,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA6,U+0C9F,U+0CCD,U+0CB8,U+0CCD:[gid37|gid177 at 765,0|gid130 at 1814,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C8E,U+0C95,U+0CCD,U+0CB8,U+0CCD:[gid14|gid167 at 787,0|gid130 at 1596,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAE,U+0CBE,U+0CB0,U+0CCD,U+0C9A,U+0CCD:[gid155|gid57 at 1156,0|gid172 at 1605,0|gid94 at 2718,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9F,U+0CC6,U+0C95,U+0CCD,U+0CB8,U+0CCD,U+0C9F,U+0CCD:[gid247|gid167 at 815,0|gid130 at 1624,0|gid317 at 1792,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAC,U+0CC1,U+0C95,U+0CCD,U+0CB8,U+0CCD:[gid42|gid60 at 801,0|gid167 at 1165,0|gid130 at 1974,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB8,U+0CBE,U+0CAB,U+0CCD,U+0C9F,U+0CCD:[gid163|gid57 at 709,0|gid188 at 1158,0|gid107 at 2184,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9C,U+0CB8,U+0CCD,U+0C9F,U+0CCD:[gid27|gid200 at 776,0|gid107 at 1720,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CA8,U+0CCD,U+0CA8,U+0CBE:[gid150|gid57 at 711,0|gid116 at 1160,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CA8,U+0CCD,U+0CA8,U+0CBE:[gid150|gid57 at 711,0|gid116 at 1160,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CA4,U+0CCD,U+0CA4,U+0CBE:[gid146|gid57 at 623,0|gid112 at 1071,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C9F,U+0CCD,U+0C9F,U+0CBE:[gid141|gid57 at 815,0|gid107 at 1264,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CA1,U+0CCB,U+0C82,U+0C97,U+0CBF:[gid249|gid61 at 768,0|gid71 at 1513,0|gid4 at 1925,0|gid207 at 2475,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C9C,U+0CBF,U+0CBC,U+0CD5,U+0CAC,U+0CC6,U+0CA8,U+0CCD:[gid211|gid55 at 652,0|gid71 at 776,0|gid259 at 1188,0|gid186 at 1994,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C9C,U+0CBE,U+0CBC,U+0C95,U+0CBF,U+0CB0,U+0CCD:[gid139|gid57 at 776,0|gid55 at 652,0|gid205 at 1225,0|gid193 at 1799,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C87,U+0CA8,U+0CCD,U+0CAB,U+0CCD,U+0CB2,U+0CC6,U+0C95,U+0CCD,U+0CB7,U+0CA8,U+0CB2,U+0CCD:[gid8|gid256 at 711,0|gid118 at 1422,0|gid335 at 1591,0|gid282 at 1978,0|gid39 at 2552,0|gid195 at 3263,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C87,U+0CA8,U+0CCD,U+0CAB,U+0CCD,U+0CB2,U+0CC6,U+0C95,U+0CCD,U+0CB7,U+0CA8,U+0CCD:[gid8|gid256 at 711,0|gid118 at 1422,0|gid335 at 1591,0|gid282 at 1978,0|gid186 at 2552,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CA6,U+0C9F,U+0CCD,U+0CB8,U+0CCD:[gid37|gid177 at 765,0|gid130 at 1814,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C8E,U+0C95,U+0CCD,U+0CB8,U+0CCD:[gid14|gid167 at 787,0|gid130 at 1596,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CAE,U+0CBE,U+0CB0,U+0CCD,U+0C9A,U+0CCD:[gid155|gid57 at 1156,0|gid172 at 1605,0|gid94 at 2718,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C9F,U+0CC6,U+0C95,U+0CCD,U+0CB8,U+0CCD,U+0C9F,U+0CCD:[gid247|gid167 at 815,0|gid130 at 1624,0|gid317 at 1792,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CAC,U+0CC1,U+0C95,U+0CCD,U+0CB8,U+0CCD:[gid42|gid60 at 801,0|gid167 at 1165,0|gid130 at 1974,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CB8,U+0CBE,U+0CAB,U+0CCD,U+0C9F,U+0CCD:[gid163|gid57 at 709,0|gid188 at 1158,0|gid107 at 2184,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C9C,U+0CB8,U+0CCD,U+0C9F,U+0CCD:[gid27|gid200 at 776,0|gid107 at 1720,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/SHKNDA-3.tests b/test/shaping/data/text-rendering-tests/tests/SHKNDA-3.tests
index edf0759b..460ff0f7 100644
--- a/test/shaping/data/text-rendering-tests/tests/SHKNDA-3.tests
+++ b/test/shaping/data/text-rendering-tests/tests/SHKNDA-3.tests
@@ -1,31 +1,31 @@
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C95,U+0CCB,U+0C82:[gid239|gid61 at 574,0|gid71 at 1319,0|gid4 at 1731,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C96,U+0CCB,U+0C82:[gid240|gid61 at 865,0|gid71 at 1610,0|gid4 at 2022,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C97,U+0CCB,U+0C82:[gid241|gid61 at 648,0|gid71 at 1393,0|gid4 at 1805,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C98,U+0CCB,U+0C82:[gid242|gid279 at 997,0|gid71 at 1742,0|gid4 at 2153,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C99,U+0CCB,U+0C82:[gid24|gid67 at 737,0|gid71 at 1718,0|gid4 at 2130,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9A,U+0CCB,U+0C82:[gid243|gid61 at 795,0|gid71 at 1540,0|gid4 at 1952,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9B,U+0CCB,U+0C82:[gid244|gid61 at 843,0|gid71 at 1588,0|gid4 at 2000,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9C,U+0CCB,U+0C82:[gid245|gid61 at 776,0|gid71 at 1522,0|gid4 at 1933,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9D,U+0CCB,U+0C82:[gid246|gid61 at 1379,0|gid71 at 2124,0|gid4 at 2536,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9E,U+0CCB,U+0C82:[gid29|gid67 at 968,0|gid71 at 1949,0|gid4 at 2360,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9F,U+0CCB,U+0C82:[gid247|gid61 at 815,0|gid71 at 1560,0|gid4 at 1972,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA0,U+0CCB,U+0C82:[gid248|gid61 at 651,0|gid71 at 1397,0|gid4 at 1808,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA1,U+0CCB,U+0C82:[gid249|gid61 at 768,0|gid71 at 1513,0|gid4 at 1925,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA2,U+0CCB,U+0C82:[gid250|gid61 at 768,0|gid71 at 1513,0|gid4 at 1925,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA3,U+0CCB,U+0C82:[gid251|gid61 at 867,0|gid71 at 1612,0|gid4 at 2023,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA4,U+0CCB,U+0C82:[gid252|gid61 at 623,0|gid71 at 1368,0|gid4 at 1779,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA5,U+0CCB,U+0C82:[gid253|gid61 at 765,0|gid71 at 1510,0|gid4 at 1921,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA6,U+0CCB,U+0C82:[gid254|gid61 at 765,0|gid71 at 1510,0|gid4 at 1921,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA7,U+0CCB,U+0C82,U+0020:[gid255|gid61 at 765,0|gid71 at 1510,0|gid4 at 1921,0|gid3 at 2472,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA8,U+0CCB,U+0C82:[gid256|gid61 at 711,0|gid71 at 1456,0|gid4 at 1868,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAA,U+0CCB,U+0C82:[gid257|gid275 at 792,0|gid71 at 1434,0|gid4 at 1846,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAB,U+0CCB,U+0C82:[gid258|gid277 at 792,0|gid71 at 1434,0|gid4 at 1846,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAC,U+0CCB,U+0C82:[gid259|gid61 at 806,0|gid71 at 1551,0|gid4 at 1963,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAD,U+0CCB,U+0C82:[gid260|gid61 at 806,0|gid71 at 1551,0|gid4 at 1963,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAE,U+0CCB,U+0C82:[gid280|gid71 at 1539,0|gid4 at 1951,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAF,U+0CCB,U+0C82:[gid281|gid71 at 1712,0|gid4 at 2124,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB0,U+0CCB,U+0C82:[gid263|gid61 at 651,0|gid71 at 1397,0|gid4 at 1808,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB1,U+0CCB,U+0C82:[gid47|gid67 at 831,0|gid71 at 1812,0|gid4 at 2223,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB2,U+0CCB,U+0C82:[gid264|gid61 at 769,0|gid71 at 1514,0|gid4 at 1925,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB5,U+0CCB,U+0C82:[gid266|gid275 at 794,0|gid71 at 1437,0|gid4 at 1848,0]
-../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C86,U+0CCD,U+0CAF,U+0C95,U+0CCD,U+0CB7,U+0CBF,U+0CB8,U+0CCD,U+200C:[gid7|gid122 at 838,0|gid285 at 1098,0|gid200 at 1672,0|gid3 at 2694,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C95,U+0CCB,U+0C82:[gid239|gid61 at 574,0|gid71 at 1319,0|gid4 at 1731,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C96,U+0CCB,U+0C82:[gid240|gid61 at 865,0|gid71 at 1610,0|gid4 at 2022,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C97,U+0CCB,U+0C82:[gid241|gid61 at 648,0|gid71 at 1393,0|gid4 at 1805,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C98,U+0CCB,U+0C82:[gid242|gid279 at 997,0|gid71 at 1742,0|gid4 at 2153,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C99,U+0CCB,U+0C82:[gid24|gid67 at 737,0|gid71 at 1718,0|gid4 at 2130,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C9A,U+0CCB,U+0C82:[gid243|gid61 at 795,0|gid71 at 1540,0|gid4 at 1952,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C9B,U+0CCB,U+0C82:[gid244|gid61 at 843,0|gid71 at 1588,0|gid4 at 2000,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C9C,U+0CCB,U+0C82:[gid245|gid61 at 776,0|gid71 at 1522,0|gid4 at 1933,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C9D,U+0CCB,U+0C82:[gid246|gid61 at 1379,0|gid71 at 2124,0|gid4 at 2536,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C9E,U+0CCB,U+0C82:[gid29|gid67 at 968,0|gid71 at 1949,0|gid4 at 2360,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C9F,U+0CCB,U+0C82:[gid247|gid61 at 815,0|gid71 at 1560,0|gid4 at 1972,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CA0,U+0CCB,U+0C82:[gid248|gid61 at 651,0|gid71 at 1397,0|gid4 at 1808,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CA1,U+0CCB,U+0C82:[gid249|gid61 at 768,0|gid71 at 1513,0|gid4 at 1925,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CA2,U+0CCB,U+0C82:[gid250|gid61 at 768,0|gid71 at 1513,0|gid4 at 1925,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CA3,U+0CCB,U+0C82:[gid251|gid61 at 867,0|gid71 at 1612,0|gid4 at 2023,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CA4,U+0CCB,U+0C82:[gid252|gid61 at 623,0|gid71 at 1368,0|gid4 at 1779,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CA5,U+0CCB,U+0C82:[gid253|gid61 at 765,0|gid71 at 1510,0|gid4 at 1921,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CA6,U+0CCB,U+0C82:[gid254|gid61 at 765,0|gid71 at 1510,0|gid4 at 1921,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CA7,U+0CCB,U+0C82,U+0020:[gid255|gid61 at 765,0|gid71 at 1510,0|gid4 at 1921,0|gid3 at 2472,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CA8,U+0CCB,U+0C82:[gid256|gid61 at 711,0|gid71 at 1456,0|gid4 at 1868,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CAA,U+0CCB,U+0C82:[gid257|gid275 at 792,0|gid71 at 1434,0|gid4 at 1846,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CAB,U+0CCB,U+0C82:[gid258|gid277 at 792,0|gid71 at 1434,0|gid4 at 1846,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CAC,U+0CCB,U+0C82:[gid259|gid61 at 806,0|gid71 at 1551,0|gid4 at 1963,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CAD,U+0CCB,U+0C82:[gid260|gid61 at 806,0|gid71 at 1551,0|gid4 at 1963,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CAE,U+0CCB,U+0C82:[gid280|gid71 at 1539,0|gid4 at 1951,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CAF,U+0CCB,U+0C82:[gid281|gid71 at 1712,0|gid4 at 2124,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CB0,U+0CCB,U+0C82:[gid263|gid61 at 651,0|gid71 at 1397,0|gid4 at 1808,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CB1,U+0CCB,U+0C82:[gid47|gid67 at 831,0|gid71 at 1812,0|gid4 at 2223,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CB2,U+0CCB,U+0C82:[gid264|gid61 at 769,0|gid71 at 1514,0|gid4 at 1925,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0CB5,U+0CCB,U+0C82:[gid266|gid275 at 794,0|gid71 at 1437,0|gid4 at 1848,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --remove-default-ignorables --font-funcs=ft:U+0C86,U+0CCD,U+0CAF,U+0C95,U+0CCD,U+0CB7,U+0CBF,U+0CB8,U+0CCD,U+200C:[gid7|gid122 at 838,0|gid285 at 1098,0|gid200 at 1672,0|gid3 at 2694,0]
diff --git a/util/options.cc b/util/options.cc
index 23360d8f..f6360725 100644
--- a/util/options.cc
+++ b/util/options.cc
@@ -397,6 +397,7 @@ shape_options_t::add_options (option_parser_t *parser)
     {"bot",		0, 0, G_OPTION_ARG_NONE,	&this->bot,			"Treat text as beginning-of-paragraph",	nullptr},
     {"eot",		0, 0, G_OPTION_ARG_NONE,	&this->eot,			"Treat text as end-of-paragraph",	nullptr},
     {"preserve-default-ignorables",0, 0, G_OPTION_ARG_NONE,	&this->preserve_default_ignorables,	"Preserve Default-Ignorable characters",	nullptr},
+    {"remove-default-ignorables",0, 0, G_OPTION_ARG_NONE,	&this->remove_default_ignorables,	"Remove Default-Ignorable characters",	nullptr},
     {"utf8-clusters",	0, 0, G_OPTION_ARG_NONE,	&this->utf8_clusters,		"Use UTF8 byte indices, not char indices",	nullptr},
     {"cluster-level",	0, 0, G_OPTION_ARG_INT,		&this->cluster_level,		"Cluster merging level (default: 0)",	"0/1/2"},
     {"normalize-glyphs",0, 0, G_OPTION_ARG_NONE,	&this->normalize_glyphs,	"Rearrange glyph clusters in nominal order",	nullptr},
diff --git a/util/options.hh b/util/options.hh
index 103cd0d7..155f7079 100644
--- a/util/options.hh
+++ b/util/options.hh
@@ -151,7 +151,7 @@ struct shape_options_t : option_group_t
   shape_options_t (option_parser_t *parser)
   {
     direction = language = script = nullptr;
-    bot = eot = preserve_default_ignorables = false;
+    bot = eot = preserve_default_ignorables = remove_default_ignorables = false;
     features = nullptr;
     num_features = 0;
     shapers = nullptr;
@@ -179,10 +179,13 @@ struct shape_options_t : option_group_t
     hb_buffer_set_direction (buffer, hb_direction_from_string (direction, -1));
     hb_buffer_set_script (buffer, hb_script_from_string (script, -1));
     hb_buffer_set_language (buffer, hb_language_from_string (language, -1));
-    hb_buffer_set_flags (buffer, (hb_buffer_flags_t) (HB_BUFFER_FLAG_DEFAULT |
-			 (bot ? HB_BUFFER_FLAG_BOT : 0) |
-			 (eot ? HB_BUFFER_FLAG_EOT : 0) |
-			 (preserve_default_ignorables ? HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES : 0)));
+    hb_buffer_set_flags (buffer, (hb_buffer_flags_t)
+				 (HB_BUFFER_FLAG_DEFAULT |
+				  (bot ? HB_BUFFER_FLAG_BOT : 0) |
+				  (eot ? HB_BUFFER_FLAG_EOT : 0) |
+				  (preserve_default_ignorables ? HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES : 0) |
+				  (remove_default_ignorables ? HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES : 0) |
+				  0));
     hb_buffer_set_cluster_level (buffer, cluster_level);
     hb_buffer_guess_segment_properties (buffer);
   }
@@ -421,6 +424,7 @@ struct shape_options_t : option_group_t
   hb_bool_t bot;
   hb_bool_t eot;
   hb_bool_t preserve_default_ignorables;
+  hb_bool_t remove_default_ignorables;
 
   hb_feature_t *features;
   unsigned int num_features;
commit 46e4ed552fb1205eb6cbc16450bb231998fc7347
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Wed Jan 10 03:22:08 2018 +0100

    [test/text-rendering-tests] Hook up font variations
    
    Six more passing. Twelve failing now.

diff --git a/test/shaping/data/text-rendering-tests/extract-tests.py b/test/shaping/data/text-rendering-tests/extract-tests.py
index e8717781..06978b13 100755
--- a/test/shaping/data/text-rendering-tests/extract-tests.py
+++ b/test/shaping/data/text-rendering-tests/extract-tests.py
@@ -32,6 +32,7 @@ for elt in html.findall(".//*[@class='expected'][@ft:id]", namespaces):
 	name = elt.get(ns('ft:id'))
 	text = elt.get(ns('ft:render'))
 	font = elt.get(ns('ft:font'))
+	vars = elt.get(ns('ft:var'), '').replace(':', '=').replace(';', ',')
 	glyphs = []
 	for use in elt.findall(".//use"):
 		x = int(use.get('x'))
@@ -40,6 +41,9 @@ 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 --ned --font-funcs=ft:%s:%s" % (font, unistr(text), glyphstr(glyphs)))
+	opts = '--font-size=1000 --ned --font-funcs=ft'
+	if vars:
+		opts = opts + ' --variations=%s' % vars
+	print ("../fonts/%s:%s:%s:%s" % (font, opts, unistr(text), glyphstr(glyphs)))
 
 sys.exit(0 if found else 1)
diff --git a/test/shaping/data/text-rendering-tests/tests/AVAR-1.tests b/test/shaping/data/text-rendering-tests/tests/AVAR-1.tests
index 3da6dc54..63172d6a 100644
--- a/test/shaping/data/text-rendering-tests/tests/AVAR-1.tests
+++ b/test/shaping/data/text-rendering-tests/tests/AVAR-1.tests
@@ -1,17 +1,17 @@
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
-../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=100:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=150:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=200:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=250:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=300:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=350:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=400:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=450:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=500:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=550:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=600:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=650:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=700:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=750:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=800:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=850:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=900:U+2A01:[gid1]
diff --git a/test/shaping/data/text-rendering-tests/tests/CFF2-1.tests b/test/shaping/data/text-rendering-tests/tests/CFF2-1.tests
index d2c93961..51da1ec9 100644
--- a/test/shaping/data/text-rendering-tests/tests/CFF2-1.tests
+++ b/test/shaping/data/text-rendering-tests/tests/CFF2-1.tests
@@ -1,9 +1,9 @@
-../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft:U+0024:[dollar]
-../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft:U+0024:[dollar]
-../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft:U+0024:[dollar]
-../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft:U+0024:[dollar]
-../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft:U+0024:[dollar]
-../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft:U+0024:[dollar]
-../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft:U+0024:[dollar]
-../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft:U+0024:[dollar.nostroke]
-../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft:U+0024:[dollar.nostroke]
+../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=100:U+0024:[dollar]
+../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=200:U+0024:[dollar]
+../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=300:U+0024:[dollar]
+../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=400:U+0024:[dollar]
+../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=500:U+0024:[dollar]
+../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=600:U+0024:[dollar]
+../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=700:U+0024:[dollar]
+../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=800:U+0024:[dollar.nostroke]
+../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=900:U+0024:[dollar.nostroke]
diff --git a/test/shaping/data/text-rendering-tests/tests/CVAR-1.tests b/test/shaping/data/text-rendering-tests/tests/CVAR-1.tests
index 70cb738d..98f92757 100644
--- a/test/shaping/data/text-rendering-tests/tests/CVAR-1.tests
+++ b/test/shaping/data/text-rendering-tests/tests/CVAR-1.tests
@@ -1,3 +1,3 @@
-../fonts/TestCVARGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+0068,U+006F,U+006E:[uni0068|uni006F at 595,0|uni006E at 1126,0]
-../fonts/TestCVARGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+0068,U+006F,U+006E:[uni0068|uni006F at 635,0|uni006E at 1212,0]
-../fonts/TestCVARGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+0068,U+006F,U+006E:[uni0068|uni006F at 691,0|uni006E at 1331,0]
+../fonts/TestCVARGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=28,wdth=100,opsz=72:U+0068,U+006F,U+006E:[uni0068|uni006F at 595,0|uni006E at 1126,0]
+../fonts/TestCVARGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=94,wdth=100,opsz=72:U+0068,U+006F,U+006E:[uni0068|uni006F at 635,0|uni006E at 1212,0]
+../fonts/TestCVARGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=194,wdth=100,opsz=72:U+0068,U+006F,U+006E:[uni0068|uni006F at 691,0|uni006E at 1331,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/CVAR-2.tests b/test/shaping/data/text-rendering-tests/tests/CVAR-2.tests
index 51de9200..0db163a6 100644
--- a/test/shaping/data/text-rendering-tests/tests/CVAR-2.tests
+++ b/test/shaping/data/text-rendering-tests/tests/CVAR-2.tests
@@ -1,3 +1,3 @@
-../fonts/TestCVARGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0068,U+006F,U+006E:[uni0068|uni006F at 595,0|uni006E at 1126,0]
-../fonts/TestCVARGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0068,U+006F,U+006E:[uni0068|uni006F at 635,0|uni006E at 1212,0]
-../fonts/TestCVARGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0068,U+006F,U+006E:[uni0068|uni006F at 691,0|uni006E at 1331,0]
+../fonts/TestCVARGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=28,wdth=100,opsz=72:U+0068,U+006F,U+006E:[uni0068|uni006F at 595,0|uni006E at 1126,0]
+../fonts/TestCVARGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=94,wdth=100,opsz=72:U+0068,U+006F,U+006E:[uni0068|uni006F at 635,0|uni006E at 1212,0]
+../fonts/TestCVARGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=194,wdth=100,opsz=72:U+0068,U+006F,U+006E:[uni0068|uni006F at 691,0|uni006E at 1331,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/GPOS-5.tests b/test/shaping/data/text-rendering-tests/tests/GPOS-5.tests
index 00bfd589..f0a73571 100644
--- a/test/shaping/data/text-rendering-tests/tests/GPOS-5.tests
+++ b/test/shaping/data/text-rendering-tests/tests/GPOS-5.tests
@@ -1,5 +1,5 @@
-../fonts/TestGPOSFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0634,U+0652:[uni0652 at 663,144|uni0634]
-../fonts/TestGPOSFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0634,U+0652:[uni0652 at 680,165|uni0634]
-../fonts/TestGPOSFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0634,U+0652:[uni0652 at 730,246|uni0634]
-../fonts/TestGPOSFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0634,U+0652:[uni0652 at 750,282|uni0634]
-../fonts/TestGPOSFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0634,U+0652:[uni0652 at 784,351|uni0634]
+../fonts/TestGPOSFour.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=100:U+0634,U+0652:[uni0652 at 663,144|uni0634]
+../fonts/TestGPOSFour.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=300:U+0634,U+0652:[uni0652 at 680,165|uni0634]
+../fonts/TestGPOSFour.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=600:U+0634,U+0652:[uni0652 at 730,246|uni0634]
+../fonts/TestGPOSFour.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=700:U+0634,U+0652:[uni0652 at 750,282|uni0634]
+../fonts/TestGPOSFour.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=900:U+0634,U+0652:[uni0652 at 784,351|uni0634]
diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-1.tests b/test/shaping/data/text-rendering-tests/tests/GVAR-1.tests
index d70f2293..620fcfc7 100644
--- a/test/shaping/data/text-rendering-tests/tests/GVAR-1.tests
+++ b/test/shaping/data/text-rendering-tests/tests/GVAR-1.tests
@@ -1,9 +1,9 @@
-../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
-../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
-../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
-../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
-../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
-../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
-../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
-../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
-../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
+../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=300:U+5F4C:[gid2]
+../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=350:U+5F4C:[gid2]
+../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=400:U+5F4C:[gid2]
+../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=450:U+5F4C:[gid2]
+../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=500:U+5F4C:[gid2]
+../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=550:U+5F4C:[gid2]
+../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=600:U+5F4C:[gid2]
+../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=650:U+5F4C:[gid2]
+../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=700:U+5F4C:[gid2]
diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-2.tests b/test/shaping/data/text-rendering-tests/tests/GVAR-2.tests
index fe097776..3b2932c9 100644
--- a/test/shaping/data/text-rendering-tests/tests/GVAR-2.tests
+++ b/test/shaping/data/text-rendering-tests/tests/GVAR-2.tests
@@ -1,9 +1,9 @@
-../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
-../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
-../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
-../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
-../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
-../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
-../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
-../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
-../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
+../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=300:U+5F4C:[gid2]
+../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=350:U+5F4C:[gid2]
+../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=400:U+5F4C:[gid2]
+../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=450:U+5F4C:[gid2]
+../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=500:U+5F4C:[gid2]
+../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=550:U+5F4C:[gid2]
+../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=600:U+5F4C:[gid2]
+../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=650:U+5F4C:[gid2]
+../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=700:U+5F4C:[gid2]
diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-3.tests b/test/shaping/data/text-rendering-tests/tests/GVAR-3.tests
index 700c7351..05d07438 100644
--- a/test/shaping/data/text-rendering-tests/tests/GVAR-3.tests
+++ b/test/shaping/data/text-rendering-tests/tests/GVAR-3.tests
@@ -1,9 +1,9 @@
-../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
-../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
-../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
-../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
-../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
-../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
-../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
-../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
-../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
+../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=300:U+5F4C:[gid2]
+../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=350:U+5F4C:[gid2]
+../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=400:U+5F4C:[gid2]
+../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=450:U+5F4C:[gid2]
+../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=500:U+5F4C:[gid2]
+../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=550:U+5F4C:[gid2]
+../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=600:U+5F4C:[gid2]
+../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=650:U+5F4C:[gid2]
+../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=700:U+5F4C:[gid2]
diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-4.tests b/test/shaping/data/text-rendering-tests/tests/GVAR-4.tests
index f51a95c8..700a287b 100644
--- a/test/shaping/data/text-rendering-tests/tests/GVAR-4.tests
+++ b/test/shaping/data/text-rendering-tests/tests/GVAR-4.tests
@@ -1,11 +1,11 @@
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F98E:[gid5]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F98E:[gid5]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F98E:[gid5]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F98E:[gid5]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F98E:[gid5]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F98E:[gid5]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F98E:[gid5]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F98E:[gid5]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F98E:[gid5]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F98E:[gid5]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=-1.0,T1=0.0:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=-0.8,T1=0.1:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=-0.6,T1=0.2:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=-0.4,T1=0.3:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=-0.2,T1=0.4:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=0.0,T1=0.5:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=0.2,T1=0.6:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=0.4,T1=0.7:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=0.6,T1=0.8:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=0.8,T1=0.9:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=1.0,T1=1.0:U+1F98E:[gid5]
diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-5.tests b/test/shaping/data/text-rendering-tests/tests/GVAR-5.tests
index 7328e73a..27670f12 100644
--- a/test/shaping/data/text-rendering-tests/tests/GVAR-5.tests
+++ b/test/shaping/data/text-rendering-tests/tests/GVAR-5.tests
@@ -1,11 +1,11 @@
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F31D:[gid15]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F31D:[gid15]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F31D:[gid15]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F31D:[gid15]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F31D:[gid15]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F31D:[gid15]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F31D:[gid15]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F31D:[gid15]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F31D:[gid15]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F31D:[gid15]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=-1.0:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=-0.8:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=-0.6:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=-0.4:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=-0.2:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=0.0:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=0.2:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=0.4:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=0.6:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=0.8:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=M1=1.0:U+1F31D:[gid15]
diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-6.tests b/test/shaping/data/text-rendering-tests/tests/GVAR-6.tests
index c632d465..61e060ad 100644
--- a/test/shaping/data/text-rendering-tests/tests/GVAR-6.tests
+++ b/test/shaping/data/text-rendering-tests/tests/GVAR-6.tests
@@ -1,11 +1,11 @@
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F422:[gid12]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F422:[gid12]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F422:[gid12]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F422:[gid12]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F422:[gid12]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F422:[gid12]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F422:[gid12]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F422:[gid12]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F422:[gid12]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F422:[gid12]
-../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=T1=0.0:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=T1=0.1:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=T1=0.2:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=T1=0.3:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=T1=0.4:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=T1=0.5:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=T1=0.6:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=T1=0.7:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=T1=0.8:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=T1=0.9:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft --variations=T1=1.0:U+1F422:[gid12]
diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-7.tests b/test/shaping/data/text-rendering-tests/tests/GVAR-7.tests
index bc06d56b..1280d714 100644
--- a/test/shaping/data/text-rendering-tests/tests/GVAR-7.tests
+++ b/test/shaping/data/text-rendering-tests/tests/GVAR-7.tests
@@ -1,7 +1,7 @@
-../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+0049,U+004F:[uni004F|uni0049 at 706,0|uni004F at 1072,0]
-../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+0049,U+004F:[uni004F|uni0049 at 707,0|uni004F at 1074,0]
-../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+0049,U+004F:[uni004F|uni0049 at 707,0|uni004F at 1075,0]
-../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+0049,U+004F:[uni004F|uni0049 at 707,0|uni004F at 1076,0]
-../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+0049,U+004F:[uni004F|uni0049 at 707,0|uni004F at 1077,0]
-../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+0049,U+004F:[uni004F|uni0049 at 707,0|uni004F at 1078,0]
-../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+0049,U+004F:[uni004F|uni0049 at 706,0|uni004F at 1079,0]
+../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=150:U+004F,U+0049,U+004F:[uni004F|uni0049 at 706,0|uni004F at 1072,0]
+../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=200:U+004F,U+0049,U+004F:[uni004F|uni0049 at 707,0|uni004F at 1074,0]
+../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=250:U+004F,U+0049,U+004F:[uni004F|uni0049 at 707,0|uni004F at 1075,0]
+../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=300:U+004F,U+0049,U+004F:[uni004F|uni0049 at 707,0|uni004F at 1076,0]
+../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=350:U+004F,U+0049,U+004F:[uni004F|uni0049 at 707,0|uni004F at 1077,0]
+../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=400:U+004F,U+0049,U+004F:[uni004F|uni0049 at 707,0|uni004F at 1078,0]
+../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=450:U+004F,U+0049,U+004F:[uni004F|uni0049 at 706,0|uni004F at 1079,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-8.tests b/test/shaping/data/text-rendering-tests/tests/GVAR-8.tests
index e5bd2572..209f3253 100644
--- a/test/shaping/data/text-rendering-tests/tests/GVAR-8.tests
+++ b/test/shaping/data/text-rendering-tests/tests/GVAR-8.tests
@@ -1,6 +1,6 @@
-../fonts/TestGVAREight.ttf:--font-size=1000 --ned --font-funcs=ft:U+0048:[H]
-../fonts/TestGVAREight.ttf:--font-size=1000 --ned --font-funcs=ft:U+0048:[H]
-../fonts/TestGVAREight.ttf:--font-size=1000 --ned --font-funcs=ft:U+0048:[H]
-../fonts/TestGVAREight.ttf:--font-size=1000 --ned --font-funcs=ft:U+0048:[H]
-../fonts/TestGVAREight.ttf:--font-size=1000 --ned --font-funcs=ft:U+0048:[H]
-../fonts/TestGVAREight.ttf:--font-size=1000 --ned --font-funcs=ft:U+0048:[H]
+../fonts/TestGVAREight.ttf:--font-size=1000 --ned --font-funcs=ft --variations=HV=0.0:U+0048:[H]
+../fonts/TestGVAREight.ttf:--font-size=1000 --ned --font-funcs=ft --variations=HV=-0.2:U+0048:[H]
+../fonts/TestGVAREight.ttf:--font-size=1000 --ned --font-funcs=ft --variations=HV=-0.4:U+0048:[H]
+../fonts/TestGVAREight.ttf:--font-size=1000 --ned --font-funcs=ft --variations=HV=-0.6:U+0048:[H]
+../fonts/TestGVAREight.ttf:--font-size=1000 --ned --font-funcs=ft --variations=HV=-0.8:U+0048:[H]
+../fonts/TestGVAREight.ttf:--font-size=1000 --ned --font-funcs=ft --variations=HV=-1.0:U+0048:[H]
diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-9.tests b/test/shaping/data/text-rendering-tests/tests/GVAR-9.tests
index e4f2d75f..ababf5d6 100644
--- a/test/shaping/data/text-rendering-tests/tests/GVAR-9.tests
+++ b/test/shaping/data/text-rendering-tests/tests/GVAR-9.tests
@@ -1,10 +1,10 @@
-../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041:[A]
-../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041:[A]
-../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041:[A]
-../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041:[A]
-../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041:[A]
-../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041:[A]
-../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041:[A]
-../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041:[A]
-../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041:[A]
-../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=-1.0:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=-0.5:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=0.0:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=0.5:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=0.6:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=0.7:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=0.8:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=0.9:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=0.944444:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft --variations=TEST=1.0:U+0041:[A]
diff --git a/test/shaping/data/text-rendering-tests/tests/HVAR-1.tests b/test/shaping/data/text-rendering-tests/tests/HVAR-1.tests
index d57e9a3a..d5dea06d 100644
--- a/test/shaping/data/text-rendering-tests/tests/HVAR-1.tests
+++ b/test/shaping/data/text-rendering-tests/tests/HVAR-1.tests
@@ -1,6 +1,6 @@
-../fonts/TestHVAROne.otf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0043:[A|B at 520,0|C at 1094,0]
-../fonts/TestHVAROne.otf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0043:[A|B at 533,0|C at 1115,0]
-../fonts/TestHVAROne.otf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0043:[A|B at 546,0|C at 1135,0]
-../fonts/TestHVAROne.otf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0043:[A|B at 558,0|C at 1155,0]
-../fonts/TestHVAROne.otf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0043:[A|B at 571,0|C at 1175,0]
-../fonts/TestHVAROne.otf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0043:[A|B at 584,0|C at 1196,0]
+../fonts/TestHVAROne.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=0:U+0041,U+0042,U+0043:[A|B at 520,0|C at 1094,0]
+../fonts/TestHVAROne.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=200:U+0041,U+0042,U+0043:[A|B at 533,0|C at 1115,0]
+../fonts/TestHVAROne.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=400:U+0041,U+0042,U+0043:[A|B at 546,0|C at 1135,0]
+../fonts/TestHVAROne.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=600:U+0041,U+0042,U+0043:[A|B at 558,0|C at 1155,0]
+../fonts/TestHVAROne.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=800:U+0041,U+0042,U+0043:[A|B at 571,0|C at 1175,0]
+../fonts/TestHVAROne.otf:--font-size=1000 --ned --font-funcs=ft --variations=wght=1000:U+0041,U+0042,U+0043:[A|B at 584,0|C at 1196,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/HVAR-2.tests b/test/shaping/data/text-rendering-tests/tests/HVAR-2.tests
index 88d90b52..23113b05 100644
--- a/test/shaping/data/text-rendering-tests/tests/HVAR-2.tests
+++ b/test/shaping/data/text-rendering-tests/tests/HVAR-2.tests
@@ -1,6 +1,6 @@
-../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042:[uni0041|uni0042 at 450,0]
-../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042:[uni0041|uni0042 at 515,0]
-../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042:[uni0041|uni0042 at 584,0]
-../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042:[uni0041|uni0042 at 673,0]
-../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042:[uni0041|uni0042 at 761,0]
-../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042:[uni0041|uni0042 at 850,0]
+../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=0:U+0041,U+0042:[uni0041|uni0042 at 450,0]
+../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=200:U+0041,U+0042:[uni0041|uni0042 at 515,0]
+../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=400:U+0041,U+0042:[uni0041|uni0042 at 584,0]
+../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=600:U+0041,U+0042:[uni0041|uni0042 at 673,0]
+../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=800:U+0041,U+0042:[uni0041|uni0042 at 761,0]
+../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft --variations=wght=1000:U+0041,U+0042:[uni0041|uni0042 at 850,0]
commit 2b3f62fc4de8f10c2168f212b1368478312e6dec
Author: Behdad Esfahbod <behdad at behdad.org>
Date:   Wed Jan 10 03:16:56 2018 +0100

    [test] Add tests from text-rendering-tests repo
    
    https://github.com/unicode-org/text-rendering-tests

diff --git a/test/shaping/Makefile.am b/test/shaping/Makefile.am
index 116a7e44..33b6b9e3 100644
--- a/test/shaping/Makefile.am
+++ b/test/shaping/Makefile.am
@@ -12,6 +12,7 @@ lib:
 
 EXTRA_DIST += \
 	README.md \
+	CMakeLists.txt \
 	hb-diff \
 	hb-diff-colorize \
 	hb-diff-filter-failures \
@@ -23,7 +24,7 @@ EXTRA_DIST += \
 	run-tests.py \
 	texts/in-house \
 	data/in-house/fonts \
-	CMakeLists.txt \
+	data/text-rendering-tests/fonts \
 	$(TESTS) \
 	$(NULL)
 
@@ -77,6 +78,47 @@ TESTS = \
 	data/in-house/tests/variations-rvrn.tests \
 	data/in-house/tests/vertical.tests \
 	data/in-house/tests/zero-width-marks.tests \
+	data/text-rendering-tests/tests/AVAR-1.tests \
+	data/text-rendering-tests/tests/CFF-1.tests \
+	data/text-rendering-tests/tests/CFF2-1.tests \
+	data/text-rendering-tests/tests/CFF-2.tests \
+	data/text-rendering-tests/tests/CMAP-1.tests \
+	data/text-rendering-tests/tests/CMAP-2.tests \
+	data/text-rendering-tests/tests/CMAP-3.tests \
+	data/text-rendering-tests/tests/CVAR-1.tests \
+	data/text-rendering-tests/tests/CVAR-2.tests \
+	data/text-rendering-tests/tests/GLYF-1.tests \
+	data/text-rendering-tests/tests/GPOS-1.tests \
+	data/text-rendering-tests/tests/GPOS-2.tests \
+	data/text-rendering-tests/tests/GPOS-3.tests \
+	data/text-rendering-tests/tests/GPOS-4.tests \
+	data/text-rendering-tests/tests/GPOS-5.tests \
+	data/text-rendering-tests/tests/GSUB-1.tests \
+	data/text-rendering-tests/tests/GSUB-2.tests \
+	data/text-rendering-tests/tests/GVAR-1.tests \
+	data/text-rendering-tests/tests/GVAR-2.tests \
+	data/text-rendering-tests/tests/GVAR-3.tests \
+	data/text-rendering-tests/tests/GVAR-4.tests \
+	data/text-rendering-tests/tests/GVAR-5.tests \
+	data/text-rendering-tests/tests/GVAR-6.tests \
+	data/text-rendering-tests/tests/GVAR-7.tests \
+	data/text-rendering-tests/tests/GVAR-8.tests \
+	data/text-rendering-tests/tests/GVAR-9.tests \
+	data/text-rendering-tests/tests/HVAR-1.tests \
+	data/text-rendering-tests/tests/HVAR-2.tests \
+	data/text-rendering-tests/tests/KERN-1.tests \
+	data/text-rendering-tests/tests/KERN-2.tests \
+	data/text-rendering-tests/tests/MORX-1.tests \
+	data/text-rendering-tests/tests/MORX-2.tests \
+	data/text-rendering-tests/tests/MORX-3.tests \
+	data/text-rendering-tests/tests/MORX-4.tests \
+	data/text-rendering-tests/tests/SHARAN-1.tests \
+	data/text-rendering-tests/tests/SHBALI-1.tests \
+	data/text-rendering-tests/tests/SHBALI-2.tests \
+	data/text-rendering-tests/tests/SHBALI-3.tests \
+	data/text-rendering-tests/tests/SHKNDA-1.tests \
+	data/text-rendering-tests/tests/SHKNDA-2.tests \
+	data/text-rendering-tests/tests/SHKNDA-3.tests \
 	$(NULL)
 
 TEST_EXTENSIONS = .tests
diff --git a/test/shaping/data/text-rendering-tests/fonts/AdobeVFPrototype-Subset.otf b/test/shaping/data/text-rendering-tests/fonts/AdobeVFPrototype-Subset.otf
new file mode 100644
index 00000000..5cc7279f
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/AdobeVFPrototype-Subset.otf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/FDArrayTest257.otf b/test/shaping/data/text-rendering-tests/fonts/FDArrayTest257.otf
new file mode 100644
index 00000000..a97b1f44
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/FDArrayTest257.otf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/FDArrayTest65535.otf b/test/shaping/data/text-rendering-tests/fonts/FDArrayTest65535.otf
new file mode 100644
index 00000000..835beb2d
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/FDArrayTest65535.otf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/NotoSansBalinese-Regular.ttf b/test/shaping/data/text-rendering-tests/fonts/NotoSansBalinese-Regular.ttf
new file mode 100644
index 00000000..0b0f58f0
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/NotoSansBalinese-Regular.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/NotoSansKannada-Regular.ttf b/test/shaping/data/text-rendering-tests/fonts/NotoSansKannada-Regular.ttf
new file mode 100644
index 00000000..7366f378
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/NotoSansKannada-Regular.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/NotoSerifKannada-Regular.ttf b/test/shaping/data/text-rendering-tests/fonts/NotoSerifKannada-Regular.ttf
new file mode 100644
index 00000000..30ca5509
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/NotoSerifKannada-Regular.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/Selawik-README.md b/test/shaping/data/text-rendering-tests/fonts/Selawik-README.md
new file mode 100644
index 00000000..9c5a80f3
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/fonts/Selawik-README.md
@@ -0,0 +1,60 @@
+# Overview
+This version of Selawik is a test case and demonstration of OpenType 1.8 Font Variations technology and tables. It also includes some handy debugging characters.
+
+This version of Selawik is intended for testing only, and is not recommended for shipping in applications, etc. For that, it is better to use the main branch of [Selawik](https://github.com/Microsoft/Selawik).
+
+# Features
+
+* Full TrueType hinting with VTT source tables included. See [Hinting](#hinting) for details.
+* All tables required for OpenType 1.8 are present (see [Table Status](#table-status), below). This includes cvar (varied CVTs), GPOS/GDEF (kerning varies), and avar (coordinate space warping to match Segoe UI).
+
+	Note: This version of Selawik does not include an MVAR because its vertical metrics do not change anywhere in the design space, thus there is no need for MVAR. A future release will contain an axis that varies vertical metrics as an excuse to have an MVAR.
+
+* Numerous interesting debugging glyphs (requires liga to be enabled). For example, \axis1 will show the current normalized wght coordinate. See [Debugging Glyphs](#debugging-glyphs) for details.
+* 1 axis: weight
+
+## Table status
+The following tables are currently supported:
+
+- [x] fvar
+- [x] gvar
+- [x] cvar
+- [x] avar (to match Segoe UI weights and metrics)
+- [x] STAT
+- [x] GPOS/GDEF - kerning
+- [x] HVAR
+
+Not yet complete: 
+
+- [ ] GSUB/GDEF - to change dollar signs in the bold
+- [ ] MVAR (future release)
+
+## To do
+* Add a second axis that varies vertical metrics so we need an MVAR table. This axis will not be one of the standard axes listed in the [OpenType 1.8 specification] (https://www.microsoft.com/typography/otspec/fvar.htm), so that it becomes an example of out to do a foundry-defined axis.
+* Add Feature Variations (GPOS/GDEF) to switch dollar sign glyphs across weights.
+
+
+# Debugging glyphs
+Thanks to Greg Hitchcock's TrueType coding wizardry, this font includes many glyphs that are helpful for debugging implementations of variable fonts. It has a number of substitutions implemented as liga features:
+
+Feature | Description
+-------- | ----------
+\axis1 | Shows the normalized coordinate on the wght axis for the currently selected instance (e.g. 1.0 for bold, -1.0 for light, or something in between).
+\axis2 | Shows 0 because this font doesn't yet have a second axis.
+\axis1hex | Same as \axis1 but in hex.
+\axis2hex | Same as \axis2 but in hex.
+\pointsize | Shows the point size passed to the TrueType rasterizer. Note that depending on how the application calls the rasterizer, this may not be what you expect - e.g. on Safari on MacOS, this is always 1024.
+\ppem | Shows the pixels per em passed to the TrueType rastersize. Note that depending on how the application calls the rasterizer, this may not be what you expect - e.g. on Safari on MacOS, this is always 1024.
+\ttversion | Shows the version of the TrueType rasterizer.
+\ttmode | Shows the current TrueType rasterizer mode flags.
+\boldtest | A glyph to help you detect artificial emboldening. The glyph has a vertical bar and a circle. The vertical bar's weight varies with the weight of the rest of the font: it gets bolder at bolder weights, lighter at lighter weights. The circle changes weight (and size) in opposition to the rest of the font: lighter at bold weights and vice versa. Thus, if you use this character and see both the circle and bar look bold, you're not looking at a true bold instance, but an algorithmically emboldened one.
+\family | Shows the family name of the font.
+\version | Shows the version of this font
+
+
+
+
+# Hinting
+This version of Selawik is primarily hinted with the light Latin hinting style Microsoft recommends for variable Latin fonts. The VTT Light Latin autohinter was used to create the first round of hints, which were then reviewed and touched up. 
+
+This hinting style only uses CVTs for vertical metrics anchors (ascender, descender, cap height, x-height, and baseline). While this makes for an easy job hinting a Latin font, it makes for a poor test case because Selawik doesn't vary vertical metrics with weight, thus doesn't vary CVTs, thus doesn't need a cvar. So, to make it more interesting, we added CVT-based stem hints to the lowercase only. This provided the need to vary CVTs and thus require a cvar. Note that this was only done for testing purposes. For variable fonts, Microsoft recommends the light hinting style using the `ResYDist()` command instead of a CVT-based stem hint. 
diff --git a/test/shaping/data/text-rendering-tests/fonts/Selawik-variable.ttf b/test/shaping/data/text-rendering-tests/fonts/Selawik-variable.ttf
new file mode 100644
index 00000000..ff347e00
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/Selawik-variable.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestAVAR.ttf b/test/shaping/data/text-rendering-tests/fonts/TestAVAR.ttf
new file mode 100644
index 00000000..5df9867d
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestAVAR.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestCMAP14.otf b/test/shaping/data/text-rendering-tests/fonts/TestCMAP14.otf
new file mode 100644
index 00000000..da485d9e
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestCMAP14.otf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestCMAPMacTurkish.ttf b/test/shaping/data/text-rendering-tests/fonts/TestCMAPMacTurkish.ttf
new file mode 100644
index 00000000..4f89b093
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestCMAPMacTurkish.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestCVARGVAROne.ttf b/test/shaping/data/text-rendering-tests/fonts/TestCVARGVAROne.ttf
new file mode 100644
index 00000000..84cd1ea5
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestCVARGVAROne.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestCVARGVARTwo.ttf b/test/shaping/data/text-rendering-tests/fonts/TestCVARGVARTwo.ttf
new file mode 100644
index 00000000..f20918a6
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestCVARGVARTwo.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGLYFOne.ttf b/test/shaping/data/text-rendering-tests/fonts/TestGLYFOne.ttf
new file mode 100644
index 00000000..8f634d95
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestGLYFOne.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGPOSFour.ttf b/test/shaping/data/text-rendering-tests/fonts/TestGPOSFour.ttf
new file mode 100644
index 00000000..bd929b50
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestGPOSFour.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGPOSOne.ttf b/test/shaping/data/text-rendering-tests/fonts/TestGPOSOne.ttf
new file mode 100644
index 00000000..ea74dd0b
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestGPOSOne.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGPOSThree.ttf b/test/shaping/data/text-rendering-tests/fonts/TestGPOSThree.ttf
new file mode 100644
index 00000000..158a77ac
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestGPOSThree.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGPOSTwo.otf b/test/shaping/data/text-rendering-tests/fonts/TestGPOSTwo.otf
new file mode 100644
index 00000000..76d04ebc
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestGPOSTwo.otf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGSUBOne.otf b/test/shaping/data/text-rendering-tests/fonts/TestGSUBOne.otf
new file mode 100644
index 00000000..9be638f3
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestGSUBOne.otf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGVAREight.ttf b/test/shaping/data/text-rendering-tests/fonts/TestGVAREight.ttf
new file mode 100644
index 00000000..271dc4b5
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestGVAREight.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGVARFour.ttf b/test/shaping/data/text-rendering-tests/fonts/TestGVARFour.ttf
new file mode 100644
index 00000000..3524f374
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestGVARFour.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGVARNine.ttf b/test/shaping/data/text-rendering-tests/fonts/TestGVARNine.ttf
new file mode 100644
index 00000000..0ecd326b
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestGVARNine.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGVAROne.ttf b/test/shaping/data/text-rendering-tests/fonts/TestGVAROne.ttf
new file mode 100644
index 00000000..e155d8f5
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestGVAROne.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGVARThree.ttf b/test/shaping/data/text-rendering-tests/fonts/TestGVARThree.ttf
new file mode 100644
index 00000000..ac2d7eb5
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestGVARThree.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGVARTwo.ttf b/test/shaping/data/text-rendering-tests/fonts/TestGVARTwo.ttf
new file mode 100644
index 00000000..bd144c6b
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestGVARTwo.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestHVAROne.otf b/test/shaping/data/text-rendering-tests/fonts/TestHVAROne.otf
new file mode 100644
index 00000000..a87395ca
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestHVAROne.otf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestHVARTwo.ttf b/test/shaping/data/text-rendering-tests/fonts/TestHVARTwo.ttf
new file mode 100644
index 00000000..2e81f94c
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestHVARTwo.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestKERNOne.otf b/test/shaping/data/text-rendering-tests/fonts/TestKERNOne.otf
new file mode 100644
index 00000000..35369d13
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestKERNOne.otf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXFour.ttf b/test/shaping/data/text-rendering-tests/fonts/TestMORXFour.ttf
new file mode 100644
index 00000000..00289723
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestMORXFour.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXOne.ttf b/test/shaping/data/text-rendering-tests/fonts/TestMORXOne.ttf
new file mode 100644
index 00000000..88b8decc
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestMORXOne.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXThree.ttf b/test/shaping/data/text-rendering-tests/fonts/TestMORXThree.ttf
new file mode 100644
index 00000000..56984f2e
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestMORXThree.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestMORXTwo.ttf b/test/shaping/data/text-rendering-tests/fonts/TestMORXTwo.ttf
new file mode 100644
index 00000000..39f2db54
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestMORXTwo.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestShapeAran.ttf b/test/shaping/data/text-rendering-tests/fonts/TestShapeAran.ttf
new file mode 100644
index 00000000..c73f5694
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestShapeAran.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestShapeEthi.ttf b/test/shaping/data/text-rendering-tests/fonts/TestShapeEthi.ttf
new file mode 100644
index 00000000..391dddd7
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/TestShapeEthi.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/fonts/Zycon.ttf b/test/shaping/data/text-rendering-tests/fonts/Zycon.ttf
new file mode 100644
index 00000000..3a6761b8
Binary files /dev/null and b/test/shaping/data/text-rendering-tests/fonts/Zycon.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/tests/AVAR-1.tests b/test/shaping/data/text-rendering-tests/tests/AVAR-1.tests
new file mode 100644
index 00000000..3da6dc54
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/AVAR-1.tests
@@ -0,0 +1,17 @@
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
+../fonts/TestAVAR.ttf:--font-size=1000 --ned --font-funcs=ft:U+2A01:[gid1]
diff --git a/test/shaping/data/text-rendering-tests/tests/CFF-1.tests b/test/shaping/data/text-rendering-tests/tests/CFF-1.tests
new file mode 100644
index 00000000..7ef9b6d9
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/CFF-1.tests
@@ -0,0 +1,13 @@
+../fonts/FDArrayTest257.otf:--font-size=1000 --ned --font-funcs=ft:U+0041:[gid66]
+../fonts/FDArrayTest257.otf:--font-size=1000 --ned --font-funcs=ft:U+211D:[gid30]
+../fonts/FDArrayTest257.otf:--font-size=1000 --ned --font-funcs=ft:U+24EA:[gid235]
+../fonts/FDArrayTest257.otf:--font-size=1000 --ned --font-funcs=ft:U+2460:[gid97]
+../fonts/FDArrayTest257.otf:--font-size=1000 --ned --font-funcs=ft:U+2461:[gid98]
+../fonts/FDArrayTest257.otf:--font-size=1000 --ned --font-funcs=ft:U+4EFF:[gid256]
+../fonts/FDArrayTest257.otf:--font-size=1000 --ned --font-funcs=ft:U+FF21:[gid34]
+../fonts/FDArrayTest257.otf:--font-size=1000 --ned --font-funcs=ft:U+10133:[gid52]
+../fonts/FDArrayTest257.otf:--font-size=1000 --ned --font-funcs=ft:U+1D4D0:[gid209]
+../fonts/FDArrayTest257.otf:--font-size=1000 --ned --font-funcs=ft:U+1F33A:[gid59]
+../fonts/FDArrayTest257.otf:--font-size=1000 --ned --font-funcs=ft:U+1F33B:[gid60]
+../fonts/FDArrayTest257.otf:--font-size=1000 --ned --font-funcs=ft:U+1F4A7:[gid168]
+../fonts/FDArrayTest257.otf:--font-size=1000 --ned --font-funcs=ft:U+1F95D:[gid94]
diff --git a/test/shaping/data/text-rendering-tests/tests/CFF-2.tests b/test/shaping/data/text-rendering-tests/tests/CFF-2.tests
new file mode 100644
index 00000000..e25040b2
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/CFF-2.tests
@@ -0,0 +1,13 @@
+../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --font-funcs=ft:U+0041:[gid66]
+../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --font-funcs=ft:U+211D:[gid8478]
+../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --font-funcs=ft:U+24EA:[gid9451]
+../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --font-funcs=ft:U+2460:[gid9313]
+../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --font-funcs=ft:U+2461:[gid9314]
+../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --font-funcs=ft:U+4EFF:[gid20224]
+../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --font-funcs=ft:U+FF21:[gid65314]
+../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --font-funcs=ft:U+10133:[gid308]
+../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --font-funcs=ft:U+1D4D0:[gid54481]
+../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --font-funcs=ft:U+1F33A:[gid62267]
+../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --font-funcs=ft:U+1F33B:[gid62268]
+../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --font-funcs=ft:U+1F4A7:[gid62632]
+../fonts/FDArrayTest65535.otf:--font-size=1000 --ned --font-funcs=ft:U+1F95D:[gid63838]
diff --git a/test/shaping/data/text-rendering-tests/tests/CFF2-1.tests b/test/shaping/data/text-rendering-tests/tests/CFF2-1.tests
new file mode 100644
index 00000000..d2c93961
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/CFF2-1.tests
@@ -0,0 +1,9 @@
+../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft:U+0024:[dollar]
+../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft:U+0024:[dollar]
+../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft:U+0024:[dollar]
+../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft:U+0024:[dollar]
+../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft:U+0024:[dollar]
+../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft:U+0024:[dollar]
+../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft:U+0024:[dollar]
+../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft:U+0024:[dollar.nostroke]
+../fonts/AdobeVFPrototype-Subset.otf:--font-size=1000 --ned --font-funcs=ft:U+0024:[dollar.nostroke]
diff --git a/test/shaping/data/text-rendering-tests/tests/CMAP-1.tests b/test/shaping/data/text-rendering-tests/tests/CMAP-1.tests
new file mode 100644
index 00000000..309b2d6d
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/CMAP-1.tests
@@ -0,0 +1,4 @@
+../fonts/TestCMAP14.otf:--font-size=1000 --ned --font-funcs=ft:U+82A6:[uni82A6_uE0100]
+../fonts/TestCMAP14.otf:--font-size=1000 --ned --font-funcs=ft:U+82A6,U+E0100:[uni82A6_uE0100]
+../fonts/TestCMAP14.otf:--font-size=1000 --ned --font-funcs=ft:U+82A6,U+E0101:[uni82A6_uE0101]
+../fonts/TestCMAP14.otf:--font-size=1000 --ned --font-funcs=ft:U+82A6,U+E0102:[uni82A6_uE0100]
diff --git a/test/shaping/data/text-rendering-tests/tests/CMAP-2.tests b/test/shaping/data/text-rendering-tests/tests/CMAP-2.tests
new file mode 100644
index 00000000..ef315632
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/CMAP-2.tests
@@ -0,0 +1,2 @@
+../fonts/TestCMAP14.otf:--font-size=1000 --ned --font-funcs=ft:U+2269:[uni2269]
+../fonts/TestCMAP14.otf:--font-size=1000 --ned --font-funcs=ft:U+2269,U+FE00:[uni2269FE00]
diff --git a/test/shaping/data/text-rendering-tests/tests/CMAP-3.tests b/test/shaping/data/text-rendering-tests/tests/CMAP-3.tests
new file mode 100644
index 00000000..9a3525b7
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/CMAP-3.tests
@@ -0,0 +1,20 @@
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+201C:[gid200]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041:[gid34]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+0042:[gid35]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+00C7:[gid126]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+011E:[gid176]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+0049:[gid42]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+0130:[gid178]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+00D6:[gid140]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+015E:[gid181]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+00DC:[gid145]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+201D:[gid201]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+0061:[gid66]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+0062:[gid67]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+00E7:[gid154]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+011F:[gid177]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+0131:[gid222]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+0069:[gid74]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+00F6:[gid168]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+015F:[gid182]
+../fonts/TestCMAPMacTurkish.ttf:--font-size=1000 --ned --font-funcs=ft:U+00FC:[gid174]
diff --git a/test/shaping/data/text-rendering-tests/tests/CVAR-1.tests b/test/shaping/data/text-rendering-tests/tests/CVAR-1.tests
new file mode 100644
index 00000000..70cb738d
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/CVAR-1.tests
@@ -0,0 +1,3 @@
+../fonts/TestCVARGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+0068,U+006F,U+006E:[uni0068|uni006F at 595,0|uni006E at 1126,0]
+../fonts/TestCVARGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+0068,U+006F,U+006E:[uni0068|uni006F at 635,0|uni006E at 1212,0]
+../fonts/TestCVARGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+0068,U+006F,U+006E:[uni0068|uni006F at 691,0|uni006E at 1331,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/CVAR-2.tests b/test/shaping/data/text-rendering-tests/tests/CVAR-2.tests
new file mode 100644
index 00000000..51de9200
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/CVAR-2.tests
@@ -0,0 +1,3 @@
+../fonts/TestCVARGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0068,U+006F,U+006E:[uni0068|uni006F at 595,0|uni006E at 1126,0]
+../fonts/TestCVARGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0068,U+006F,U+006E:[uni0068|uni006F at 635,0|uni006E at 1212,0]
+../fonts/TestCVARGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0068,U+006F,U+006E:[uni0068|uni006F at 691,0|uni006E at 1331,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/GLYF-1.tests b/test/shaping/data/text-rendering-tests/tests/GLYF-1.tests
new file mode 100644
index 00000000..90adae9c
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/GLYF-1.tests
@@ -0,0 +1 @@
+../fonts/TestGLYFOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0123:[gcommaabove]
diff --git a/test/shaping/data/text-rendering-tests/tests/GPOS-1.tests b/test/shaping/data/text-rendering-tests/tests/GPOS-1.tests
new file mode 100644
index 00000000..96f84fe0
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/GPOS-1.tests
@@ -0,0 +1,19 @@
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0104,U+004A:[Aogonek|J at 732,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0104,U+0067:[Aogonek|g at 692,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0104,U+0123:[Aogonek|gcommaabove at 692,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0104,U+006A:[Aogonek|j at 752,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0104,U+0237:[Aogonek|dotlessj at 752,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0051,U+0237:[Q|dotlessj at 734,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0105,U+006A:[aogonek|j at 588,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0105,U+0237:[aogonek|dotlessj at 588,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0067,U+0237:[g|dotlessj at 563,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0123,U+0237:[gcommaabove|dotlessj at 563,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0131,U+0237:[dotlessi|dotlessj at 334,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0173,U+0237:[uogonek|dotlessj at 656,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0076,U+0237:[v|dotlessj at 587,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0056,U+0061:[V|a at 594,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0056,U+00E1:[V|aacute at 594,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0056,U+0105:[V|aogonek at 594,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0056,U+0066:[V|f at 634,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0056,U+FB02:[V|fl at 634,0]
+../fonts/TestGPOSOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0056,U+002E:[V|period at 504,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/GPOS-2.tests b/test/shaping/data/text-rendering-tests/tests/GPOS-2.tests
new file mode 100644
index 00000000..cc31a07a
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/GPOS-2.tests
@@ -0,0 +1,3 @@
+../fonts/TestGPOSTwo.otf:--font-size=1000 --ned --font-funcs=ft:U+25EF:[uni25EF]
+../fonts/TestGPOSTwo.otf:--font-size=1000 --ned --font-funcs=ft:U+263C:[sun]
+../fonts/TestGPOSTwo.otf:--font-size=1000 --ned --font-funcs=ft:U+25EF,U+263C:[uni25EF|sun]
diff --git a/test/shaping/data/text-rendering-tests/tests/GPOS-3.tests b/test/shaping/data/text-rendering-tests/tests/GPOS-3.tests
new file mode 100644
index 00000000..b1c3be7d
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/GPOS-3.tests
@@ -0,0 +1,4 @@
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+1208:[uni1208]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+1208,U+135E:[uni1208|uni135E at 303,0]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+1208,U+135F:[uni1208|uni135F at 303,0]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+1208,U+135D:[uni1208|uni135D at 303,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/GPOS-4.tests b/test/shaping/data/text-rendering-tests/tests/GPOS-4.tests
new file mode 100644
index 00000000..7a68b5aa
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/GPOS-4.tests
@@ -0,0 +1,4 @@
+../fonts/TestGPOSThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0075,U+0308,U+0301:[u|uni0308 at 529,-31|acutecomb at 537,138]
+../fonts/TestGPOSThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0075,U+0308,U+0304:[u|uni0308 at 529,-31|uni0304 at 526,138]
+../fonts/TestGPOSThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0075,U+0308,U+0308:[u|uni0308 at 529,-31|uni0308 at 529,138]
+../fonts/TestGPOSThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0075,U+0308,U+0308,U+0308:[u|uni0308 at 529,-31|uni0308 at 529,138|uni0308 at 529,307]
diff --git a/test/shaping/data/text-rendering-tests/tests/GPOS-5.tests b/test/shaping/data/text-rendering-tests/tests/GPOS-5.tests
new file mode 100644
index 00000000..00bfd589
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/GPOS-5.tests
@@ -0,0 +1,5 @@
+../fonts/TestGPOSFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0634,U+0652:[uni0652 at 663,144|uni0634]
+../fonts/TestGPOSFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0634,U+0652:[uni0652 at 680,165|uni0634]
+../fonts/TestGPOSFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0634,U+0652:[uni0652 at 730,246|uni0634]
+../fonts/TestGPOSFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0634,U+0652:[uni0652 at 750,282|uni0634]
+../fonts/TestGPOSFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0634,U+0652:[uni0652 at 784,351|uni0634]
diff --git a/test/shaping/data/text-rendering-tests/tests/GSUB-1.tests b/test/shaping/data/text-rendering-tests/tests/GSUB-1.tests
new file mode 100644
index 00000000..591a9e55
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/GSUB-1.tests
@@ -0,0 +1 @@
+../fonts/TestGSUBOne.otf:--font-size=1000 --ned --font-funcs=ft:U+0061,U+0020,U+0061:[a.alt|space at 500,0|a at 1000,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/GSUB-2.tests b/test/shaping/data/text-rendering-tests/tests/GSUB-2.tests
new file mode 100644
index 00000000..601b483e
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/GSUB-2.tests
@@ -0,0 +1,11 @@
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+1373:[uni1373]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+136B:[uni136B]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+1375:[uni1375]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+136D:[uni136D]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+1373,U+136B:[uni1373.init|uni136B.fina at 621,0]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+1375,U+136D:[uni1375.init|uni136D.fina at 662,0]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+137B:[uni137B]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+1373,U+136B,U+137B:[uni1373.init|uni136B.medi at 621,0|uni137B.fina at 1102,0]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+1373,U+136B,U+137B,U+1373,U+136B:[uni1373.init|uni136B.medi at 621,0|uni137B.medi at 1102,0|uni1373.medi at 1489,0|uni136B.fina at 2110,0]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+1373,U+136B,U+137B,U+1375,U+136D:[uni1373.init|uni136B.medi at 621,0|uni137B.medi at 1102,0|uni1375.medi at 1489,0|uni136D.fina at 2157,0]
+../fonts/TestShapeEthi.ttf:--font-size=1000 --ned --font-funcs=ft:U+1375,U+136D,U+137B,U+1373,U+136B:[uni1375.init|uni136D.medi at 662,0|uni137B.medi at 1203,0|uni1373.medi at 1590,0|uni136B.fina at 2211,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-1.tests b/test/shaping/data/text-rendering-tests/tests/GVAR-1.tests
new file mode 100644
index 00000000..d70f2293
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/GVAR-1.tests
@@ -0,0 +1,9 @@
+../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
+../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
+../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
+../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
+../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
+../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
+../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
+../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
+../fonts/TestGVAROne.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-2.tests b/test/shaping/data/text-rendering-tests/tests/GVAR-2.tests
new file mode 100644
index 00000000..fe097776
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/GVAR-2.tests
@@ -0,0 +1,9 @@
+../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
+../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
+../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
+../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
+../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
+../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
+../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
+../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
+../fonts/TestGVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-3.tests b/test/shaping/data/text-rendering-tests/tests/GVAR-3.tests
new file mode 100644
index 00000000..700c7351
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/GVAR-3.tests
@@ -0,0 +1,9 @@
+../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
+../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
+../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
+../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
+../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
+../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
+../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
+../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
+../fonts/TestGVARThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+5F4C:[gid2]
diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-4.tests b/test/shaping/data/text-rendering-tests/tests/GVAR-4.tests
new file mode 100644
index 00000000..f51a95c8
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/GVAR-4.tests
@@ -0,0 +1,11 @@
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F98E:[gid5]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F98E:[gid5]
diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-5.tests b/test/shaping/data/text-rendering-tests/tests/GVAR-5.tests
new file mode 100644
index 00000000..7328e73a
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/GVAR-5.tests
@@ -0,0 +1,11 @@
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F31D:[gid15]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F31D:[gid15]
diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-6.tests b/test/shaping/data/text-rendering-tests/tests/GVAR-6.tests
new file mode 100644
index 00000000..c632d465
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/GVAR-6.tests
@@ -0,0 +1,11 @@
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F422:[gid12]
+../fonts/Zycon.ttf:--font-size=1000 --ned --font-funcs=ft:U+1F422:[gid12]
diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-7.tests b/test/shaping/data/text-rendering-tests/tests/GVAR-7.tests
new file mode 100644
index 00000000..bc06d56b
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/GVAR-7.tests
@@ -0,0 +1,7 @@
+../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+0049,U+004F:[uni004F|uni0049 at 706,0|uni004F at 1072,0]
+../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+0049,U+004F:[uni004F|uni0049 at 707,0|uni004F at 1074,0]
+../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+0049,U+004F:[uni004F|uni0049 at 707,0|uni004F at 1075,0]
+../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+0049,U+004F:[uni004F|uni0049 at 707,0|uni004F at 1076,0]
+../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+0049,U+004F:[uni004F|uni0049 at 707,0|uni004F at 1077,0]
+../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+0049,U+004F:[uni004F|uni0049 at 707,0|uni004F at 1078,0]
+../fonts/TestGVARFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+0049,U+004F:[uni004F|uni0049 at 706,0|uni004F at 1079,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-8.tests b/test/shaping/data/text-rendering-tests/tests/GVAR-8.tests
new file mode 100644
index 00000000..e5bd2572
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/GVAR-8.tests
@@ -0,0 +1,6 @@
+../fonts/TestGVAREight.ttf:--font-size=1000 --ned --font-funcs=ft:U+0048:[H]
+../fonts/TestGVAREight.ttf:--font-size=1000 --ned --font-funcs=ft:U+0048:[H]
+../fonts/TestGVAREight.ttf:--font-size=1000 --ned --font-funcs=ft:U+0048:[H]
+../fonts/TestGVAREight.ttf:--font-size=1000 --ned --font-funcs=ft:U+0048:[H]
+../fonts/TestGVAREight.ttf:--font-size=1000 --ned --font-funcs=ft:U+0048:[H]
+../fonts/TestGVAREight.ttf:--font-size=1000 --ned --font-funcs=ft:U+0048:[H]
diff --git a/test/shaping/data/text-rendering-tests/tests/GVAR-9.tests b/test/shaping/data/text-rendering-tests/tests/GVAR-9.tests
new file mode 100644
index 00000000..e4f2d75f
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/GVAR-9.tests
@@ -0,0 +1,10 @@
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041:[A]
+../fonts/TestGVARNine.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041:[A]
diff --git a/test/shaping/data/text-rendering-tests/tests/HVAR-1.tests b/test/shaping/data/text-rendering-tests/tests/HVAR-1.tests
new file mode 100644
index 00000000..d57e9a3a
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/HVAR-1.tests
@@ -0,0 +1,6 @@
+../fonts/TestHVAROne.otf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0043:[A|B at 520,0|C at 1094,0]
+../fonts/TestHVAROne.otf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0043:[A|B at 533,0|C at 1115,0]
+../fonts/TestHVAROne.otf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0043:[A|B at 546,0|C at 1135,0]
+../fonts/TestHVAROne.otf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0043:[A|B at 558,0|C at 1155,0]
+../fonts/TestHVAROne.otf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0043:[A|B at 571,0|C at 1175,0]
+../fonts/TestHVAROne.otf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0043:[A|B at 584,0|C at 1196,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/HVAR-2.tests b/test/shaping/data/text-rendering-tests/tests/HVAR-2.tests
new file mode 100644
index 00000000..88d90b52
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/HVAR-2.tests
@@ -0,0 +1,6 @@
+../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042:[uni0041|uni0042 at 450,0]
+../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042:[uni0041|uni0042 at 515,0]
+../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042:[uni0041|uni0042 at 584,0]
+../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042:[uni0041|uni0042 at 673,0]
+../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042:[uni0041|uni0042 at 761,0]
+../fonts/TestHVARTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042:[uni0041|uni0042 at 850,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/KERN-1.tests b/test/shaping/data/text-rendering-tests/tests/KERN-1.tests
new file mode 100644
index 00000000..7bc66b8a
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/KERN-1.tests
@@ -0,0 +1 @@
+../fonts/TestKERNOne.otf:--font-size=1000 --ned --font-funcs=ft:U+0131,U+0054,U+0075,U+0054,U+0075,U+0054,U+0131:[dotlessi|T|u at 400,0|T at 600,0|u at 1000,0|T at 1200,0|dotlessi at 1600,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/KERN-2.tests b/test/shaping/data/text-rendering-tests/tests/KERN-2.tests
new file mode 100644
index 00000000..9c2cc9ac
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/KERN-2.tests
@@ -0,0 +1 @@
+../fonts/TestKERNOne.otf:--font-size=1000 --ned --font-funcs=ft:U+0075,U+0131,U+0131,U+0054,U+0131,U+0131,U+0054,U+0131,U+0131,U+0075:[u|dotlessi at 400,0|dotlessi at 1100,0|T at 1100,0|dotlessi at 1500,0|dotlessi at 2200,0|T at 2200,0|dotlessi at 2600,0|dotlessi at 3300,0|u at 3500,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-1.tests b/test/shaping/data/text-rendering-tests/tests/MORX-1.tests
new file mode 100644
index 00000000..27214cfd
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/MORX-1.tests
@@ -0,0 +1 @@
+../fonts/TestMORXOne.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0043:[A.alt|B at 1000,0|C.alt at 2000,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-2.tests b/test/shaping/data/text-rendering-tests/tests/MORX-2.tests
new file mode 100644
index 00000000..4d7a965c
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/MORX-2.tests
@@ -0,0 +1,16 @@
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+24FF:[O|O at 418,0|O at 836,0|A at 1254,0|B at 2084,0|X at 2914,0|Y at 3744,0|Z at 4574,0|C at 5404,0|D at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|zero at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+278A:[O|O at 418,0|O at 836,0|B at 1254,0|X at 2084,0|Y at 2914,0|Z at 3744,0|C at 4574,0|D at 5404,0|A at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|one at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+278B:[O|O at 418,0|O at 836,0|D at 1254,0|A at 2084,0|B at 2914,0|X at 3744,0|Y at 4574,0|Z at 5404,0|C at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|two at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+0033:[O|O at 418,0|O at 836,0|D at 1254,0|B at 2084,0|X at 2914,0|Y at 3744,0|Z at 4574,0|C at 5404,0|A at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|three at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+0034:[O|O at 418,0|O at 836,0|X at 1254,0|Y at 2084,0|Z at 2914,0|C at 3744,0|D at 4574,0|A at 5404,0|B at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|four at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+0035:[O|O at 418,0|O at 836,0|X at 1254,0|Y at 2084,0|Z at 2914,0|C at 3744,0|D at 4574,0|B at 5404,0|A at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|five at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+0036:[O|O at 418,0|O at 836,0|C at 1254,0|D at 2084,0|A at 2914,0|B at 3744,0|X at 4574,0|Y at 5404,0|Z at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|six at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+0037:[O|O at 418,0|O at 836,0|D at 1254,0|C at 2084,0|A at 2914,0|B at 3744,0|X at 4574,0|Y at 5404,0|Z at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|seven at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+0038:[O|O at 418,0|O at 836,0|C at 1254,0|D at 2084,0|B at 2914,0|X at 3744,0|Y at 4574,0|Z at 5404,0|A at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|eight at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+0039:[O|O at 418,0|O at 836,0|D at 1254,0|C at 2084,0|B at 2914,0|X at 3744,0|Y at 4574,0|Z at 5404,0|A at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|nine at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+2793:[O|O at 418,0|O at 836,0|D at 1254,0|X at 2084,0|Y at 2914,0|Z at 3744,0|C at 4574,0|A at 5404,0|B at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|one_zero at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+24EB:[O|O at 418,0|O at 836,0|D at 1254,0|X at 2084,0|Y at 2914,0|Z at 3744,0|C at 4574,0|B at 5404,0|A at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|one_one at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+24EC:[O|O at 418,0|O at 836,0|C at 1254,0|D at 2084,0|X at 2914,0|Y at 3744,0|Z at 4574,0|A at 5404,0|B at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|one_two at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+24ED:[O|O at 418,0|O at 836,0|C at 1254,0|D at 2084,0|X at 2914,0|Y at 3744,0|Z at 4574,0|B at 5404,0|A at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|one_three at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+24EE:[O|O at 418,0|O at 836,0|D at 1254,0|C at 2084,0|X at 2914,0|Y at 3744,0|Z at 4574,0|A at 5404,0|B at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|one_four at 8318,0]
+../fonts/TestMORXTwo.ttf:--font-size=1000 --ned --font-funcs=ft:U+004F,U+004F,U+004F,U+0041,U+0042,U+0058,U+0059,U+005A,U+0043,U+0044,U+004F,U+004F,U+004F,U+24EF:[O|O at 418,0|O at 836,0|D at 1254,0|C at 2084,0|X at 2914,0|Y at 3744,0|Z at 4574,0|B at 5404,0|A at 6234,0|O at 7064,0|O at 7482,0|O at 7900,0|one_five at 8318,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-3.tests b/test/shaping/data/text-rendering-tests/tests/MORX-3.tests
new file mode 100644
index 00000000..2ec51578
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/MORX-3.tests
@@ -0,0 +1,16 @@
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0030:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|zero at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0031:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|one at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0032:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|two at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0033:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|three at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0034:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|four at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0035:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|five at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0036:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|six at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0037:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|seven at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0038:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|eight at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+0039:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|nine at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+2793:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|one_zero at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+24EB:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|one_one at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+24EC:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|one_two at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+24ED:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|one_three at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+24EE:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|one_four at 1793,0]
+../fonts/TestMORXThree.ttf:--font-size=1000 --ned --font-funcs=ft:U+0041,U+0042,U+0058,U+0043,U+0044,U+24EF:[A|B at 363,0|X at 722,0|C at 1086,0|D at 1402,0|one_five at 1793,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-4.tests b/test/shaping/data/text-rendering-tests/tests/MORX-4.tests
new file mode 100644
index 00000000..dae1d13d
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/MORX-4.tests
@@ -0,0 +1,15 @@
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0058,U+0059,U+005A,U+0031:[P|Q at 333,0|R at 699,0|A at 1050,0|X at 1880,0|Y at 2244,0|Z at 2576,0|one at 2898,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0058,U+0059,U+005A,U+0032:[P|Q at 333,0|R at 699,0|A at 1050,0|X at 1880,0|Y at 2244,0|Z at 2576,0|two at 2898,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0044,U+0058,U+0059,U+005A,U+0033:[P|Q at 333,0|R at 699,0|D at 1050,0|A at 1880,0|X at 2710,0|Y at 3074,0|Z at 3406,0|three at 3728,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0058,U+0059,U+005A,U+0034:[P|Q at 333,0|R at 699,0|A at 1050,0|B at 1880,0|X at 2710,0|Y at 3074,0|Z at 3406,0|four at 3728,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0058,U+0059,U+005A,U+0035:[P|Q at 333,0|R at 699,0|B at 1050,0|A at 1880,0|X at 2710,0|Y at 3074,0|Z at 3406,0|five at 3728,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0058,U+0059,U+005A,U+0036:[P|Q at 333,0|R at 699,0|A at 1050,0|B at 1880,0|X at 2710,0|Y at 3074,0|Z at 3406,0|six at 3728,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0058,U+0059,U+005A,U+0037:[P|Q at 333,0|R at 699,0|B at 1050,0|A at 1880,0|X at 2710,0|Y at 3074,0|Z at 3406,0|seven at 3728,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0043,U+0044,U+0058,U+0059,U+005A,U+0038:[P|Q at 333,0|R at 699,0|C at 1050,0|D at 1880,0|A at 2710,0|X at 3540,0|Y at 3904,0|Z at 4236,0|eight at 4558,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0043,U+0044,U+0058,U+0059,U+005A,U+0039:[P|Q at 333,0|R at 699,0|D at 1050,0|C at 1880,0|A at 2710,0|X at 3540,0|Y at 3904,0|Z at 4236,0|nine at 4558,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0044,U+0058,U+0059,U+005A,U+2793:[P|Q at 333,0|R at 699,0|D at 1050,0|A at 1880,0|B at 2710,0|X at 3540,0|Y at 3904,0|Z at 4236,0|one_zero at 4558,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0044,U+0058,U+0059,U+005A,U+24EB:[P|Q at 333,0|R at 699,0|D at 1050,0|B at 1880,0|A at 2710,0|X at 3540,0|Y at 3904,0|Z at 4236,0|one_one at 4558,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0043,U+0044,U+0058,U+0059,U+005A,U+24EC:[P|Q at 333,0|R at 699,0|C at 1050,0|D at 1880,0|A at 2710,0|B at 3540,0|X at 4370,0|Y at 4734,0|Z at 5066,0|one_two at 5388,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0043,U+0044,U+0058,U+0059,U+005A,U+24ED:[P|Q at 333,0|R at 699,0|C at 1050,0|D at 1880,0|B at 2710,0|A at 3540,0|X at 4370,0|Y at 4734,0|Z at 5066,0|one_three at 5388,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0043,U+0044,U+0058,U+0059,U+005A,U+24EE:[P|Q at 333,0|R at 699,0|D at 1050,0|C at 1880,0|A at 2710,0|B at 3540,0|X at 4370,0|Y at 4734,0|Z at 5066,0|one_four at 5388,0]
+../fonts/TestMORXFour.ttf:--font-size=1000 --ned --font-funcs=ft:U+0050,U+0051,U+0052,U+0041,U+0042,U+0043,U+0044,U+0058,U+0059,U+005A,U+24EF:[P|Q at 333,0|R at 699,0|D at 1050,0|C at 1880,0|B at 2710,0|A at 3540,0|X at 4370,0|Y at 4734,0|Z at 5066,0|one_five at 5388,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/SHARAN-1.tests b/test/shaping/data/text-rendering-tests/tests/SHARAN-1.tests
new file mode 100644
index 00000000..f4c92d90
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/SHARAN-1.tests
@@ -0,0 +1,6 @@
+../fonts/TestShapeAran.ttf:--font-size=1000 --ned --font-funcs=ft:U+0644,U+0633,U+0627,U+0646:[OneDotEnclNS at 398,-1|NoonxSep|AlefFin at 861,0|SeenMed.inT2outT1 at 1125,0|sp0 at 1664,0|LamIni.outT2 at 1664,223]
+../fonts/TestShapeAran.ttf:--font-size=1000 --ned --font-funcs=ft:U+06CC,U+0648,U+0646,U+06CC,U+06A9,U+0648,U+0688:[TahSmallNS at 118,-213|DalSep|WawFin.cut at 300,0|KafMed.outT3 at 573,206|TwoDotsBelowNS at 1115,220|BehxMed.inT2outT1 at 903,304|OneDotAboveNS at 1271,-71|sp1 at 1170,0|BehxIni.outT2 at 1170,449|WawFin.inD2 at 1387,0|TwoDotsBelowNS at 1867,1|sp0 at 1758,0|BehxIni.outD2WQ at 1758,323]
+../fonts/TestShapeAran.ttf:--font-size=1000 --ned --font-funcs=ft:U+0641,U+0648,U+0646,U+0679:[TahSmallNS at 595,-331|BehxFin.soft|OneDotAboveNS at 1163,-182|sp0 at 1184,0|BehxIni.outT2B at 1184,300|WawFin.inD2alt at 1340,0|OneDotAboveNS at 1784,108|sp0 at 1599,0|FehxIni.outD2WQ at 1599,237]
+../fonts/TestShapeAran.ttf:--font-size=1000 --ned --font-funcs=ft:U+0679,U+0627,U+0626,U+067E,U+0020,U+0641,U+06CC,U+0633:[SeenFin|TwoDotsBelowNS at 1216,269|BehxMed.inT1outT2SeenWide at 1041,455|OneDotAboveNS at 1454,224|sp0 at 1271,0|FehxIni at 1271,490|space at 1584,0|ThreeDotsDownBelowNS at 2290,-159|BehxFin.soft at 1715,0|HamzaAboveNS at 2878,-201|sp0 at 2899,0|BehxIni.outT2B at 2899,300|AlefFin.narrow at 3056,0|TahSmallNS at 3442,-420|sp0 at 3295,0|BehxIni.A at 3295,0]
+../fonts/TestShapeAran.ttf:--font-size=1000 --ned --font-funcs=ft:U+0641,U+0646,U+0020,U+062E,U+0637,U+0627,U+0637,U+06CC:[YehxFin|sp0 at 521,0|TahIni.outD2 at 521,380|AlefFin at 1119,0|TahMed.inD1outT1 at 1382,0|OneDotAboveNS at 2081,-47|sp0 at 1451,0|HahIni.outD1 at 1451,36|space at 2326,0|OneDotEnclNS at 2855,-2|NoonxFin at 2458,0|OneDotAboveNS at 3361,188|sp0 at 3208,0|FehxIni.outT2N at 3208,336]
+../fonts/TestShapeAran.ttf:--font-size=1000 --ned --font-funcs=ft:U+0646,U+0633,U+062A,U+0639,U+0644,U+06CC,U+0642:[TwoDotsAboveNS at 519,-199|QafxFin.cut|TwoDotsBelowNS at 977,141|BehxMed.inT2outD2WQ at 692,272|LamMed.outT2 at 1023,434|AinMed.inT3outT1 at 1301,507|TwoDotsAboveNS at 1785,209|BehxMed.inT2outT3 at 1563,603|SeenMed.inT2outT2 at 1865,735|OneDotAboveNS at 2574,670|sp0 at 2434,0|BehxIni.outT2tall at 2434,952]
diff --git a/test/shaping/data/text-rendering-tests/tests/SHBALI-1.tests b/test/shaping/data/text-rendering-tests/tests/SHBALI-1.tests
new file mode 100644
index 00000000..fde96aaf
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/SHBALI-1.tests
@@ -0,0 +1,22 @@
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B38,U+1B00:[gid23|gid60 at 1113,0|gid4 at 1064,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B15,U+1B44,U+1B16,U+1B02:[gid25|gid132 at 1092,0|gid6 at 942,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B18,U+1B3B:[gid28|gid62 at 796,0|gid57 at 794,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B19,U+1B40:[gid66|gid29 at 483,0|gid57 at 1536,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B1A,U+1B3F:[gid67|gid30 at 483,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B14,U+1B36:[gid24|gid58 at 828,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B13,U+1B01:[gid23|gid129 at 1111,0|gid5 at 1064,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B1B,U+1B01:[gid23|gid137 at 1111,0|gid5 at 1379,181]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B26,U+1B03:[gid23|gid148 at 1111,0|gid7 at 991,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B13,U+1B38:[gid23|gid129 at 1111,0|gid60 at 1111,-488]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B13,U+1B3C:[gid23|gid129 at 1111,0|gid70 at 1128,0|gid170 at 1113,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B13,U+1B3D:[gid23|gid129 at 1111,0|gid70 at 1128,0|gid170 at 1113,0|gid57 at 1111,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B3E:[gid66|gid23 at 483,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B36,U+1B3E:[gid23|gid58 at 1064,0|gid66 at 1111,0|gid128 at 1594,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B38,U+1B3E:[gid23|gid60 at 1113,0|gid66 at 1111,0|gid128 at 1594,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B15,U+1B3E:[gid66|gid23 at 483,0|gid131 at 1594,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B40:[gid66|gid23 at 483,0|gid57 at 1594,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B3E:[gid66|gid23 at 483,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B3E,U+1B36:[gid66|gid23 at 483,0|gid58 at 1548,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B3E,U+1B38:[gid66|gid23 at 483,0|gid60 at 1597,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B15,U+1B3E:[gid66|gid23 at 483,0|gid131 at 1594,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B40:[gid66|gid23 at 483,0|gid57 at 1594,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/SHBALI-2.tests b/test/shaping/data/text-rendering-tests/tests/SHBALI-2.tests
new file mode 100644
index 00000000..6b0f0b73
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/SHBALI-2.tests
@@ -0,0 +1,12 @@
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B27,U+1B3E:[gid66|gid23 at 483,0|gid149 at 1594,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B28,U+1B3F:[gid67|gid23 at 483,0|gid150 at 1594,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B31,U+1B3E:[gid66|gid23 at 483,0|gid159 at 1594,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B32,U+1B3E:[gid66|gid23 at 483,0|gid60 at 1597,0|gid149 at 1594,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B4A,U+1B3E:[gid66|gid23 at 483,0|gid60 at 1597,0|gid165 at 1594,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B1B,U+1B44,U+1B13:[gid181|gid129 at 1064,-195]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B1B,U+1B44,U+1B13,U+1B3E:[gid66|gid181 at 483,0|gid129 at 1548,-195]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B1B,U+1B44,U+1B13,U+1B38,U+1B00:[gid181|gid129 at 1064,-195|gid60 at 1064,-684|gid4 at 855,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B13,U+1B38:[gid23|gid129 at 1111,0|gid60 at 1111,-488]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B1B,U+1B39:[gid23|gid137 at 1111,0|gid61 at 1261,-488]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B31,U+1B3A:[gid23|gid159 at 1111,0|gid62 at 1753,0]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B13,U+1B44,U+1B45,U+1B38:[gid23|gid162 at 1111,0|gid60 at 1111,-488]
diff --git a/test/shaping/data/text-rendering-tests/tests/SHBALI-3.tests b/test/shaping/data/text-rendering-tests/tests/SHBALI-3.tests
new file mode 100644
index 00000000..661a282f
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/SHBALI-3.tests
@@ -0,0 +1,9 @@
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B66,U+1B6B:[gid102|gid107 at 560,-10]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B66,U+1B6C:[gid102|gid108 at 573,49]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B66,U+1B6D:[gid102|gid109 at 652,-10]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B66,U+1B6E:[gid102|gid110 at 652,-98]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B66,U+1B6F:[gid102|gid111 at 667,-10]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B66,U+1B70:[gid102|gid112 at 667,-10]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B66,U+1B71:[gid102|gid113 at 667,-10]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B66,U+1B72:[gid102|gid114 at 667,-10]
+../fonts/NotoSansBalinese-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+1B66,U+1B73:[gid102|gid115 at 599,-10]
diff --git a/test/shaping/data/text-rendering-tests/tests/SHKNDA-1.tests b/test/shaping/data/text-rendering-tests/tests/SHKNDA-1.tests
new file mode 100644
index 00000000..528a097a
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/SHKNDA-1.tests
@@ -0,0 +1,34 @@
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB2,U+0CCD,U+0CB2,U+0CBF:[knLI|knLAc2 at 757,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9F,U+0CCD,U+0CB8,U+0CCD:[knTT|knSAc2 at 1021,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB3,U+0CBF:[knLLI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA1,U+0CBF:[knDDI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAE,U+0CC6:[knME]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB0,U+0CBF:[knRI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C96,U+0CCD,U+0CAF,U+0CC6:[knKHE|knYAc2 at 846,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAB,U+0CCD,U+0CB0,U+0CBF:[knPHI|knRAc2 at 735,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA8,U+0CC6:[knNE]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C97,U+0CBF:[knGI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB7,U+0CCD,U+0C9F,U+0CBF:[knSSI|knTTAc2 at 746,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAF,U+0CBF,U+0C82:[knYI|knAnusvara at 1252,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9A,U+0CC0:[knCI|knLengthmark at 766,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA8,U+0CBF:[knNI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C97,U+0CCD,U+0CB2,U+0CBF:[knGI|knLAc2 at 621,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB7,U+0CBF:[knSSI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C97,U+0CC6:[knGE]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA6,U+0CCD,U+0CB5,U+0CBF:[knDI|knVAc2 at 740,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA4,U+0CC0:[knTI|knLengthmark at 613,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAE,U+0CBF:[knMI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB2,U+0CBF:[knLI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C97,U+0CBF:[knGI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA8,U+0CCD:[knN]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAC,U+0CBF:[knBI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB2,U+0CBF:[knLI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA8,U+0CCD,U+0CA8,U+0CBF,U+0C82:[knNI|knNAc2 at 678,0|knAnusvara at 755,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB2,U+0CCD,U+0CB2,U+0CBF:[knLI|knLAc2 at 757,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA7,U+0CBF:[knDHI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAA,U+0CCC:[knPA.base|knmAU at 739,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB5,U+0CBF,U+0C82:[knVI|knAnusvara at 749,0]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA1,U+0CBF:[knDDI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9F,U+0CBF:[knTTI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA8,U+0CBF:[knNI]
+../fonts/NotoSerifKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA7,U+0CBF:[knDHI]
diff --git a/test/shaping/data/text-rendering-tests/tests/SHKNDA-2.tests b/test/shaping/data/text-rendering-tests/tests/SHKNDA-2.tests
new file mode 100644
index 00000000..81d75637
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/SHKNDA-2.tests
@@ -0,0 +1,16 @@
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA8,U+0CCD,U+0CA8,U+0CBE:[gid150|gid57 at 711,0|gid116 at 1160,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA8,U+0CCD,U+0CA8,U+0CBE:[gid150|gid57 at 711,0|gid116 at 1160,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA4,U+0CCD,U+0CA4,U+0CBE:[gid146|gid57 at 623,0|gid112 at 1071,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9F,U+0CCD,U+0C9F,U+0CBE:[gid141|gid57 at 815,0|gid107 at 1264,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA1,U+0CCB,U+0C82,U+0C97,U+0CBF:[gid249|gid61 at 768,0|gid71 at 1513,0|gid4 at 1925,0|gid207 at 2475,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9C,U+0CBF,U+0CBC,U+0CD5,U+0CAC,U+0CC6,U+0CA8,U+0CCD:[gid211|gid55 at 652,0|gid71 at 776,0|gid259 at 1188,0|gid186 at 1994,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9C,U+0CBE,U+0CBC,U+0C95,U+0CBF,U+0CB0,U+0CCD:[gid139|gid57 at 776,0|gid55 at 652,0|gid205 at 1225,0|gid193 at 1799,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C87,U+0CA8,U+0CCD,U+0CAB,U+0CCD,U+0CB2,U+0CC6,U+0C95,U+0CCD,U+0CB7,U+0CA8,U+0CB2,U+0CCD:[gid8|gid256 at 711,0|gid118 at 1422,0|gid335 at 1591,0|gid282 at 1978,0|gid39 at 2552,0|gid195 at 3263,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C87,U+0CA8,U+0CCD,U+0CAB,U+0CCD,U+0CB2,U+0CC6,U+0C95,U+0CCD,U+0CB7,U+0CA8,U+0CCD:[gid8|gid256 at 711,0|gid118 at 1422,0|gid335 at 1591,0|gid282 at 1978,0|gid186 at 2552,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA6,U+0C9F,U+0CCD,U+0CB8,U+0CCD:[gid37|gid177 at 765,0|gid130 at 1814,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C8E,U+0C95,U+0CCD,U+0CB8,U+0CCD:[gid14|gid167 at 787,0|gid130 at 1596,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAE,U+0CBE,U+0CB0,U+0CCD,U+0C9A,U+0CCD:[gid155|gid57 at 1156,0|gid172 at 1605,0|gid94 at 2718,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9F,U+0CC6,U+0C95,U+0CCD,U+0CB8,U+0CCD,U+0C9F,U+0CCD:[gid247|gid167 at 815,0|gid130 at 1624,0|gid317 at 1792,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAC,U+0CC1,U+0C95,U+0CCD,U+0CB8,U+0CCD:[gid42|gid60 at 801,0|gid167 at 1165,0|gid130 at 1974,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB8,U+0CBE,U+0CAB,U+0CCD,U+0C9F,U+0CCD:[gid163|gid57 at 709,0|gid188 at 1158,0|gid107 at 2184,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9C,U+0CB8,U+0CCD,U+0C9F,U+0CCD:[gid27|gid200 at 776,0|gid107 at 1720,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/SHKNDA-3.tests b/test/shaping/data/text-rendering-tests/tests/SHKNDA-3.tests
new file mode 100644
index 00000000..edf0759b
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/SHKNDA-3.tests
@@ -0,0 +1,31 @@
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C95,U+0CCB,U+0C82:[gid239|gid61 at 574,0|gid71 at 1319,0|gid4 at 1731,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C96,U+0CCB,U+0C82:[gid240|gid61 at 865,0|gid71 at 1610,0|gid4 at 2022,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C97,U+0CCB,U+0C82:[gid241|gid61 at 648,0|gid71 at 1393,0|gid4 at 1805,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C98,U+0CCB,U+0C82:[gid242|gid279 at 997,0|gid71 at 1742,0|gid4 at 2153,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C99,U+0CCB,U+0C82:[gid24|gid67 at 737,0|gid71 at 1718,0|gid4 at 2130,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9A,U+0CCB,U+0C82:[gid243|gid61 at 795,0|gid71 at 1540,0|gid4 at 1952,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9B,U+0CCB,U+0C82:[gid244|gid61 at 843,0|gid71 at 1588,0|gid4 at 2000,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9C,U+0CCB,U+0C82:[gid245|gid61 at 776,0|gid71 at 1522,0|gid4 at 1933,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9D,U+0CCB,U+0C82:[gid246|gid61 at 1379,0|gid71 at 2124,0|gid4 at 2536,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9E,U+0CCB,U+0C82:[gid29|gid67 at 968,0|gid71 at 1949,0|gid4 at 2360,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C9F,U+0CCB,U+0C82:[gid247|gid61 at 815,0|gid71 at 1560,0|gid4 at 1972,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA0,U+0CCB,U+0C82:[gid248|gid61 at 651,0|gid71 at 1397,0|gid4 at 1808,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA1,U+0CCB,U+0C82:[gid249|gid61 at 768,0|gid71 at 1513,0|gid4 at 1925,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA2,U+0CCB,U+0C82:[gid250|gid61 at 768,0|gid71 at 1513,0|gid4 at 1925,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA3,U+0CCB,U+0C82:[gid251|gid61 at 867,0|gid71 at 1612,0|gid4 at 2023,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA4,U+0CCB,U+0C82:[gid252|gid61 at 623,0|gid71 at 1368,0|gid4 at 1779,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA5,U+0CCB,U+0C82:[gid253|gid61 at 765,0|gid71 at 1510,0|gid4 at 1921,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA6,U+0CCB,U+0C82:[gid254|gid61 at 765,0|gid71 at 1510,0|gid4 at 1921,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA7,U+0CCB,U+0C82,U+0020:[gid255|gid61 at 765,0|gid71 at 1510,0|gid4 at 1921,0|gid3 at 2472,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CA8,U+0CCB,U+0C82:[gid256|gid61 at 711,0|gid71 at 1456,0|gid4 at 1868,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAA,U+0CCB,U+0C82:[gid257|gid275 at 792,0|gid71 at 1434,0|gid4 at 1846,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAB,U+0CCB,U+0C82:[gid258|gid277 at 792,0|gid71 at 1434,0|gid4 at 1846,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAC,U+0CCB,U+0C82:[gid259|gid61 at 806,0|gid71 at 1551,0|gid4 at 1963,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAD,U+0CCB,U+0C82:[gid260|gid61 at 806,0|gid71 at 1551,0|gid4 at 1963,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAE,U+0CCB,U+0C82:[gid280|gid71 at 1539,0|gid4 at 1951,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CAF,U+0CCB,U+0C82:[gid281|gid71 at 1712,0|gid4 at 2124,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB0,U+0CCB,U+0C82:[gid263|gid61 at 651,0|gid71 at 1397,0|gid4 at 1808,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB1,U+0CCB,U+0C82:[gid47|gid67 at 831,0|gid71 at 1812,0|gid4 at 2223,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB2,U+0CCB,U+0C82:[gid264|gid61 at 769,0|gid71 at 1514,0|gid4 at 1925,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0CB5,U+0CCB,U+0C82:[gid266|gid275 at 794,0|gid71 at 1437,0|gid4 at 1848,0]
+../fonts/NotoSansKannada-Regular.ttf:--font-size=1000 --ned --font-funcs=ft:U+0C86,U+0CCD,U+0CAF,U+0C95,U+0CCD,U+0CB7,U+0CBF,U+0CB8,U+0CCD,U+200C:[gid7|gid122 at 838,0|gid285 at 1098,0|gid200 at 1672,0|gid3 at 2694,0]


More information about the HarfBuzz mailing list