.circleci/config.yml                                                 |    2 
 .travis.yml                                                          |    2 
 configure.ac                                                         |    4 -
 src/dump-emoji.cc                                                    |    2 
 src/hb-aat-layout-morx-table.hh                                      |    9 ++
 src/hb-aat-layout.cc                                                 |    6 +
 src/hb-aat-layout.hh                                                 |    2 
 src/hb-common.cc                                                     |    2 
 src/hb-graphite2.cc                                                  |   28 
++++++++
 src/hb-ot-shape.cc                                                   |   23 
+++++--
 src/hb-ot-shape.hh                                                   |    5 +
 src/hb-ot-var-fvar-table.hh                                          |    2 
 test/shaping/data/text-rendering-tests/DISABLED                      |   32 
----------
 test/shaping/data/text-rendering-tests/Makefile.sources              |   16 
+++--
 test/shaping/data/text-rendering-tests/extract-tests.py              |   18 
++++-
 test/shaping/data/text-rendering-tests/fonts/TestGSUBThree.ttf       |binary
 test/shaping/data/text-rendering-tests/fonts/TestMORXThirtyfour.ttf  |binary
 test/shaping/data/text-rendering-tests/fonts/TestMORXThirtythree.ttf |binary
 test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyfour.ttf  |binary
 test/shaping/data/text-rendering-tests/tests/GSUB-3.tests            |    1 
 test/shaping/data/text-rendering-tests/tests/MORX-24.tests           |    1 
 test/shaping/data/text-rendering-tests/tests/MORX-32.tests           |    8 +-
 test/shaping/data/text-rendering-tests/tests/MORX-33.tests           |    3 
 test/shaping/data/text-rendering-tests/tests/MORX-34.tests           |    1 
 test/shaping/run-tests.py                                            |   15 
++--
 25 files changed, 115 insertions(+), 67 deletions(-)

New commits:
commit 55468ca01b4cdf274900fb752fbf9ae05a78705e
Author: Behdad Esfahbod <[email protected]>
Date:   Thu Oct 4 12:13:55 2018 +0200

    [test/text-rendering-tests] Update from upstream

diff --git a/test/shaping/data/text-rendering-tests/Makefile.sources 
b/test/shaping/data/text-rendering-tests/Makefile.sources
index 6fe174e4..79f22adb 100644
--- a/test/shaping/data/text-rendering-tests/Makefile.sources
+++ b/test/shaping/data/text-rendering-tests/Makefile.sources
@@ -15,6 +15,7 @@ TESTS = \
        tests/GPOS-5.tests \
        tests/GSUB-1.tests \
        tests/GSUB-2.tests \
+       tests/GSUB-3.tests \
        tests/GVAR-1.tests \
        tests/GVAR-2.tests \
        tests/GVAR-3.tests \
@@ -42,6 +43,7 @@ TESTS = \
        tests/MORX-21.tests \
        tests/MORX-22.tests \
        tests/MORX-23.tests \
+       tests/MORX-24.tests \
        tests/MORX-25.tests \
        tests/MORX-26.tests \
        tests/MORX-27.tests \
@@ -50,6 +52,9 @@ TESTS = \
        tests/MORX-2.tests \
        tests/MORX-30.tests \
        tests/MORX-31.tests \
+       tests/MORX-32.tests \
+       tests/MORX-33.tests \
+       tests/MORX-34.tests \
        tests/MORX-3.tests \
        tests/MORX-4.tests \
        tests/MORX-5.tests \
@@ -68,5 +73,4 @@ DISBALED_TESTS = \
        tests/SHBALI-2.tests \
        tests/SHKNDA-2.tests \
        tests/SHKNDA-3.tests \
-       tests/MORX-32.tests \
        $(NULL)
diff --git a/test/shaping/data/text-rendering-tests/extract-tests.py 
b/test/shaping/data/text-rendering-tests/extract-tests.py
index 2292cf45..27d56861 100755
--- a/test/shaping/data/text-rendering-tests/extract-tests.py
+++ b/test/shaping/data/text-rendering-tests/extract-tests.py
@@ -28,6 +28,7 @@ def glyphstr(glyphs):
 
 html = ET.fromstring(sys.stdin.read())
 found = False
+
 for elt in html.findall(".//*[@class='expected'][@ft:id]", namespaces):
        found = True
        name = elt.get(ns('ft:id'))
@@ -47,4 +48,15 @@ for elt in html.findall(".//*[@class='expected'][@ft:id]", 
namespaces):
                opts = opts + ' --variations=%s' % variations
        print ("../fonts/%s:%s:%s:%s" % (font, opts, unistr(text), 
glyphstr(glyphs)))
 
+for elt in html.findall(".//*[@class='should-not-crash'][@ft:id]", namespaces):
+       found = True
+       name = elt.get(ns('ft:id'))
+       text = elt.get(ns('ft:render'))
+       font = elt.get(ns('ft:font'))
+       variations = elt.get(ns('ft:var'), '').replace(':', '=').replace(';', 
',')
+       opts = ''
+       if variations:
+               opts = '--variations=%s' % variations
+       print ("../fonts/%s:%s:%s:*" % (font, opts, unistr(text)))
+
 sys.exit(0 if found else 1)
diff --git a/test/shaping/data/text-rendering-tests/fonts/TestGSUBThree.ttf 
b/test/shaping/data/text-rendering-tests/fonts/TestGSUBThree.ttf
new file mode 100644
index 00000000..8fce4ac4
Binary files /dev/null and 
b/test/shaping/data/text-rendering-tests/fonts/TestGSUBThree.ttf differ
diff --git 
a/test/shaping/data/text-rendering-tests/fonts/TestMORXThirtyfour.ttf 
b/test/shaping/data/text-rendering-tests/fonts/TestMORXThirtyfour.ttf
new file mode 100644
index 00000000..a70dadcc
Binary files /dev/null and 
b/test/shaping/data/text-rendering-tests/fonts/TestMORXThirtyfour.ttf differ
diff --git 
a/test/shaping/data/text-rendering-tests/fonts/TestMORXThirtythree.ttf 
b/test/shaping/data/text-rendering-tests/fonts/TestMORXThirtythree.ttf
new file mode 100644
index 00000000..5cab73e5
Binary files /dev/null and 
b/test/shaping/data/text-rendering-tests/fonts/TestMORXThirtythree.ttf differ
diff --git 
a/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyfour.ttf 
b/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyfour.ttf
new file mode 100644
index 00000000..271dddb0
Binary files /dev/null and 
b/test/shaping/data/text-rendering-tests/fonts/TestMORXTwentyfour.ttf differ
diff --git a/test/shaping/data/text-rendering-tests/tests/GSUB-3.tests 
b/test/shaping/data/text-rendering-tests/tests/GSUB-3.tests
new file mode 100644
index 00000000..c2f7e6ef
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/GSUB-3.tests
@@ -0,0 +1 @@
+../fonts/TestGSUBThree.ttf::U+006C,U+006F,U+006C:*
diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-24.tests 
b/test/shaping/data/text-rendering-tests/tests/MORX-24.tests
new file mode 100644
index 00000000..79a3d7bb
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/MORX-24.tests
@@ -0,0 +1 @@
+../fonts/TestMORXTwentyfour.ttf::U+0041,U+0042,U+0043,U+0044,U+0045:*
diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-32.tests 
b/test/shaping/data/text-rendering-tests/tests/MORX-32.tests
index 6f3ae888..87c11525 100644
--- a/test/shaping/data/text-rendering-tests/tests/MORX-32.tests
+++ b/test/shaping/data/text-rendering-tests/tests/MORX-32.tests
@@ -1,4 +1,4 @@
-../fonts/TestMORXThirtytwo.ttf:--font-size=1000 --ned 
--remove-default-ignorables --font-funcs=ft:U+0041:[I|N@830,0|S@1660,0|A@2490,0]
-../fonts/TestMORXThirtytwo.ttf:--font-size=1000 --ned 
--remove-default-ignorables 
--font-funcs=ft:U+0058,U+0041,U+0059:[I|N@830,0|S@1660,0|X@2490,0|A@2854,0|Y@3684,0]
-../fonts/TestMORXThirtytwo.ttf:--font-size=1000 --ned 
--remove-default-ignorables --font-funcs=ft:U+0042:[B|I@830,0|N@1660,0|S@2490,0]
-../fonts/TestMORXThirtytwo.ttf:--font-size=1000 --ned 
--remove-default-ignorables 
--font-funcs=ft:U+0058,U+0042,U+0059:[X|I@364,0|N@1194,0|S@2024,0|B@2854,0|Y@3684,0]
+../fonts/TestMORXThirtytwo.ttf:--font-size=1000 --ned 
--remove-default-ignorables --font-funcs=ft:U+0041:[A]
+../fonts/TestMORXThirtytwo.ttf:--font-size=1000 --ned 
--remove-default-ignorables 
--font-funcs=ft:U+0058,U+0041,U+0059:[X|A@364,0|Y@1194,0]
+../fonts/TestMORXThirtytwo.ttf:--font-size=1000 --ned 
--remove-default-ignorables --font-funcs=ft:U+0042:[B]
+../fonts/TestMORXThirtytwo.ttf:--font-size=1000 --ned 
--remove-default-ignorables 
--font-funcs=ft:U+0058,U+0042,U+0059:[X|B@364,0|Y@1194,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-33.tests 
b/test/shaping/data/text-rendering-tests/tests/MORX-33.tests
new file mode 100644
index 00000000..17d080a6
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/MORX-33.tests
@@ -0,0 +1,3 @@
+../fonts/TestMORXThirtythree.ttf:--font-size=1000 --ned 
--remove-default-ignorables 
--font-funcs=ft:U+0068,U+0061:[h|a@618,0|h@1179,0|a@1797,0]
+../fonts/TestMORXThirtythree.ttf:--font-size=1000 --ned 
--remove-default-ignorables 
--font-funcs=ft:U+0068,U+0061,U+0068,U+0061:[h|a@618,0|h@1179,0|a@1797,0|h@2358,0|a@2976,0|h@3537,0|a@4155,0]
+../fonts/TestMORXThirtythree.ttf:--font-size=1000 --ned 
--remove-default-ignorables --font-funcs=ft:U+0061,U+0068:[a|h@561,0]
diff --git a/test/shaping/data/text-rendering-tests/tests/MORX-34.tests 
b/test/shaping/data/text-rendering-tests/tests/MORX-34.tests
new file mode 100644
index 00000000..8c309df8
--- /dev/null
+++ b/test/shaping/data/text-rendering-tests/tests/MORX-34.tests
@@ -0,0 +1 @@
+../fonts/TestMORXThirtyfour.ttf::U+0068,U+0061:*
diff --git a/test/shaping/run-tests.py b/test/shaping/run-tests.py
index ffe622a2..5592aea5 100755
--- a/test/shaping/run-tests.py
+++ b/test/shaping/run-tests.py
@@ -19,8 +19,6 @@ if not args or sys.argv[1].find('hb-shape') == -1 or not 
os.path.exists (sys.arg
        sys.exit (1)
 hb_shape, args = args[0], args[1:]
 
-extra_options = "--verify"
-
 fails = 0
 
 reference = False
@@ -48,6 +46,11 @@ for filename in args:
                cwd = os.path.dirname(filename)
                fontfile = os.path.normpath (os.path.join (cwd, fontfile))
 
+               extra_options = []
+               glyphs_expected = glyphs_expected.strip()
+               if glyphs_expected != '*':
+                       extra_options.append("--verify")
+
                if line.startswith ("#"):
                        if not reference:
                                print ("# %s %s --unicodes %s" % (hb_shape, 
fontfile, unicodes))
@@ -55,10 +58,10 @@ for filename in args:
 
                if not reference:
                        print ("%s %s %s %s --unicodes %s" %
-                                        (hb_shape, fontfile, extra_options, 
options, unicodes))
+                                        (hb_shape, fontfile, ' 
'.join(extra_options), options, unicodes))
 
                glyphs1, returncode = cmd ([hb_shape, "--font-funcs=ft",
-                       fontfile, extra_options, "--unicodes",
+                       fontfile] + extra_options + ["--unicodes",
                        unicodes] + (options.split (' ') if options else []))
 
                if returncode:
@@ -67,7 +70,7 @@ for filename in args:
                        #continue
 
                glyphs2, returncode = cmd ([hb_shape, "--font-funcs=ot",
-                       fontfile, extra_options, "--unicodes",
+                       fontfile] + extra_options + ["--unicodes",
                        unicodes] + (options.split (' ') if options else []))
 
                if returncode:
@@ -84,7 +87,7 @@ for filename in args:
                        print (":".join ([fontfile, options, unicodes, 
glyphs1]))
                        continue
 
-               if glyphs1.strip() != glyphs_expected.strip() and 
glyphs_expected.strip() != '*':
+               if glyphs1.strip() != glyphs_expected and glyphs_expected != 
'*':
                        print ("Actual:   " + glyphs1) # file=sys.stderr
                        print ("Expected: " + glyphs_expected) # file=sys.stderr
                        fails = fails + 1
commit 6ff8a8a10b62a54a87d53b0af66ccaba5d58b107
Author: Behdad Esfahbod <[email protected]>
Date:   Thu Oct 4 12:09:45 2018 +0200

    Minor

diff --git a/test/shaping/data/text-rendering-tests/extract-tests.py 
b/test/shaping/data/text-rendering-tests/extract-tests.py
index 36963e5e..2292cf45 100755
--- a/test/shaping/data/text-rendering-tests/extract-tests.py
+++ b/test/shaping/data/text-rendering-tests/extract-tests.py
@@ -33,7 +33,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(';', ',')
+       variations = elt.get(ns('ft:var'), '').replace(':', '=').replace(';', 
',')
        glyphs = []
        for use in elt.findall(".//use"):
                x = int(use.get('x'))
@@ -43,8 +43,8 @@ for elt in html.findall(".//*[@class='expected'][@ft:id]", 
namespaces):
                glyphname = '.'.join(href[1:].split('/')[1].split('.')[1:])
                glyphs.append((glyphname, x, y))
        opts = '--font-size=1000 --ned --remove-default-ignorables 
--font-funcs=ft'
-       if vars:
-               opts = opts + ' --variations=%s' % vars
+       if variations:
+               opts = opts + ' --variations=%s' % variations
        print ("../fonts/%s:%s:%s:%s" % (font, opts, unistr(text), 
glyphstr(glyphs)))
 
 sys.exit(0 if found else 1)
commit 14ff3cbe0f30dea24e1bb175b1e8e41039f6afdc
Author: Behdad Esfahbod <[email protected]>
Date:   Thu Oct 4 11:34:21 2018 +0200

    Apply morx if there's no GSUB!

diff --git a/src/hb-ot-shape.cc b/src/hb-ot-shape.cc
index 748af969..9e87b300 100644
--- a/src/hb-ot-shape.cc
+++ b/src/hb-ot-shape.cc
@@ -63,9 +63,14 @@ hb_ot_shape_planner_t::compile (hb_ot_shape_plan_t &plan,
   plan.kerning_requested = !!plan.kern_mask;
   plan.has_gpos_mark = !!plan.map.get_1_mask (HB_TAG ('m','a','r','k'));
 
+  plan.apply_morx = !hb_ot_layout_has_substitution (face) &&
+                    hb_aat_layout_has_substitution (face);
+
   bool disable_gpos = plan.shaper->gpos_tag &&
                      plan.shaper->gpos_tag != plan.map.chosen_script[1];
-  plan.fallback_positioning = disable_gpos || !hb_ot_layout_has_positioning 
(face);
+  plan.apply_gpos = !disable_gpos && hb_ot_layout_has_positioning (face);
+
+  plan.fallback_positioning = !plan.apply_gpos;
   plan.fallback_glyph_classes = !hb_ot_layout_has_glyph_classes (face);
 }
 
@@ -217,7 +222,13 @@ _hb_ot_shaper_shape_plan_data_create (hb_shape_plan_t    
*shape_plan,
 
   hb_ot_shape_planner_t planner (shape_plan);
 
-  planner.shaper = hb_ot_shape_complex_categorize (&planner);
+  /* Ugly that we have to do this here...
+   * If we are going to apply morx, choose default shaper. */
+  if (!hb_ot_layout_has_substitution (planner.face) &&
+       hb_aat_layout_has_substitution (planner.face))
+    planner.shaper = &_hb_ot_complex_shaper_default;
+  else
+    planner.shaper = hb_ot_shape_complex_categorize (&planner);
 
   hb_ot_shape_collect_features (&planner, &shape_plan->props,
                                user_features, num_user_features);
@@ -661,10 +672,10 @@ hb_ot_substitute_complex (hb_ot_shape_context_t *c)
   if (c->plan->fallback_glyph_classes)
     hb_synthesize_glyph_classes (c);
 
-  c->plan->substitute (c->font, buffer);
-
-  if (0) /* XXX Call morx instead. */
+  if (unlikely (c->plan->apply_morx))
     hb_aat_layout_substitute (c->font, c->buffer);
+  else
+    c->plan->substitute (c->font, buffer);
 }
 
 static inline void
@@ -784,7 +795,7 @@ hb_ot_position_complex (hb_ot_shape_context_t *c)
       break;
   }
 
-  if (likely (!c->plan->fallback_positioning))
+  if (c->plan->apply_gpos)
     c->plan->position (c->font, c->buffer);
 
   switch (c->plan->shaper->zero_width_marks)
diff --git a/src/hb-ot-shape.hh b/src/hb-ot-shape.hh
index 88c72dc1..23c385aa 100644
--- a/src/hb-ot-shape.hh
+++ b/src/hb-ot-shape.hh
@@ -49,6 +49,11 @@ struct hb_ot_shape_plan_t
   bool fallback_positioning : 1;
   bool fallback_glyph_classes : 1;
 
+  bool apply_morx : 1;
+
+  bool apply_gpos : 1;
+
+
   inline void collect_lookups (hb_tag_t table_tag, hb_set_t *lookups) const
   {
     unsigned int table_index;
diff --git a/test/shaping/data/text-rendering-tests/DISABLED 
b/test/shaping/data/text-rendering-tests/DISABLED
index 1ce62e07..8539c0ee 100644
--- a/test/shaping/data/text-rendering-tests/DISABLED
+++ b/test/shaping/data/text-rendering-tests/DISABLED
@@ -1,38 +1,6 @@
 # Non-Unicode cmap
 tests/CMAP-3.tests
 
-# Not hooked up
-tests/MORX-1.tests
-tests/MORX-2.tests
-tests/MORX-3.tests
-tests/MORX-4.tests
-tests/MORX-5.tests
-tests/MORX-6.tests
-tests/MORX-7.tests
-tests/MORX-8.tests
-tests/MORX-9.tests
-tests/MORX-10.tests
-tests/MORX-11.tests
-tests/MORX-12.tests
-tests/MORX-13.tests
-tests/MORX-14.tests
-tests/MORX-16.tests
-tests/MORX-17.tests
-tests/MORX-18.tests
-tests/MORX-19.tests
-tests/MORX-20.tests
-tests/MORX-21.tests
-tests/MORX-22.tests
-tests/MORX-23.tests
-tests/MORX-25.tests
-tests/MORX-26.tests
-tests/MORX-27.tests
-tests/MORX-28.tests
-tests/MORX-29.tests
-tests/MORX-30.tests
-tests/MORX-31.tests
-tests/MORX-32.tests
-
 # Rounding differences
 tests/SHARAN-1.tests
 tests/SHBALI-1.tests
diff --git a/test/shaping/data/text-rendering-tests/Makefile.sources 
b/test/shaping/data/text-rendering-tests/Makefile.sources
index 5c8cd03f..6fe174e4 100644
--- a/test/shaping/data/text-rendering-tests/Makefile.sources
+++ b/test/shaping/data/text-rendering-tests/Makefile.sources
@@ -28,12 +28,6 @@ TESTS = \
        tests/HVAR-2.tests \
        tests/KERN-1.tests \
        tests/KERN-2.tests \
-       tests/SHBALI-3.tests \
-       tests/SHKNDA-1.tests \
-       $(NULL)
-
-DISBALED_TESTS = \
-       tests/CMAP-3.tests \
        tests/MORX-10.tests \
        tests/MORX-11.tests \
        tests/MORX-12.tests \
@@ -56,7 +50,6 @@ DISBALED_TESTS = \
        tests/MORX-2.tests \
        tests/MORX-30.tests \
        tests/MORX-31.tests \
-       tests/MORX-32.tests \
        tests/MORX-3.tests \
        tests/MORX-4.tests \
        tests/MORX-5.tests \
@@ -64,9 +57,16 @@ DISBALED_TESTS = \
        tests/MORX-7.tests \
        tests/MORX-8.tests \
        tests/MORX-9.tests \
+       tests/SHBALI-3.tests \
+       tests/SHKNDA-1.tests \
+       $(NULL)
+
+DISBALED_TESTS = \
+       tests/CMAP-3.tests \
        tests/SHARAN-1.tests \
        tests/SHBALI-1.tests \
        tests/SHBALI-2.tests \
        tests/SHKNDA-2.tests \
        tests/SHKNDA-3.tests \
+       tests/MORX-32.tests \
        $(NULL)
commit 3417037eb13a59dce6add0b1691ddb1b2b54c1e4
Author: Behdad Esfahbod <[email protected]>
Date:   Thu Oct 4 11:08:15 2018 +0200

    [aat] Add +hb_aat_layout_has_substitution

diff --git a/src/hb-aat-layout-morx-table.hh b/src/hb-aat-layout-morx-table.hh
index 85f1f579..e9869036 100644
--- a/src/hb-aat-layout-morx-table.hh
+++ b/src/hb-aat-layout-morx-table.hh
@@ -947,6 +947,8 @@ struct morx
 {
   static const hb_tag_t tableTag = HB_AAT_TAG_morx;
 
+  inline bool has_data (void) const { return version != 0; }
+
   inline void apply (hb_aat_apply_context_t *c) const
   {
     if (unlikely (!c->buffer->successful)) return;
diff --git a/src/hb-aat-layout.cc b/src/hb-aat-layout.cc
index a5e36a40..faf418d6 100644
--- a/src/hb-aat-layout.cc
+++ b/src/hb-aat-layout.cc
@@ -55,6 +55,12 @@ _get_morx (hb_face_t *face, hb_blob_t **blob = nullptr)
   return morx;
 }
 
+hb_bool_t
+hb_aat_layout_has_substitution (hb_face_t *face)
+{
+  return _get_morx (face).has_data ();
+}
+
 void
 hb_aat_layout_substitute (hb_font_t *font, hb_buffer_t *buffer)
 {
diff --git a/src/hb-aat-layout.hh b/src/hb-aat-layout.hh
index ac9c5353..553832f1 100644
--- a/src/hb-aat-layout.hh
+++ b/src/hb-aat-layout.hh
@@ -33,6 +33,8 @@
 #include "hb-buffer.hh"
 #include "hb-open-type.hh"
 
+HB_INTERNAL hb_bool_t
+hb_aat_layout_has_substitution (hb_face_t *face);
 
 HB_INTERNAL void
 hb_aat_layout_substitute (hb_font_t *font, hb_buffer_t *buffer);
commit 1f14107f71a6c3da8270ed21c3588f945fa91733
Author: Sascha Brawer <[email protected]>
Date:   Thu Oct 4 09:17:08 2018 +0200

    Minor: Fix autoconf warning
    
    Before this change, autoconf was emitting the following warnings:
    
    ```
    configure.ac:22: warning: AC_COMPILE_IFELSE was called before 
AC_USE_SYSTEM_EXTENSIONS
    ../../lib/autoconf/specific.m4:368: AC_USE_SYSTEM_EXTENSIONS is expanded 
from...
    configure.ac:22: the top level
    configure.ac:22: warning: AC_RUN_IFELSE was called before 
AC_USE_SYSTEM_EXTENSIONS
    ../../lib/autoconf/specific.m4:368: AC_USE_SYSTEM_EXTENSIONS is expanded 
from...
    configure.ac:22: the top level
    configure.ac:22: warning: AC_COMPILE_IFELSE was called before 
AC_USE_SYSTEM_EXTENSIONS
    ../../lib/autoconf/specific.m4:368: AC_USE_SYSTEM_EXTENSIONS is expanded 
from...
    configure.ac:22: the top level
    configure.ac:22: warning: AC_RUN_IFELSE was called before 
AC_USE_SYSTEM_EXTENSIONS
    ../../lib/autoconf/specific.m4:368: AC_USE_SYSTEM_EXTENSIONS is expanded 
from...
    configure.ac:22: the top level
    configure.ac:22: warning: AC_COMPILE_IFELSE was called before 
AC_USE_SYSTEM_EXTENSIONS
    ../../lib/autoconf/specific.m4:368: AC_USE_SYSTEM_EXTENSIONS is expanded 
from...
    configure.ac:22: the top level
    configure.ac:22: warning: AC_RUN_IFELSE was called before 
AC_USE_SYSTEM_EXTENSIONS
    ../../lib/autoconf/specific.m4:368: AC_USE_SYSTEM_EXTENSIONS is expanded 
from...
    configure.ac:22: the top level
    configure.ac:22: warning: AC_COMPILE_IFELSE was called before 
AC_USE_SYSTEM_EXTENSIONS
    ../../lib/autoconf/specific.m4:368: AC_USE_SYSTEM_EXTENSIONS is expanded 
from...
    configure.ac:22: the top level
    configure.ac:22: warning: AC_RUN_IFELSE was called before 
AC_USE_SYSTEM_EXTENSIONS
    ../../lib/autoconf/specific.m4:368: AC_USE_SYSTEM_EXTENSIONS is expanded 
from...
    configure.ac:22: the top level
    ```

diff --git a/configure.ac b/configure.ac
index 4ebb21df..3aa41ff2 100644
--- a/configure.ac
+++ b/configure.ac
@@ -12,6 +12,7 @@ AC_CONFIG_HEADERS([config.h])
 AM_INIT_AUTOMAKE([1.13.0 gnits tar-ustar dist-bzip2 no-dist-gzip -Wall 
no-define color-tests -Wno-portability])
 AM_SILENT_RULES([yes])
 AX_CODE_COVERAGE
+AC_USE_SYSTEM_EXTENSIONS
 
 # Initialize libtool
 m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
@@ -19,7 +20,6 @@ LT_PREREQ([2.2])
 LT_INIT([disable-static])
 
 # Check for programs
-AC_USE_SYSTEM_EXTENSIONS
 AC_PROG_CC
 AC_PROG_CC_C99
 AM_PROG_CC_C_O
commit 7810bb1a59ea71afeed7ea489400801ebdf642e4
Author: Sascha Brawer <[email protected]>
Date:   Thu Oct 4 09:24:08 2018 +0200

    [morx] Only insert glyphs at mark when a mark has been set before
    
    This reverts commit f4072e8cb81072cd6d51a2607efedb76c02e7db1.
    https://github.com/harfbuzz/harfbuzz/issues/1195

diff --git a/src/hb-aat-layout-morx-table.hh b/src/hb-aat-layout-morx-table.hh
index c58e6744..85f1f579 100644
--- a/src/hb-aat-layout-morx-table.hh
+++ b/src/hb-aat-layout-morx-table.hh
@@ -592,6 +592,7 @@ struct InsertionSubtable
                             hb_aat_apply_context_t *c_) :
        ret (false),
        c (c_),
+       mark_set (false),
        mark (0),
        insertionAction (table+table->insertionAction) {}
 
@@ -607,7 +608,7 @@ struct InsertionSubtable
       hb_buffer_t *buffer = driver->buffer;
       unsigned int flags = entry->flags;
 
-      if (entry->data.markedInsertIndex != 0xFFFF)
+      if (entry->data.markedInsertIndex != 0xFFFF && mark_set)
       {
        unsigned int count = (flags & MarkedInsertCount);
        unsigned int start = entry->data.markedInsertIndex;
@@ -668,7 +669,10 @@ struct InsertionSubtable
       }
 
       if (flags & SetMark)
+      {
+       mark_set = true;
        mark = buffer->out_len;
+      }
 
       return true;
     }
@@ -677,6 +681,7 @@ struct InsertionSubtable
     bool ret;
     private:
     hb_aat_apply_context_t *c;
+    bool mark_set;
     unsigned int mark;
     const UnsizedArrayOf<GlyphID> &insertionAction;
   };
commit 5de2d9cdbdca870901c0ba9472f5b78c48ba0a58
Author: Ebrahim Byagowi <[email protected]>
Date:   Thu Oct 4 02:14:18 2018 +0330

    Minor, fix double-promotion warnings (#1221)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 6b63f1ae..af443ad9 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -91,7 +91,7 @@ jobs:
       - run: apt update || true
       - run: apt install -y clang lld binutils libtool autoconf automake make 
pkg-config gtk-doc-tools ragel libfreetype6-dev libfontconfig1-dev 
libglib2.0-dev libcairo2-dev libicu-dev libgraphite2-dev python python-pip
       - run: pip install fonttools
-      - run: CFLAGS="-Weverything -Wno-reserved-id-macro -Wno-conversion 
-Wno-padded -Wno-sign-conversion -Wno-cast-qual -Wno-documentation 
-Wno-documentation-unknown-command" CXXFLAGS="-Weverything -Wno-old-style-cast 
-Wno-documentation -Wno-documentation-unknown-command -Wno-c++98-compat 
-Wno-cast-qual -Wno-c++98-compat-pedantic -Wno-sign-conversion -Wno-padded 
-Wno-shorten-64-to-32 -Wno-extra-semi -Wno-reserved-id-macro 
-Wno-float-conversion -Wno-format-pedantic -Wno-shadow -Wno-conversion 
-Wno-zero-as-null-pointer-constant -Wno-missing-field-initializers 
-Wno-double-promotion -Wno-used-but-marked-unused -Wno-unused-macros -Wno-comma 
-Wno-float-equal -Wno-disabled-macro-expansion -Wno-weak-vtables 
-Wno-unused-parameter -Wno-covered-switch-default -Wno-unreachable-code" 
CC=clang CXX=clang++ ./autogen.sh --with-freetype --with-glib --with-cairo 
--with-icu --with-graphite2 --with-fontconfig
+      - run: CFLAGS="-Weverything -Wno-reserved-id-macro -Wno-conversion 
-Wno-padded -Wno-sign-conversion -Wno-cast-qual -Wno-documentation 
-Wno-documentation-unknown-command" CXXFLAGS="-Weverything -Wno-old-style-cast 
-Wno-documentation -Wno-documentation-unknown-command -Wno-c++98-compat 
-Wno-cast-qual -Wno-c++98-compat-pedantic -Wno-sign-conversion -Wno-padded 
-Wno-shorten-64-to-32 -Wno-extra-semi -Wno-reserved-id-macro 
-Wno-float-conversion -Wno-format-pedantic -Wno-shadow -Wno-conversion 
-Wno-zero-as-null-pointer-constant -Wno-missing-field-initializers 
-Wno-used-but-marked-unused -Wno-unused-macros -Wno-comma -Wno-float-equal 
-Wno-disabled-macro-expansion -Wno-weak-vtables -Wno-unused-parameter 
-Wno-covered-switch-default -Wno-unreachable-code" CC=clang CXX=clang++ 
./autogen.sh --with-freetype --with-glib --with-cairo --with-icu 
--with-graphite2 --with-fontconfig
       - run: make -j32 CPPFLAGS="-Werror"
       - run: make check CPPFLAGS="-Werror" || .ci/fail.sh
 
diff --git a/src/dump-emoji.cc b/src/dump-emoji.cc
index 3e0d668f..b5ec30ea 100644
--- a/src/dump-emoji.cc
+++ b/src/dump-emoji.cc
@@ -146,7 +146,7 @@ static void colr_cpal_rendering (cairo_font_face_t 
*cairo_face, unsigned int upe
          int r = (color >> 8) & 0xFF;
          int g = (color >> 16) & 0xFF;
          int b = (color >> 24) & 0xFF;
-         cairo_set_source_rgba (cr, r / 255.f, g / 255.f, b / 255.f, alpha);
+         cairo_set_source_rgba (cr, r / 255., g / 255., b / 255., alpha);
 
          cairo_glyph_t glyph;
          glyph.index = glyph_id;
diff --git a/src/hb-common.cc b/src/hb-common.cc
index 16f87014..41b1601d 100644
--- a/src/hb-common.cc
+++ b/src/hb-common.cc
@@ -1072,7 +1072,7 @@ hb_variation_to_string (hb_variation_t *variation,
   while (len && s[len - 1] == ' ')
     len--;
   s[len++] = '=';
-  len += MAX (0, snprintf (s + len, ARRAY_LENGTH (s) - len, "%g", 
variation->value));
+  len += MAX (0, snprintf (s + len, ARRAY_LENGTH (s) - len, "%g", (double) 
variation->value));
 
   assert (len < ARRAY_LENGTH (s));
   len = MIN (len, size - 1);
diff --git a/src/hb-ot-var-fvar-table.hh b/src/hb-ot-var-fvar-table.hh
index 1d17a97e..96c39c10 100644
--- a/src/hb-ot-var-fvar-table.hh
+++ b/src/hb-ot-var-fvar-table.hh
@@ -177,7 +177,7 @@ struct fvar
       v = (v - axis.default_value) / (axis.default_value - axis.min_value);
     else
       v = (v - axis.default_value) / (axis.max_value - axis.default_value);
-    return (int) (v * 16384. + (v >= 0. ? .5 : -.5));
+    return (int) (v * 16384.f + (v >= 0.f ? .5f : -.5f));
   }
 
   protected:
commit c2c7e6471ca912c91c82f6d71338082978f13dc6
Author: Ebrahim Byagowi <[email protected]>
Date:   Thu Oct 4 00:29:40 2018 +0330

    State our graphite2 dependency no-deprecated compile flag (#1220)

diff --git a/.circleci/config.yml b/.circleci/config.yml
index 3696d288..6b63f1ae 100644
--- a/.circleci/config.yml
+++ b/.circleci/config.yml
@@ -91,7 +91,7 @@ jobs:
       - run: apt update || true
       - run: apt install -y clang lld binutils libtool autoconf automake make 
pkg-config gtk-doc-tools ragel libfreetype6-dev libfontconfig1-dev 
libglib2.0-dev libcairo2-dev libicu-dev libgraphite2-dev python python-pip
       - run: pip install fonttools
-      - run: CFLAGS="-Weverything -Wno-reserved-id-macro -Wno-conversion 
-Wno-padded -Wno-sign-conversion -Wno-cast-qual -Wno-documentation 
-Wno-documentation-unknown-command" CXXFLAGS="-Weverything -Wno-old-style-cast 
-Wno-documentation -Wno-documentation-unknown-command -Wno-c++98-compat 
-Wno-cast-qual -Wno-c++98-compat-pedantic -Wno-sign-conversion -Wno-padded 
-Wno-shorten-64-to-32 -Wno-extra-semi -Wno-reserved-id-macro 
-Wno-float-conversion -Wno-format-pedantic -Wno-shadow -Wno-conversion 
-Wno-zero-as-null-pointer-constant -Wno-missing-field-initializers 
-Wno-double-promotion -Wno-used-but-marked-unused -Wno-unused-macros -Wno-comma 
-Wno-float-equal -Wno-disabled-macro-expansion -Wno-weak-vtables 
-Wno-unused-parameter -Wno-covered-switch-default -Wno-unreachable-code 
-Wno-deprecated-declarations" CC=clang CXX=clang++ ./autogen.sh --with-freetype 
--with-glib --with-cairo --with-icu --with-graphite2 --with-fontconfig
+      - run: CFLAGS="-Weverything -Wno-reserved-id-macro -Wno-conversion 
-Wno-padded -Wno-sign-conversion -Wno-cast-qual -Wno-documentation 
-Wno-documentation-unknown-command" CXXFLAGS="-Weverything -Wno-old-style-cast 
-Wno-documentation -Wno-documentation-unknown-command -Wno-c++98-compat 
-Wno-cast-qual -Wno-c++98-compat-pedantic -Wno-sign-conversion -Wno-padded 
-Wno-shorten-64-to-32 -Wno-extra-semi -Wno-reserved-id-macro 
-Wno-float-conversion -Wno-format-pedantic -Wno-shadow -Wno-conversion 
-Wno-zero-as-null-pointer-constant -Wno-missing-field-initializers 
-Wno-double-promotion -Wno-used-but-marked-unused -Wno-unused-macros -Wno-comma 
-Wno-float-equal -Wno-disabled-macro-expansion -Wno-weak-vtables 
-Wno-unused-parameter -Wno-covered-switch-default -Wno-unreachable-code" 
CC=clang CXX=clang++ ./autogen.sh --with-freetype --with-glib --with-cairo 
--with-icu --with-graphite2 --with-fontconfig
       - run: make -j32 CPPFLAGS="-Werror"
       - run: make check CPPFLAGS="-Werror" || .ci/fail.sh
 
diff --git a/.travis.yml b/.travis.yml
index 83b479ee..eadfa767 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -47,8 +47,6 @@ matrix:
     - os: osx
       compiler: clang
       install:
-          # https://github.com/harfbuzz/harfbuzz/issues/345
-        - export CXXFLAGS="$CXXFLAGS -Wno-deprecated-declarations"
         - brew update;
           # Workaround Travis/brew bug
         - brew uninstall libtool && brew install libtool
diff --git a/configure.ac b/configure.ac
index 1c698087..4ebb21df 100644
--- a/configure.ac
+++ b/configure.ac
@@ -330,7 +330,7 @@ AC_ARG_WITH(graphite2,
                        [Use the graphite2 library @<:@default=no@:>@])],,
        [with_graphite2=no])
 have_graphite2=false
-GRAPHITE2_DEPS="graphite2"
+GRAPHITE2_DEPS="graphite2 >= 1.2.0"
 AC_SUBST(GRAPHITE2_DEPS)
 if test "x$with_graphite2" = "xyes" -o "x$with_graphite2" = "xauto"; then
        PKG_CHECK_MODULES(GRAPHITE2, $GRAPHITE2_DEPS, have_graphite2=true, :)
commit e4e74c2751ac24178086cce2811d34d8019b6f85
Author: mhosken <[email protected]>
Date:   Thu Oct 4 02:33:26 2018 +0700

    Update Graphite API to latest (#1215)

diff --git a/src/hb-graphite2.cc b/src/hb-graphite2.cc
index 817278f3..fd5cec1a 100644
--- a/src/hb-graphite2.cc
+++ b/src/hb-graphite2.cc
@@ -95,6 +95,32 @@ retry:
   return d;
 }
 
+static void hb_graphite2_release_table(const void *data, const void 
*table_buffer)
+{
+  hb_graphite2_face_data_t *face_data = (hb_graphite2_face_data_t *) data;
+  hb_graphite2_tablelist_t *tlist = face_data->tlist.get();
+
+  hb_graphite2_tablelist_t *prev = nullptr;
+  hb_graphite2_tablelist_t *curr = tlist;
+  while (curr)
+  {
+    if (hb_blob_get_data(curr->blob, nullptr) == table_buffer)
+    {
+      if (prev == nullptr)
+        face_data->tlist.cmpexch(tlist, curr->next);
+      else
+        prev->next = curr->next;
+      hb_blob_destroy(curr->blob);
+      free(curr);
+      break;
+    }
+    prev = curr;
+    curr = curr->next;
+  }
+}
+
+static gr_face_ops hb_graphite2_face_ops = { sizeof(gr_face_ops), 
hb_graphite2_get_table, hb_graphite2_release_table };
+
 hb_graphite2_face_data_t *
 _hb_graphite2_shaper_face_data_create (hb_face_t *face)
 {
@@ -113,7 +139,7 @@ _hb_graphite2_shaper_face_data_create (hb_face_t *face)
     return nullptr;
 
   data->face = face;
-  data->grface = gr_make_face (data, &hb_graphite2_get_table, 
gr_face_preloadAll);
+  data->grface = gr_make_face_with_ops (data, &hb_graphite2_face_ops, 
gr_face_preloadAll);
 
   if (unlikely (!data->grface)) {
     free (data);
_______________________________________________
HarfBuzz mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/harfbuzz

Reply via email to