texlive[55630] Build/source/libs: harfbuzz-2.6.8

commits+kakuto at tug.org commits+kakuto at tug.org
Tue Jun 23 00:26:59 CEST 2020


Revision: 55630
          http://tug.org/svn/texlive?view=revision&revision=55630
Author:   kakuto
Date:     2020-06-23 00:26:59 +0200 (Tue, 23 Jun 2020)
Log Message:
-----------
harfbuzz-2.6.8

Modified Paths:
--------------
    trunk/Build/source/libs/README
    trunk/Build/source/libs/harfbuzz/ChangeLog
    trunk/Build/source/libs/harfbuzz/Makefile.am
    trunk/Build/source/libs/harfbuzz/Makefile.in
    trunk/Build/source/libs/harfbuzz/TLpatches/ChangeLog
    trunk/Build/source/libs/harfbuzz/TLpatches/TL-Changes
    trunk/Build/source/libs/harfbuzz/configure
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/CMakeLists.txt
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/Makefile.am
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/NEWS
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/RELEASING.md
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/meson.build
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/meson_options.txt
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.sources
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-def.py
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-common.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-kerx-table.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-lcar-table.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-morx-table.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-config.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-debug.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-dispatch.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-map.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-cpal-table.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-face-table-list.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-hmtx-table.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-common.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gdef-table.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gpos-table.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsub-table.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.h
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-math-table.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-meta.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-stat-table.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-fvar-table.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-sanitize.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-plan.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb.h
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/meson.build
    trunk/Build/source/libs/harfbuzz/include/Makefile.am
    trunk/Build/source/libs/harfbuzz/include/Makefile.in
    trunk/Build/source/libs/harfbuzz/version.ac

Added Paths:
-----------
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-style.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-style.h
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/write-tarball-revision.py

Modified: trunk/Build/source/libs/README
===================================================================
--- trunk/Build/source/libs/README	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/README	2020-06-22 22:26:59 UTC (rev 55630)
@@ -25,8 +25,8 @@
   http://sourceforge.net/projects/silgraphite/files/graphite2/
   (requires C++11)
 
-harfbuzz 2.6.7 - checked 04jun20
-  https://github.com/harfbuzz/harfbuzz/releases/download/2.6.7/
+harfbuzz 2.6.8 - checked 23jun20
+  https://github.com/harfbuzz/harfbuzz/releases/download/2.6.8/
 
 icu 63.1 - checked 8jan19
   http://download.icu-project.org/files/icu4c/

Modified: trunk/Build/source/libs/harfbuzz/ChangeLog
===================================================================
--- trunk/Build/source/libs/harfbuzz/ChangeLog	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/ChangeLog	2020-06-22 22:26:59 UTC (rev 55630)
@@ -1,3 +1,8 @@
+2020-06-23  Akira Kakuto  <kakuto at w32tex.org>
+
+	Import harfbuzz-2.6.8.
+	* Makefile.am, include/Makefile.am, version.ac: Adjusted.
+
 2020-06-04  Akira Kakuto  <kakuto at w32tex.org>
 
 	Import harfbuzz-2.6.7.

Modified: trunk/Build/source/libs/harfbuzz/Makefile.am
===================================================================
--- trunk/Build/source/libs/harfbuzz/Makefile.am	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/Makefile.am	2020-06-22 22:26:59 UTC (rev 55630)
@@ -117,6 +117,7 @@
 	@HARFBUZZ_TREE@/src/hb-shaper.cc \
 	@HARFBUZZ_TREE@/src/hb-static.cc \
 	@HARFBUZZ_TREE@/src/hb-string-array.hh \
+	@HARFBUZZ_TREE@/src/hb-style.cc \
 	@HARFBUZZ_TREE@/src/hb-subset-cff-common.cc \
 	@HARFBUZZ_TREE@/src/hb-subset-cff-common.hh \
 	@HARFBUZZ_TREE@/src/hb-subset-cff1.cc \

Modified: trunk/Build/source/libs/harfbuzz/Makefile.in
===================================================================
--- trunk/Build/source/libs/harfbuzz/Makefile.in	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/Makefile.in	2020-06-22 22:26:59 UTC (rev 55630)
@@ -138,6 +138,7 @@
 	@HARFBUZZ_TREE@/src/hb-shape-plan.$(OBJEXT) \
 	@HARFBUZZ_TREE@/src/hb-shaper.$(OBJEXT) \
 	@HARFBUZZ_TREE@/src/hb-static.$(OBJEXT) \
+	@HARFBUZZ_TREE@/src/hb-style.$(OBJEXT) \
 	@HARFBUZZ_TREE@/src/hb-subset-cff-common.$(OBJEXT) \
 	@HARFBUZZ_TREE@/src/hb-subset-cff1.$(OBJEXT) \
 	@HARFBUZZ_TREE@/src/hb-subset-cff2.$(OBJEXT) \
@@ -240,6 +241,7 @@
 	@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-shape.Po \
 	@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-shaper.Po \
 	@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-static.Po \
+	@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-style.Po \
 	@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset-cff-common.Po \
 	@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset-cff1.Po \
 	@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset-cff2.Po \
@@ -786,6 +788,7 @@
 	@HARFBUZZ_TREE@/src/hb-shaper.cc \
 	@HARFBUZZ_TREE@/src/hb-static.cc \
 	@HARFBUZZ_TREE@/src/hb-string-array.hh \
+	@HARFBUZZ_TREE@/src/hb-style.cc \
 	@HARFBUZZ_TREE@/src/hb-subset-cff-common.cc \
 	@HARFBUZZ_TREE@/src/hb-subset-cff-common.hh \
 	@HARFBUZZ_TREE@/src/hb-subset-cff1.cc \
@@ -1026,6 +1029,9 @@
 @HARFBUZZ_TREE@/src/hb-static.$(OBJEXT):  \
 	@HARFBUZZ_TREE@/src/$(am__dirstamp) \
 	@HARFBUZZ_TREE@/src/$(DEPDIR)/$(am__dirstamp)
+ at HARFBUZZ_TREE@/src/hb-style.$(OBJEXT):  \
+	@HARFBUZZ_TREE@/src/$(am__dirstamp) \
+	@HARFBUZZ_TREE@/src/$(DEPDIR)/$(am__dirstamp)
 @HARFBUZZ_TREE@/src/hb-subset-cff-common.$(OBJEXT):  \
 	@HARFBUZZ_TREE@/src/$(am__dirstamp) \
 	@HARFBUZZ_TREE@/src/$(DEPDIR)/$(am__dirstamp)
@@ -1187,6 +1193,7 @@
 @AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-shape.Po at am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-shaper.Po at am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-static.Po at am__quote@ # am--include-marker
+ at AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-style.Po at am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset-cff-common.Po at am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset-cff1.Po at am__quote@ # am--include-marker
 @AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset-cff2.Po at am__quote@ # am--include-marker
@@ -1837,6 +1844,7 @@
 	-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-shape.Po
 	-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-shaper.Po
 	-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-static.Po
+	-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-style.Po
 	-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset-cff-common.Po
 	-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset-cff1.Po
 	-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset-cff2.Po
@@ -1937,6 +1945,7 @@
 	-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-shape.Po
 	-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-shaper.Po
 	-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-static.Po
+	-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-style.Po
 	-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset-cff-common.Po
 	-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset-cff1.Po
 	-rm -f @HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset-cff2.Po

Modified: trunk/Build/source/libs/harfbuzz/TLpatches/ChangeLog
===================================================================
--- trunk/Build/source/libs/harfbuzz/TLpatches/ChangeLog	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/TLpatches/ChangeLog	2020-06-22 22:26:59 UTC (rev 55630)
@@ -1,3 +1,8 @@
+2020-06-23  Akira Kakuto  <kakuto at w32tex.org>
+
+	Imported harfbuzz-2.6.8 source tree from:
+	https://github.com/harfbuzz/harfbuzz/releases/download/2.6.8/
+
 2020-06-04  Akira Kakuto  <kakuto at w32tex.org>
 
 	Imported harfbuzz-2.6.7 source tree from:

Modified: trunk/Build/source/libs/harfbuzz/TLpatches/TL-Changes
===================================================================
--- trunk/Build/source/libs/harfbuzz/TLpatches/TL-Changes	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/TLpatches/TL-Changes	2020-06-22 22:26:59 UTC (rev 55630)
@@ -1,5 +1,5 @@
-Changes applied to the harfbuzz-2.6.7/ tree as obtained from:
-	https://github.com/harfbuzz/harfbuzz/releases/download/2.6.7/
+Changes applied to the harfbuzz-2.6.8/ tree as obtained from:
+	https://github.com/harfbuzz/harfbuzz/releases/download/2.6.8/
 
 Removed:
 	COPYING

Modified: trunk/Build/source/libs/harfbuzz/configure
===================================================================
--- trunk/Build/source/libs/harfbuzz/configure	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/configure	2020-06-22 22:26:59 UTC (rev 55630)
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for harfbuzz (TeX Live) 2.6.7.
+# Generated by GNU Autoconf 2.69 for harfbuzz (TeX Live) 2.6.8.
 #
 # Report bugs to <tex-k at tug.org>.
 #
@@ -580,8 +580,8 @@
 # Identity of this package.
 PACKAGE_NAME='harfbuzz (TeX Live)'
 PACKAGE_TARNAME='harfbuzz--tex-live-'
-PACKAGE_VERSION='2.6.7'
-PACKAGE_STRING='harfbuzz (TeX Live) 2.6.7'
+PACKAGE_VERSION='2.6.8'
+PACKAGE_STRING='harfbuzz (TeX Live) 2.6.8'
 PACKAGE_BUGREPORT='tex-k at tug.org'
 PACKAGE_URL=''
 
@@ -1311,7 +1311,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures harfbuzz (TeX Live) 2.6.7 to adapt to many kinds of systems.
+\`configure' configures harfbuzz (TeX Live) 2.6.8 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1382,7 +1382,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of harfbuzz (TeX Live) 2.6.7:";;
+     short | recursive ) echo "Configuration of harfbuzz (TeX Live) 2.6.8:";;
    esac
   cat <<\_ACEOF
 
@@ -1487,7 +1487,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-harfbuzz (TeX Live) configure 2.6.7
+harfbuzz (TeX Live) configure 2.6.8
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2123,7 +2123,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by harfbuzz (TeX Live) $as_me 2.6.7, which was
+It was created by harfbuzz (TeX Live) $as_me 2.6.8, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -4047,7 +4047,7 @@
 
 # Define the identity of the package.
  PACKAGE='harfbuzz--tex-live-'
- VERSION='2.6.7'
+ VERSION='2.6.8'
 
 
 # Some tools Automake needs.
@@ -4241,8 +4241,8 @@
 
 HB_VERSION_MAJOR=2
 HB_VERSION_MINOR=6
-HB_VERSION_MICRO=7
-HB_VERSION=2.6.7
+HB_VERSION_MICRO=8
+HB_VERSION=2.6.8
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -7919,7 +7919,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by harfbuzz (TeX Live) $as_me 2.6.7, which was
+This file was extended by harfbuzz (TeX Live) $as_me 2.6.8, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -7985,7 +7985,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-harfbuzz (TeX Live) config.status 2.6.7
+harfbuzz (TeX Live) config.status 2.6.8
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/CMakeLists.txt
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/CMakeLists.txt	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/CMakeLists.txt	2020-06-22 22:26:59 UTC (rev 55630)
@@ -1,7 +1,7 @@
 cmake_minimum_required(VERSION 2.8.0)
 project(harfbuzz)
 
-message("HarfBuzz has a Meson port also and tries to migrate all the other build systems to it, please consider using it.")
+message(WARN "HarfBuzz has a Meson port and tries to migrate all the other build systems to it, please consider using it as we might remove our cmake port soon.")
 
 ## Limit framework build to Xcode generator
 if (BUILD_FRAMEWORK)

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog	2020-06-22 22:26:59 UTC (rev 55630)
@@ -1,3 +1,1046 @@
+commit e4203c14699cc0903a2b4611167a7b99532cfdb0
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Mon Jun 22 05:03:27 2020 +0430
+
+    2.6.8
+
+ NEWS                | 13 +++++++++++++
+ configure.ac        |  2 +-
+ meson.build         |  2 +-
+ src/hb-ot-layout.cc |  2 +-
+ src/hb-version.h    |  4 ++--
+ 5 files changed, 18 insertions(+), 5 deletions(-)
+
+commit 8c84fee2e568c7b0a1852a7dad26386bbf6a9d0b
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Mon Jun 22 04:04:40 2020 +0430
+
+    Update build systems status messages
+
+ CMakeLists.txt |  2 +-
+ configure.ac   | 11 +++++++++++
+ meson.build    |  2 +-
+ 3 files changed, 13 insertions(+), 2 deletions(-)
+
+commit e541fb474cc948659855dee9374946829de14581
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Sun Jun 21 09:49:48 2020 +0430
+
+    minor, replace single hb_apply daggers with foreach
+
+ src/hb-map.hh           | 10 ++++------
+ src/hb-ot-hmtx-table.hh | 36 +++++++++++++++++-------------------
+ src/hb-ot-math-table.hh | 15 ++++++---------
+ 3 files changed, 27 insertions(+), 34 deletions(-)
+
+commit 8bca9a420e1fcf460e2f3c115fbf7541c81abd9d
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Sun Jun 21 09:18:12 2020 +0430
+
+    [fvar] minor
+
+ src/hb-ot-var-fvar-table.hh | 19 ++++++++-----------
+ 1 file changed, 8 insertions(+), 11 deletions(-)
+
+commit b5ae8eab44e92089a184d1901758aac6650eeab0
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Sun Jun 21 08:51:46 2020 +0430
+
+    [ci] raise msan bot subset timeout
+
+ .circleci/config.yml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 82ec9ef2e9c1a2c148b0fc7f91a2ca2c2a064ef5
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Sun Jun 21 01:36:16 2020 +0430
+
+    [fvar] minor simplification
+
+ src/hb-ot-var-fvar-table.hh | 10 ++++------
+ 1 file changed, 4 insertions(+), 6 deletions(-)
+
+commit 4e37c48e375f3721157e919497a7114bdcb0d454
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Sat Jun 20 23:57:45 2020 +0430
+
+    [fvar] Remove get_axis_info and get_axis_deprecated
+
+ src/hb-ot-var-fvar-table.hh | 22 ++++++++--------------
+ 1 file changed, 8 insertions(+), 14 deletions(-)
+
+commit 61c240f39963064852a2e58fc42897351e37d8b5
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Sat Jun 20 13:24:32 2020 +0430
+
+    [fvar] Push _axis_info fill logic deeper
+
+ src/hb-ot-var-fvar-table.hh | 54 ++++++++++++++++++++++++---------------------
+ 1 file changed, 29 insertions(+), 25 deletions(-)
+
+commit 47a0fbec31c2e49a2b895f6f926bf755820cacab
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Sun Jun 21 02:34:59 2020 +0430
+
+    [meson] Mark longer tests with slow
+    
+    So one can skip them easily by `meson test -Cbuild --no-suite slow`
+
+ src/meson.build          | 2 +-
+ test/fuzzing/meson.build | 4 ++--
+ test/subset/meson.build  | 2 +-
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+commit 47dedc7500843ac9c5a036621a7a65e1b1861a58
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Sun Jun 21 01:54:57 2020 +0430
+
+    [ci] increase tsan and ubsan subset fuzzer timeout
+    
+    as https://circleci.com/gh/harfbuzz/harfbuzz/144966 and https://circleci.com/gh/harfbuzz/harfbuzz/144970
+
+ .circleci/config.yml | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit b2d0dba5ef2ea9530c9c0d2a8ed33849a59b56f8
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Sat Jun 20 12:07:42 2020 +0430
+
+    [cpal] Port to dagger
+
+ src/hb-ot-color-cpal-table.hh | 9 +++------
+ 1 file changed, 3 insertions(+), 6 deletions(-)
+
+commit 08816117788491a989888c30b9676bc8d7849f96
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Sat Jun 20 01:02:50 2020 +0430
+
+    [fuzzer] Make some use for test_font API calls
+    
+    Making some use for result of some of the test_font calls to make
+    sure compilers in fuzzers aren't just optimizing the calls.
+
+ test/api/test-ot-face.c         | 42 +++++++++++++++++++++++++----------------
+ test/fuzzing/hb-shape-fuzzer.cc |  8 ++++----
+ 2 files changed, 30 insertions(+), 20 deletions(-)
+
+commit b4f34539c26561e35eaa09160784e07cec6b1b9c
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Sat Jun 20 00:47:00 2020 +0430
+
+    [fuzzer] test more of ot-layout APIs
+
+ test/api/test-ot-face.c | 17 +++++++++++++++++
+ 1 file changed, 17 insertions(+)
+
+commit a6bcc577a9062c875854305aeebe4e90a9abe5f7
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Sat Jun 20 14:19:12 2020 +0430
+
+    [meson] don't `add_dist_script` when we are subproject
+    
+    Happens when harfbuzz is used as a meson subproject,
+      `ERROR: add_dist_script may not be used in a subproject.`
+
+ meson.build | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit 175d93bbdaaf4640eb41baed2698fe0e2ee78831
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Sat Jun 20 14:03:10 2020 +0430
+
+    [mesos/docs] fix gobject headers ignoring logic
+    
+    fixes #2463
+
+ docs/meson.build | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 25cf6874430afdb9bf93fcb7f92ae4c11f51be89
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Sat Jun 20 01:36:50 2020 +0430
+
+    Use dagger in OffsetTable::get_table_tags (#2477)
+
+ src/hb-open-file.hh | 13 ++++---------
+ 1 file changed, 4 insertions(+), 9 deletions(-)
+
+commit dce4353f86fe9c5e1b62194b89c844ba5da86143
+Merge: 89a2c46e d38eb49f
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Sat Jun 20 01:24:41 2020 +0430
+
+    Merge pull request #2476 from ebraminio/cv-get-chars
+    
+    [layout] Use dagger in hb_ot_layout_feature_get_characters
+
+commit 89a2c46e6198f188393415151620f6fb5f160e11
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Sat Jun 20 00:31:46 2020 +0430
+
+    [math] Use dagger (#2478)
+    
+    * [math] Use dagger
+    
+    * [ot-math] Address Behdad's review
+
+ src/hb-ot-math-table.hh | 20 +++++++++-----------
+ 1 file changed, 9 insertions(+), 11 deletions(-)
+
+commit d38eb49f46a3381c7930568b4bfb35af4052c0f9
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Fri Jun 19 23:40:42 2020 +0430
+
+    Move the iteration logic to FeatureParamsCharacterVariants
+    
+    Hopefully I can make members protected also.
+
+ src/hb-ot-layout-common.hh | 12 ++++++++++++
+ src/hb-ot-layout.cc        | 15 ++++-----------
+ 2 files changed, 16 insertions(+), 11 deletions(-)
+
+commit 9b3d4f457ef0010a1bd3f0a8186f886f2499f688
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Fri Jun 19 23:33:07 2020 +0430
+
+    Use dagger in hb_ot_layout_feature_get_characters
+    
+    The way it used to work was a bit nonidiomatic but the replacment
+    is idiomatic way of iterating used elsewhere.
+    
+    The new code just doesn't check nullability of "characters", which isn't
+    what we do anywhere else.
+
+ src/hb-ot-layout.cc | 10 ++++------
+ 1 file changed, 4 insertions(+), 6 deletions(-)
+
+commit 675854b2bac03612ef7f5bd406a7ff7207b89b59
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Fri Jun 19 23:27:39 2020 +0430
+
+    [test] Add one more test for hb_ot_layout_feature_get_characters
+
+ test/api/test-ot-name.c | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
+commit 63422c4cbc4cb53a19f3986b3c20312c1085b29f
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Fri Jun 19 23:24:04 2020 +0430
+
+    [ot-layout] simplify
+
+ src/hb-ot-layout.cc | 11 +++--------
+ 1 file changed, 3 insertions(+), 8 deletions(-)
+
+commit 407bba3e0d591a5708955e76ae914aa67198044e
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Fri Jun 19 23:12:42 2020 +0430
+
+    minor
+    
+    move FeatureParamsCharacterVariants::sanitize method right above members
+
+ src/hb-ot-layout-common.hh | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+commit f1488152bd47d4434532226d94f1be38c24ac735
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Fri Jun 19 23:07:28 2020 +0430
+
+    [doc] Remove the not needed comment
+    
+    All the other similar iterating API are like this and don't have such
+    comment, written at the time I wasn't familiar enough with the way such
+    API are shaped.
+
+ src/hb-ot-layout.cc | 6 ------
+ 1 file changed, 6 deletions(-)
+
+commit 1535440b48a081cea04cffb7f12cd63c197ae9d4
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Fri Jun 19 08:30:59 2020 -0700
+
+    [dispatch] Fix debug builds
+
+ src/hb-aat-layout-common.hh  | 1 -
+ src/hb-aat-layout.cc         | 3 +--
+ src/hb-dispatch.hh           | 3 ++-
+ src/hb-ot-layout-common.hh   | 2 --
+ src/hb-ot-layout-gsubgpos.hh | 6 +-----
+ src/hb-sanitize.hh           | 2 --
+ src/hb-subset.hh             | 4 +---
+ 7 files changed, 5 insertions(+), 16 deletions(-)
+
+commit bb9a40da653b5bab595f79de76a8feda18cb1b5c
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Fri Jun 19 19:22:47 2020 +0430
+
+    [lcar] Use dagger
+
+ src/hb-aat-layout-lcar-table.hh | 23 +++++++++++++----------
+ 1 file changed, 13 insertions(+), 10 deletions(-)
+
+commit 6fbb59aba6680225d13a6c3e0ba7d033096e6c55
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Thu Jun 18 15:12:37 2020 -0700
+
+    Use daggers in a few get_array functions
+    
+    As I review https://github.com/harfbuzz/harfbuzz/pull/2471
+
+ src/hb-ot-layout-common.hh     | 21 +++++++++++----------
+ src/hb-ot-layout-gdef-table.hh |  7 +++----
+ 2 files changed, 14 insertions(+), 14 deletions(-)
+
+commit a512ca8eae70710974e845062305d73bf4012466
+Merge: 03bd3efa 70d6696c
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Fri Jun 19 10:46:12 2020 +0430
+
+    Merge pull request #2473 from harfbuzz/gsub-alternate
+    
+    fixes #673
+
+commit 03bd3efaa7072021b702ab3f4ce8abcd1ac47d46
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Fri Jun 19 10:32:46 2020 +0430
+
+    [meson] Write git revision to .tarball-revision on dist tarball
+
+ Makefile.am               |  1 +
+ meson.build               |  2 ++
+ write-tarball-revision.py | 13 +++++++++++++
+ 3 files changed, 16 insertions(+)
+
+commit 70d6696cc6c863673a580b3bfc79d16d3a5d393d
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Thu Jun 18 17:09:39 2020 -0700
+
+    [dispatch] Don't require debug_depth for untraced objects
+
+ src/hb-dispatch.hh           |  1 +
+ src/hb-ot-layout-common.hh   |  4 +---
+ src/hb-ot-layout-gsubgpos.hh | 20 ++++----------------
+ src/hb-ot-layout.cc          |  4 +---
+ 4 files changed, 7 insertions(+), 22 deletions(-)
+
+commit 5bc4cedde67854ecda72305d839c7e7ad297e83e
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Thu Jun 18 17:04:35 2020 -0700
+
+    Rename
+
+ src/hb-ot-layout.cc | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+commit dc492d7c8a49f0c0322848348d35ac8b818fce57
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Thu Jun 18 17:03:05 2020 -0700
+
+    [dispatch] Comment
+
+ src/hb-ot-layout-gsubgpos.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 25aec0265c1a1030c7d6453e85b2463589c8688a
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Thu Jun 18 16:58:01 2020 -0700
+
+    [dispatch] Default return type to hb_empty_t
+
+ src/hb-dispatch.hh           | 2 +-
+ src/hb-ot-layout-common.hh   | 2 +-
+ src/hb-ot-layout-gsubgpos.hh | 8 ++++----
+ 3 files changed, 6 insertions(+), 6 deletions(-)
+
+commit 8d0a90ac1bd9f6485d3e0fead7c648caa735eb81
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Thu Jun 18 16:53:54 2020 -0700
+
+    [dispatch] Default debug level to 0
+
+ src/hb-dispatch.hh           |  2 +-
+ src/hb-ot-layout-common.hh   |  2 +-
+ src/hb-ot-layout-gsubgpos.hh | 14 +++++++-------
+ src/hb-ot-layout.cc          |  2 +-
+ 4 files changed, 10 insertions(+), 10 deletions(-)
+
+commit d7d8604ec8526f96618b4f0f83ed9b3204e7b597
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Thu Jun 18 16:51:01 2020 -0700
+
+    Remove excessive trace routes
+
+ src/hb-debug.hh              | 4 ----
+ src/hb-ot-layout-gsubgpos.hh | 6 ++----
+ 2 files changed, 2 insertions(+), 8 deletions(-)
+
+commit e47a2ab8f8a90d903653a1d0d970c220f0957158
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Thu Jun 18 16:48:07 2020 -0700
+
+    Remove unused dispatcher names
+
+ src/hb-dispatch.hh           | 1 +
+ src/hb-ot-layout-common.hh   | 1 -
+ src/hb-ot-layout-gsubgpos.hh | 5 -----
+ src/hb-ot-layout.cc          | 1 -
+ 4 files changed, 1 insertion(+), 7 deletions(-)
+
+commit b2a1acccd9776beddb25fb4f9e24ca6e272958f4
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Thu Jun 18 16:41:31 2020 -0700
+
+    Simplify get_glyph_alternates() dispatcher
+    
+    Trying to make it **very simple** to add a specialized dispatcher for
+    one API to be routed to just a few objects (one in this case).
+
+ src/hb-ot-layout-gsub-table.hh |  9 ++++++---
+ src/hb-ot-layout-gsubgpos.hh   | 40 ----------------------------------------
+ src/hb-ot-layout.cc            | 32 ++++++++++++++++++++++++++++++--
+ 3 files changed, 36 insertions(+), 45 deletions(-)
+
+commit ffe8d3f39d5a742e51f87b5af66a2a7e63c87037
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Thu Jun 18 16:31:39 2020 -0700
+
+    Use dispatch for get_glyph_alternates_t
+    
+    First time we do this in a way that if target object doesn't have the matching
+    function we basically "ignore".  Risky but I feel like is the right decision
+    for this case.
+    
+    I'm going to put back the template varargs and use those, which would make
+    the dispatcher be just that: "dispatcher", and wouldn't need to carry the
+    call context.  That would be a refreshing change I think.
+
+ src/hb-ot-layout-gsub-table.hh | 41 +++--------------------------------------
+ src/hb-ot-layout-gsubgpos.hh   | 39 +++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-layout.cc            |  5 ++++-
+ 3 files changed, 46 insertions(+), 39 deletions(-)
+
+commit bedf4171218ef7c64386aa492b574356277fc21f
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Thu Jun 18 15:49:01 2020 -0700
+
+    Push get_glyph_alternates() work all the way down
+
+ src/hb-ot-layout-gsub-table.hh | 36 ++++++++++++------------------------
+ 1 file changed, 12 insertions(+), 24 deletions(-)
+
+commit 5bede33885a5349c05e0724e8ee6948af8a25670
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Thu Jun 18 15:25:19 2020 -0700
+
+    Whitespace
+
+ src/hb-ot-layout.cc | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+commit e13aaaaa4566c8aa1a790402b38448713c6621ab
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Thu Jun 18 15:22:54 2020 -0700
+
+    Move API to right place in header
+
+ src/hb-ot-layout.h | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+commit 26514ad70e4e96b862ff6bd63fb2a03e136e7620
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Thu Jun 18 15:22:07 2020 -0700
+
+    Fix API comment
+
+ src/hb-ot-layout.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 1bac85828c134835ce0a3ecd517aefdcecf43d9a
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Thu Jun 18 22:56:07 2020 +0430
+
+    [layout] Rename _get_alternates to _get_glyph_alternates
+
+ docs/harfbuzz-sections.txt     |  2 +-
+ src/hb-ot-layout-gsub-table.hh | 36 ++++++++++++++++++------------------
+ src/hb-ot-layout.cc            | 16 ++++++++--------
+ src/hb-ot-layout.h             | 12 ++++++------
+ test/api/test-ot-alternates.c  |  6 +++---
+ 5 files changed, 36 insertions(+), 36 deletions(-)
+
+commit 9ef9ac3749abdc814088571108760144b0f6f812
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Jun 17 17:41:15 2020 -0700
+
+    [gpos] Break cycle-of-2 when cursive attaching
+    
+    Fix thinko this time around.
+    
+    Fixes https://github.com/harfbuzz/harfbuzz/issues/2469
+
+ src/hb-ot-layout-gpos-table.hh | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+commit d3c169792ba4771b459c37a4430fab6f2dcbda5e
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Thu Jun 18 08:37:21 2020 +0430
+
+    [layout] move alternate buffer iteration logic to AlternateSet
+
+ src/hb-ot-layout-gsub-table.hh | 72 +++++++++++++++++++++++++++++++-----------
+ src/hb-ot-layout.cc            | 13 ++------
+ 2 files changed, 57 insertions(+), 28 deletions(-)
+
+commit 1348a2c865d368a4f6e83add0edfa9945d84914f
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Tue Jun 16 21:05:16 2020 -0400
+
+    [layout] hb_ot_layout_lookup_get_alternates, a new API
+    
+    An API to retrieve one-to-one alternates from a given GSUB lookup index.
+
+ docs/harfbuzz-sections.txt     |  1 +
+ src/hb-ot-layout-gsub-table.hh | 30 ++++++++++++++++++++++++
+ src/hb-ot-layout.cc            | 37 +++++++++++++++++++++++++++++
+ src/hb-ot-layout.h             |  7 ++++++
+ test/api/Makefile.am           |  1 +
+ test/api/meson.build           |  1 +
+ test/api/test-ot-alternates.c  | 53 ++++++++++++++++++++++++++++++++++++++++++
+ 7 files changed, 130 insertions(+)
+
+commit a4955e21fdd4069cad6f519900b9ce130408581b
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Thu Jun 18 08:59:49 2020 +0430
+
+    [ci] install gobject-instrospection on linux ci
+
+ .github/workflows/linux-ci.yml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 3fe719571362e39e70eb12ea9d7be9dabb505c4c
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Jun 17 17:51:08 2020 -0700
+
+    Revert "[gpos] Break cycle-of-2 when cursive attaching"
+    
+    This reverts commit 7090707de67e660ae626ecf774f6af8a63a692ab.
+
+ src/hb-ot-layout-gpos-table.hh | 6 ------
+ 1 file changed, 6 deletions(-)
+
+commit 7090707de67e660ae626ecf774f6af8a63a692ab
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Jun 17 17:41:15 2020 -0700
+
+    [gpos] Break cycle-of-2 when cursive attaching
+    
+    Fixes https://github.com/harfbuzz/harfbuzz/issues/2469
+
+ src/hb-ot-layout-gpos-table.hh | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+commit 09dedb1b382d0f2f8725ead891c27b87359c072c
+Author: Khaled Hosny <khaledhosny at eglug.org>
+Date:   Thu Jun 18 02:29:12 2020 +0200
+
+    [tests] I’m an idiot
+
+ test/shaping/data/in-house/Makefile.sources                           | 1 +
+ test/shaping/data/in-house/meson.build                                | 1 +
+ test/shaping/data/in-house/tests/reverse-sub.tests                    | 1 +
+ test/shaping/texts/in-house/shaper-default/script-latin/misc/misc.txt | 1 -
+ 4 files changed, 3 insertions(+), 1 deletion(-)
+
+commit 2598855454b77b69633220e7e912b2ac82f450f9
+Author: Khaled Hosny <khaledhosny at eglug.org>
+Date:   Thu Jun 18 02:15:59 2020 +0200
+
+    [tests] Add test for ReverseChainSingleSubstFormat1 missing substitute
+    
+    https://github.com/harfbuzz/harfbuzz/issues/2467
+
+ .../fonts/a706511c65fb278fda87eaf2180ca6684a80f423.ttf    | Bin 0 -> 924 bytes
+ .../in-house/shaper-default/script-latin/misc/misc.txt    |   1 +
+ 2 files changed, 1 insertion(+)
+
+commit e5de3918f7fbed754ff912c78bec8f9825b06d52
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Jun 17 16:54:23 2020 -0700
+
+    [indic] Add comment
+    
+    https://github.com/harfbuzz/harfbuzz/issues/2298#issuecomment-615318654
+
+ src/hb-ot-shape-complex-indic.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 41ef75f64afc36a8d7d6ab8382dd2093ad86fc49
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Jun 17 16:29:09 2020 -0700
+
+    [gsub] Don't substitute in ReverseChainSingleSubstFormat1 if missing substitute
+    
+    Fixes https://github.com/harfbuzz/harfbuzz/issues/2467
+
+ src/hb-ot-layout-gsub-table.hh | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit e7c79e16b8cb0983ee9cfed478d721c75949e757
+Merge: f31e3d42 fe926970
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Jun 17 15:32:40 2020 -0700
+
+    Merge pull request #2287 from simoncozens/instrumentation
+    
+    Add messages for GPOS/GSUB (take 2)
+
+commit fe926970bc16ee438fe74d8ee366393ed3576bd5
+Author: Simon Cozens <simon at simon-cozens.org>
+Date:   Tue Jun 16 09:12:44 2020 +0100
+
+    Reformat messages again
+    
+    Messages can be:
+    
+    start/end table  XXXX
+    start/end lookup NNNN
+    start/end subtable NNNN (for kerx/kern)
+    start/end chainsubtable NNNN (for morx)
+
+ src/hb-aat-layout-kerx-table.hh | 4 ++--
+ src/hb-aat-layout-morx-table.hh | 4 ++--
+ src/hb-ot-layout.cc             | 4 ++--
+ 3 files changed, 6 insertions(+), 6 deletions(-)
+
+commit f31e3d426dbbc096bca4892cbc2dc3f541a36d1d
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Fri Jun 12 17:33:11 2020 +0430
+
+    [ci] raise subset fuzzer timeout for asan and valgrind bots
+
+ .circleci/config.yml | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit cccdaf45df8a0664bc20c54055064460080ccbb8
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Fri Jun 12 11:15:37 2020 +0430
+
+    [docs] minor
+    
+    revealed now that we turned gobject/gir build to 'auto'
+
+ src/hb-ot-meta.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit be278acf44e862c5cf83a0ca118058e1cb61372d
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Fri Jun 12 01:46:23 2020 +0430
+
+    [ci] raise subset fuzzer cases runner timeout
+    
+    the bots are either not optimized ones or sanitizer ones so not much value
+    on trying to optimize them further.
+
+ .circleci/config.yml | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit b86bfe52915f61c0b1c228d967c42b14627fed5d
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Fri Jun 12 01:42:27 2020 +0430
+
+    minor, fix lists sorting
+
+ test/shaping/data/in-house/meson.build | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 4e7cb7e2c4b182e8062c3c0c9a15059bcfd40700
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Fri Jun 12 01:38:16 2020 +0430
+
+    minor, fix lists sorting
+
+ src/Makefile.sources                        |  6 +++---
+ src/meson.build                             |  6 +++---
+ test/shaping/data/in-house/Makefile.sources |  6 +++---
+ test/subset/data/Makefile.sources           | 18 +++++++++---------
+ 4 files changed, 18 insertions(+), 18 deletions(-)
+
+commit 973c47f6c9886cd2a50d29e09c978831b4e355f6
+Author: Qunxin Liu <qxliu at google.com>
+Date:   Thu Jun 11 11:27:57 2020 -0700
+
+    [subset] Move 2 experimental public api methods to be private methods in GSUB/GPOS.
+    
+    2 methods are: hb_ot_layout_closure_lookups and hb_ot_layout_closure_features
+
+ docs/harfbuzz-sections.txt        |  2 --
+ src/gen-def.py                    |  4 +--
+ src/hb-ot-layout-gpos-table.hh    |  5 +++
+ src/hb-ot-layout-gsub-table.hh    |  5 +++
+ src/hb-ot-layout-gsubgpos.hh      | 15 +++++++++
+ src/hb-ot-layout.cc               | 66 ---------------------------------------
+ src/hb-ot-layout.h                | 14 ---------
+ src/hb-subset-plan.cc             | 35 ++++++++-------------
+ test/api/test-ot-face.c           |  6 ----
+ test/subset/data/Makefile.sources |  3 --
+ test/subset/meson.build           |  5 ---
+ 11 files changed, 39 insertions(+), 121 deletions(-)
+
+commit 62de2f749c16ebbb3908dba09e5dfcd670765140
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Thu Jun 11 19:09:24 2020 +0430
+
+    [meson] Remove spaces before named parameter colons
+    
+    meson documentations sometimes adds the space and sometimes don't and we
+    aren't adding it most of the times unconsciously so let's the cases and
+    be consistent.
+
+ meson.build       | 18 +++++++++---------
+ meson_options.txt | 10 +++++-----
+ 2 files changed, 14 insertions(+), 14 deletions(-)
+
+commit 2d91662294ebe8d4856342464243f0a9fa734702
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Thu Jun 11 19:04:08 2020 +0430
+
+    [meson] move tests lists to their directories
+    
+    We had to do so for text-rendering-tests list, let's apply the same for the rest also.
+
+ test/shaping/data/aots/Makefile.am     |   1 +
+ test/shaping/data/aots/meson.build     | 123 +++++++++++++++++++++
+ test/shaping/data/in-house/Makefile.am |   1 +
+ test/shaping/data/in-house/meson.build |  60 +++++++++++
+ test/shaping/meson.build               | 189 +--------------------------------
+ 5 files changed, 188 insertions(+), 186 deletions(-)
+
+commit b8454c3d61808bb85996d8e734cdb87e5be059ae
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Thu Jun 11 18:32:13 2020 +0430
+
+    [meson] use if blocks to separate different dependencies
+
+ meson.build | 106 ++++++++++++++++++++++++++++++++----------------------------
+ 1 file changed, 56 insertions(+), 50 deletions(-)
+
+commit 8571b3551c6bbb032503c7c301c13d3d961923b5
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Sat Jun 6 20:16:50 2020 +0430
+
+    [releasing] Remove tar signing procedure
+    
+    https://github.com/harfbuzz/harfbuzz/issues/2449#issuecomment-639898473
+
+ Makefile.am  | 11 -----------
+ RELEASING.md |  6 ++----
+ 2 files changed, 2 insertions(+), 15 deletions(-)
+
+commit ebab4b8658ed415b06d3014fca78e0e1c0bba5df
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Wed Jun 10 16:52:32 2020 +0430
+
+    [meson] Implement disabled state for cairo/freetype/icu
+    
+    'disabled' wasn't implemented for some of the features so they were
+    getting found even with explicit -Dfeature=disabled, this implements it.
+    
+    Run the following command to test this change and check whether 'disabled'
+    was actually effective,
+      meson build -Dglib=disabled -Dgobject=disabled -Dcairo=disabled -Dfontconfig=disabled -Dicu=disabled -Dfreetype=disabled -Dintrospection=disabled -Dgtk_doc=disabled
+    
+    This is useful when one wants to integrate harfbuzz into another project via
+    meson's subproject mechanism.
+
+ meson.build | 28 ++++++++++++++++++----------
+ 1 file changed, 18 insertions(+), 10 deletions(-)
+
+commit b88f1096ad88c8ee3a88b6d483387c4e6eab6f61
+Author: Nirbheek Chauhan <nirbheek at centricular.com>
+Date:   Tue Jun 9 20:06:50 2020 +0530
+
+    meson: Export symbols for a DLL when not building statically
+    
+    `default_library` might be 'both', in which case we will fail to link
+    when building with MSVC.
+
+ src/meson.build | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 5c8900efe43c0f408a8683bfd2be274cd0dac8c4
+Author: Khaled Hosny <khaledhosny at eglug.org>
+Date:   Mon Jun 8 02:29:04 2020 +0200
+
+    [coretext] Properly check for macOS 10.10
+    
+    Fixes https://github.com/harfbuzz/harfbuzz/issues/2452
+
+ src/hb-coretext.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 0151da23d605c7709d432ebfb17a337a5f662839
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Sat Jun 6 01:48:23 2020 +0430
+
+    [meson] Remove with_libstdcxx build option
+    
+    This was done in #770 but no indication of anyone is using it,
+    let's remove it from our meson port and we can just don't care about
+    it in autotools port after the migration to meson.
+
+ meson_options.txt |  2 --
+ src/meson.build   | 21 +++++----------------
+ 2 files changed, 5 insertions(+), 18 deletions(-)
+
+commit 56719474c208508220f24b78fd295d94564882fa
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Fri Jun 5 12:57:23 2020 -0700
+
+    s/blacklist/blocklist/g
+
+ src/hb-ot-layout-gdef-table.hh   | 4 ++--
+ src/hb-ot-layout-gpos-table.hh   | 2 +-
+ src/hb-ot-layout-gsub-table.hh   | 2 +-
+ src/hb-ot-layout-gsubgpos.hh     | 2 +-
+ src/hb-ot-layout.cc              | 8 ++++----
+ src/hb-ot-shape-complex-indic.cc | 2 +-
+ 6 files changed, 10 insertions(+), 10 deletions(-)
+
+commit 22048d55aa37acfe50a0f5ae7b361db8d323905e
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Fri Jun 5 04:09:07 2020 +0430
+
+    [meson] Add -Bsymbolic-functions
+
+ meson.build | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit e98aa0c89712d676f8db328a192cd19a009f28ce
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Tue Jun 2 16:25:22 2020 +0430
+
+    [meson] Make gobject and introspection features automatic
+    
+    Meson doesn't have DISTCHECK_CONFIGURE_FLAGS like concept IIUC
+    and enabling them is the main thing we are doing with
+    distcheck flags anyway so lets turn them to auto.
+
+ meson_options.txt | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 65462c4b0bf4b1656bacc5377d248f53e9966fd0
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Fri Jun 5 01:08:08 2020 +0430
+
+    minor, improve the need for graphite comment
+
+ configure.ac | 2 +-
+ meson.build  | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 03bd6ead445b78560083caa22ce144058dcf4385
+Author: Christoph Reiter <reiter.christoph at gmail.com>
+Date:   Wed Jun 3 23:52:10 2020 +0200
+
+    [meson] Only pass required dependencies to everything
+    
+    Instead of passing dependencies as required we used one giant shared
+    dependency list containing all dependencies for every library/executable.
+    While this kinda works, the specified deps are also used for generating
+    the pkg-config files and this leads to lots of Requires.private and Libs.private
+    entries which aren't really needed.
+    
+    This removes the "deps" array and replaces it with a few smaller ones and
+    makes sure the public libraries only get passed the dependencies actually
+    needed.
+    
+    Fixes #2441
+
+ meson.build              | 29 ++++++++++-------------------
+ src/meson.build          | 24 ++++++++++++++++--------
+ test/api/meson.build     |  2 +-
+ test/fuzzing/meson.build |  1 -
+ util/meson.build         | 10 ++++++----
+ 5 files changed, 33 insertions(+), 33 deletions(-)
+
+commit 759df46575db49dd7d15da6e6df441d622e65470
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Thu Jun 4 15:49:54 2020 +0430
+
+    [style] Hide behind HB_EXPERIMENTAL_API compile flag
+
+ docs/harfbuzz-sections.txt |  6 ------
+ src/gen-def.py             |  1 +
+ src/hb-style.cc            | 40 ++++++++++++++++++++++++++++++++++++++--
+ src/hb-style.h             | 38 +++-----------------------------------
+ test/api/test-ot-face.c    |  2 ++
+ test/api/test-style.c      | 10 ++++++++++
+ 6 files changed, 54 insertions(+), 43 deletions(-)
+
+commit d54de56870d136e59b6239b9d1db023fe8f002ab
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Tue Apr 21 16:33:50 2020 +0430
+
+    [style] Adopt with meson
+
+ src/meson.build      | 2 ++
+ test/api/meson.build | 1 +
+ 2 files changed, 3 insertions(+)
+
+commit de0ec5f4fef8730d10ca049c43991ede7ae42f6d
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Sat Feb 8 14:09:09 2020 +0330
+
+    [style] give ptem value when asked for opsz
+    
+    ptem, used for AAT's tracking/`trak` table is equivalent to opsz of variable fonts.
+    
+    For variable AAT fonts, such as SFNS, ideally variable axis of the hb_font_t
+    should be set and equivalent to ptem, https://crbug.com/1005969#c37
+
+ src/hb-style.cc       | 3 +++
+ test/api/test-style.c | 3 +++
+ 2 files changed, 6 insertions(+)
+
+commit 22037499b42d9fce100ee771a229b961b5e1cb2d
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Sun Aug 4 11:31:31 2019 +0430
+
+    [style] New experimental API, hb_style_get_value
+    
+    Searches variation axes of a hb_font_t object for a specific axis first,
+    if not set, then tries to get default style values from different
+    tables of the font.
+
+ docs/harfbuzz-sections.txt   |   6 ++
+ src/Makefile.sources         |   2 +
+ src/harfbuzz.cc              |   1 +
+ src/hb-config.hh             |   2 +-
+ src/hb-ot-face-table-list.hh |   5 +-
+ src/hb-ot-stat-table.hh      |  73 ++++++++++++++++++
+ src/hb-style.cc              | 110 +++++++++++++++++++++++++++
+ src/hb-style.h               |  75 ++++++++++++++++++
+ src/hb-subset-plan.cc        |   2 +-
+ src/hb.h                     |   1 +
+ test/api/Makefile.am         |   1 +
+ test/api/fonts/aat-fdsc.ttf  | Bin 0 -> 556 bytes
+ test/api/test-ot-face.c      |   6 ++
+ test/api/test-style.c        | 177 +++++++++++++++++++++++++++++++++++++++++++
+ 14 files changed, 457 insertions(+), 4 deletions(-)
+
+commit d67553d12fc72c4a89fcb75400829b62d53ca064
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Thu Jun 4 12:31:57 2020 +0430
+
+    [meson] fix with_libstdcxx effect
+    
+    oops
+
+ src/meson.build | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 6f7048b917e7c81d276a7dc4a832a4cf042ffffe
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Thu Jun 4 10:18:35 2020 +0430
+
+    [meson] Update subset tests list from autotools
+
+ test/subset/meson.build | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 7e74aa6a7811ddb0999be5f33581d7933af6ba1c
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Thu Jun 4 09:32:20 2020 +0430
+
+    [ci] fix meson-gcc-mingw bot
+    
+    keep build folder for dist testing
+
+ .circleci/config.yml | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+commit b35764334e1ddf11c9aa4d0b1d0f9b7467d79106
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Thu Jun 4 04:10:11 2020 +0430
+
+    [ci] check workability of meson based dist
+
+ .circleci/config.yml | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 6bf5e8e7e62620501b068230f398db1e9219f1b8
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Thu Jun 4 04:03:14 2020 +0430
+
+    [ci] Deploy only when there is something to push
+    
+    Apparently the previous version of gtk-doc was doing weird changes like https://github.com/harfbuzz/harfbuzz.github.io/commit/1b40da99bbd1985d060d273ef37f1ccad16913c4 and https://github.com/harfbuzz/harfbuzz.github.io/commit/d1d9bff14c805d1bcbd2446a4c22e633e8d365cf
+    in order to make every to have something for pushing and
+    now that we don't have such changes it will fail.
+    
+    Alternatively we can go for `git commit --allow-empty`, guess better to
+    pollute history of https://github.com/harfbuzz/harfbuzz.github.io however.
+
+ .ci/deploy-docs.sh | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+commit 029ecf326e75071a84609a7510a8d4e58182f3e9
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Thu Jun 4 03:31:15 2020 +0430
+
+    [meson] Fix gen-hb-version.py run
+    
+    It gets complicated apparently when executed in the dist process, let's use raw
+    names now that we are operating in the script folder anyway.
+
+ src/meson.build | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 870304df766f0518898a09cd191c1fb6d94240f7
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Thu Jun 4 03:19:53 2020 +0430
+
+    [meson] Remove amalgam build option
+    
+    Fixes #2444
+
+ .circleci/config.yml | 6 ++----
+ meson_options.txt    | 2 --
+ src/meson.build      | 9 +--------
+ 3 files changed, 3 insertions(+), 14 deletions(-)
+
+commit 5293fdba239846e677ba4ef6139ee6593e60b4f0
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Thu Jun 4 02:38:27 2020 +0430
+
+    [ci] Move docs deployment from autotools to meson
+
+ .ci/deploy-docs.sh             |  9 ++-------
+ .github/workflows/linux-ci.yml | 10 ++++++++++
+ .travis.yml                    |  1 -
+ 3 files changed, 12 insertions(+), 8 deletions(-)
+
+commit b8320340cebace11cd3781fc029afbd50e82ad97
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Wed Jun 3 23:40:57 2020 +0430
+
+    [meson] fix gen script input
+    
+    matters more when harfbuzz is a subproject
+
+ src/meson.build | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+commit 50d3f531ee96ffa862bc05429814ba104dddd4a2
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Wed Jun 3 17:59:41 2020 +0430
+
+    Use output names in update-unicode-tables.make
+
+ src/update-unicode-tables.make | 51 +++++++++++++++++++-----------------------
+ 1 file changed, 23 insertions(+), 28 deletions(-)
+
 commit fb46a32ed0322d3f617dbfc7b982ff26f47d789c
 Author: Ebrahim Byagowi <ebrahim at gnu.org>
 Date:   Wed Jun 3 12:54:26 2020 +0430
@@ -2591,6 +3634,47 @@
  ...ase-minimized-hb-subset-fuzzer-5719588814979072 | Bin 0 -> 1048576 bytes
  2 files changed, 18 insertions(+), 7 deletions(-)
 
+commit bdda2ff6092a3ddce2fe236dfe8cf3176330589b
+Author: Simon Cozens <simon at simon-cozens.org>
+Date:   Mon Mar 30 16:40:29 2020 +0100
+
+    More strictly follow noun/verb/identifier format for GPOS/GSUB lookups
+    
+    Less generic than the previous commit, but more descriptive and more consistent.
+
+ src/hb-ot-layout.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit bef7ef81da8030628ca99c27a3eb52ab642e6a85
+Author: Simon Cozens <simon at simon-cozens.org>
+Date:   Mon Mar 30 16:39:43 2020 +0100
+
+    Reformat kerx/morx instrumentation to 'verb noun identifier'
+
+ src/hb-aat-layout-kerx-table.hh | 4 ++--
+ src/hb-aat-layout-morx-table.hh | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+commit 42aac64030c54e514c4c031b49f646ece2b878fa
+Author: Simon Cozens <simon at simon-cozens.org>
+Date:   Mon Mar 30 16:06:30 2020 +0100
+
+    Add table index to lookup messages
+    
+    We could say GSUB/GPOS explicitly, but using the index is more general, in case future tables (such as JSTF, Silf) become supported.
+
+ src/hb-ot-layout.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 2cea796b75702d4fd433da2f4733810cf3dd3cfa
+Author: Simon Cozens <simon at simon-cozens.org>
+Date:   Mon Mar 30 16:04:17 2020 +0100
+
+    Instrument entering GSUB/GPOS tables
+
+ src/hb-ot-layout.cc | 4 ++++
+ 1 file changed, 4 insertions(+)
+
 commit 1b64b73080994ac577a6d936a0109b3c6f5d21de
 Author: Khaled Hosny <khaledhosny at eglug.org>
 Date:   Mon Mar 30 16:49:23 2020 +0200

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/Makefile.am
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/Makefile.am	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/Makefile.am	2020-06-22 22:26:59 UTC (rev 55630)
@@ -28,6 +28,7 @@
 	subprojects/zlib.wrap \
 	meson-cc-tests/intel-atomic-primitives-test.c \
 	meson-cc-tests/solaris-atomic-operations.c \
+	write-tarball-revision.py \
 	$(NULL)
 
 MAINTAINERCLEANFILES = \
@@ -81,15 +82,4 @@
 dist-clear-sticky-bits:
 	chmod -R a-s $(distdir)
 
-tar_file = $(PACKAGE_TARNAME)-$(VERSION).tar.xz
-sha256_file = $(tar_file).sha256
-gpg_file = $(sha256_file).asc
-$(sha256_file): $(tar_file)
-	sha256sum $^ > $@
-$(gpg_file): $(sha256_file)
-	@echo "Please enter your GPG password to sign the checksum."
-	gpg --armor --sign $^
-
-release-files: $(tar_file) $(sha256_file) $(gpg_file)
-
 -include $(top_srcdir)/git.mk

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/NEWS
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/NEWS	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/NEWS	2020-06-22 22:26:59 UTC (rev 55630)
@@ -1,3 +1,16 @@
+Overview of changes leading to 2.6.8
+Monday, June 22, 2020
+====================================
+- New API to fetch glyph alternates from GSUB table.
+- hb-coretext build fix for macOS < 10.10.
+- Meson build fixes, cmake port removal is postponed but please prepare for
+  it and give us feedback.
+  Autotools is still our main build system however please consider
+  experimenting with meson also for packaging the library.
+- New API:
++hb_ot_layout_lookup_get_glyph_alternates()
+
+
 Overview of changes leading to 2.6.7
 Wednesday, June 3, 2020
 ====================================

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/RELEASING.md
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/RELEASING.md	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/RELEASING.md	2020-06-22 22:26:59 UTC (rev 55630)
@@ -37,12 +37,10 @@
    as well as any REPLACEME changes you made.  The commit message is simply the
    release number.  Eg. "1.4.7"
 
-8. "make dist" again to get a tarball with your new commit in the ChangeLog.  Then
-   "make release-files".  Enter your GPG password.  This creates a sha256 hash
-   and signs it.  Check the size of the three resulting files.
+8. "make dist" again to get a tarball with your new commit in the ChangeLog.
 
 9. Tag the release and sign it: Eg. "git tag -s 1.4.7 -m 1.4.7".  Enter your
-   GPG password again.
+   GPG password.
 
 10. Build win32 bundle.  See [README.mingw.md](README.mingw.md).
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac	2020-06-22 22:26:59 UTC (rev 55630)
@@ -1,6 +1,6 @@
 AC_PREREQ([2.64])
 AC_INIT([HarfBuzz],
-        [2.6.7],
+        [2.6.8],
         [https://github.com/harfbuzz/harfbuzz/issues/new],
         [harfbuzz],
         [http://harfbuzz.org/])
@@ -512,6 +512,17 @@
 
 AC_MSG_NOTICE([
 
+Autotools still is our main and recommended build system for
+building *nix package out of the library yet we encourage
+packagers to experiment with our brand new meson port and
+give us feedback as our effort to migrate and unify all
+the other build systems we have tools to meson.
+
+])
+
+
+AC_MSG_NOTICE([
+
 Build configuration:
 
 Unicode callbacks (you want at least one):
@@ -526,7 +537,7 @@
 	Cairo:			${have_cairo}
 	Fontconfig:		${have_fontconfig}
 
-Additional shapers (the more the merrier):
+Additional shapers:
 	Graphite2:		${have_graphite2}
 
 Platform shapers (not normally needed):

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/meson.build
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/meson.build	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/meson.build	2020-06-22 22:26:59 UTC (rev 55630)
@@ -1,9 +1,9 @@
 project('harfbuzz', 'c', 'cpp',
   meson_version: '>= 0.53.0',
-  default_options : ['cpp_std=c++11'],
-  version: '2.6.7')
+  default_options: ['cpp_std=c++11'],
+  version: '2.6.8')
 
-warning('Meson is not our main build system yet, don\'t use it for packaging HarfBuzz for *nix distros for now')
+warning('Meson is not our main build system for building *nix packages yet we encourage packagers to test it and give us feedback about it.')
 
 hb_version_arr = meson.project_version().split('.')
 hb_version_major = hb_version_arr[0].to_int()
@@ -36,21 +36,25 @@
       '/wd4305', # truncating type conversion (e.g. double -> float)
       cpp.get_supported_arguments(['/utf-8']), # set the input encoding to utf-8
   ]
-  add_project_arguments(msvc_args, language : ['c', 'cpp'])
+  add_project_arguments(msvc_args, language: ['c', 'cpp'])
   # Disable SAFESEH with MSVC for libs that use external deps that are built with MinGW
   # noseh_link_args = ['/SAFESEH:NO']
 endif
 
+add_project_link_arguments(cpp.get_supported_link_arguments([
+  '-Bsymbolic-functions'
+]), language: 'c')
+
 add_project_arguments(cpp.get_supported_arguments([
   '-fno-rtti',
   '-fno-exceptions',
   '-fno-threadsafe-statics',
   '-fvisibility-inlines-hidden', # maybe shouldn't be applied for mingw
-]), language : 'cpp')
+]), language: 'cpp')
 
 if host_machine.cpu_family() == 'arm' and cpp.alignment('struct { char c; }') != 1
   if cpp.has_argument('-mstructure-size-boundary=8')
-    add_project_arguments('-mstructure-size-boundary=8', language : 'cpp')
+    add_project_arguments('-mstructure-size-boundary=8', language: 'cpp')
   endif
 endif
 
@@ -70,16 +74,22 @@
   ['roundf'],
 ]
 
-freetype_dep = dependency('freetype2', required: false)
+m_dep = cpp.find_library('m', required: false)
 
-if not freetype_dep.found() and cpp.get_id() == 'msvc'
-  if cpp.has_header('ft2build.h')
-    freetype_dep = cpp.find_library('freetype', required: false)
+if not get_option('freetype').disabled()
+  freetype_dep = dependency('freetype2', required: false)
+
+  if not freetype_dep.found() and cpp.get_id() == 'msvc'
+    if cpp.has_header('ft2build.h')
+      freetype_dep = cpp.find_library('freetype', required: false)
+    endif
   endif
-endif
 
-if not freetype_dep.found() and get_option('freetype').enabled()
-  freetype_dep = dependency('freetype2', fallback: ['freetype2', 'freetype_dep'])
+  if not freetype_dep.found() and get_option('freetype').enabled()
+    freetype_dep = dependency('freetype2', fallback: ['freetype2', 'freetype_dep'])
+  endif
+else
+  freetype_dep = dependency('', required: false)
 endif
 
 glib_dep = dependency('glib-2.0', required: get_option('glib'),
@@ -86,66 +96,72 @@
                       fallback: ['glib', 'libglib_dep'])
 gobject_dep = dependency('gobject-2.0', required: get_option('gobject'),
                          fallback: ['glib', 'libgobject_dep'])
-cairo_dep = dependency('cairo', required: false)
 fontconfig_dep = dependency('fontconfig', required: get_option('fontconfig'),
                             fallback: ['fontconfig', 'fontconfig_dep'])
 graphite2_dep = dependency('graphite2', required: get_option('graphite'))
-icu_dep = dependency('icu-uc', required: false)
-m_dep = cpp.find_library('m', required: false)
 
-if not icu_dep.found() and get_option('icu').enabled()
-  icu_dep = dependency('icu-uc', required: cpp.get_id() != 'msvc')
-endif
+if not get_option('icu').disabled()
+  icu_dep = dependency('icu-uc', required: false)
 
-if not icu_dep.found() and cpp.get_id() == 'msvc'
-  if cpp.has_header('unicode/uchar.h') and \
-     cpp.has_header('unicode/unorm2.h') and \
-     cpp.has_header('unicode/ustring.h') and \
-     cpp.has_header('unicode/utf16.h') and \
-     cpp.has_header('unicode/uversion.h') and \
-     cpp.has_header('unicode/uscript.h')
-    if get_option('buildtype') == 'debug'
-      icu_dep = cpp.find_library('icuucd', required: get_option('icu'))
+  if not icu_dep.found() and get_option('icu').enabled()
+    icu_dep = dependency('icu-uc', required: cpp.get_id() != 'msvc')
+  endif
+
+  if not icu_dep.found() and cpp.get_id() == 'msvc'
+    if cpp.has_header('unicode/uchar.h') and \
+       cpp.has_header('unicode/unorm2.h') and \
+       cpp.has_header('unicode/ustring.h') and \
+       cpp.has_header('unicode/utf16.h') and \
+       cpp.has_header('unicode/uversion.h') and \
+       cpp.has_header('unicode/uscript.h')
+      if get_option('buildtype') == 'debug'
+        icu_dep = cpp.find_library('icuucd', required: get_option('icu'))
+      else
+        icu_dep = cpp.find_library('icuuc', required: get_option('icu'))
+      endif
     else
-      icu_dep = cpp.find_library('icuuc', required: get_option('icu'))
+      if get_option('icu').enabled()
+        error('ICU headers and libraries must be present to build ICU support')
+      endif
     endif
-  else
-    if get_option('icu').enabled()
-      error('ICU headers and libraries must be present to build ICU support')
-    endif
   endif
+else
+  icu_dep = dependency('', required: false)
 endif
 
-if not cairo_dep.found() and cpp.get_id() == 'msvc'
-  if cpp.has_header('cairo.h')
-    cairo_dep = cpp.find_library('cairo')
+if not get_option('cairo').disabled()
+  cairo_dep = dependency('cairo', required: false)
+
+  if not cairo_dep.found() and cpp.get_id() == 'msvc'
+    if cpp.has_header('cairo.h')
+      cairo_dep = cpp.find_library('cairo')
+    endif
   endif
-endif
 
-if not cairo_dep.found() and get_option('cairo').enabled()
-  cairo_dep = dependency('cairo', fallback: ['cairo', 'libcairo_dep'])
-endif
+  if not cairo_dep.found() and get_option('cairo').enabled()
+    cairo_dep = dependency('cairo', fallback: ['cairo', 'libcairo_dep'])
+  endif
 
-# Ensure that cairo-ft is fetched from the same library as cairo itself
-if cairo_dep.found()
-  if cairo_dep.type_name() == 'pkgconfig'
-    cairo_ft_dep = dependency('cairo-ft', required: get_option('cairo'))
-  else
-    if cpp.has_header('cairo-ft.h') and \
-       cpp.has_function('cairo_ft_font_face_create_for_ft_face', dependencies: cairo_dep)
-      cairo_ft_dep = cairo_dep
+  # Ensure that cairo-ft is fetched from the same library as cairo itself
+  if cairo_dep.found()
+    if cairo_dep.type_name() == 'pkgconfig'
+      cairo_ft_dep = dependency('cairo-ft', required: get_option('cairo'))
     else
-      # Not-found dependency
-      cairo_ft_dep = dependency('', required: false)
+      if cpp.has_header('cairo-ft.h') and \
+         cpp.has_function('cairo_ft_font_face_create_for_ft_face', dependencies: cairo_dep)
+        cairo_ft_dep = cairo_dep
+      else
+        cairo_ft_dep = dependency('', required: false)
+      endif
     endif
+  else
+    cairo_ft_dep = dependency('', required: false)
   endif
 else
-  # Not-found dependency
+  cairo_dep = dependency('', required: false)
   cairo_ft_dep = dependency('', required: false)
 endif
 
-deps = []
-
 conf = configuration_data()
 incconfig = include_directories('.')
 
@@ -157,33 +173,24 @@
 
 cpp_args = cpp.get_supported_arguments(warn_cflags)
 
-if m_dep.found()
-  deps += [m_dep]
-endif
-
 if glib_dep.found()
   conf.set('HAVE_GLIB', 1)
-  deps += [glib_dep]
 endif
 
 if gobject_dep.found()
   conf.set('HAVE_GOBJECT', 1)
-  deps += [gobject_dep]
 endif
 
 if cairo_dep.found()
   conf.set('HAVE_CAIRO', 1)
-  deps += [cairo_dep]
 endif
 
 if cairo_ft_dep.found()
   conf.set('HAVE_CAIRO_FT', 1)
-  deps += [cairo_ft_dep]
 endif
 
 if graphite2_dep.found()
   conf.set('HAVE_GRAPHITE2', 1)
-  deps += [graphite2_dep]
 endif
 
 if icu_dep.found()
@@ -200,7 +207,6 @@
 
 if freetype_dep.found()
   conf.set('HAVE_FREETYPE', 1)
-  deps += [freetype_dep]
   check_freetype_funcs = [
     ['FT_Get_Var_Blend_Coordinates', {'deps': freetype_dep}],
     ['FT_Set_Var_Blend_Coordinates', {'deps': freetype_dep}],
@@ -219,15 +225,15 @@
 
 if fontconfig_dep.found()
   conf.set('HAVE_FONTCONFIG', 1)
-  deps += [fontconfig_dep]
 endif
 
+gdi_uniscribe_deps = []
 # GDI (uniscribe) (windows)
 if host_machine.system() == 'windows' and not get_option('gdi').disabled()
   # TODO: make nicer once we have https://github.com/mesonbuild/meson/issues/3940
   if cpp.has_header('usp10.h') and cpp.has_header('windows.h')
     foreach usplib : ['usp10', 'gdi32', 'rpcrt4']
-      deps += [cpp.find_library(usplib, required: true)]
+      gdi_uniscribe_deps += cpp.find_library(usplib, required: true)
     endforeach
     conf.set('HAVE_UNISCRIBE', 1)
     conf.set('HAVE_GDI', 1)
@@ -237,9 +243,10 @@
 endif
 
 # DirectWrite (windows)
+directwrite_dep = dependency('', required: false)
 if host_machine.system() == 'windows' and not get_option('directwrite').disabled()
   if cpp.has_header('dwrite_1.h')
-    deps += [cpp.find_library('dwrite', required: true)]
+    directwrite_dep = cpp.find_library('dwrite', required: true)
     conf.set('HAVE_DIRECTWRITE', 1)
   elif get_option('directwrite').enabled()
     error('DirectWrite was enabled explicitly, but required header is missing.')
@@ -247,19 +254,20 @@
 endif
 
 # CoreText (macOS) - FIXME: untested
+coretext_deps = []
 if host_machine.system() == 'darwin' and not get_option('coretext').disabled()
-  app_services_dep = dependency('appleframeworks', modules : ['ApplicationServices'], required: false)
+  app_services_dep = dependency('appleframeworks', modules: ['ApplicationServices'], required: false)
   if cpp.has_type('CTFontRef', prefix: '#include <ApplicationServices/ApplicationServices.h>', dependencies: app_services_dep)
-    deps += [app_services_dep]
+    coretext_deps += [app_services_dep]
     conf.set('HAVE_CORETEXT', 1)
   # On iOS CoreText and CoreGraphics are stand-alone frameworks
   # Check for a different symbol to avoid getting cached result
   else
-    coretext_dep = dependency('appleframeworks', modules : ['CoreText'], required: false)
-    coregraphics_dep = dependency('appleframeworks', modules : ['CoreGraphics'], required: false)
-    corefoundation_dep = dependency('appleframeworks', modules : ['CoreFoundation'], required: false)
+    coretext_dep = dependency('appleframeworks', modules: ['CoreText'], required: false)
+    coregraphics_dep = dependency('appleframeworks', modules: ['CoreGraphics'], required: false)
+    corefoundation_dep = dependency('appleframeworks', modules: ['CoreFoundation'], required: false)
     if cpp.has_type('CTRunRef', prefix: '#include <CoreText/CoreText.h>', dependencies: [coretext_dep, coregraphics_dep, corefoundation_dep])
-      deps += [coretext_dep, coregraphics_dep, corefoundation_dep]
+      coretext_deps += [coretext_dep, coregraphics_dep, corefoundation_dep]
       conf.set('HAVE_CORETEXT', 1)
     elif get_option('coretext').enabled()
       error('CoreText was enabled explicitly, but required headers or frameworks are missing.')
@@ -268,12 +276,12 @@
 endif
 
 # threads
+thread_dep = dependency('', required: false)
 if host_machine.system() != 'windows'
   thread_dep = dependency('threads', required: false)
 
   if thread_dep.found()
     conf.set('HAVE_PTHREAD', 1)
-    deps += [thread_dep]
   else
     check_headers += ['sched.h']
     check_funcs += ['sched_yield', {'link_with': 'rt'}]
@@ -293,6 +301,7 @@
   endif
 endforeach
 
+harfbuzz_extra_deps = []
 foreach check : check_funcs
   name = check[0]
   opts = check.get(1, {})
@@ -323,7 +332,7 @@
   endif
 
   if found
-    deps += extra_deps
+    harfbuzz_extra_deps += extra_deps
     conf.set('HAVE_ at 0@'.format(name.to_upper()), 1)
   endif
 endforeach
@@ -347,6 +356,10 @@
   subdir('docs')
 endif
 
+if not meson.is_subproject()
+  meson.add_dist_script('write-tarball-revision.py')
+endif
+
 configure_file(output: 'config.h', configuration: conf)
 
 summary({'prefix': get_option('prefix'),
@@ -365,7 +378,7 @@
          'Fontconfig': conf.get('HAVE_FONTCONFIG', 0) == 1,
         }, bool_yn: true, section: 'Tools used for command-line utilities')
 summary({'Graphite2': conf.get('HAVE_GRAPHITE2', 0) == 1,
-        }, bool_yn: true, section: 'Additional shapers (the more the merrier)')
+        }, bool_yn: true, section: 'Additional shapers')
 summary({'CoreText': conf.get('HAVE_CORETEXT', 0) == 1,
          'DirectWrite': conf.get('HAVE_DIRECTWRITE', 0) == 1,
          'GDI': conf.get('HAVE_GDI', 0) == 1,

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/meson_options.txt
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/meson_options.txt	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/meson_options.txt	2020-06-22 22:26:59 UTC (rev 55630)
@@ -1,7 +1,7 @@
 # HarfBuzz feature options
 option('glib', type: 'feature', value: 'auto',
   description: 'Enable GLib unicode functions')
-option('gobject', type: 'feature', value: 'disabled',
+option('gobject', type: 'feature', value: 'auto',
   description: 'Enable GObject bindings')
 option('cairo', type: 'feature', value: 'auto',
   description: 'Use Cairo graphics library')
@@ -21,18 +21,14 @@
   description: 'Enable CoreText shaper backend on macOS')
 
 # Common feature options
-option('tests', type : 'feature', value : 'enabled', yield : true,
+option('tests', type: 'feature', value: 'enabled', yield: true,
   description: 'Enable or disable unit tests')
-option('introspection', type : 'feature', value : 'disabled', yield : true,
-  description : 'Generate gobject-introspection bindings (.gir/.typelib files)')
-option('gtk_doc',  type : 'feature', value : 'auto', yield : true,
-  description : 'Generate documentation with gtk-doc')
+option('introspection', type: 'feature', value: 'auto', yield: true,
+  description: 'Generate gobject-introspection bindings (.gir/.typelib files)')
+option('gtk_doc',  type: 'feature', value: 'auto', yield: true,
+  description: 'Generate documentation with gtk-doc')
 
 option('icu_builtin', type: 'boolean', value: false,
   description: 'Don\'t separate ICU support as harfbuzz-icu module')
-option('with_libstdcxx', type: 'boolean', value: false,
-  description: 'Allow linking with libstdc++')
 option('experimental_api', type: 'boolean', value: false,
   description: 'Enable experimental APIs')
-option('amalgam', type: 'boolean', value: false,
-  description : 'Enable amalgam builds')

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.sources
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.sources	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.sources	2020-06-22 22:26:59 UTC (rev 55630)
@@ -20,6 +20,7 @@
 	hb-algs.hh \
 	hb-array.hh \
 	hb-atomic.hh \
+	hb-bimap.hh \
 	hb-blob.cc \
 	hb-blob.hh \
 	hb-buffer-serialize.cc \
@@ -47,7 +48,6 @@
 	hb-machinery.hh \
 	hb-map.cc \
 	hb-map.hh \
-	hb-bimap.hh \
 	hb-meta.hh \
 	hb-mutex.hh \
 	hb-null.hh \
@@ -57,9 +57,9 @@
 	hb-open-file.hh \
 	hb-open-type.hh \
 	hb-ot-cff-common.hh \
+	hb-ot-cff1-std-str.hh \
 	hb-ot-cff1-table.cc \
 	hb-ot-cff1-table.hh \
-	hb-ot-cff1-std-str.hh \
 	hb-ot-cff2-table.cc \
 	hb-ot-cff2-table.hh \
 	hb-ot-cmap-table.hh \
@@ -69,9 +69,9 @@
 	hb-ot-color-sbix-table.hh \
 	hb-ot-color-svg-table.hh \
 	hb-ot-color.cc \
+	hb-ot-face-table-list.hh \
 	hb-ot-face.cc \
 	hb-ot-face.hh \
-	hb-ot-face-table-list.hh \
 	hb-ot-font.cc \
 	hb-ot-gasp-table.hh \
 	hb-ot-glyf-table.hh \
@@ -159,6 +159,7 @@
 	hb-shaper.hh \
 	hb-static.cc \
 	hb-string-array.hh \
+	hb-style.cc \
 	hb-ucd-table.hh \
 	hb-ucd.cc \
 	hb-unicode-emoji-table.hh \
@@ -213,6 +214,7 @@
 	hb-set.h \
 	hb-shape-plan.h \
 	hb-shape.h \
+	hb-style.h \
 	hb-unicode.h \
 	hb-version.h \
 	hb.h \

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-def.py
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-def.py	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-def.py	2020-06-22 22:26:59 UTC (rev 55630)
@@ -36,9 +36,8 @@
 hb_draw_funcs_set_line_to_func
 hb_draw_funcs_set_move_to_func
 hb_draw_funcs_set_quadratic_to_func
-hb_font_get_var_coords_design
-hb_ot_layout_closure_lookups
-hb_ot_layout_closure_features""".splitlines ()
+hb_style_get_value
+hb_font_get_var_coords_design""".splitlines ()
 	symbols = [x for x in symbols if x not in experimental_symbols]
 symbols = "\n".join (symbols)
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz.cc	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz.cc	2020-06-22 22:26:59 UTC (rev 55630)
@@ -43,6 +43,7 @@
 #include "hb-shape.cc"
 #include "hb-shaper.cc"
 #include "hb-static.cc"
+#include "hb-style.cc"
 #include "hb-ucd.cc"
 #include "hb-unicode.cc"
 #include "hb-glib.cc"

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-common.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-common.hh	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-common.hh	2020-06-22 22:26:59 UTC (rev 55630)
@@ -820,7 +820,6 @@
 
   /* Unused. For debug tracing only. */
   unsigned int lookup_index;
-  unsigned int debug_depth;
 
   HB_INTERNAL hb_aat_apply_context_t (const hb_ot_shape_plan_t *plan_,
 				      hb_font_t *font_,

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-kerx-table.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-kerx-table.hh	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-kerx-table.hh	2020-06-22 22:26:59 UTC (rev 55630)
@@ -887,7 +887,7 @@
       reverse = bool (st->u.header.coverage & st->u.header.Backwards) !=
 		HB_DIRECTION_IS_BACKWARD (c->buffer->props.direction);
 
-      if (!c->buffer->message (c->font, "start %c%c%c%c subtable %d", HB_UNTAG (thiz()->tableTag), c->lookup_index))
+      if (!c->buffer->message (c->font, "start subtable %d", c->lookup_index))
 	goto skip;
 
       if (!seenCrossStream &&
@@ -919,7 +919,7 @@
       if (reverse)
 	c->buffer->reverse ();
 
-      (void) c->buffer->message (c->font, "end %c%c%c%c subtable %d", HB_UNTAG (thiz()->tableTag), c->lookup_index);
+      (void) c->buffer->message (c->font, "end subtable %d", c->lookup_index);
 
     skip:
       st = &StructAfter<SubTable> (*st);

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-lcar-table.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-lcar-table.hh	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-lcar-table.hh	2020-06-22 22:26:59 UTC (rev 55630)
@@ -53,9 +53,10 @@
     const LigCaretClassEntry& array = entry_offset ? base+*entry_offset : Null (LigCaretClassEntry);
     if (caret_count)
     {
-      hb_array_t<const HBINT16> arr = array.sub_array (start_offset, caret_count);
-      for (unsigned int i = 0; i < arr.length; ++i)
-	caret_array[i] = font->em_scale_dir (arr[i], direction);
+      + array.sub_array (start_offset, caret_count)
+      | hb_map ([&] (int v) { return font->em_scale_dir (v, direction); })
+      | hb_sink (hb_array (caret_array, *caret_count))
+      ;
     }
     return array.len;
   }
@@ -88,13 +89,15 @@
     const LigCaretClassEntry& array = entry_offset ? base+*entry_offset : Null (LigCaretClassEntry);
     if (caret_count)
     {
-      hb_array_t<const HBINT16> arr = array.sub_array (start_offset, caret_count);
-      for (unsigned int i = 0; i < arr.length; ++i)
-      {
-	hb_position_t x = 0, y = 0;
-	font->get_glyph_contour_point_for_origin (glyph, arr[i], direction, &x, &y);
-	caret_array[i] = HB_DIRECTION_IS_HORIZONTAL (direction) ? x : y;
-      }
+      + array.sub_array (start_offset, caret_count)
+      | hb_map ([&] (unsigned int point_index)
+		{
+		  hb_position_t x = 0, y = 0;
+		  font->get_glyph_contour_point_for_origin (glyph, point_index, direction, &x, &y);
+		  return HB_DIRECTION_IS_HORIZONTAL (direction) ? x : y;
+		})
+      | hb_sink (hb_array (caret_array, *caret_count))
+      ;
     }
     return array.len;
   }

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-morx-table.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-morx-table.hh	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-morx-table.hh	2020-06-22 22:26:59 UTC (rev 55630)
@@ -1017,7 +1017,7 @@
 		bool (subtable->get_coverage () & ChainSubtable<Types>::Backwards) !=
 		HB_DIRECTION_IS_BACKWARD (c->buffer->props.direction);
 
-      if (!c->buffer->message (c->font, "start chain subtable %d", c->lookup_index))
+      if (!c->buffer->message (c->font, "start chainsubtable %d", c->lookup_index))
 	goto skip;
 
       if (reverse)
@@ -1028,7 +1028,7 @@
       if (reverse)
 	c->buffer->reverse ();
 
-      (void) c->buffer->message (c->font, "end chain subtable %d", c->lookup_index);
+      (void) c->buffer->message (c->font, "end chainsubtable %d", c->lookup_index);
 
       if (unlikely (!c->buffer->successful)) return;
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout.cc	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout.cc	2020-06-22 22:26:59 UTC (rev 55630)
@@ -56,8 +56,7 @@
 						       buffer (buffer_),
 						       sanitizer (),
 						       ankr_table (&Null (AAT::ankr)),
-						       lookup_index (0),
-						       debug_depth (0)
+						       lookup_index (0)
 {
   sanitizer.init (blob);
   sanitizer.set_num_glyphs (face->get_num_glyphs ());

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-config.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-config.hh	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-config.hh	2020-06-22 22:26:59 UTC (rev 55630)
@@ -76,7 +76,7 @@
 #define HB_NO_SETLOCALE
 #define HB_NO_OT_FONT_GLYPH_NAMES
 #define HB_NO_OT_SHAPE_FRACTIONS
-#define HB_NO_STAT
+#define HB_NO_STYLE
 #define HB_NO_SUBSET_LAYOUT
 #define HB_NO_VAR
 #endif

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.cc	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.cc	2020-06-22 22:26:59 UTC (rev 55630)
@@ -514,7 +514,7 @@
     {
       active_feature_t feature;
 
-#if MAC_OS_X_VERSION_MIN_REQUIRED < 1010
+#if MAC_OS_X_VERSION_MIN_REQUIRED < 101000
       const hb_aat_feature_mapping_t * mapping = hb_aat_layout_find_feature_mapping (features[i].tag);
       if (!mapping)
 	continue;
@@ -573,7 +573,7 @@
 	  /* active_features.qsort (); */
 	  for (unsigned int j = 0; j < active_features.length; j++)
 	  {
-#if MAC_OS_X_VERSION_MIN_REQUIRED < 1010
+#if MAC_OS_X_VERSION_MIN_REQUIRED < 101000
 	    CFStringRef keys[] = {
 	      kCTFontFeatureTypeIdentifierKey,
 	      kCTFontFeatureSelectorIdentifierKey

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-debug.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-debug.hh	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-debug.hh	2020-06-22 22:26:59 UTC (rev 55630)
@@ -373,10 +373,6 @@
 #define HB_DEBUG_FT (HB_DEBUG+0)
 #endif
 
-#ifndef HB_DEBUG_GET_COVERAGE
-#define HB_DEBUG_GET_COVERAGE (HB_DEBUG+0)
-#endif
-
 #ifndef HB_DEBUG_OBJECT
 #define HB_DEBUG_OBJECT (HB_DEBUG+0)
 #endif

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-dispatch.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-dispatch.hh	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-dispatch.hh	2020-06-22 22:26:59 UTC (rev 55630)
@@ -35,14 +35,16 @@
  * Dispatch
  */
 
-template <typename Context, typename Return, unsigned int MaxDebugDepth>
+template <typename Context, typename Return=hb_empty_t, unsigned int MaxDebugDepth=0>
 struct hb_dispatch_context_t
 {
+  hb_dispatch_context_t () : debug_depth (0) {}
   private:
   /* https://en.wikipedia.org/wiki/Curiously_recurring_template_pattern */
   const Context* thiz () const { return static_cast<const Context *> (this); }
 	Context* thiz ()       { return static_cast<      Context *> (this); }
   public:
+  const char *get_name () { return "UNKNOWN"; }
   static constexpr unsigned max_debug_depth = MaxDebugDepth;
   typedef Return return_t;
   template <typename T, typename F>
@@ -52,6 +54,7 @@
   { return obj.dispatch (thiz (), hb_forward<Ts> (ds)...); }
   static return_t no_dispatch_return_value () { return Context::default_return_value (); }
   static bool stop_sublookup_iteration (const return_t r HB_UNUSED) { return false; }
+  unsigned debug_depth;
 };
 
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-map.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-map.hh	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-map.hh	2020-06-22 22:26:59 UTC (rev 55630)
@@ -117,9 +117,8 @@
       successful = false;
       return false;
     }
-    + hb_iter (new_items, new_size)
-    | hb_apply (&item_t::clear)
-    ;
+    for (auto &_ : hb_iter (new_items, new_size))
+      _.clear ();
 
     unsigned int old_size = mask + 1;
     item_t *old_items = items;
@@ -175,9 +174,8 @@
     if (unlikely (hb_object_is_immutable (this)))
       return;
     if (items)
-      + hb_iter (items, mask + 1)
-      | hb_apply (&item_t::clear)
-      ;
+      for (auto &_ : hb_iter (items, mask + 1))
+	_.clear ();
 
     population = occupancy = 0;
   }

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file.hh	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file.hh	2020-06-22 22:26:59 UTC (rev 55630)
@@ -91,15 +91,10 @@
   {
     if (table_count)
     {
-      if (start_offset >= tables.len)
-	*table_count = 0;
-      else
-	*table_count = hb_min (*table_count, tables.len - start_offset);
-
-      const TableRecord *sub_tables = tables.arrayZ + start_offset;
-      unsigned int count = *table_count;
-      for (unsigned int i = 0; i < count; i++)
-	table_tags[i] = sub_tables[i].tag;
+      + tables.sub_array (start_offset, table_count)
+      | hb_map (&TableRecord::tag)
+      | hb_sink (hb_array (table_tags, *table_count))
+      ;
     }
     return tables.len;
   }

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-cpal-table.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-cpal-table.hh	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-cpal-table.hh	2020-06-22 22:26:59 UTC (rev 55630)
@@ -142,12 +142,9 @@
 								       numColors);
     if (color_count)
     {
-      hb_array_t<const BGRAColor> segment_colors = palette_colors.sub_array (start_offset, *color_count);
-      /* Always return numColors colors per palette even if it has out-of-bounds start index. */
-      unsigned int count = hb_min ((unsigned) hb_max ((int) (numColors - start_offset), 0), *color_count);
-      *color_count = count;
-      for (unsigned int i = 0; i < count; i++)
-	colors[i] = segment_colors[i]; /* Bound-checked read. */
+      + palette_colors.sub_array (start_offset, color_count)
+      | hb_sink (hb_array (colors, *color_count))
+      ;
     }
     return numColors;
   }

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-face-table-list.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-face-table-list.hh	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-face-table-list.hh	2020-06-22 22:26:59 UTC (rev 55630)
@@ -53,13 +53,14 @@
 HB_OT_TABLE (OT, hhea)
 HB_OT_ACCELERATOR (OT, hmtx)
 HB_OT_TABLE (OT, OS2)
-#if !defined(HB_NO_OT_FONT_GLYPH_NAMES) || !defined(HB_NO_METRICS)
+#if !defined(HB_NO_OT_FONT_GLYPH_NAMES) || !defined(HB_NO_METRICS) || !defined(HB_NO_STYLE)
 HB_OT_ACCELERATOR (OT, post)
 #endif
 #ifndef HB_NO_NAME
 HB_OT_ACCELERATOR (OT, name)
 #endif
-#ifndef HB_NO_STAT
+#ifndef HB_NO_STYLE
+HB_OT_TABLE (AAT, fdsc)
 HB_OT_TABLE (OT, STAT)
 #endif
 #ifndef HB_NO_META

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-hmtx-table.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-hmtx-table.hh	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-hmtx-table.hh	2020-06-22 22:26:59 UTC (rev 55630)
@@ -101,25 +101,23 @@
 		  unsigned num_advances)
   {
     unsigned idx = 0;
-    + it
-    | hb_apply ([c, &idx, num_advances] (const hb_item_type<Iterator>& _)
-		{
-		  if (idx < num_advances)
-		  {
-		    LongMetric lm;
-		    lm.advance = _.first;
-		    lm.sb = _.second;
-		    if (unlikely (!c->embed<LongMetric> (&lm))) return;
-		  }
-		  else
-		  {
-		    FWORD *sb = c->allocate_size<FWORD> (FWORD::static_size);
-		    if (unlikely (!sb)) return;
-		    *sb = _.second;
-		  }
-		  idx++;
-		})
-    ;
+    for (auto _ : it)
+    {
+      if (idx < num_advances)
+      {
+	LongMetric lm;
+	lm.advance = _.first;
+	lm.sb = _.second;
+	if (unlikely (!c->embed<LongMetric> (&lm))) return;
+      }
+      else
+      {
+	FWORD *sb = c->allocate_size<FWORD> (FWORD::static_size);
+	if (unlikely (!sb)) return;
+	*sb = _.second;
+      }
+      idx++;
+    }
   }
 
   bool subset (hb_subset_context_t *c) const

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-common.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-common.hh	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-common.hh	2020-06-22 22:26:59 UTC (rev 55630)
@@ -126,7 +126,6 @@
   const hb_tag_t table_tag;
   const hb_map_t *lookup_index_map;
   const hb_map_t *feature_index_map;
-  unsigned debug_depth;
 
   hb_subset_layout_context_t (hb_subset_context_t *c_,
 			      hb_tag_t tag_,
@@ -136,7 +135,6 @@
 				table_tag (tag_),
 				lookup_index_map (lookup_map_),
 				feature_index_map (feature_map_),
-				debug_depth (0),
 				script_count (0),
 				langsys_count (0),
 				feature_index_count (0),
@@ -151,9 +149,8 @@
 };
 
 struct hb_collect_variation_indices_context_t :
-       hb_dispatch_context_t<hb_collect_variation_indices_context_t, hb_empty_t, 0>
+       hb_dispatch_context_t<hb_collect_variation_indices_context_t>
 {
-  const char *get_name () { return "CLOSURE_LAYOUT_VARIATION_IDXES"; }
   template <typename T>
   return_t dispatch (const T &obj) { obj.collect_variation_indices (this); return hb_empty_t (); }
   static return_t default_return_value () { return hb_empty_t (); }
@@ -161,7 +158,6 @@
   hb_set_t *layout_variation_indices;
   const hb_set_t *glyph_set;
   const hb_map_t *gpos_lookups;
-  unsigned int debug_depth;
 
   hb_collect_variation_indices_context_t (hb_set_t *layout_variation_indices_,
 					  const hb_set_t *glyph_set_,
@@ -168,8 +164,7 @@
 					  const hb_map_t *gpos_lookups_) :
 					layout_variation_indices (layout_variation_indices_),
 					glyph_set (glyph_set_),
-					gpos_lookups (gpos_lookups_),
-					debug_depth (0) {}
+					gpos_lookups (gpos_lookups_) {}
 };
 
 template<typename OutputArray>
@@ -350,11 +345,12 @@
 			 unsigned int *record_count /* IN/OUT */,
 			 hb_tag_t     *record_tags /* OUT */) const
   {
-    if (record_count) {
-      const Record<Type> *arr = this->sub_array (start_offset, record_count);
-      unsigned int count = *record_count;
-      for (unsigned int i = 0; i < count; i++)
-	record_tags[i] = arr[i].tag;
+    if (record_count)
+    {
+      + this->sub_array (start_offset, record_count)
+      | hb_map (&Record<Type>::tag)
+      | hb_sink (hb_array (record_tags, *record_count))
+      ;
     }
     return this->len;
   }
@@ -467,11 +463,11 @@
 			    unsigned int *_count /* IN/OUT */,
 			    unsigned int *_indexes /* OUT */) const
   {
-    if (_count) {
-      const HBUINT16 *arr = this->sub_array (start_offset, _count);
-      unsigned int count = *_count;
-      for (unsigned int i = 0; i < count; i++)
-	_indexes[i] = arr[i];
+    if (_count)
+    {
+      + this->sub_array (start_offset, _count)
+      | hb_sink (hb_array (_indexes, *_count))
+      ;
     }
     return this->len;
   }
@@ -809,11 +805,16 @@
 /* https://docs.microsoft.com/en-us/typography/opentype/spec/features_ae#cv01-cv99 */
 struct FeatureParamsCharacterVariants
 {
-  bool sanitize (hb_sanitize_context_t *c) const
+  unsigned
+  get_characters (unsigned start_offset, unsigned *char_count, hb_codepoint_t *chars) const
   {
-    TRACE_SANITIZE (this);
-    return_trace (c->check_struct (this) &&
-		  characters.sanitize (c));
+    if (char_count)
+    {
+      + characters.sub_array (start_offset, char_count)
+      | hb_sink (hb_array (chars, *char_count))
+      ;
+    }
+    return characters.len;
   }
 
   unsigned get_size () const
@@ -825,6 +826,13 @@
     return_trace ((bool) c->serializer->embed (*this));
   }
 
+  bool sanitize (hb_sanitize_context_t *c) const
+  {
+    TRACE_SANITIZE (this);
+    return_trace (c->check_struct (this) &&
+		  characters.sanitize (c));
+  }
+
   HBUINT16	format;			/* Format number is set to 0. */
   NameID	featUILableNameID;	/* The ‘name’ table name ID that
 					 * specifies a string (or strings,

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gdef-table.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gdef-table.hh	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gdef-table.hh	2020-06-22 22:26:59 UTC (rev 55630)
@@ -73,10 +73,9 @@
 
     if (point_count)
     {
-      hb_array_t<const HBUINT16> array = points.sub_array (start_offset, point_count);
-      unsigned int count = array.length;
-      for (unsigned int i = 0; i < count; i++)
-	point_array[i] = array[i];
+      + points.sub_array (start_offset, point_count)
+      | hb_sink (hb_array (point_array, *point_count))
+      ;
     }
 
     return points.len;
@@ -583,7 +582,7 @@
     }
   }
 
-  HB_INTERNAL bool is_blacklisted (hb_blob_t *blob,
+  HB_INTERNAL bool is_blocklisted (hb_blob_t *blob,
 				   hb_face_t *face) const;
 
   struct accelerator_t
@@ -591,7 +590,7 @@
     void init (hb_face_t *face)
     {
       this->table = hb_sanitize_context_t ().reference_table<GDEF> (face);
-      if (unlikely (this->table->is_blacklisted (this->table.get_blob (), face)))
+      if (unlikely (this->table->is_blocklisted (this->table.get_blob (), face)))
       {
 	hb_blob_destroy (this->table.get_blob ());
 	this->table = hb_blob_get_empty ();

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gpos-table.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gpos-table.hh	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gpos-table.hh	2020-06-22 22:26:59 UTC (rev 55630)
@@ -1692,6 +1692,12 @@
     else
       pos[child].x_offset = x_offset;
 
+    /* If parent was attached to child, break them free.
+     * https://github.com/harfbuzz/harfbuzz/issues/2469
+     */
+    if (unlikely (pos[parent].attach_chain() == -pos[child].attach_chain()))
+      pos[parent].attach_chain() = 0;
+
     buffer->idx++;
     return_trace (true);
   }
@@ -2559,7 +2565,7 @@
   bool sanitize (hb_sanitize_context_t *c) const
   { return GSUBGPOS::sanitize<PosLookup> (c); }
 
-  HB_INTERNAL bool is_blacklisted (hb_blob_t *blob,
+  HB_INTERNAL bool is_blocklisted (hb_blob_t *blob,
 				   hb_face_t *face) const;
 
   void collect_variation_indices (hb_collect_variation_indices_context_t *c) const
@@ -2572,6 +2578,11 @@
     }
   }
 
+  void closure_lookups (hb_face_t      *face,
+			const hb_set_t *glyphs,
+			hb_set_t       *lookup_indexes /* IN/OUT */) const
+  { GSUBGPOS::closure_lookups<PosLookup> (face, glyphs, lookup_indexes); }
+
   typedef GSUBGPOS::accelerator_t<GPOS> accelerator_t;
 };
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsub-table.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsub-table.hh	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsub-table.hh	2020-06-22 22:26:59 UTC (rev 55630)
@@ -556,6 +556,20 @@
     return_trace (true);
   }
 
+  unsigned
+  get_alternates (unsigned        start_offset,
+		  unsigned       *alternate_count  /* IN/OUT.  May be NULL. */,
+		  hb_codepoint_t *alternate_glyphs /* OUT.     May be NULL. */) const
+  {
+    if (alternates.len && alternate_count)
+    {
+      + alternates.sub_array (start_offset, alternate_count)
+      | hb_sink (hb_array (alternate_glyphs, *alternate_count))
+      ;
+    }
+    return alternates.len;
+  }
+
   template <typename Iterator,
 	    hb_requires (hb_is_source_of (Iterator, hb_codepoint_t))>
   bool serialize (hb_serialize_context_t *c,
@@ -628,6 +642,14 @@
   bool would_apply (hb_would_apply_context_t *c) const
   { return c->len == 1 && (this+coverage).get_coverage (c->glyphs[0]) != NOT_COVERED; }
 
+  unsigned
+  get_glyph_alternates (hb_codepoint_t  gid,
+			unsigned        start_offset,
+			unsigned       *alternate_count  /* IN/OUT.  May be NULL. */,
+			hb_codepoint_t *alternate_glyphs /* OUT.     May be NULL. */) const
+  { return (this+alternateSet[(this+coverage).get_coverage (gid)])
+	   .get_alternates (start_offset, alternate_count, alternate_glyphs); }
+
   bool apply (hb_ot_apply_context_t *c) const
   {
     TRACE_APPLY (this);
@@ -1205,7 +1227,9 @@
     const OffsetArrayOf<Coverage> &lookahead = StructAfter<OffsetArrayOf<Coverage>> (backtrack);
     const ArrayOf<HBGlyphID> &substitute = StructAfter<ArrayOf<HBGlyphID>> (lookahead);
 
-  unsigned int start_index = 0, end_index = 0;
+    if (unlikely (index >= substitute.len)) return_trace (false);
+
+    unsigned int start_index = 0, end_index = 0;
     if (match_backtrack (c,
 			 backtrack.len, (HBUINT16 *) backtrack.arrayZ,
 			 match_coverage, this,
@@ -1547,9 +1571,14 @@
   bool sanitize (hb_sanitize_context_t *c) const
   { return GSUBGPOS::sanitize<SubstLookup> (c); }
 
-  HB_INTERNAL bool is_blacklisted (hb_blob_t *blob,
+  HB_INTERNAL bool is_blocklisted (hb_blob_t *blob,
 				   hb_face_t *face) const;
 
+  void closure_lookups (hb_face_t      *face,
+                        const hb_set_t *glyphs,
+                        hb_set_t       *lookup_indexes /* IN/OUT */) const
+  { GSUBGPOS::closure_lookups<SubstLookup> (face, glyphs, lookup_indexes); }
+
   typedef GSUBGPOS::accelerator_t<GSUB> accelerator_t;
 };
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos.hh	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos.hh	2020-06-22 22:26:59 UTC (rev 55630)
@@ -42,9 +42,8 @@
 
 
 struct hb_intersects_context_t :
-       hb_dispatch_context_t<hb_intersects_context_t, bool, 0>
+       hb_dispatch_context_t<hb_intersects_context_t, bool>
 {
-  const char *get_name () { return "INTERSECTS"; }
   template <typename T>
   return_t dispatch (const T &obj) { return obj.intersects (this->glyphs); }
   static return_t default_return_value () { return false; }
@@ -51,17 +50,14 @@
   bool stop_sublookup_iteration (return_t r) const { return r; }
 
   const hb_set_t *glyphs;
-  unsigned int debug_depth;
 
   hb_intersects_context_t (const hb_set_t *glyphs_) :
-			     glyphs (glyphs_),
-			     debug_depth (0) {}
+			     glyphs (glyphs_) {}
 };
 
 struct hb_closure_context_t :
-       hb_dispatch_context_t<hb_closure_context_t, hb_empty_t, 0>
+       hb_dispatch_context_t<hb_closure_context_t>
 {
-  const char *get_name () { return "CLOSURE"; }
   typedef return_t (*recurse_func_t) (hb_closure_context_t *c, unsigned int lookup_index);
   template <typename T>
   return_t dispatch (const T &obj) { obj.closure (this); return hb_empty_t (); }
@@ -102,7 +98,6 @@
   hb_set_t output[1];
   recurse_func_t recurse_func;
   unsigned int nesting_level_left;
-  unsigned int debug_depth;
 
   hb_closure_context_t (hb_face_t *face_,
 			hb_set_t *glyphs_,
@@ -112,7 +107,6 @@
 			  glyphs (glyphs_),
 			  recurse_func (nullptr),
 			  nesting_level_left (nesting_level_left_),
-			  debug_depth (0),
 			  done_lookups (done_lookups_),
 			  lookup_count (0)
   {}
@@ -134,9 +128,8 @@
 };
 
 struct hb_closure_lookups_context_t :
-       hb_dispatch_context_t<hb_closure_lookups_context_t, hb_empty_t, 0>
+       hb_dispatch_context_t<hb_closure_lookups_context_t>
 {
-  const char *get_name () { return "CLOSURE_LOOKUPS"; }
   typedef return_t (*recurse_func_t) (hb_closure_lookups_context_t *c, unsigned lookup_index);
   template <typename T>
   return_t dispatch (const T &obj) { obj.closure_lookups (this); return hb_empty_t (); }
@@ -177,7 +170,6 @@
   const hb_set_t *glyphs;
   recurse_func_t recurse_func;
   unsigned int nesting_level_left;
-  unsigned int debug_depth;
 
   hb_closure_lookups_context_t (hb_face_t *face_,
 				const hb_set_t *glyphs_,
@@ -188,7 +180,6 @@
 				glyphs (glyphs_),
 				recurse_func (nullptr),
 				nesting_level_left (nesting_level_left_),
-				debug_depth (0),
 				visited_lookups (visited_lookups_),
 				inactive_lookups (inactive_lookups_),
 				lookup_count (0) {}
@@ -202,9 +193,8 @@
 };
 
 struct hb_would_apply_context_t :
-       hb_dispatch_context_t<hb_would_apply_context_t, bool, 0>
+       hb_dispatch_context_t<hb_would_apply_context_t, bool>
 {
-  const char *get_name () { return "WOULD_APPLY"; }
   template <typename T>
   return_t dispatch (const T &obj) { return obj.would_apply (this); }
   static return_t default_return_value () { return false; }
@@ -214,7 +204,6 @@
   const hb_codepoint_t *glyphs;
   unsigned int len;
   bool zero_context;
-  unsigned int debug_depth;
 
   hb_would_apply_context_t (hb_face_t *face_,
 			    const hb_codepoint_t *glyphs_,
@@ -223,15 +212,12 @@
 			      face (face_),
 			      glyphs (glyphs_),
 			      len (len_),
-			      zero_context (zero_context_),
-			      debug_depth (0) {}
+			      zero_context (zero_context_) {}
 };
 
-
 struct hb_collect_glyphs_context_t :
-       hb_dispatch_context_t<hb_collect_glyphs_context_t, hb_empty_t, 0>
+       hb_dispatch_context_t<hb_collect_glyphs_context_t>
 {
-  const char *get_name () { return "COLLECT_GLYPHS"; }
   typedef return_t (*recurse_func_t) (hb_collect_glyphs_context_t *c, unsigned int lookup_index);
   template <typename T>
   return_t dispatch (const T &obj) { obj.collect_glyphs (this); return hb_empty_t (); }
@@ -282,7 +268,6 @@
   recurse_func_t recurse_func;
   hb_set_t *recursed_lookups;
   unsigned int nesting_level_left;
-  unsigned int debug_depth;
 
   hb_collect_glyphs_context_t (hb_face_t *face_,
 			       hb_set_t  *glyphs_before, /* OUT.  May be NULL */
@@ -297,8 +282,7 @@
 			      output (glyphs_output ? glyphs_output : hb_set_get_empty ()),
 			      recurse_func (nullptr),
 			      recursed_lookups (hb_set_create ()),
-			      nesting_level_left (nesting_level_left_),
-			      debug_depth (0) {}
+			      nesting_level_left (nesting_level_left_) {}
   ~hb_collect_glyphs_context_t () { hb_set_destroy (recursed_lookups); }
 
   void set_recurse_func (recurse_func_t func) { recurse_func = func; }
@@ -308,10 +292,9 @@
 
 template <typename set_t>
 struct hb_collect_coverage_context_t :
-       hb_dispatch_context_t<hb_collect_coverage_context_t<set_t>, const Coverage &, HB_DEBUG_GET_COVERAGE>
+       hb_dispatch_context_t<hb_collect_coverage_context_t<set_t>, const Coverage &>
 {
-  const char *get_name () { return "GET_COVERAGE"; }
-  typedef const Coverage &return_t;
+  typedef const Coverage &return_t; // Stoopid that we have to dupe this here.
   template <typename T>
   return_t dispatch (const T &obj) { return obj.get_coverage (); }
   static return_t default_return_value () { return Null (Coverage); }
@@ -322,11 +305,9 @@
   }
 
   hb_collect_coverage_context_t (set_t *set_) :
-				   set (set_),
-				   debug_depth (0) {}
+				   set (set_) {}
 
   set_t *set;
-  unsigned int debug_depth;
 };
 
 
@@ -549,7 +530,6 @@
   unsigned int lookup_index;
   unsigned int lookup_props;
   unsigned int nesting_level_left;
-  unsigned int debug_depth;
 
   bool has_glyph_classes;
   bool auto_zwnj;
@@ -579,7 +559,6 @@
 			lookup_index ((unsigned int) -1),
 			lookup_props (0),
 			nesting_level_left (HB_MAX_NESTING_LEVEL),
-			debug_depth (0),
 			has_glyph_classes (gdef.has_glyph_classes ()),
 			auto_zwnj (true),
 			auto_zwj (true),
@@ -701,7 +680,7 @@
 
 
 struct hb_get_subtables_context_t :
-       hb_dispatch_context_t<hb_get_subtables_context_t, hb_empty_t, HB_DEBUG_APPLY>
+       hb_dispatch_context_t<hb_get_subtables_context_t>
 {
   template <typename Type>
   static inline bool apply_to (const void *obj, OT::hb_ot_apply_context_t *c)
@@ -737,7 +716,6 @@
   typedef hb_vector_t<hb_applicable_t> array_t;
 
   /* Dispatch interface. */
-  const char *get_name () { return "GET_SUBTABLES"; }
   template <typename T>
   return_t dispatch (const T &obj)
   {
@@ -748,11 +726,9 @@
   static return_t default_return_value () { return hb_empty_t (); }
 
   hb_get_subtables_context_t (array_t &array_) :
-			      array (array_),
-			      debug_depth (0) {}
+			      array (array_) {}
 
   array_t &array;
-  unsigned int debug_depth;
 };
 
 
@@ -3277,6 +3253,21 @@
   }
 
   template <typename TLookup>
+  void closure_lookups (hb_face_t      *face,
+			const hb_set_t *glyphs,
+                        hb_set_t       *lookup_indexes /* IN/OUT */) const
+  {
+    hb_set_t visited_lookups, inactive_lookups;
+    OT::hb_closure_lookups_context_t c (face, glyphs, &visited_lookups, &inactive_lookups);
+
+    for (unsigned lookup_index : + hb_iter (lookup_indexes))
+      reinterpret_cast<const TLookup &> (get_lookup (lookup_index)).closure_lookups (&c, lookup_index);
+
+    hb_set_union (lookup_indexes, &visited_lookups);
+    hb_set_subtract (lookup_indexes, &inactive_lookups);
+  }
+
+  template <typename TLookup>
   bool subset (hb_subset_layout_context_t *c) const
   {
     TRACE_SUBSET (this);
@@ -3364,7 +3355,7 @@
     void init (hb_face_t *face)
     {
       this->table = hb_sanitize_context_t ().reference_table<T> (face);
-      if (unlikely (this->table->is_blacklisted (this->table.get_blob (), face)))
+      if (unlikely (this->table->is_blocklisted (this->table.get_blob (), face)))
       {
 	hb_blob_destroy (this->table.get_blob ());
 	this->table = hb_blob_get_empty ();

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.cc	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.cc	2020-06-22 22:26:59 UTC (rev 55630)
@@ -143,13 +143,13 @@
  */
 
 bool
-OT::GDEF::is_blacklisted (hb_blob_t *blob,
+OT::GDEF::is_blocklisted (hb_blob_t *blob,
 			  hb_face_t *face) const
 {
 #ifdef HB_NO_OT_LAYOUT_BLACKLIST
   return false;
 #endif
-  /* The ugly business of blacklisting individual fonts' tables happen here!
+  /* The ugly business of blocklisting individual fonts' tables happen here!
    * See this thread for why we finally had to bend in and do this:
    * https://lists.freedesktop.org/archives/harfbuzz/2016-February/005489.html
    *
@@ -392,7 +392,7 @@
  */
 
 bool
-OT::GSUB::is_blacklisted (hb_blob_t *blob HB_UNUSED,
+OT::GSUB::is_blocklisted (hb_blob_t *blob HB_UNUSED,
 			  hb_face_t *face) const
 {
 #ifdef HB_NO_OT_LAYOUT_BLACKLIST
@@ -402,7 +402,7 @@
 }
 
 bool
-OT::GPOS::is_blacklisted (hb_blob_t *blob HB_UNUSED,
+OT::GPOS::is_blocklisted (hb_blob_t *blob HB_UNUSED,
 			  hb_face_t *face HB_UNUSED) const
 {
 #ifdef HB_NO_OT_LAYOUT_BLACKLIST
@@ -1202,73 +1202,7 @@
   g.feature_variation_collect_lookups (&feature_indexes, lookup_indexes);
 }
 
-#ifdef HB_EXPERIMENTAL_API
-/**
- * hb_ot_layout_closure_lookups:
- * @face: #hb_face_t to work upon
- * @table_tag: HB_OT_TAG_GSUB or HB_OT_TAG_GPOS
- * @lookup_indexes: (inout): lookup_indices collected from feature
- * list
- *
- * Returns all inactive lookups reachable from lookup_indices
- *
- * Since: EXPERIMENTAL
- **/
-void
-hb_ot_layout_closure_lookups (hb_face_t      *face,
-			      hb_tag_t        table_tag,
-			      const hb_set_t *glyphs,
-			      hb_set_t       *lookup_indexes /* IN/OUT */)
-{
-  hb_set_t visited_lookups, inactive_lookups;
-  OT::hb_closure_lookups_context_t c (face, glyphs, &visited_lookups, &inactive_lookups);
 
-  for (unsigned lookup_index : + hb_iter (lookup_indexes))
-  {
-    switch (table_tag)
-    {
-      case HB_OT_TAG_GSUB:
-      {
-	const OT::SubstLookup& l = face->table.GSUB->table->get_lookup (lookup_index);
-	l.closure_lookups (&c, lookup_index);
-	break;
-      }
-      case HB_OT_TAG_GPOS:
-      {
-	const OT::PosLookup& l = face->table.GPOS->table->get_lookup (lookup_index);
-	l.closure_lookups (&c, lookup_index);
-	break;
-      }
-    }
-  }
-
-  hb_set_union (lookup_indexes, &visited_lookups);
-  hb_set_subtract (lookup_indexes, &inactive_lookups);
-}
-
-/**
- * hb_ot_layout_closure_features:
- * @face: #hb_face_t to work upon
- * @table_tag: HB_OT_TAG_GSUB or HB_OT_TAG_GPOS
- * @lookup_indexes: (in): collected active lookup_indices
- * @feature_indexes: (out): all active feature indexes collected
- *
- * Returns all active feature indexes
- *
- * Since: EXPERIMENTAL
- **/
-void
-hb_ot_layout_closure_features (hb_face_t      *face,
-			       hb_tag_t        table_tag,
-			       const hb_map_t *lookup_indexes, /* IN */
-			       hb_set_t       *feature_indexes /* OUT */)
-{
-  const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
-  g.closure_features (lookup_indexes, feature_indexes);
-}
-#endif
-
-
 #ifndef HB_NO_LAYOUT_COLLECT_GLYPHS
 /**
  * hb_ot_layout_lookup_collect_glyphs:
@@ -1428,7 +1362,6 @@
   OT::hb_would_apply_context_t c (face, glyphs, glyphs_length, (bool) zero_context);
 
   const OT::SubstLookup& l = face->table.GSUB->table->get_lookup (lookup_index);
-
   return l.would_apply (&c, &face->table.GSUB->accels[lookup_index]);
 }
 
@@ -1446,7 +1379,7 @@
 hb_ot_layout_substitute_start (hb_font_t    *font,
 			       hb_buffer_t  *buffer)
 {
-_hb_ot_layout_set_glyph_props (font, buffer);
+  _hb_ot_layout_set_glyph_props (font, buffer);
 }
 
 void
@@ -1777,12 +1710,6 @@
  * Fetches a list of the characters defined as having a variant under the specified
  * "Character Variant" ("cvXX") feature tag.
  *
- * <note>Note: If the char_count output value is equal to its input value, then there
- *       is a chance there were more characters defined under the feature tag than were
- *       returned. This function can be called with incrementally larger start_offset
- *       until the char_count output value is lower than its input value, or the size
- *       of the characters array can be increased.</note>
- *
  * Return value: Number of total sample characters in the cvXX feature.
  *
  * Since: 2.0.0
@@ -1796,24 +1723,10 @@
 				     hb_codepoint_t *characters  /* OUT.     May be NULL */)
 {
   const OT::GSUBGPOS &g = get_gsubgpos_table (face, table_tag);
-
-  hb_tag_t feature_tag = g.get_feature_tag (feature_index);
-  const OT::Feature &f = g.get_feature (feature_index);
-
-  const OT::FeatureParams &feature_params = f.get_feature_params ();
-
-  const OT::FeatureParamsCharacterVariants& cv_params =
-    feature_params.get_character_variants_params(feature_tag);
-
-  unsigned int len = 0;
-  if (char_count && characters && start_offset < cv_params.characters.len)
-  {
-    len = hb_min (cv_params.characters.len - start_offset, *char_count);
-    for (unsigned int i = 0; i < len; ++i)
-      characters[i] = cv_params.characters[start_offset + i];
-  }
-  if (char_count) *char_count = len;
-  return cv_params.characters.len;
+  return g.get_feature (feature_index)
+	  .get_feature_params ()
+	  .get_character_variants_params(g.get_feature_tag (feature_index))
+	  .get_characters (start_offset, char_count, characters);
 }
 #endif
 
@@ -1982,13 +1895,17 @@
 void hb_ot_map_t::substitute (const hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const
 {
   GSUBProxy proxy (font->face);
+  if (!buffer->message (font, "start table GSUB")) return;
   apply (proxy, plan, font, buffer);
+  (void)buffer->message (font, "end table GSUB");
 }
 
 void hb_ot_map_t::position (const hb_ot_shape_plan_t *plan, hb_font_t *font, hb_buffer_t *buffer) const
 {
   GPOSProxy proxy (font->face);
+  if (!buffer->message (font, "start table GPOS")) return;
   apply (proxy, plan, font, buffer);
+  (void)buffer->message (font, "end table GPOS");
 }
 
 void
@@ -2031,4 +1948,62 @@
   return result;
 }
 #endif
+
+
+struct hb_get_glyph_alternates_dispatch_t :
+       hb_dispatch_context_t<hb_get_glyph_alternates_dispatch_t, unsigned>
+{
+  static return_t default_return_value () { return 0; }
+  bool stop_sublookup_iteration (return_t r) const { return r; }
+
+  hb_face_t *face;
+
+  hb_get_glyph_alternates_dispatch_t (hb_face_t *face) :
+					face (face) {}
+
+  private:
+  template <typename T, typename ...Ts> auto
+  _dispatch (const T &obj, hb_priority<1>, Ts&&... ds) HB_AUTO_RETURN
+  ( obj.get_glyph_alternates (hb_forward<Ts> (ds)...) )
+  template <typename T, typename ...Ts> auto
+  _dispatch (const T &obj, hb_priority<0>, Ts&&... ds) HB_AUTO_RETURN
+  ( default_return_value () )
+  public:
+  template <typename T, typename ...Ts> auto
+  dispatch (const T &obj, Ts&&... ds) HB_AUTO_RETURN
+  ( _dispatch (obj, hb_prioritize, hb_forward<Ts> (ds)...) )
+};
+
+/**
+ * hb_ot_layout_lookup_get_glyph_alternates:
+ * @face: a face.
+ * @lookup_index: index of the feature lookup to query.
+ * @glyph: a glyph id.
+ * @start_offset: starting offset.
+ * @alternate_count: (inout) (allow-none): Input = the maximum number of alternate glyphs to return;
+ *                   Output = the actual number of alternate glyphs returned (may be zero).
+ * @alternate_glyphs: (out caller-allocates) (array length=alternate_count): A glyphs buffer.
+ *                    Alternate glyphs associated with the glyph id.
+ *
+ * Fetches alternates of a glyph from a given GSUB lookup index.
+ *
+ * Return value: total number of alternates found in the specific lookup index for the given glyph id.
+ *
+ * Since: 2.6.8
+ **/
+HB_EXTERN unsigned
+hb_ot_layout_lookup_get_glyph_alternates (hb_face_t      *face,
+					  unsigned        lookup_index,
+					  hb_codepoint_t  glyph,
+					  unsigned        start_offset,
+					  unsigned       *alternate_count  /* IN/OUT.  May be NULL. */,
+					  hb_codepoint_t *alternate_glyphs /* OUT.     May be NULL. */)
+{
+  hb_get_glyph_alternates_dispatch_t c (face);
+  const OT::SubstLookup &lookup = face->table.GSUB->table->get_lookup (lookup_index);
+  auto ret = lookup.dispatch (&c, glyph, start_offset, alternate_count, alternate_glyphs);
+  if (!ret && alternate_count) *alternate_count = 0;
+  return ret;
+}
+
 #endif

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.h
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.h	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.h	2020-06-22 22:26:59 UTC (rev 55630)
@@ -262,21 +262,7 @@
 			      const hb_tag_t *features,
 			      hb_set_t       *lookup_indexes /* OUT */);
 
-#ifdef HB_EXPERIMENTAL_API
 HB_EXTERN void
-hb_ot_layout_closure_lookups (hb_face_t      *face,
-			      hb_tag_t        table_tag,
-			      const hb_set_t *glyphs,
-			      hb_set_t       *lookup_indexes /* IN/OUT */);
-
-HB_EXTERN void
-hb_ot_layout_closure_features (hb_face_t      *face,
-			       hb_tag_t        table_tag,
-			       const hb_map_t *lookup_indexes, /* IN */
-			       hb_set_t       *feature_indexes /* OUT */);
-#endif
-
-HB_EXTERN void
 hb_ot_layout_lookup_collect_glyphs (hb_face_t    *face,
 				    hb_tag_t      table_tag,
 				    unsigned int  lookup_index,
@@ -337,6 +323,14 @@
 HB_EXTERN hb_bool_t
 hb_ot_layout_has_substitution (hb_face_t *face);
 
+HB_EXTERN unsigned
+hb_ot_layout_lookup_get_glyph_alternates (hb_face_t      *face,
+					  unsigned        lookup_index,
+					  hb_codepoint_t  glyph,
+					  unsigned        start_offset,
+					  unsigned       *alternate_count /* IN/OUT */,
+					  hb_codepoint_t *alternate_glyphs /* OUT */);
+
 HB_EXTERN hb_bool_t
 hb_ot_layout_lookup_would_substitute (hb_face_t            *face,
 				      unsigned int          lookup_index,
@@ -463,7 +457,6 @@
 			   hb_tag_t                     language_tag,
 			   hb_position_t               *coord        /* OUT.  May be NULL. */);
 
-
 HB_END_DECLS
 
 #endif /* HB_OT_LAYOUT_H */

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-math-table.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-math-table.hh	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-math-table.hh	2020-06-22 22:26:59 UTC (rev 55630)
@@ -515,10 +515,9 @@
     if (parts_count)
     {
       int64_t mult = font->dir_mult (direction);
-      hb_array_t<const MathGlyphPartRecord> arr = partRecords.sub_array (start_offset, parts_count);
-      unsigned int count = arr.length;
-      for (unsigned int i = 0; i < count; i++)
-	arr[i].extract (parts[i], mult, font);
+      for (auto _ : hb_zip (partRecords.sub_array (start_offset, parts_count),
+			    hb_array (parts, *parts_count)))
+	_.first.extract (_.second, mult, font);
     }
 
     if (italics_correction)
@@ -563,13 +562,9 @@
     if (variants_count)
     {
       int64_t mult = font->dir_mult (direction);
-      hb_array_t<const MathGlyphVariantRecord> arr = mathGlyphVariantRecord.sub_array (start_offset, variants_count);
-      unsigned int count = arr.length;
-      for (unsigned int i = 0; i < count; i++)
-      {
-	variants[i].glyph = arr[i].variantGlyph;
-	variants[i].advance = font->em_mult (arr[i].advanceMeasurement, mult);
-      }
+      for (auto _ : hb_zip (mathGlyphVariantRecord.sub_array (start_offset, variants_count),
+			    hb_array (variants, *variants_count)))
+	_.second = {_.first.variantGlyph, font->em_mult (_.first.advanceMeasurement, mult)};
     }
     return mathGlyphVariantRecord.len;
   }

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-meta.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-meta.cc	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-meta.cc	2020-06-22 22:26:59 UTC (rev 55630)
@@ -38,7 +38,7 @@
  **/
 
 /**
- * hb_ot_meta_reference_entry:
+ * hb_ot_meta_get_entry_tags:
  * @face: a face object
  * @start_offset: iteration's start offset
  * @entries_count:(inout) (allow-none): buffer size as input, filled size as output

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic.cc	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic.cc	2020-06-22 22:26:59 UTC (rev 55630)
@@ -650,7 +650,7 @@
    * is *not* a Halant after last consonant already.  We know that is the
    * case for Kannada, while it reorders unconditionally in other scripts,
    * eg. Malayalam, Bengali, and Devanagari.  We don't currently know about
-   * other scripts, so we blacklist Kannada.
+   * other scripts, so we block Kannada.
    *
    * Kannada test case:
    * U+0C9A,U+0CCD,U+0C9A,U+0CCD
@@ -1333,6 +1333,7 @@
 	goto reph_move;
       }
     }
+    /* See https://github.com/harfbuzz/harfbuzz/issues/2298#issuecomment-615318654 */
 
     /*       6. Otherwise, reorder reph to the end of the syllable.
      */

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-stat-table.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-stat-table.hh	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-stat-table.hh	2020-06-22 22:26:59 UTC (rev 55630)
@@ -59,6 +59,9 @@
 
 struct AxisValueFormat1
 {
+  unsigned int get_axis_index () const { return axisIndex; }
+  float get_value ()             const { return value.to_float (); }
+
   hb_ot_name_id_t get_value_name_id () const { return valueNameID; }
 
   bool sanitize (hb_sanitize_context_t *c) const
@@ -84,6 +87,9 @@
 
 struct AxisValueFormat2
 {
+  unsigned int get_axis_index () const { return axisIndex; }
+  float get_value ()             const { return nominalValue.to_float (); }
+
   hb_ot_name_id_t get_value_name_id () const { return valueNameID; }
 
   bool sanitize (hb_sanitize_context_t *c) const
@@ -113,6 +119,9 @@
 
 struct AxisValueFormat3
 {
+  unsigned int get_axis_index () const { return axisIndex; }
+  float get_value ()             const { return value.to_float (); }
+
   hb_ot_name_id_t get_value_name_id () const { return valueNameID; }
 
   bool sanitize (hb_sanitize_context_t *c) const
@@ -140,6 +149,9 @@
 
 struct AxisValueRecord
 {
+  unsigned int get_axis_index () const { return axisIndex; }
+  float get_value ()             const { return value.to_float (); }
+
   bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
@@ -157,6 +169,9 @@
 
 struct AxisValueFormat4
 {
+  const AxisValueRecord &get_axis_record (unsigned int axis_index) const
+  { return axisValues.as_array (axisCount)[axis_index]; }
+
   hb_ot_name_id_t get_value_name_id () const { return valueNameID; }
 
   bool sanitize (hb_sanitize_context_t *c) const
@@ -183,6 +198,30 @@
 
 struct AxisValue
 {
+  bool get_value (unsigned int axis_index) const
+  {
+    switch (u.format)
+    {
+    case 1: return u.format1.get_value ();
+    case 2: return u.format2.get_value ();
+    case 3: return u.format3.get_value ();
+    case 4: return u.format4.get_axis_record (axis_index).get_value ();
+    default:return 0;
+    }
+  }
+
+  unsigned int get_axis_index () const
+  {
+    switch (u.format)
+    {
+    case 1: return u.format1.get_axis_index ();
+    case 2: return u.format2.get_axis_index ();
+    case 3: return u.format3.get_axis_index ();
+    /* case 4: Makes more sense for variable fonts which are handled by fvar in hb-style */
+    default:return -1;
+    }
+  }
+
   hb_ot_name_id_t get_value_name_id () const
   {
     switch (u.format)
@@ -226,6 +265,8 @@
 
 struct StatAxisRecord
 {
+  int cmp (hb_tag_t key) const { return tag.cmp (key); }
+
   hb_ot_name_id_t get_name_id () const { return nameID; }
 
   bool sanitize (hb_sanitize_context_t *c) const
@@ -251,6 +292,38 @@
 
   bool has_data () const { return version.to_int (); }
 
+  bool find_axis_index (hb_tag_t tag, unsigned int *axis_index) const
+  {
+    hb_array_t<const StatAxisRecord> axes = get_design_axes ();
+    /* TODO: add lfind in hb_array_t and use it in here and fvar's find_axis_info */
+    for (unsigned int i = 0; i < axes.length; i++)
+      if (!axes[i].cmp (tag))
+      {
+	*axis_index = i;
+	return true;
+      }
+    return false;
+  }
+
+  bool get_value (hb_tag_t tag, float *value) const
+  {
+    unsigned int axis_index;
+    if (!find_axis_index (tag, &axis_index)) return false;
+
+    hb_array_t<const OffsetTo<AxisValue>> axis_values = get_axis_value_offsets ();
+    for (unsigned int i = 0; i < axis_values.length; i++)
+    {
+      const AxisValue& axis_value = (this + axis_values[i]);
+      if (axis_value.get_axis_index () == axis_index)
+      {
+	if (value)
+	  *value = axis_value.get_value (axis_index);
+	return true;
+      }
+    }
+    return false;
+  }
+
   unsigned get_design_axis_count () const { return designAxisCount; }
 
   hb_ot_name_id_t get_axis_record_name_id (unsigned axis_record_index) const

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-fvar-table.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-fvar-table.hh	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-var-fvar-table.hh	2020-06-22 22:26:59 UTC (rev 55630)
@@ -75,6 +75,31 @@
     AXIS_FLAG_HIDDEN	= 0x0001,
   };
 
+#ifndef HB_DISABLE_DEPRECATED
+  void get_axis_deprecated (hb_ot_var_axis_t *info) const
+  {
+    info->tag = axisTag;
+    info->name_id = axisNameID;
+    info->default_value = defaultValue / 65536.f;
+    /* Ensure order, to simplify client math. */
+    info->min_value = hb_min (info->default_value, minValue / 65536.f);
+    info->max_value = hb_max (info->default_value, maxValue / 65536.f);
+  }
+#endif
+
+  void get_axis_info (unsigned axis_index, hb_ot_var_axis_info_t *info) const
+  {
+    info->axis_index = axis_index;
+    info->tag = axisTag;
+    info->name_id = axisNameID;
+    info->flags = (hb_ot_var_axis_flags_t) (unsigned int) flags;
+    info->default_value = defaultValue / 65536.f;
+    /* Ensure order, to simplify client math. */
+    info->min_value = hb_min (info->default_value, minValue / 65536.f);
+    info->max_value = hb_max (info->default_value, maxValue / 65536.f);
+    info->reserved = 0;
+  }
+
   bool sanitize (hb_sanitize_context_t *c) const
   {
     TRACE_SANITIZE (this);
@@ -115,35 +140,6 @@
   unsigned int get_axis_count () const { return axisCount; }
 
 #ifndef HB_DISABLE_DEPRECATED
-  void get_axis_deprecated (unsigned int axis_index,
-				   hb_ot_var_axis_t *info) const
-  {
-    const AxisRecord &axis = get_axes ()[axis_index];
-    info->tag = axis.axisTag;
-    info->name_id =  axis.axisNameID;
-    info->default_value = axis.defaultValue / 65536.f;
-    /* Ensure order, to simplify client math. */
-    info->min_value = hb_min (info->default_value, axis.minValue / 65536.f);
-    info->max_value = hb_max (info->default_value, axis.maxValue / 65536.f);
-  }
-#endif
-
-  void get_axis_info (unsigned int axis_index,
-		      hb_ot_var_axis_info_t *info) const
-  {
-    const AxisRecord &axis = get_axes ()[axis_index];
-    info->axis_index = axis_index;
-    info->tag = axis.axisTag;
-    info->name_id =  axis.axisNameID;
-    info->flags = (hb_ot_var_axis_flags_t) (unsigned int) axis.flags;
-    info->default_value = axis.defaultValue / 65536.f;
-    /* Ensure order, to simplify client math. */
-    info->min_value = hb_min (info->default_value, axis.minValue / 65536.f);
-    info->max_value = hb_max (info->default_value, axis.maxValue / 65536.f);
-    info->reserved = 0;
-  }
-
-#ifndef HB_DISABLE_DEPRECATED
   unsigned int get_axes_deprecated (unsigned int      start_offset,
 				    unsigned int     *axes_count /* IN/OUT */,
 				    hb_ot_var_axis_t *axes_array /* OUT */) const
@@ -150,9 +146,9 @@
   {
     if (axes_count)
     {
-      hb_array_t<const AxisRecord> arr = hb_array (&(this+firstAxis), axisCount).sub_array (start_offset, axes_count);
+      hb_array_t<const AxisRecord> arr = get_axes ().sub_array (start_offset, axes_count);
       for (unsigned i = 0; i < arr.length; ++i)
-	get_axis_deprecated (start_offset + i, axes_array + i);
+	arr[i].get_axis_deprecated (&axes_array[i]);
     }
     return axisCount;
   }
@@ -164,26 +160,24 @@
   {
     if (axes_count)
     {
-      hb_array_t<const AxisRecord> arr = hb_array (&(this+firstAxis), axisCount).sub_array (start_offset, axes_count);
+      hb_array_t<const AxisRecord> arr = get_axes ().sub_array (start_offset, axes_count);
       for (unsigned i = 0; i < arr.length; ++i)
-	get_axis_info (start_offset + i, axes_array + i);
+	arr[i].get_axis_info (start_offset + i, &axes_array[i]);
     }
     return axisCount;
   }
 
 #ifndef HB_DISABLE_DEPRECATED
-  bool find_axis_deprecated (hb_tag_t tag,
-			     unsigned int *axis_index,
-			     hb_ot_var_axis_t *info) const
+  bool
+  find_axis_deprecated (hb_tag_t tag, unsigned *axis_index, hb_ot_var_axis_t *info) const
   {
-    const AxisRecord *axes = get_axes ();
-    unsigned int count = get_axis_count ();
-    for (unsigned int i = 0; i < count; i++)
+    hb_array_t<const AxisRecord> axes = get_axes ();
+    for (unsigned i = 0; i < axes.length; i++)
       if (axes[i].axisTag == tag)
       {
 	if (axis_index)
 	  *axis_index = i;
-	get_axis_deprecated (i, info);
+	axes[i].get_axis_deprecated (info);
 	return true;
       }
     if (axis_index)
@@ -192,15 +186,14 @@
   }
 #endif
 
-  bool find_axis_info (hb_tag_t tag,
-		       hb_ot_var_axis_info_t *info) const
+  bool
+  find_axis_info (hb_tag_t tag, hb_ot_var_axis_info_t *info) const
   {
-    const AxisRecord *axes = get_axes ();
-    unsigned int count = get_axis_count ();
-    for (unsigned int i = 0; i < count; i++)
+    hb_array_t<const AxisRecord> axes = get_axes ();
+    for (unsigned i = 0; i < axes.length; i++)
       if (axes[i].axisTag == tag)
       {
-	get_axis_info (i, info);
+	axes[i].get_axis_info (i, info);
 	return true;
       }
     return false;
@@ -209,7 +202,7 @@
   int normalize_axis_value (unsigned int axis_index, float v) const
   {
     hb_ot_var_axis_info_t axis;
-    get_axis_info (axis_index, &axis);
+    get_axes ()[axis_index].get_axis_info (axis_index, &axis);
 
     v = hb_clamp (v, axis.min_value, axis.max_value);
 
@@ -225,7 +218,7 @@
   float unnormalize_axis_value (unsigned int axis_index, float v) const
   {
     hb_ot_var_axis_info_t axis;
-    get_axis_info (axis_index, &axis);
+    get_axes ()[axis_index].get_axis_info (axis_index, &axis);
 
     if (v == 0)
       return axis.default_value;

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-sanitize.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-sanitize.hh	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-sanitize.hh	2020-06-22 22:26:59 UTC (rev 55630)
@@ -121,7 +121,6 @@
        hb_dispatch_context_t<hb_sanitize_context_t, bool, HB_DEBUG_SANITIZE>
 {
   hb_sanitize_context_t () :
-	debug_depth (0),
 	start (nullptr), end (nullptr),
 	max_ops (0), max_subtables (0),
 	writable (false), edit_count (0),
@@ -387,7 +386,6 @@
     return sanitize_blob<Type> (hb_face_reference_table (face, tableTag));
   }
 
-  mutable unsigned int debug_depth;
   const char *start, *end;
   mutable int max_ops, max_subtables;
   private:

Added: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-style.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-style.cc	                        (rev 0)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-style.cc	2020-06-22 22:26:59 UTC (rev 55630)
@@ -0,0 +1,149 @@
+/*
+ * Copyright © 2019  Ebrahim Byagowi
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ */
+
+#include "hb.hh"
+
+#ifndef HB_NO_STYLE
+#ifdef HB_EXPERIMENTAL_API
+
+#include "hb-aat-fdsc-table.hh"
+#include "hb-ot-var-avar-table.hh"
+#include "hb-ot-var-fvar-table.hh"
+#include "hb-ot-stat-table.hh"
+#include "hb-ot-os2-table.hh"
+#include "hb-ot-head-table.hh"
+#include "hb-ot-post-table.hh"
+#include "hb-ot-face.hh"
+
+/**
+ * hb_style_tag_t:
+ * @HB_STYLE_TAG_ITALIC: Used to vary between non-italic and italic.
+ * A value of 0 can be interpreted as "Roman" (non-italic); a value of 1 can
+ * be interpreted as (fully) italic.
+ * @HB_STYLE_TAG_OPTICAL_SIZE: Used to vary design to suit different text sizes.
+ * Non-zero. Values can be interpreted as text size, in points.
+ * @HB_STYLE_TAG_SLANT: Used to vary between upright and slanted text. Values
+ * must be greater than -90 and less than +90. Values can be interpreted as
+ * the angle, in counter-clockwise degrees, of oblique slant from whatever the
+ * designer considers to be upright for that font design.
+ * @HB_STYLE_TAG_WIDTH: Used to vary width of text from narrower to wider.
+ * Non-zero. Values can be interpreted as a percentage of whatever the font
+ * designer considers “normal width” for that font design.
+ * @HB_STYLE_TAG_WEIGHT: Used to vary stroke thicknesses or other design details
+ * to give variation from lighter to blacker. Values can be interpreted in direct
+ * comparison to values for usWeightClass in the OS/2 table,
+ * or the CSS font-weight property.
+ *
+ * Defined by https://docs.microsoft.com/en-us/typography/opentype/spec/dvaraxisreg
+ *
+ * Since: EXPERIMENTAL
+ **/
+typedef enum {
+  HB_STYLE_TAG_ITALIC		= HB_TAG ('i','t','a','l'),
+  HB_STYLE_TAG_OPTICAL_SIZE	= HB_TAG ('o','p','s','z'),
+  HB_STYLE_TAG_SLANT		= HB_TAG ('s','l','n','t'),
+  HB_STYLE_TAG_WIDTH		= HB_TAG ('w','d','t','h'),
+  HB_STYLE_TAG_WEIGHT		= HB_TAG ('w','g','h','t'),
+
+  _HB_STYLE_TAG_MAX_VALUE	= HB_TAG_MAX_SIGNED /*< skip >*/
+} hb_style_tag_t;
+
+/**
+ * hb_style_get_value:
+ * @font: a #hb_font_t object.
+ * @style_tag: a style tag.
+ *
+ * Searches variation axes of a hb_font_t object for a specific axis first,
+ * if not set, then tries to get default style values from different
+ * tables of the font.
+ *
+ * Returns: Corresponding axis or default value to a style tag.
+ *
+ * Since: EXPERIMENTAL
+ **/
+float
+hb_style_get_value (hb_font_t *font, hb_tag_t tag)
+{
+  hb_style_tag_t style_tag = (hb_style_tag_t) tag;
+  hb_face_t *face = font->face;
+
+#ifndef HB_NO_VAR
+  hb_ot_var_axis_info_t axis;
+  if (hb_ot_var_find_axis_info (face, style_tag, &axis))
+  {
+    if (axis.axis_index < font->num_coords) return font->design_coords[axis.axis_index];
+    /* If a face is variable, fvar's default_value is better than STAT records */
+    return axis.default_value;
+  }
+#endif
+
+  if (style_tag == HB_STYLE_TAG_OPTICAL_SIZE && font->ptem)
+    return font->ptem;
+
+  /* STAT */
+  float value;
+  if (face->table.STAT->get_value (style_tag, &value))
+    return value;
+
+  /* Check Apple's fdsc as OS2 table is optional in AAT */
+  const AAT::FontDescriptor &descriptor = face->table.fdsc->get_descriptor (style_tag);
+  if (descriptor.has_data ())
+  {
+    float value = descriptor.get_value ();
+    /* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6fdsc.html */
+    /* Percent weight relative to regular weight. */
+    if (style_tag == HB_STYLE_TAG_WEIGHT) value *= 400.f;
+    /* Percent width relative to regular width. */
+    if (style_tag == HB_STYLE_TAG_WIDTH) value *= 100.f;
+    return value;
+  }
+
+  switch ((unsigned) style_tag)
+  {
+  case HB_STYLE_TAG_ITALIC:
+    return face->table.OS2->is_italic () || face->table.head->is_italic () ? 1 : 0;
+  case HB_STYLE_TAG_OPTICAL_SIZE:
+  {
+    unsigned int lower, upper;
+    return face->table.OS2->v5 ().get_optical_size (&lower, &upper)
+	   ? (float) (lower + upper) / 2.f
+	   : 12.f;
+  }
+  case HB_STYLE_TAG_SLANT:
+    return face->table.post->table->italicAngle.to_float ();
+  case HB_STYLE_TAG_WIDTH:
+    return face->table.OS2->has_data ()
+	   ? face->table.OS2->get_width ()
+	   : (face->table.head->is_condensed () ? 75 : 100);
+  case HB_STYLE_TAG_WEIGHT:
+    return face->table.OS2->has_data ()
+	   ? face->table.OS2->usWeightClass
+	   : (face->table.head->is_bold () ? 700 : 400);
+  default:
+    return 0;
+  }
+}
+
+#endif
+#endif

Added: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-style.h
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-style.h	                        (rev 0)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-style.h	2020-06-22 22:26:59 UTC (rev 55630)
@@ -0,0 +1,43 @@
+/*
+ * Copyright © 2019  Ebrahim Byagowi
+ *
+ *  This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ */
+
+#ifndef HB_H_IN
+#error "Include <hb.h> instead."
+#endif
+
+#ifndef HB_STYLE_H
+#define HB_STYLE_H
+
+#include "hb.h"
+
+HB_BEGIN_DECLS
+
+#ifdef HB_EXPERIMENTAL_API
+HB_EXTERN float
+hb_style_get_value (hb_font_t *font, hb_tag_t style_tag);
+#endif
+
+HB_END_DECLS
+
+#endif /* HB_STYLE_H */


Property changes on: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-style.h
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-plan.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-plan.cc	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-plan.cc	2020-06-22 22:26:59 UTC (rev 55630)
@@ -32,6 +32,7 @@
 #include "hb-ot-glyf-table.hh"
 #include "hb-ot-layout-gdef-table.hh"
 #include "hb-ot-layout-gpos-table.hh"
+#include "hb-ot-layout-gsub-table.hh"
 #include "hb-ot-cff1-table.hh"
 #include "hb-ot-color-colr-table.hh"
 #include "hb-ot-var-fvar-table.hh"
@@ -54,7 +55,6 @@
 #endif
 
 #ifndef HB_NO_SUBSET_LAYOUT
-#ifdef HB_EXPERIMENTAL_API
 static void
 _remap_indexes (const hb_set_t *indexes,
 		hb_map_t       *mapping /* OUT */)
@@ -65,7 +65,6 @@
     mapping->set (_.first, _.second);
 
 }
-#endif
 
 static inline void
 _gsub_closure_glyphs_lookups_features (hb_face_t *face,
@@ -83,21 +82,17 @@
   hb_ot_layout_lookups_substitute_closure (face,
 					   &lookup_indices,
 					   gids_to_retain);
-#ifdef HB_EXPERIMENTAL_API
-  hb_ot_layout_closure_lookups (face,
-				HB_OT_TAG_GSUB,
-				gids_to_retain,
-				&lookup_indices);
+  hb_blob_ptr_t<OT::GSUB> gsub = hb_sanitize_context_t ().reference_table<OT::GSUB> (face);
+  gsub->closure_lookups (face,
+			 gids_to_retain,
+			 &lookup_indices);
   _remap_indexes (&lookup_indices, gsub_lookups);
 
   //closure features
   hb_set_t feature_indices;
-  hb_ot_layout_closure_features (face,
-				 HB_OT_TAG_GSUB,
-				 gsub_lookups,
-				 &feature_indices);
+  gsub->closure_features (gsub_lookups, &feature_indices);
   _remap_indexes (&feature_indices, gsub_features);
-#endif
+  gsub.destroy ();
 }
 
 static inline void
@@ -113,21 +108,17 @@
 				nullptr,
 				nullptr,
 				&lookup_indices);
-#ifdef HB_EXPERIMENTAL_API
-  hb_ot_layout_closure_lookups (face,
-				HB_OT_TAG_GPOS,
-				gids_to_retain,
-				&lookup_indices);
+  hb_blob_ptr_t<OT::GPOS> gpos = hb_sanitize_context_t ().reference_table<OT::GPOS> (face);
+  gpos->closure_lookups (face,
+			 gids_to_retain,
+			 &lookup_indices);
   _remap_indexes (&lookup_indices, gpos_lookups);
 
   //closure features
   hb_set_t feature_indices;
-  hb_ot_layout_closure_features (face,
-				 HB_OT_TAG_GPOS,
-				 gpos_lookups,
-				 &feature_indices);
+  gpos->closure_features (gpos_lookups, &feature_indices);
   _remap_indexes (&feature_indices, gpos_features);
-#endif
+  gpos.destroy ();
 }
 #endif
 
@@ -301,7 +292,7 @@
 _nameid_closure (hb_face_t *face,
 		 hb_set_t  *nameids)
 {
-#ifndef HB_NO_STAT
+#ifndef HB_NO_STYLE
   face->table.STAT->collect_name_ids (nameids);
 #endif
 #ifndef HB_NO_VAR

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.hh	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.hh	2020-06-22 22:26:59 UTC (rev 55630)
@@ -58,7 +58,6 @@
   hb_subset_plan_t *plan;
   hb_serialize_context_t *serializer;
   hb_tag_t table_tag;
-  unsigned int debug_depth;
 
   hb_subset_context_t (hb_blob_t *source_blob_,
 		       hb_subset_plan_t *plan_,
@@ -67,8 +66,7 @@
 		        source_blob (source_blob_),
 			plan (plan_),
 			serializer (serializer_),
-			table_tag (table_tag_),
-			debug_depth (0) {}
+			table_tag (table_tag_) {}
 };
 
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb.h
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb.h	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb.h	2020-06-22 22:26:59 UTC (rev 55630)
@@ -39,6 +39,7 @@
 #include "hb-set.h"
 #include "hb-shape.h"
 #include "hb-shape-plan.h"
+#include "hb-style.h"
 #include "hb-unicode.h"
 #include "hb-version.h"
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/meson.build
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/meson.build	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/meson.build	2020-06-22 22:26:59 UTC (rev 55630)
@@ -19,6 +19,7 @@
   'hb-algs.hh',
   'hb-array.hh',
   'hb-atomic.hh',
+  'hb-bimap.hh',
   'hb-blob.cc',
   'hb-blob.hh',
   'hb-buffer-serialize.cc',
@@ -46,7 +47,6 @@
   'hb-machinery.hh',
   'hb-map.cc',
   'hb-map.hh',
-  'hb-bimap.hh',
   'hb-meta.hh',
   'hb-mutex.hh',
   'hb-null.hh',
@@ -56,9 +56,9 @@
   'hb-open-file.hh',
   'hb-open-type.hh',
   'hb-ot-cff-common.hh',
+  'hb-ot-cff1-std-str.hh',
   'hb-ot-cff1-table.cc',
   'hb-ot-cff1-table.hh',
-  'hb-ot-cff1-std-str.hh',
   'hb-ot-cff2-table.cc',
   'hb-ot-cff2-table.hh',
   'hb-ot-cmap-table.hh',
@@ -68,9 +68,9 @@
   'hb-ot-color-sbix-table.hh',
   'hb-ot-color-svg-table.hh',
   'hb-ot-color.cc',
+  'hb-ot-face-table-list.hh',
   'hb-ot-face.cc',
   'hb-ot-face.hh',
-  'hb-ot-face-table-list.hh',
   'hb-ot-font.cc',
   'hb-ot-gasp-table.hh',
   'hb-ot-glyf-table.hh',
@@ -158,6 +158,7 @@
   'hb-shaper.hh',
   'hb-static.cc',
   'hb-string-array.hh',
+  'hb-style.cc',
   'hb-ucd-table.hh',
   'hb-ucd.cc',
   'hb-unicode-emoji-table.hh',
@@ -212,6 +213,7 @@
   'hb-set.h',
   'hb-shape-plan.h',
   'hb-shape.h',
+  'hb-style.h',
   'hb-unicode.h',
   'hb-version.h',
   'hb.h',
@@ -285,7 +287,7 @@
   input: 'hb-version.h.in',
   output: 'hb-version.h',
   command: [find_program('gen-hb-version.py'), meson.project_version(),
-            '@INPUT@', meson.current_source_dir() / 'hb-version.h'])
+            'hb-version.h.in', 'hb-version.h'])
 
 ragel = find_program('ragel', required: false)
 if not ragel.found()
@@ -301,8 +303,7 @@
 custom_target('harfbuzz.cc',
   build_by_default: true,
   output: 'harfbuzz.cc',
-  command: [find_program('gen-harfbuzzcc.py'),
-            meson.source_root() / '@OUTPUT@'] +
+  command: [find_program('gen-harfbuzzcc.py'), 'harfbuzz.cc'] +
             hb_base_sources + hb_glib_sources + hb_ft_sources +
             hb_graphite2_sources + hb_uniscribe_sources + hb_gdi_sources +
             hb_directwrite_sources + hb_coretext_sources)
@@ -312,24 +313,30 @@
 hb_sources = hb_base_sources + hb_base_ragel_generated_sources
 hb_headers = hb_base_headers
 
+harfbuzz_deps = [thread_dep, m_dep] + harfbuzz_extra_deps
+
 if conf.get('HAVE_FREETYPE', 0) == 1
   hb_sources += hb_ft_sources
   hb_headers += hb_ft_headers
+  harfbuzz_deps += [freetype_dep]
 endif
 
 if conf.get('HAVE_GDI', 0) == 1
   hb_sources += hb_gdi_sources
   hb_headers += hb_gdi_headers
+  harfbuzz_deps += gdi_uniscribe_deps
 endif
 
 if conf.get('HAVE_GRAPHITE2', 0) == 1
   hb_sources += hb_graphite2_sources
   hb_headers += hb_graphite2_headers
+  harfbuzz_deps += [graphite2_dep]
 endif
 
 if conf.get('HAVE_GLIB', 0) == 1
   hb_sources += hb_glib_sources
   hb_headers += hb_glib_headers
+  harfbuzz_deps += [glib_dep]
 endif
 
 if conf.get('HAVE_UNISCRIBE', 0) == 1
@@ -340,18 +347,15 @@
 if conf.get('HAVE_DIRECTWRITE', 0) == 1
   hb_sources += hb_directwrite_sources
   hb_headers += hb_directwrite_headers
+  harfbuzz_deps += directwrite_dep
 endif
 
 if conf.get('HAVE_CORETEXT', 0) == 1
   hb_sources += hb_coretext_sources
   hb_headers += hb_coretext_headers
+  harfbuzz_deps += coretext_deps
 endif
 
-if get_option('amalgam')
-  # replace the array if is amalgam build
-  hb_sources = ['harfbuzz.cc']
-endif
-
 have_icu = conf.get('HAVE_ICU', 0) == 1
 have_icu_builtin = conf.get('HAVE_ICU_BUILTIN', 0) == 1
 
@@ -358,16 +362,9 @@
 if have_icu and have_icu_builtin
   hb_sources += hb_icu_sources
   hb_headers += hb_icu_headers
-  deps += [icu_dep]
+  harfbuzz_deps += [icu_dep]
 endif
 
-if not get_option('with_libstdcxx')
-  chosen_linker = 'cpp'
-else
-  # Use a C linker, not C++; Don't link to libstdc++
-  chosen_linker = 'c'
-endif
-
 # harfbuzz
 gen_def = find_program('gen-def.py')
 
@@ -386,7 +383,7 @@
 
 extra_hb_cpp_args = []
 if cpp.get_id() == 'msvc'
-  if get_option('default_library') == 'shared'
+  if get_option('default_library') != 'static'
     extra_hb_cpp_args += '-DHB_DLL_EXPORT'
   endif
   hb_so_version = ''
@@ -396,18 +393,18 @@
 
 libharfbuzz = library('harfbuzz', hb_sources,
   include_directories: incconfig,
-  dependencies: deps,
+  dependencies: harfbuzz_deps,
   cpp_args: cpp_args + extra_hb_cpp_args,
   soversion: hb_so_version,
   version: version,
   install: true,
-  link_language: chosen_linker,
+  link_language: 'c',
 )
 
 libharfbuzz_dep = declare_dependency(
   link_with: libharfbuzz,
   include_directories: incsrc,
-  dependencies: deps)
+  dependencies: harfbuzz_deps)
 
 # harfbuzz-subset
 harfbuzz_subset_def = custom_target('harfbuzz-subset.def',
@@ -418,19 +415,19 @@
 
 libharfbuzz_subset = library('harfbuzz-subset', hb_subset_sources,
   include_directories: incconfig,
-  dependencies: deps,
+  dependencies: [m_dep],
   link_with: [libharfbuzz],
   cpp_args: cpp_args + extra_hb_cpp_args,
   soversion: hb_so_version,
   version: version,
   install: true,
-  link_language: chosen_linker,
+  link_language: 'c',
 )
 
 libharfbuzz_subset_dep = declare_dependency(
   link_with: libharfbuzz_subset,
   include_directories: incsrc,
-  dependencies: deps)
+  dependencies: [m_dep])
 
 if get_option('tests').enabled()
   # TODO: MSVC gives the following,
@@ -524,13 +521,13 @@
     version: version,
     install: true,
     # ICU links to stdc++ anyway so the default linker is good
-    # link_language: chosen_linker,
+    # link_language: 'c',
   )
 
   libharfbuzz_icu_dep = declare_dependency(
     link_with: libharfbuzz_icu,
     include_directories: incsrc,
-    dependencies: deps)
+    dependencies: icu_dep)
 
   pkgmod.generate(libharfbuzz_icu,
     description: 'HarfBuzz text shaping library ICU integration',
@@ -602,13 +599,13 @@
 
   libharfbuzz_gobject = library('harfbuzz-gobject', [hb_gobject_sources, enum_c, enum_h],
     include_directories: incconfig,
-    dependencies: deps,
+    dependencies: [glib_dep, gobject_dep],
     link_with: [libharfbuzz],
     cpp_args: cpp_args + extra_hb_cpp_args,
     soversion: hb_so_version,
     version: version,
     install: true,
-    link_language: chosen_linker,
+    link_language: 'c',
   )
 
   gir = find_program('g-ir-scanner', required: get_option('introspection'))
@@ -643,7 +640,7 @@
     link_with: libharfbuzz_gobject,
     include_directories: incsrc,
     sources: build_gir ? hb_gen_files_gir : hb_gobject_sources,
-    dependencies: deps)
+    dependencies: [glib_dep, gobject_dep])
 
   pkgmod.generate(libharfbuzz_gobject,
     description: 'HarfBuzz text shaping library GObject integration',
@@ -672,17 +669,11 @@
   env.set('srcdir', meson.current_source_dir())
   env.set('builddir', meson.current_build_dir())
   env.set('libs', meson.current_build_dir()) # TODO: Merge this with builddir after autotools removal
-  if not get_option('amalgam')
-    env.set('HBSOURCES', ' '.join(hb_sources))
-  endif
+  env.set('HBSOURCES', ' '.join(hb_sources))
   env.set('HBHEADERS', ' '.join(hb_headers))
 
   if cpp.get_id() != 'msvc' and not meson.is_cross_build() # ensure the local tools are usable
-    # See https://github.com/mesonbuild/meson/pull/6838
-    if meson.version().version_compare('>=0.54.999') and not get_option('with_libstdcxx')
-      dist_check_script += 'check-libstdc++'
-    endif
-    dist_check_script += ['check-static-inits', 'check-symbols']
+    dist_check_script += ['check-libstdc++', 'check-static-inits', 'check-symbols']
   endif
 
   foreach name : dist_check_script
@@ -689,7 +680,7 @@
     test(name, find_program(name + '.py'),
       env: env,
       depends: name == 'check-symbols' ? defs_list : [],
-      suite: ['src'],
+      suite: ['src'] + (name == 'check-static-inits' ? ['slow'] : []),
     )
   endforeach
 endif

Added: trunk/Build/source/libs/harfbuzz/harfbuzz-src/write-tarball-revision.py
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/write-tarball-revision.py	                        (rev 0)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/write-tarball-revision.py	2020-06-22 22:26:59 UTC (rev 55630)
@@ -0,0 +1,13 @@
+#!/usr/bin/env python3
+
+import os, subprocess
+from pathlib import Path
+
+outfile = Path(
+    os.getenv('MESON_DIST_ROOT')
+    or os.getenv('MESON_SOURCE_ROOT')
+    or Path(__file__).parent
+) / '.tarball-revision'
+
+with open(outfile, 'wb') as f:
+	f.write(subprocess.check_output(['git', 'log', '--no-color', '--no-decorate', 'HEAD~..HEAD']))

Modified: trunk/Build/source/libs/harfbuzz/include/Makefile.am
===================================================================
--- trunk/Build/source/libs/harfbuzz/include/Makefile.am	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/include/Makefile.am	2020-06-22 22:26:59 UTC (rev 55630)
@@ -28,6 +28,7 @@
 	$(HARFBUZZ_SRC)/hb-set.h \
 	$(HARFBUZZ_SRC)/hb-shape.h \
 	$(HARFBUZZ_SRC)/hb-shape-plan.h \
+	$(HARFBUZZ_SRC)/hb-style.h \
 	$(HARFBUZZ_SRC)/hb-unicode.h \
 	$(HARFBUZZ_BLD)/hb-version.h
 

Modified: trunk/Build/source/libs/harfbuzz/include/Makefile.in
===================================================================
--- trunk/Build/source/libs/harfbuzz/include/Makefile.in	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/include/Makefile.in	2020-06-22 22:26:59 UTC (rev 55630)
@@ -252,13 +252,14 @@
 	$(HARFBUZZ_SRC)/hb-face.h $(HARFBUZZ_SRC)/hb-font.h \
 	$(HARFBUZZ_SRC)/hb-map.h $(HARFBUZZ_SRC)/hb-ot-deprecated.h \
 	$(HARFBUZZ_SRC)/hb-set.h $(HARFBUZZ_SRC)/hb-shape.h \
-	$(HARFBUZZ_SRC)/hb-shape-plan.h $(HARFBUZZ_SRC)/hb-unicode.h \
-	$(HARFBUZZ_BLD)/hb-version.h $(HARFBUZZ_SRC)/hb-ot.h \
-	$(HARFBUZZ_SRC)/hb-ot-color.h $(HARFBUZZ_SRC)/hb-ot-font.h \
-	$(HARFBUZZ_SRC)/hb-ot-layout.h $(HARFBUZZ_SRC)/hb-ot-math.h \
-	$(HARFBUZZ_SRC)/hb-ot-meta.h $(HARFBUZZ_SRC)/hb-ot-metrics.h \
-	$(HARFBUZZ_SRC)/hb-ot-name.h $(HARFBUZZ_SRC)/hb-ot-shape.h \
-	$(HARFBUZZ_SRC)/hb-ot-var.h $(HARFBUZZ_SRC)/hb-graphite2.h
+	$(HARFBUZZ_SRC)/hb-shape-plan.h $(HARFBUZZ_SRC)/hb-style.h \
+	$(HARFBUZZ_SRC)/hb-unicode.h $(HARFBUZZ_BLD)/hb-version.h \
+	$(HARFBUZZ_SRC)/hb-ot.h $(HARFBUZZ_SRC)/hb-ot-color.h \
+	$(HARFBUZZ_SRC)/hb-ot-font.h $(HARFBUZZ_SRC)/hb-ot-layout.h \
+	$(HARFBUZZ_SRC)/hb-ot-math.h $(HARFBUZZ_SRC)/hb-ot-meta.h \
+	$(HARFBUZZ_SRC)/hb-ot-metrics.h $(HARFBUZZ_SRC)/hb-ot-name.h \
+	$(HARFBUZZ_SRC)/hb-ot-shape.h $(HARFBUZZ_SRC)/hb-ot-var.h \
+	$(HARFBUZZ_SRC)/hb-graphite2.h
 all: all-am
 
 .SUFFIXES:

Modified: trunk/Build/source/libs/harfbuzz/version.ac
===================================================================
--- trunk/Build/source/libs/harfbuzz/version.ac	2020-06-22 22:11:50 UTC (rev 55629)
+++ trunk/Build/source/libs/harfbuzz/version.ac	2020-06-22 22:26:59 UTC (rev 55630)
@@ -8,4 +8,4 @@
 dnl --------------------------------------------------------
 dnl
 dnl  m4-include this file to define the current harfbuzz version
-m4_define([harfbuzz_version], [2.6.7])
+m4_define([harfbuzz_version], [2.6.8])



More information about the tex-live-commits mailing list.