texlive[45535] Build/source/libs: harfbuzz-1.6.0

commits+kakuto at tug.org commits+kakuto at tug.org
Sat Oct 14 00:53:19 CEST 2017


Revision: 45535
          http://tug.org/svn/texlive?view=revision&revision=45535
Author:   kakuto
Date:     2017-10-14 00:53:19 +0200 (Sat, 14 Oct 2017)
Log Message:
-----------
harfbuzz-1.6.0

Modified Paths:
--------------
    trunk/Build/source/libs/README
    trunk/Build/source/libs/harfbuzz/ChangeLog
    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/BUILD.md
    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/config.h.in
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/gtk-doc.make
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.am
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-use-table.py
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz.pc.in
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.h
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.h
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.h
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face-private.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.h
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font-private.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.h
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.h
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-glib.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-graphite2.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file-private.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-font.cc
    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-gsubgpos-private.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-private.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-arabic-table.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-arabic.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-default.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-hangul.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-hebrew.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-machine.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-machine.rl
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-private.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-table.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-shape-complex-myanmar-machine.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.rl
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-private.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-thai.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-tibetan.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.rl
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-private.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-table.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-normalize.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-tag.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape-plan.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shaper-private.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ucdn.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-unicode-private.hh
    trunk/Build/source/libs/harfbuzz/version.ac

Added Paths:
-----------
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/RELEASING.md
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/check-externs.sh

Modified: trunk/Build/source/libs/README
===================================================================
--- trunk/Build/source/libs/README	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/README	2017-10-13 22:53:19 UTC (rev 45535)
@@ -24,7 +24,7 @@
 graphite2 1.3.10 - checked 20jun17
   http://sourceforge.net/projects/silgraphite/files/graphite2/
 
-harfbuzz 1.5.1 - checked 06Sep17
+harfbuzz 1.6.0 - checked 13oct17
   http://www.freedesktop.org/software/harfbuzz/release/
 
 icu 58.2 - checked 13mar17

Modified: trunk/Build/source/libs/harfbuzz/ChangeLog
===================================================================
--- trunk/Build/source/libs/harfbuzz/ChangeLog	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/ChangeLog	2017-10-13 22:53:19 UTC (rev 45535)
@@ -1,3 +1,8 @@
+2017-10-13  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
+
+	Import harfbuzz-1.6.0.
+	* version.ac: Adjusted.
+
 2017-09-06  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
 
 	Import harfbuzz-1.5.1.

Modified: trunk/Build/source/libs/harfbuzz/TLpatches/ChangeLog
===================================================================
--- trunk/Build/source/libs/harfbuzz/TLpatches/ChangeLog	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/TLpatches/ChangeLog	2017-10-13 22:53:19 UTC (rev 45535)
@@ -1,3 +1,8 @@
+2017-10-13  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
+
+	Imported harfbuzz-1.6.0 source tree from:
+	  http://www.freedesktop.org/software/harfbuzz/release/
+
 2017-09-06  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
 
 	Imported harfbuzz-1.5.1 source tree from:

Modified: trunk/Build/source/libs/harfbuzz/TLpatches/TL-Changes
===================================================================
--- trunk/Build/source/libs/harfbuzz/TLpatches/TL-Changes	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/TLpatches/TL-Changes	2017-10-13 22:53:19 UTC (rev 45535)
@@ -1,4 +1,4 @@
-Changes applied to the harfbuzz-1.5.1/ tree as obtained from:
+Changes applied to the harfbuzz-1.6.0/ tree as obtained from:
 	http://www.freedesktop.org/software/harfbuzz/release/
 
 Removed:
@@ -24,5 +24,5 @@
 	m4
 	test
 	util
-	win32
+	win32 -- deleted upstream
 	src/hb-ucdn

Modified: trunk/Build/source/libs/harfbuzz/configure
===================================================================
--- trunk/Build/source/libs/harfbuzz/configure	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/configure	2017-10-13 22:53:19 UTC (rev 45535)
@@ -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) 1.5.1.
+# Generated by GNU Autoconf 2.69 for harfbuzz (TeX Live) 1.6.0.
 #
 # 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='1.5.1'
-PACKAGE_STRING='harfbuzz (TeX Live) 1.5.1'
+PACKAGE_VERSION='1.6.0'
+PACKAGE_STRING='harfbuzz (TeX Live) 1.6.0'
 PACKAGE_BUGREPORT='tex-k at tug.org'
 PACKAGE_URL=''
 
@@ -1312,7 +1312,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) 1.5.1 to adapt to many kinds of systems.
+\`configure' configures harfbuzz (TeX Live) 1.6.0 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1383,7 +1383,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of harfbuzz (TeX Live) 1.5.1:";;
+     short | recursive ) echo "Configuration of harfbuzz (TeX Live) 1.6.0:";;
    esac
   cat <<\_ACEOF
 
@@ -1490,7 +1490,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-harfbuzz (TeX Live) configure 1.5.1
+harfbuzz (TeX Live) configure 1.6.0
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2080,7 +2080,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 1.5.1, which was
+It was created by harfbuzz (TeX Live) $as_me 1.6.0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -4003,7 +4003,7 @@
 
 # Define the identity of the package.
  PACKAGE='harfbuzz--tex-live-'
- VERSION='1.5.1'
+ VERSION='1.6.0'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -4205,9 +4205,9 @@
 
 
 HB_VERSION_MAJOR=1
-HB_VERSION_MINOR=5
-HB_VERSION_MICRO=1
-HB_VERSION=1.5.1
+HB_VERSION_MINOR=6
+HB_VERSION_MICRO=0
+HB_VERSION=1.6.0
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -6866,7 +6866,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 1.5.1, which was
+This file was extended by harfbuzz (TeX Live) $as_me 1.6.0, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -6932,7 +6932,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 1.5.1
+harfbuzz (TeX Live) config.status 1.6.0
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/BUILD.md
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/BUILD.md	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/BUILD.md	2017-10-13 22:53:19 UTC (rev 45535)
@@ -5,7 +5,13 @@
 whereas on Fedora, RHEL, CentOS, and other Red Hat based systems you would do:
 * sudo yum install gcc gcc-c++ freetype-devel glib2-devel cairo-devel
 
-on the Mac, using MacPorts:
+on Windows, consider using [vcpkg](https://github.com/Microsoft/vcpkg),
+provided by Microsoft, for building HarfBuzz and other open-source libraries
+but if you need to build harfbuzz from source, put ragel binary on your
+PATH and follow appveyor CI's cmake
+[build steps](https://github.com/behdad/harfbuzz/blob/master/appveyor.yml).
+
+on macOS, using MacPorts:
 * sudo port install freetype glib2 cairo
 
 or using Homebrew:
@@ -14,9 +20,7 @@
 If you are using a tarball, you can now proceed to running configure and make
 as with any other standard package. That should leave you with a shared
 library in src/, and a few utility programs including hb-view and hb-shape
-under util/.  From the tarball, NMake Makefiles are also provided in win32/,
-which supports building HarfBuzz using Visual Studio, with a README.txt that
-gives instructions on building using NMake.
+under util/.
 If you are bootstraping from git, you need a few more tools before you can
 run autogen.sh for the first time. Namely, pkg-config and ragel. Again,
 on Ubuntu / Debian:

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/CMakeLists.txt
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/CMakeLists.txt	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/CMakeLists.txt	2017-10-13 22:53:19 UTC (rev 45535)
@@ -183,29 +183,19 @@
 
 ## Find and include needed header folders and libraries
 if (HB_HAVE_FREETYPE)
-  add_definitions(-DHAVE_FREETYPE=1 -DHAVE_FT_FACE_GETCHARVARIANTINDEX=1)
 
-  # https://github.com/WebKit/webkit/blob/master/Source/cmake/FindFreetype2.cmake
-  find_package(PkgConfig)
-  pkg_check_modules(PC_FREETYPE2 QUIET freetype2)
+  include(FindFreetype)
+  if (NOT FREETYPE_FOUND)
+    message(FATAL_ERROR "HB_HAVE_FREETYPE was set, but we failed to find it. Maybe add a CMAKE_PREFIX_PATH= to your Freetype2 install prefix")
+  endif()
 
-  find_path(FREETYPE2_HEADER_DIR NAMES freetype.h HINTS ${PC_FREETYPE2_INCLUDE_DIRS} ${PC_FREETYPE2_INCLUDEDIR} $ENV{FREETYPE_DIR}/include PATH_SUFFIXES freetype)
-  find_path(FREETYPE2_ROOT_INCLUDE_DIR NAMES freetype/freetype.h HINTS ${PC_FREETYPE2_INCLUDE_DIRS} ${PC_FREETYPE2_INCLUDEDIR} $ENV{FREETYPE_DIR}/include)
-  if (CMAKE_BUILD_TYPE MATCHES Debug)
-    set(FREETYPE2_LIBRARY_NAME freetyped)
-  else ()
-    set(FREETYPE2_LIBRARY_NAME freetype)
-  endif ()
-  find_library(FREETYPE2_LIBRARIES ${FREETYPE2_LIBRARY_NAME} HINTS ${PC_FREETYPE2_LIBDIR} ${PC_FREETYPE2_LIBRARY_DIRS} $ENV{FREETYPE_DIR}/lib)
+  list(APPEND THIRD_PARTY_LIBS ${FREETYPE_LIBRARIES})
+  include_directories(AFTER ${FREETYPE_INCLUDE_DIRS})
+  add_definitions(-DHAVE_FREETYPE=1 -DHAVE_FT_FACE_GETCHARVARIANTINDEX=1)
 
-  include_directories(AFTER ${FREETYPE2_HEADER_DIR} ${FREETYPE2_ROOT_INCLUDE_DIR})
-
   list(APPEND project_sources ${PROJECT_SOURCE_DIR}/src/hb-ft.cc)
   list(APPEND project_headers ${PROJECT_SOURCE_DIR}/src/hb-ft.h)
 
-  list(APPEND THIRD_PARTY_LIBS ${FREETYPE2_LIBRARIES})
-
-  mark_as_advanced(FREETYPE2_HEADER_DIR FREETYPE2_ROOT_INCLUDE_DIR FREETYPE2_LIBRARIES)
 endif ()
 
 if (HB_HAVE_GRAPHITE2)

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog	2017-10-13 22:53:19 UTC (rev 45535)
@@ -1,3 +1,1059 @@
+commit 74f1b88e3720103562552780af7058131c5492d5
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Fri Oct 13 11:01:55 2017 +0200
+
+    [ucdn] Fix compiler warnings
+
+ src/hb-ucdn.cc | 21 +++++++++++++--------
+ 1 file changed, 13 insertions(+), 8 deletions(-)
+
+commit c2cf68dbdffcbf45297dd161b4b6b2de667b5ae4
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Fri Oct 13 10:30:19 2017 +0200
+
+    [coretext] Fix build
+
+ src/hb-coretext.cc | 11 ++++++++---
+ 1 file changed, 8 insertions(+), 3 deletions(-)
+
+commit 95883fc5d486ecd194253bb223802f930de73e28
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Fri Oct 13 10:21:07 2017 +0200
+
+    [coretext] Pass correct font size to CoreText
+
+    CoreText "point"s are not typographic points, but CSS pixels.  Ie.
+    they are 96 per inch, not 72 per inch.
+
+ src/hb-coretext.cc | 18 +++++++++++-------
+ 1 file changed, 11 insertions(+), 7 deletions(-)
+
+commit 4f9a83ec2109b754a75c962e88117d063e6fed43
+Merge: fa48ccbe 40b05d7b
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Thu Oct 12 14:08:58 2017 +0200
+
+    Merge remote-tracking branch 'origin/master'
+
+commit fa48ccbe127a2e61ab316f3638e4056940964dae
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Thu Oct 12 14:07:37 2017 +0200
+
+    [indic] Special-case Kannada Ra,H,ZWJ sequence
+
+    Fixes https://github.com/behdad/harfbuzz/issues/435
+
+ src/hb-ot-shape-complex-indic.cc                         |  15
+ +++++++++++++++
+ test/shaping/Makefile.am                                 |   1 +
+ .../sha1sum/3cae6bfe5b57c07ba81ddbd54c02fe4f3a1e3bf6.ttf | Bin 0 ->
+ 2984 bytes
+ test/shaping/tests/indic-special-cases.tests             |   3 +++
+ 4 files changed, 19 insertions(+)
+
+commit 40b05d7b770b8045f176f66231c412b32482d874
+Author: n8willis <n8willis at users.noreply.github.com>
+Date:   Thu Oct 12 12:48:48 2017 +0100
+
+    Replacing 'cluster' with 'syllable' when comments describe certain
+    Indic shaping behavior (#563)
+
+    * Clarified wording of syllable/cluster behavior in Uniscribe in
+    final_reordering; changed one other probable typo.
+
+    * Additional syllable/cluster swap in comments for final reordering
+    and for initial-reordering matra decomposition.
+
+ src/hb-ot-shape-complex-indic.cc | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+commit 6bac4ac2bebb612debecc8ec10b845e977c0afe1
+Author: ebraminio <ebrahim at gnu.org>
+Date:   Thu Oct 12 15:15:49 2017 +0330
+
+    Minor BUILD.md fix (#565)
+
+ BUILD.md | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 8923033eb2dab75e9361e9ea1333deb1213393ce
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Thu Oct 12 12:01:48 2017 +0200
+
+    [coretext] Use fabs() to silence compiler warning
+
+ src/hb-coretext.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit dd4b321b4a429c6e6a28441ea9ae52f8f9dd1dad
+Author: Dominik Röttsches <drott at chromium.org>
+Date:   Thu Oct 12 11:49:37 2017 +0200
+
+    [coretext] Activate tracking for system fonts
+
+    Another attempt at fully fixing
+    https://github.com/behdad/harfbuzz/issues/360
+
+ src/hb-coretext.cc | 28 +++++++++++++++++++++++++++-
+ 1 file changed, 27 insertions(+), 1 deletion(-)
+
+commit 6760021d6f4beef852c6560607b32090bcfa5acb
+Author: Khaled Hosny <khaledhosny at eglug.org>
+Date:   Thu Oct 12 12:05:08 2017 +0300
+
+    CMakelists.txt fix for Freetype builds (#564)
+
+    Instead of searching for freetype using pkg-config, use the
+    FindFreetype
+    feature of CMake. This allows for better integration with other
+    projects
+    that make use of CMake.
+
+    Fixes https://github.com/behdad/harfbuzz/issues/518
+
+ CMakeLists.txt | 24 +++++++-----------------
+ 1 file changed, 7 insertions(+), 17 deletions(-)
+
+commit 6a2cbc6ef51680309eb3970ed9c66ff766dc8040
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Thu Oct 12 10:46:09 2017 +0200
+
+    [coretext] Use fabsf() instead of abs()
+
+    Fixes bots.
+
+    Link libharfbuzz.so with -lm.  Surprising that we survived without
+    it so far!
+
+ src/Makefile.am    | 2 +-
+ src/harfbuzz.pc.in | 2 +-
+ src/hb-coretext.cc | 5 +++--
+ 3 files changed, 5 insertions(+), 4 deletions(-)
+
+commit dfeccd073a5e78f6a2c630355c04121b70d2b4aa
+Author: ebraminio <ebrahim at gnu.org>
+Date:   Thu Oct 12 12:11:47 2017 +0330
+
+    Remove nmake port of harfbuzz (#562)
+
+ BUILD.md                        |  12 ++-
+ Makefile.am                     |   2 +-
+ appveyor.yml                    |  30 ------
+ configure.ac                    |   2 -
+ win32/Makefile.am               |  18 ----
+ win32/Makefile.vc               |  67 ------------
+ win32/README.txt                |  97 -----------------
+ win32/build-rules-msvc.mak      | 130 -----------------------
+ win32/config-msvc.mak           | 230
+ ----------------------------------------
+ win32/config.h.win32.in         | 158 ---------------------------
+ win32/create-lists-msvc.mak     | 147 -------------------------
+ win32/create-lists.bat          |  42 --------
+ win32/detectenv-msvc.mak        | 146 -------------------------
+ win32/generate-msvc.mak         |  39 -------
+ win32/hb-introspection-msvc.mak |  42 --------
+ win32/info-msvc.mak             | 162 ----------------------------
+ win32/install.mak               |  25 -----
+ win32/introspection-msvc.mak    |  73 -------------
+ win32/pc_base.py                | 124 ----------------------
+ win32/replace.py                | 115 --------------------
+ win32/sed-enums-srcs.py         |  36 -------
+ win32/setup.py                  |  62 -----------
+ 22 files changed, 9 insertions(+), 1750 deletions(-)
+
+commit 4e4781319b36bba154f3e5d4eb678945d8f6b4fc
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Thu Oct 12 10:33:16 2017 +0200
+
+    [ft] Add hb_ft_font_changed()
+
+    When the font size or variations settings on underlying FT_Face
+    change,
+    one can call hb_ft_font_changed() and continue using hb_font
+    created using
+    hb_ft_font_create().
+
+    Fixes https://github.com/behdad/harfbuzz/issues/559
+
+    New API:
+    hb_ft_font_changed()
+
+ docs/harfbuzz-sections.txt |  1 +
+ src/hb-ft.cc               | 15 +++++++++++++--
+ src/hb-ft.h                |  8 +++++++-
+ 3 files changed, 21 insertions(+), 3 deletions(-)
+
+commit 94b3cafc3a042aea69ee7040227557fe98a21d87
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Oct 11 17:22:44 2017 +0200
+
+    Add hb_face_get_table_tags()
+
+    New API:
+    hb_face_get_table_tags()
+
+    Fixes https://github.com/behdad/harfbuzz/issues/560
+
+ src/hb-face.cc              | 29 +++++++++++++++++++++++++++++
+ src/hb-face.h               |  5 +++++
+ src/hb-open-file-private.hh | 18 ++++++++++++++++++
+ 3 files changed, 52 insertions(+)
+
+commit e1b6d923021f68713784e2fd68f631c053ef3497
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Oct 11 15:51:31 2017 +0200
+
+    Remove cast of functions to (hb_destroy_func_t)
+
+    Fixes https://github.com/behdad/harfbuzz/issues/474
+
+ src/hb-blob.cc     |  8 +++++++-
+ src/hb-coretext.cc | 10 ++++++++--
+ src/hb-face.cc     |  6 ++++--
+ src/hb-ft.cc       | 20 +++++++++++---------
+ src/hb-glib.cc     |  9 ++++++++-
+ src/hb-ot-font.cc  |  6 ++++--
+ 6 files changed, 42 insertions(+), 17 deletions(-)
+
+commit 717fcb51dd051ca27d8537e5cf3a32d0447f78b5
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Oct 11 15:38:21 2017 +0200
+
+    [coretext] Minor
+
+ src/hb-coretext.cc | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 374bb48d902025e8b8d8acbe525ff43540daee36
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Oct 11 15:37:50 2017 +0200
+
+    Change ptem API to make 0 mean unset
+
+ src/hb-font.cc | 5 ++---
+ src/hb-font.h  | 2 +-
+ 2 files changed, 3 insertions(+), 4 deletions(-)
+
+commit 06c14225b20aa43ae88d362be2de577f6cf3f7b9
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Oct 11 15:29:53 2017 +0200
+
+    [coretext] Minor
+
+ src/hb-coretext.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit a4b46212c5e76494cfde5af6f299e08902aff0d5
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Oct 11 15:29:22 2017 +0200
+
+    [coretext] Adjust font size check for 0
+
+ src/hb-coretext.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 269cf1ca82c34c6f6ea126e7333743e5c381453b
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Oct 11 15:24:22 2017 +0200
+
+    Correctly initialize ptem
+
+ src/hb-font.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 84686bf4c75c001e7cfb2eabdf391b2e76cae335
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Oct 11 15:02:48 2017 +0200
+
+    [coretext-aat] Also pass through CoreText if font has kerx table
+
+    SFNSText has kerx table which apparently is applied.
+
+ src/hb-coretext.cc | 20 +++++++++-----------
+ src/hb-coretext.h  |  1 +
+ 2 files changed, 10 insertions(+), 11 deletions(-)
+
+commit 296d0134c9d04c82cc0bffd545b0fd9a308a2530
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Oct 11 14:09:30 2017 +0200
+
+    [coretext] Change default point size to 12
+
+ src/hb-coretext.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 7b23c286a71883ac3e5777a2dee262af48c76854
+Merge: 8d450dd1 a5ebe1d4
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Oct 11 13:35:32 2017 +0200
+
+    Merge branch 'coretext-optical-sizing'
+
+    Should fix https://github.com/behdad/harfbuzz/issues/360
+
+commit a5ebe1d4aec41bc5e289a7969e5e5f7bb57733b6
+Author: Dominik Röttsches <drott at chromium.org>
+Date:   Wed Oct 11 13:32:38 2017 +0200
+
+    [coretext] Recreate CTFont if pt size changed
+
+    Attempt at fixing #360
+
+ src/hb-coretext.cc | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+commit db7a73ce0781d1fec0235e419ac448565dcfc8ca
+Author: Dominik Röttsches <drott at chromium.org>
+Date:   Wed Oct 11 13:24:39 2017 +0200
+
+    [coretext] Fix build
+
+ src/hb-coretext.cc | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+commit f33413075655e6383cd16bc31f0bf804dcec1c64
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Oct 11 13:17:46 2017 +0200
+
+    [coretext] Another try
+
+ src/hb-coretext.cc | 32 +++++++++++++-------------------
+ 1 file changed, 13 insertions(+), 19 deletions(-)
+
+commit a8e466c3c12a3499028cb576721e5f85ff4cbf2d
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Oct 11 13:05:59 2017 +0200
+
+    [coretext] Move CT_Font to font data
+
+    Towards implementing optical sizing.  Untested; won't compile.
+
+    https://github.com/behdad/harfbuzz/issues/360
+
+ src/hb-coretext.cc | 85
+ ++++++++++++++++++++++++------------------------------
+ 1 file changed, 37 insertions(+), 48 deletions(-)
+
+commit f9b4c6570a4725eec5393f86e6468a189ac8c6be
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Oct 11 12:51:25 2017 +0200
+
+    [coretext] Move font size to a macro
+
+ src/hb-coretext.cc | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 8d450dd188dea2d63a03f74d903a76741de8a217
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Oct 11 12:43:46 2017 +0200
+
+    Infrastructure for creating CTFont with correct font size
+
+    https://github.com/behdad/harfbuzz/issues/360
+
+ src/hb-shaper-private.hh | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+commit 16d02a58cf187dbcecc1c796acdc5d3a70ca288e
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Oct 11 12:28:06 2017 +0200
+
+    [coretext] Change default font size from 36 to 18
+
+ src/hb-coretext.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit c0c2dbc871667c32ac8eedb11de64078ef24a429
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Oct 11 12:23:35 2017 +0200
+
+    Remove dirty tracking
+
+    Turns out I don't need this to resolve CoreText optical sizing
+    issue after all.
+
+    https://github.com/behdad/harfbuzz/issues/360
+
+ src/hb-face-private.hh |  9 ---------
+ src/hb-face.cc         | 17 -----------------
+ src/hb-font-private.hh | 13 -------------
+ src/hb-font.cc         | 39 ---------------------------------------
+ 4 files changed, 78 deletions(-)
+
+commit b57f18da700837a57df9606290160ea6e96accc8
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Oct 11 11:47:47 2017 +0200
+
+    Add hb_font_[sg]et_ptem() to set/get point size on font
+
+    New API:
+    hb_font_set_ptem()
+    hb_font_get_ptem()
+
+    Needed for hb-coretext optical sizing:
+    https://github.com/behdad/harfbuzz/issues/360
+
+ docs/harfbuzz-sections.txt |  2 ++
+ src/hb-font-private.hh     |  5 ++++-
+ src/hb-font.cc             | 41 +++++++++++++++++++++++++++++++++++++++++
+ src/hb-font.h              | 10 ++++++++++
+ 4 files changed, 57 insertions(+), 1 deletion(-)
+
+commit 3f9370d9e5051b1abf2fc94be2e10a39c8069f75
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Oct 11 11:34:53 2017 +0200
+
+    Fix TODO item
+
+ src/hb-font.cc | 13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+commit 5f50f8837f918ca1d176355d1538e0e6c9703f41
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Sat Oct 7 13:17:33 2017 +0200
+
+    [arabic] Fix cluster merging
+
+ src/hb-ot-shape-complex-arabic.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit c2545b921523538e8237ff6a2591f6cb75ee79f1
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Sat Oct 7 12:56:53 2017 +0200
+
+    Add check for HB_EXTERNs
+
+    https://github.com/behdad/harfbuzz/pull/555
+
+ src/Makefile.am      |  1 +
+ src/check-externs.sh | 21 +++++++++++++++++++++
+ 2 files changed, 22 insertions(+)
+
+commit 48a9406839f086735a05a2f1a07987b8a6bd6d33
+Author: fanc999 <fanc999 at yahoo.com.tw>
+Date:   Sat Oct 7 18:57:14 2017 +0800
+
+    Fix build of HarfBuzz tools and HarfBuzz-GObject on Visual Studio
+    (#555)
+
+    * hb-buffer.h: Mark hb_buffer_diff() for export
+
+    This will fix the tools builds on Visual Studio, as the symbol is used
+    by the tools.
+
+    * build: Adapt NMake Makefiles for GLib 2.53.4 or later
+
+    glib-mkenums was ported from a PERL script to a Python script, so we
+    need to update how we generate the enum sources for HarfBuzz-GObject
+    in
+    the NMake builds.  Let this be known in the build documentation
+    for MSVC
+    builds.
+
+    One of the problems with the underlying cmd.exe that the NMake
+    Makefiles
+    run on is that shebang lines are not recognized, so we need to to test
+    run the script with Python and see whether it succeeded by outputing a
+    source file that is larger than 0 in file size (since running the PERL
+    version of the script will clearly fail and cause an empty file to be
+    created).
+
+    If it succeeds, we then run a small Python utility script that
+    makes the
+    necessary string replacements, and we are done.  If that fails,
+    then we
+    run the glib-mkenums script with PERL, and do the replacements
+    with the
+    PERL one-liners as we did before.
+
+    We need to make replace.py use latin-1 encoding when using Python
+    3.x to
+    cope with the copyright sign that is in the generated enum sources.
+
+ src/hb-buffer.h         |  2 +-
+ win32/Makefile.am       |  4 +++-
+ win32/README.txt        |  5 +++--
+ win32/generate-msvc.mak | 17 ++++++++++++-----
+ win32/info-msvc.mak     |  5 ++++-
+ win32/replace.py        |  2 +-
+ win32/sed-enums-srcs.py | 36 ++++++++++++++++++++++++++++++++++++
+ 7 files changed, 60 insertions(+), 11 deletions(-)
+
+commit c9e2cf6f55c7682b8e7020654945ddd074ebfd24
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Oct 4 16:59:22 2017 +0200
+
+    [ot] Remove 'mal' and 'gle' lang tags
+
+    Fixes https://github.com/behdad/harfbuzz/issues/477
+
+ src/hb-ot-tag.cc | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit 621c49cb8657a79ee6897c4d313d0e825b2b228f
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Oct 4 15:06:48 2017 +0200
+
+    Improve performance of ligature component matching
+
+    This O(N^2) was introduced in
+    8b2c94c43fd335b944d5e5487265706b8e0f9041.
+    Make it O(N).
+
+ src/hb-ot-layout-gsubgpos-private.hh | 37
+ +++++++++++++++++++++++-------------
+ 1 file changed, 24 insertions(+), 13 deletions(-)
+
+commit ab8d70ec7023e51ba6fd7267d2b41c5f95ef0787
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Oct 4 14:47:10 2017 +0200
+
+    [arabic] Implement Unicode Arabic Mark Ordering Algorithm UTR#53
+
+    Fixes https://github.com/behdad/harfbuzz/issues/509
+
+ src/hb-ot-shape-complex-arabic.cc                  |  75
+ +++++++++++++++++++++
+ src/hb-ot-shape-complex-default.cc                 |   1 +
+ src/hb-ot-shape-complex-hangul.cc                  |   1 +
+ src/hb-ot-shape-complex-hebrew.cc                  |   1 +
+ src/hb-ot-shape-complex-indic.cc                   |   1 +
+ src/hb-ot-shape-complex-myanmar.cc                 |   2 +
+ src/hb-ot-shape-complex-private.hh                 |  12 ++++
+ src/hb-ot-shape-complex-thai.cc                    |   1 +
+ src/hb-ot-shape-complex-tibetan.cc                 |   1 +
+ src/hb-ot-shape-complex-use.cc                     |   1 +
+ src/hb-ot-shape-normalize.cc                       |   8 ++-
+ test/shaping/Makefile.am                           |   1 +
+ .../24b8d24d00ae86f49791b746da4c9d3f717a51a8.ttf   | Bin 0 -> 7160 bytes
+ .../94a5d6fb15a27521fba9ea4aee9cb39b2d03322a.ttf   | Bin 0 -> 6816 bytes
+ test/shaping/record-test.sh                        |   2 +-
+ test/shaping/tests/arabic-mark-order.tests         |   2 +
+ 16 files changed, 106 insertions(+), 3 deletions(-)
+
+commit b6fe0ab636ffac0a246e160b3508cc4841cb1823
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Oct 4 13:37:08 2017 +0200
+
+    Add info_cc() convenience macro
+
+ src/hb-ot-layout-private.hh  | 2 ++
+ src/hb-ot-shape-normalize.cc | 6 +++---
+ 2 files changed, 5 insertions(+), 3 deletions(-)
+
+commit 7f9e7f8689e1d260596f5256947dfbd474afb1ec
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Oct 4 13:20:33 2017 +0200
+
+    Adjust normalizer for out-of-order marks
+
+    We are going to implement Unicode Arabic Mark Ordering Algorithm:
+
+      http://www.unicode.org/reports/tr53/tr53-1.pdf
+
+    which will reorder marks out of their sorted ccc order.  Adjust
+    normalizer to stop combining as soon as dangerous ordering is
+    detected.
+
+ src/hb-ot-shape-normalize.cc | 62
+ ++++++++++++++++++++++++++------------------
+ 1 file changed, 37 insertions(+), 25 deletions(-)
+
+commit a252ad61f077c3b7bbfd8335e1b105a57beb58ce
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Oct 4 13:07:08 2017 +0200
+
+    Minor
+
+ src/hb-unicode-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 4c05a405acc25c4ef0d70a97c0ae59013abca2df
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Oct 4 13:06:51 2017 +0200
+
+    Revert "Treat HAMZA ABOVE similar to SHADD for sorting purposes"
+
+    This reverts commit 5a330575768f5a213072230b9ec8faabac9c5737.
+
+    Proper fix coming soon.
+
+ src/hb-unicode-private.hh | 4 ----
+ 1 file changed, 4 deletions(-)
+
+commit d695cacbf4dd5f77b5e7134cf60553775c515ef1
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Oct 4 11:33:47 2017 +0200
+
+    Shorthand format controls should not be ignored
+
+    Fixes https://github.com/behdad/harfbuzz/issues/503
+
+ src/hb-unicode-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 50e95229d79bd258ad1d3f6392bfffa128f6df2a
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Wed Oct 4 11:28:04 2017 +0200
+
+    Add Chinantec language tags
+
+    Fixes https://github.com/behdad/harfbuzz/issues/516
+
+ src/hb-ot-tag.cc | 14 ++++++++++++++
+ 1 file changed, 14 insertions(+)
+
+commit 9786fcd8fdc0adbe8b6269ddd174ee2818d6fa9e
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Tue Oct 3 17:22:43 2017 +0200
+
+    Fix GPOS v_origin ordering
+
+    This should affect mark attachment in vertical text.  I have no font
+    to test,
+    but this sounds the right order.
+
+    Noticed while debugging https://github.com/behdad/harfbuzz/issues/532
+
+ src/hb-ot-shape.cc | 44 ++++++++++++++++++++------------------------
+ 1 file changed, 20 insertions(+), 24 deletions(-)
+
+commit 63db692fa9efcd760f2e90f93f4e1428d79a3433
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Tue Oct 3 16:00:18 2017 +0200
+
+    [indic] Fix shaping of U+0AFB GUJARATI SIGN SHADDA
+
+    Fixes https://github.com/behdad/harfbuzz/issues/552
+
+ src/hb-ot-shape-complex-indic-private.hh | 2 +-
+ src/hb-ot-shape-complex-indic.cc         | 2 ++
+ 2 files changed, 3 insertions(+), 1 deletion(-)
+
+commit f559c633073f63b9d87cb2440048b4413cfa1c05
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Tue Oct 3 15:20:07 2017 +0200
+
+    [indic] Implement Consonent_With_Stacker
+
+    Fixes https://github.com/behdad/harfbuzz/issues/528
+
+ src/hb-ot-shape-complex-indic-machine.rl   | 5 +++--
+ src/hb-ot-shape-complex-indic-private.hh   | 7 ++++---
+ src/hb-ot-shape-complex-myanmar-machine.rl | 5 +++--
+ src/hb-ot-shape-complex-myanmar.cc         | 6 +++---
+ 4 files changed, 13 insertions(+), 10 deletions(-)
+
+commit e07669fc43c0e23d337ad984aa128c3a08c9c1bb
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Tue Oct 3 14:57:14 2017 +0200
+
+    [use] Implement Consonant_With_Stacker
+
+    Related to https://github.com/behdad/harfbuzz/issues/528
+
+ src/gen-use-table.py                   | 7 ++++---
+ src/hb-ot-shape-complex-use-machine.rl | 5 +++--
+ src/hb-ot-shape-complex-use-private.hh | 3 ++-
+ src/hb-ot-shape-complex-use-table.cc   | 6 ++++--
+ 4 files changed, 13 insertions(+), 8 deletions(-)
+
+commit 3ca9c92aa68956889642690e176c9161ff52edfe
+Author: David Corbett <corbett.dav at husky.neu.edu>
+Date:   Tue Oct 3 08:07:02 2017 -0400
+
+    Test Consonant_With_Stacker in Kannada (#530)
+
+ test/shaping/Makefile.am                           |   1 +
+ test/shaping/fonts/COPYING                         | 100
+ +++++++++++++++++++++
+ .../341421e629668b1a1242245d39238ca48432d35d.ttf   | Bin 0 -> 1084 bytes
+ .../55c88ebbe938680b08f92c3de20713183e0c7481.ttf   | Bin 0 -> 3300 bytes
+ .../663aef6b019dbf45ffd74089e2b5f2496ceceb18.ttf   | Bin 0 -> 1204 bytes
+ .../a014549f766436cf55b2ceb40e462038938ee899.ttf   | Bin 0 -> 2720 bytes
+ .../tests/indic-consonant-with-stacker.tests       |   4 +
+ 7 files changed, 105 insertions(+)
+
+commit 5d98de1f382254a8a21fd9a04b642268a21be16f
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Tue Oct 3 13:46:25 2017 +0200
+
+    Tweak mark-base attachment
+
+    Apparently a base glyph can also become an attached component of a
+    ligature if the ligature-forming lookup used IgnoreBase.  This was
+    being confused with a non-first component of a MultipleSubst and
+    hence not matched for mark-attachment.  Tweak test to fix.
+
+    Fixes https://github.com/behdad/harfbuzz/issues/543
+
+ src/hb-ot-layout-gpos-table.hh                           |   4 +++-
+ test/shaping/Makefile.am                                 |   1 +
+ .../sha1sum/98b7887cff91f722b92a8ff800120954606354f9.ttf | Bin 0 ->
+ 1168 bytes
+ test/shaping/tests/mark-attachment.tests                 |   1 +
+ 4 files changed, 5 insertions(+), 1 deletion(-)
+
+commit ea772932d2430ebc7ea712a8c46ec2500966225d
+Merge: 771970ef c44657a0
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Tue Oct 3 13:25:44 2017 +0200
+
+    Merge commit 'c44657a05d565ec5f2c32ac15d4ecfbee00ac5f7'
+
+commit 771970efa15fc0b77841b7f0a3e266cdcf51246e
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Tue Oct 3 13:23:31 2017 +0200
+
+    Minor
+
+ .travis.yml  | 2 +-
+ appveyor.yml | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 09cbeb2246217dce61ccc0638edb6211facca4b0
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Tue Oct 3 13:22:07 2017 +0200
+
+    Make bots happy
+
+    Fixes https://github.com/behdad/harfbuzz/issues/551
+
+ test/shaping/tests/indic-syllable.tests | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit c44657a05d565ec5f2c32ac15d4ecfbee00ac5f7
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Tue Oct 3 13:14:17 2017 +0200
+
+    Tweak input matching some more
+
+    Followup to 8b2c94c43fd335b944d5e5487265706b8e0f9041
+
+    Allow matching sequences of marks attached to different ligatures,
+    as supposedly the base of the subsequent marks were already jumped
+    over.
+
+ src/hb-ot-layout-gsubgpos-private.hh | 3 ---
+ 1 file changed, 3 deletions(-)
+
+commit bbe94777c94637da1bcf944124b5079662618a1e
+Author: Khaled Hosny <khaledhosny at eglug.org>
+Date:   Mon Oct 2 22:36:14 2017 +0200
+
+    Print test-suite.log when CI builds fail
+
+ .travis.yml  | 2 +-
+ appveyor.yml | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 1633513996f902e95642fcaf9205dded55f509ff
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Mon Oct 2 20:28:56 2017 +0200
+
+    Add test for U+0A51
+
+    New Indic numbers are:
+
+    BENGALI: 353725 out of 354188 tests passed. 463 failed (0.130722%)
+    DEVANAGARI: 707307 out of 707394 tests passed. 87 failed (0.0122987%)
+    GUJARATI: 366355 out of 366457 tests passed. 102 failed (0.0278341%)
+    GURMUKHI: 60729 out of 60747 tests passed. 18 failed (0.0296311%)
+    KANNADA: 951201 out of 951913 tests passed. 712 failed (0.0747968%)
+    KHMER: 299071 out of 299124 tests passed. 53 failed (0.0177184%)
+    MALAYALAM: 1048136 out of 1048334 tests passed. 198 failed
+    (0.0188871%)
+    ORIYA: 42320 out of 42329 tests passed. 9 failed (0.021262%)
+    SINHALA: 271662 out of 271847 tests passed. 185 failed (0.068053%)
+    TAMIL: 1091754 out of 1091754 tests passed. 0 failed (0%)
+    TELUGU: 970555 out of 970573 tests passed. 18 failed (0.00185457%)
+
+    Before 71c0a1429db7c7e7e32507be248c9457e1cbfc7d GURMUKHI used to be
+    at 15,
+    because Uniscribe seems to allow this character standalone, but
+    that looks
+    wrong.
+
+ .../sha1sum/1735326da89f0818cd8c51a0600e9789812c0f94.ttf | Bin 0 ->
+ 1008 bytes
+ test/shaping/tests/indic-syllable.tests                  |   2 ++
+ 2 files changed, 2 insertions(+)
+
+commit 8b2c94c43fd335b944d5e5487265706b8e0f9041
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Mon Oct 2 20:02:45 2017 +0200
+
+    Tweak ligature component matching for ligature formation
+
+    If two marks want to ligate and they belong to different components
+    of the
+    same ligature glyph, and said ligature glyph is to be ignored
+    according to
+    mark-filtering rules, then allow.
+
+    Example Burmese senquence:
+
+      U+1004,U+103A,U+1039,U+101B,U+103D,U+102D
+
+    Test font provided by Norbert Lindenberg.
+
+    Fixes https://github.com/behdad/harfbuzz/issues/545
+
+ src/hb-ot-layout-gsubgpos-private.hh               |  59
+ +++++++++++++++++----
+ .../a6c76d1bafde4a0b1026ebcc932d2e5c6fd02442.ttf   | Bin 0 -> 1384 bytes
+ test/shaping/tests/ligature-id.tests               |   1 +
+ 3 files changed, 51 insertions(+), 9 deletions(-)
+
+commit 71c0a1429db7c7e7e32507be248c9457e1cbfc7d
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Mon Oct 2 18:56:10 2017 +0200
+
+    [indic] Fix shaping of U+0A51
+
+    Mark it as matra below to allow the sequence U+0A15, U+0A51, U+0A47.
+    Oh well...
+
+    Fixes https://github.com/behdad/harfbuzz/issues/524
+
+ src/hb-ot-shape-complex-indic.cc                         |   6 ++++++
+ .../sha1sum/85fe0be440c64ac77699e21c2f1bd933a919167e.ttf | Bin 0 ->
+ 1224 bytes
+ test/shaping/tests/indic-syllable.tests                  |   1 +
+ 3 files changed, 7 insertions(+)
+
+commit 6eb8950e6265b23d88ba35daab1cff4fc3fe8753
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Mon Oct 2 18:30:05 2017 +0200
+
+    [ucdn] Oops!
+
+ src/hb-ucdn/{unicodedata_db.h => ucdn_db.h} | 4324
+ ++++++++++++++-------------
+ 1 file changed, 2175 insertions(+), 2149 deletions(-)
+
+commit cbec0cd65e1787b20ea55dd5583a7444938bd381
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Mon Oct 2 18:26:52 2017 +0200
+
+    Remove some really old cruft
+
+ src/hb-common.h    | 14 --------------
+ src/hb-ucdn/ucdn.h | 14 --------------
+ 2 files changed, 28 deletions(-)
+
+commit b3dff7720c1fac8ca9bdd7087ac368a0af4349e8
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Mon Oct 2 18:22:51 2017 +0200
+
+    [ucdn] Update README
+
+ src/hb-ucdn/README | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 57c55ef8341c760145170dedd002c5afb380e6c8
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Mon Oct 2 18:21:27 2017 +0200
+
+    [ot] Improve shaper selection heuristic
+
+ src/hb-ot-shape-complex-private.hh | 12 ++++++++----
+ 1 file changed, 8 insertions(+), 4 deletions(-)
+
+commit 5680ef884cf31ab9b42c587ffa260e390c88b8eb
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Mon Oct 2 18:20:51 2017 +0200
+
+    [use] Hack to fix shaping of U+1A7F
+
+    Fixes https://github.com/behdad/harfbuzz/issues/525
+
+ src/gen-use-table.py                 | 3 +++
+ src/hb-ot-shape-complex-use-table.cc | 2 +-
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+commit 0faa16a25349906ee0ab98b73d9a3d96327a0955
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Mon Oct 2 17:15:46 2017 +0200
+
+    [ucdn] Update to Unicode 10
+
+    Update to commit c000ebf79c095a7d58cf90090bde5715592c4834
+    plus this bug-fix: https://github.com/grigorig/ucdn/issues/18
+
+ src/hb-ucdn.cc               |  4 +++
+ src/hb-ucdn/Makefile.sources |  2 +-
+ src/hb-ucdn/ucdn.c           | 69
+ ++++++++++++++++++++++----------------------
+ src/hb-ucdn/ucdn.h           |  7 +++++
+ 4 files changed, 47 insertions(+), 35 deletions(-)
+
+commit ea535a1dfa63f82280607273cd282a6134c334da
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Mon Oct 2 17:02:39 2017 +0200
+
+    [use] Update to Unicode 10
+
+ src/gen-use-table.py                 |  5 +--
+ src/hb-ot-shape-complex-use-table.cc | 69
+ ++++++++++++++++++++++++++----------
+ 2 files changed, 54 insertions(+), 20 deletions(-)
+
+commit 29c244aff6e3c359796bb033496c14ad5537dbe0
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Mon Oct 2 16:36:21 2017 +0200
+
+    Minor
+
+ src/gen-use-table.py | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+commit 1535f8c67216e8559fa48691fe6d9c2726c08973
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Mon Oct 2 16:12:18 2017 +0200
+
+    Add Unicode 10 scripts
+
+ src/hb-common.h                    | 8 ++++++++
+ src/hb-ot-shape-complex-private.hh | 5 +++++
+ 2 files changed, 13 insertions(+)
+
+commit bdbe974f525d33b8c735fb5d7fd76c236c4dd0ea
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Mon Oct 2 10:00:31 2017 -0400
+
+    [indic] Update table to Unicode 10
+
+ src/hb-ot-shape-complex-indic-table.cc | 70
+ +++++++++++++++++-----------------
+ 1 file changed, 36 insertions(+), 34 deletions(-)
+
+commit cc79b666bc4a81a0342ed1e706dd7db109739dc5
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Mon Oct 2 09:19:15 2017 -0400
+
+    [indic] Add test for 1a0a356a0f2b2932581e4fd0437c01c058f4f6d1
+
+    https://github.com/behdad/harfbuzz/issues/538
+
+ .../sha1sum/87f85d17d26f1fe9ad28d7365101958edaefb967.ttf | Bin 0 ->
+ 1000 bytes
+ test/shaping/tests/indic-syllable.tests                  |   1 +
+ 2 files changed, 1 insertion(+)
+
+commit 819cc360499a5f136325b5a1a18098ebc2aee081
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Mon Oct 2 09:03:16 2017 -0400
+
+    [indic] Move manual code out of generated table
+
+ src/hb-ot-shape-complex-indic-table.cc | 7 -------
+ src/hb-ot-shape-complex-indic.cc       | 5 +++++
+ 2 files changed, 5 insertions(+), 7 deletions(-)
+
+commit da4866f7177a4e2836cc70b844e2e64ab671761f
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Mon Oct 2 08:57:06 2017 -0400
+
+    [arabic] Update table to Unicode 10 data
+
+ src/hb-ot-shape-complex-arabic-table.hh | 15 +++++++++------
+ 1 file changed, 9 insertions(+), 6 deletions(-)
+
+commit 1a0a356a0f2b2932581e4fd0437c01c058f4f6d1
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Mon Oct 2 08:49:23 2017 -0400
+
+    [indic] Categorize U+0980 BENGALI ANJI as placeholder
+
+    Fixes https://github.com/behdad/harfbuzz/issues/538
+
+ src/hb-ot-shape-complex-indic.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 19e77e01bc13f44138e1d50533327d314dd0a018
+Author: jfkthame <jfkthame at gmail.com>
+Date:   Mon Oct 2 13:08:49 2017 +0100
+
+    [shape-plan] Don't look for a cached plan if variation coords are
+    specified. Fixes #549. (#550)
+
+    This is a temporary hack just to avoid incorrect shaping results,
+    pending proper support
+    for caching shape-plans with variation coordinates.
+
+ src/hb-shape-plan.cc | 16 +++++++++-------
+ 1 file changed, 9 insertions(+), 7 deletions(-)
+
+commit db446cce4ef4cd1a4f1652e3aa3e5e5ed1881d39
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Sun Oct 1 12:06:00 2017 -0400
+
+    Add RELEASING.md to dist
+
+ Makefile.am | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 933a81d74fee0d5856fc7b15b58a16e0e0168e48
+Author: ebraminio <ebrahim at gnu.org>
+Date:   Sun Oct 1 19:35:24 2017 +0330
+
+    Add release checklist (#529)
+
+ RELEASING.md | 96
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 96 insertions(+)
+
+commit 66128d3cfb12705530141b5a4bd2706f0cbb9fc5
+Author: mhosken <mhosken at users.noreply.github.com>
+Date:   Wed Sep 27 01:29:45 2017 +0700
+
+    Fix missing xscale in rtl graphite unpacking (#541)
+
+    * Fix missing xscale in rtl graphite unpacking
+
+    * Oops didn't need to mess with yscale
+
+ src/hb-graphite2.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 3ca69c8c32b8408dd9f8e6e866cd07e58c0d79b7
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Thu Sep 14 20:50:35 2017 -0400
+
+    Use strtod_l() to correctly parse decimal numbers in French &
+    other locales
+
+    Test with, eg.:
+    $ LC_ALL=fr_FR.utf-8 ./hb-view NotoSansArabic-VF.ttf بهداد
+    --variations wght=1.2
+
+ configure.ac     |  4 ++--
+ src/hb-common.cc | 53
+ +++++++++++++++++++++++++++++++++++++++++++++++++++--
+ 2 files changed, 53 insertions(+), 4 deletions(-)
+
+commit 9355218f582a6c2425cadcb868204f81b17d5767
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Sat Sep 9 11:21:07 2017 -0700
+
+    [util] Add a few shorthand forms for commandline options
+
+    -o, -O, -u, -v, -V
+
+ util/options.cc | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+commit a984e0c4d921a6dff82cc1b5c686cc957215bc7e
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Tue Sep 5 11:18:35 2017 -0700
+
+    1.5.1
+
+ NEWS         | 13 +++++++++++++
+ configure.ac |  2 +-
+ 2 files changed, 14 insertions(+), 1 deletion(-)
+
 commit d03f11f246efec13e48fd68a9ce136db771b22bf
 Author: Behdad Esfahbod <behdad at behdad.org>
 Date:   Mon Sep 4 20:14:13 2017 -0700

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/Makefile.am
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/Makefile.am	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/Makefile.am	2017-10-13 22:53:19 UTC (rev 45535)
@@ -4,7 +4,7 @@
 
 ACLOCAL_AMFLAGS = -I m4
 
-SUBDIRS = src util test docs win32
+SUBDIRS = src util test docs
 
 EXTRA_DIST = \
 	autogen.sh \
@@ -11,6 +11,7 @@
 	harfbuzz.doap \
 	README.python \
 	BUILD.md \
+	RELEASING.md \
 	CMakeLists.txt \
 	$(NULL)
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/NEWS
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/NEWS	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/NEWS	2017-10-13 22:53:19 UTC (rev 45535)
@@ -1,3 +1,38 @@
+Overview of changes leading to 1.6.0
+Friday, October the 13th, 2017
+====================================
+
+- Update to Unicode 10.
+
+- Various Indic and Universal Shaping Engine fixes as a result of
+  HarfBuzz Hackfest with Jonathan Kew at Web Engines Hackfest at
+  the Igalia offices in A Coruña, Spain.  Thanks Igalia for having
+  us!
+
+- Implement Unicode Arabic Mark Ordering Algorithm UTR#53.
+
+- Implement optical sizing / tracking in CoreText backend, using
+  new API hb_font_set_ptem().
+
+- Allow notifying hb_font_t that underlying FT_Face changed sizing,
+  using new API hb_ft_font_changed().
+
+- More Graphite backend RTL fixes.
+
+- Fix caching of variable font shaping plans.
+
+- hb-view / hb-shape now accept following new arguments:
+
+  o --unicodes: takes a list of hex numbers that represent Unicode
+    codepoints.
+
+New API:
++hb_face_get_table_tags()
++hb_font_set_ptem()
++hb_font_get_ptem()
++hb_ft_font_changed()
+
+
 Overview of changes leading to 1.5.1
 Tuesday, September 5, 2017
 ====================================

Added: trunk/Build/source/libs/harfbuzz/harfbuzz-src/RELEASING.md
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/RELEASING.md	                        (rev 0)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/RELEASING.md	2017-10-13 22:53:19 UTC (rev 45535)
@@ -0,0 +1,96 @@
+HarfBuzz release walk-through checklist:
+
+1. Open gitk and review changes since last release.
+   * `git diff $(git describe | sed 's/-.*//').. src/*.h` prints all public API changes.
+
+     Document them in NEWS,  All API and API semantic changes should be clearly
+     marked as API additions, API changes, or API deletions.
+     If there's a backward-incompatible API change (including deletions for API used anywhere),
+     that's a release blocker.  Do NOT release.  Document deprecations.
+2. Based on severity of changes, decide whether it's a minor or micro release number bump,
+3. Make sure you have correct date and new version at the top of NEWS file,
+4. Bump version in configure.ac line 3,
+5. Do "make distcheck", if it passes, you get a tarball.
+   Otherwise, fix things and commit them separately before making release,
+6. "make release-files". Enter your GPG password again.  This creates a sha256 hash and signs it.
+7. Now that you have a tarball built, commit NEWS and configure.ac changes.  The commit message
+   is simply the release number.  Eg. "1.4.7"
+8. Tag the release and sign it: Eg. "git tag -s 1.4.7 -m 1.4.7".  Enter your GPG password.
+9. Build win32 bundle.
+   1. Put contents of [this](https://drive.google.com/open?id=0B3_fQkxDZZXXbWltRGd5bjVrUDQ) on your `~/.local/i686-w64-mingw32`
+   2. Run `./MING32 --with-uniscribe` script (available below) to config harfbuzz with mingw
+   3. make
+   4. `./UPDATE.sh` (available below)
+10. Copy all artefacts to users.freedesktop.org and move them into `/srv/www.freedesktop.org/www/software/harfbuzz/release`
+    There should be four files.  Eg.:
+ ```
+-rw-r--r--  1 behdad eng 1592693 Jul 18 11:25 harfbuzz-1.4.7.tar.bz2
+-rw-r--r--  1 behdad eng      89 Jul 18 11:34 harfbuzz-1.4.7.tar.bz2.sha256
+-rw-r--r--  1 behdad eng     339 Jul 18 11:34 harfbuzz-1.4.7.tar.bz2.sha256.asc
+-rw-r--r--  1 behdad eng 2895619 Jul 18 11:34 harfbuzz-1.4.7-win32.zip
+```
+11. While doing that, quickly double-check the size of the .tar.bz2 and .zip files against their previous releases to make sure nothing bad happened.  They should be in the ballpark, perhaps slightly larger.  Sometimes they do shrink, that's not by itself a stopper.
+12. Push the commit and tag out: "git push --follow-tags".  Make sure it's pushed both to freedesktop repo and github.
+13. Upload artefacts and NEWS entry on the github release.
+
+
+## MING32
+```bash
+#!/bin/bash
+
+target=i686-w64-mingw32
+
+unset CC
+unset CXX
+unset CPP
+unset LD
+unset LDFLAGS
+unset CFLAGS
+unset CXXFLAGS
+unset PKG_CONFIG_PATH
+
+# Removed -static from the following
+export CFLAGS="-static-libgcc"
+export CXXFLAGS="-static-libgcc -static-libstdc++"
+export CPPFLAGS=-I$HOME/.local/$target/include
+export LDFLAGS=-L$HOME/.local/$target/lib
+export PKG_CONFIG_LIBDIR=$HOME/.local/$target/lib/pkgconfig
+export PATH=$HOME/.local/$target/bin:$PATH
+
+../configure --build=`~/script/config.guess` --host=$target --prefix=/home/behdad/.local/$target "$@"
+```
+
+## UPDATE.sh
+```bash
+#!/bin/bash
+
+v=$1
+
+if test "x$v" = x; then
+	echo "usage: UPDATE.sh micro-version"
+	exit 1
+fi
+
+dir_prefix=harfbuzz-1.4.
+dir_suffix=-win32
+dir=$dir_prefix$v$dir_suffix
+dir_old=$dir_prefix$((v-1))$dir_suffix
+if test -d "$dir"; then
+	echo "New dir $dir exists; not overwriting"
+	exit 1
+fi
+if ! test -d "$dir_old"; then
+	echo "Old dir $dir_old does NOT exist; aborting"
+	exit 1
+fi
+set -ex
+cp -a "$dir_old" "$dir.tmp"
+rm -f "$dir.tmp"/GDX32.dll
+rm -f "$dir.tmp"/usp10.dll
+cp ../winbuild/src/.libs/libharfbuzz-0.dll{,.def} $dir.tmp/
+cp ../winbuild/util/.libs/hb-{shape,view}.exe $dir.tmp/
+i686-w64-mingw32-strip $dir.tmp/{hb-shape.exe,hb-view.exe,libharfbuzz-0.dll}
+mv $dir.tmp $dir
+zip -r $dir.zip $dir
+echo Bundle $dir.zip ready
+```

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/config.h.in
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/config.h.in	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/config.h.in	2017-10-13 22:53:19 UTC (rev 45535)
@@ -72,6 +72,9 @@
 /* Define to 1 if you have the `mprotect' function. */
 #undef HAVE_MPROTECT
 
+/* Define to 1 if you have the `newlocale' function. */
+#undef HAVE_NEWLOCALE
+
 /* Have native OpenType Layout backend */
 #undef HAVE_OT
 
@@ -102,6 +105,9 @@
 /* Define to 1 if you have the <string.h> header file. */
 #undef HAVE_STRING_H
 
+/* Define to 1 if you have the `strtod_l' function. */
+#undef HAVE_STRTOD_L
+
 /* Define to 1 if you have the `sysconf' function. */
 #undef HAVE_SYSCONF
 
@@ -129,8 +135,10 @@
 /* Define to 1 if you have the <windows.h> header file. */
 #undef HAVE_WINDOWS_H
 
-/* Define to the sub-directory in which libtool stores uninstalled libraries.
-   */
+/* Define to 1 if you have the <xlocale.h> header file. */
+#undef HAVE_XLOCALE_H
+
+/* Define to the sub-directory where libtool stores uninstalled libraries. */
 #undef LT_OBJDIR
 
 /* Define to the address where bug reports for this package should be sent. */

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac	2017-10-13 22:53:19 UTC (rev 45535)
@@ -1,6 +1,6 @@
 AC_PREREQ([2.64])
 AC_INIT([HarfBuzz],
-        [1.5.1],
+        [1.6.0],
         [https://github.com/behdad/harfbuzz/issues/new],
         [harfbuzz],
         [http://harfbuzz.org/])
@@ -69,8 +69,8 @@
 ])
 
 # Functions and headers
-AC_CHECK_FUNCS(atexit mprotect sysconf getpagesize mmap isatty)
-AC_CHECK_HEADERS(unistd.h sys/mman.h)
+AC_CHECK_FUNCS(atexit mprotect sysconf getpagesize mmap isatty newlocale strtod_l)
+AC_CHECK_HEADERS(unistd.h sys/mman.h xlocale.h)
 
 # Compiler flags
 AC_CANONICAL_HOST
@@ -494,8 +494,6 @@
 test/shaping/Makefile
 docs/Makefile
 docs/version.xml
-win32/Makefile
-win32/config.h.win32
 ])
 
 AC_OUTPUT

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/gtk-doc.make
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/gtk-doc.make	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/gtk-doc.make	2017-10-13 22:53:19 UTC (rev 45535)
@@ -25,6 +25,7 @@
 
 SETUP_FILES = \
 	$(content_files)		\
+	$(expand_content_files)		\
 	$(DOC_MAIN_SGML_FILE)		\
 	$(DOC_MODULE)-sections.txt	\
 	$(DOC_MODULE)-overrides.txt
@@ -86,7 +87,7 @@
 
 setup-build.stamp:
 	-$(GTK_DOC_V_SETUP)if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
-	    files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \
+	    files=`echo $(SETUP_FILES) $(DOC_MODULE).types`; \
 	    if test "x$$files" != "x" ; then \
 	        for file in $$files ; do \
 	            destdir=`dirname $(abs_builddir)/$$file`; \
@@ -118,7 +119,7 @@
 	$(GTK_DOC_V_INTROSPECT)if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \
 	    scanobj_options=""; \
 	    gtkdoc-scangobj 2>&1 --help | grep  >/dev/null "\-\-verbose"; \
-	    if test "$(?)" = "0"; then \
+	    if test "$$?" = "0"; then \
 	        if test "x$(V)" = "x1"; then \
 	            scanobj_options="--verbose"; \
 	        fi; \
@@ -141,7 +142,7 @@
 GTK_DOC_V_XML_=$(GTK_DOC_V_XML_$(AM_DEFAULT_VERBOSITY))
 GTK_DOC_V_XML_0=@echo "  DOC   Building XML";
 
-sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt $(expand_content_files)
+sgml-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(HFILE_GLOB) $(CFILE_GLOB) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt $(expand_content_files) xml/gtkdocentities.ent
 	$(GTK_DOC_V_XML)_source_dir='' ; \
 	for i in $(DOC_SOURCE_DIR) ; do \
 	    _source_dir="$${_source_dir} --source-dir=$$i" ; \
@@ -152,6 +153,17 @@
 sgml.stamp: sgml-build.stamp
 	@true
 
+xml/gtkdocentities.ent: Makefile
+	$(GTK_DOC_V_XML)$(MKDIR_P) $(@D) && ( \
+		echo "<!ENTITY package \"$(PACKAGE)\">"; \
+		echo "<!ENTITY package_bugreport \"$(PACKAGE_BUGREPORT)\">"; \
+		echo "<!ENTITY package_name \"$(PACKAGE_NAME)\">"; \
+		echo "<!ENTITY package_string \"$(PACKAGE_STRING)\">"; \
+		echo "<!ENTITY package_tarname \"$(PACKAGE_TARNAME)\">"; \
+		echo "<!ENTITY package_url \"$(PACKAGE_URL)\">"; \
+		echo "<!ENTITY package_version \"$(PACKAGE_VERSION)\">"; \
+	) > $@
+
 #### html ####
 
 GTK_DOC_V_HTML=$(GTK_DOC_V_HTML_$(V))
@@ -162,17 +174,17 @@
 GTK_DOC_V_XREF_=$(GTK_DOC_V_XREF_$(AM_DEFAULT_VERBOSITY))
 GTK_DOC_V_XREF_0=@echo "  DOC   Fixing cross-references";
 
-html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) $(expand_content_files)
 	$(GTK_DOC_V_HTML)rm -rf html && mkdir html && \
 	mkhtml_options=""; \
 	gtkdoc-mkhtml 2>&1 --help | grep  >/dev/null "\-\-verbose"; \
-	if test "$(?)" = "0"; then \
+	if test "$$?" = "0"; then \
 	  if test "x$(V)" = "x1"; then \
 	    mkhtml_options="$$mkhtml_options --verbose"; \
 	  fi; \
 	fi; \
 	gtkdoc-mkhtml 2>&1 --help | grep  >/dev/null "\-\-path"; \
-	if test "$(?)" = "0"; then \
+	if test "$$?" = "0"; then \
 	  mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \
 	fi; \
 	cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE)
@@ -194,11 +206,11 @@
 GTK_DOC_V_PDF_=$(GTK_DOC_V_PDF_$(AM_DEFAULT_VERBOSITY))
 GTK_DOC_V_PDF_0=@echo "  DOC   Building PDF";
 
-pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files)
+pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) $(expand_content_files)
 	$(GTK_DOC_V_PDF)rm -f $(DOC_MODULE).pdf && \
 	mkpdf_options=""; \
 	gtkdoc-mkpdf 2>&1 --help | grep  >/dev/null "\-\-verbose"; \
-	if test "$(?)" = "0"; then \
+	if test "$$?" = "0"; then \
 	  if test "x$(V)" = "x1"; then \
 	    mkpdf_options="$$mkpdf_options --verbose"; \
 	  fi; \
@@ -223,12 +235,15 @@
 	@if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-types" ; then \
 	  rm -f $(DOC_MODULE).types; \
 	fi
+	@if echo $(SCAN_OPTIONS) | grep -q "\-\-rebuild-sections" ; then \
+	  rm -f $(DOC_MODULE)-sections.txt; \
+	fi
 
 distclean-local:
 	@rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \
 	    $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt
 	@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \
-	    rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \
+	    rm -f $(SETUP_FILES) $(DOC_MODULE).types; \
 	fi
 
 maintainer-clean-local:

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.am
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.am	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.am	2017-10-13 22:53:19 UTC (rev 45535)
@@ -122,7 +122,7 @@
 
 libharfbuzz_la_SOURCES = $(HBSOURCES) $(HBHEADERS) $(HBNODISTHEADERS)
 libharfbuzz_la_CPPFLAGS = $(HBCFLAGS)
-libharfbuzz_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(HB_LIBTOOL_VERSION_INFO) $(export_symbols) -no-undefined
+libharfbuzz_la_LDFLAGS = $(AM_LDFLAGS) -lm -version-info $(HB_LIBTOOL_VERSION_INFO) $(export_symbols) -no-undefined
 libharfbuzz_la_LIBADD = $(HBLIBS)
 EXTRA_libharfbuzz_la_DEPENDENCIES = $(harfbuzz_def_dependency)
 pkginclude_HEADERS = $(HBHEADERS)
@@ -300,6 +300,7 @@
 dist_check_SCRIPTS = \
 	check-c-linkage-decls.sh \
 	check-defs.sh \
+	check-externs.sh \
 	check-header-guards.sh \
 	check-includes.sh \
 	check-libstdc++.sh \

Added: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/check-externs.sh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/check-externs.sh	                        (rev 0)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/check-externs.sh	2017-10-13 22:53:19 UTC (rev 45535)
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+LC_ALL=C
+export LC_ALL
+
+test -z "$srcdir" && srcdir=.
+stat=0
+
+test "x$HBHEADERS" = x && HBHEADERS=`cd "$srcdir"; find . -maxdepth 1 -name 'hb*.h'`
+test "x$EGREP" = x && EGREP='grep -E'
+
+
+echo 'Checking that all public symbols are exported with HB_EXTERN'
+
+for x in $HBHEADERS; do
+	test -f "$srcdir/$x" && x="$srcdir/$x"
+	$EGREP -B1 '^hb_' "$x" | $EGREP -E -v '^(--|hb_|HB_EXTERN )' -A1
+done |
+grep . >&2 && stat=1
+
+exit $stat


Property changes on: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/check-externs.sh
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+LF
\ No newline at end of property
Added: svn:executable
## -0,0 +1 ##
+*
\ No newline at end of property
Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-use-table.py
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-use-table.py	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-use-table.py	2017-10-13 22:53:19 UTC (rev 45535)
@@ -117,6 +117,7 @@
 	'Top_And_Right',
 	'Top_And_Left',
 	'Top_And_Left_And_Right',
+	'Bottom_And_Left',
 	'Bottom_And_Right',
 	'Top_And_Bottom_And_Right',
 	'Overstruck',
@@ -153,7 +154,7 @@
 def is_BASE_IND(U, UISC, UGC):
 	#SPEC-DRAFT return (UISC in [Consonant_Dead, Modifying_Letter] or UGC == Po)
 	return (UISC in [Consonant_Dead, Modifying_Letter] or
-		(UGC == Po and not U in [0x104E, 0x2022]) or
+		(UGC == Po and not U in [0x104E, 0x2022, 0x11A3F, 0x11A45]) or
 		False # SPEC-DRAFT-OUTDATED! U == 0x002D
 		)
 def is_BASE_NUM(U, UISC, UGC):
@@ -177,6 +178,8 @@
 def is_CONS_SUB(U, UISC, UGC):
 	#SPEC-DRAFT return UISC == Consonant_Subjoined
 	return UISC == Consonant_Subjoined and UGC != Lo
+def is_CONS_WITH_STACKER(U, UISC, UGC):
+	return UISC == Consonant_With_Stacker
 def is_HALANT(U, UISC, UGC):
 	return UISC in [Virama, Invisible_Stacker]
 def is_HALANT_NUM(U, UISC, UGC):
@@ -198,9 +201,7 @@
 def is_Reserved(U, UISC, UGC):
 	return UGC == 'Cn'
 def is_REPHA(U, UISC, UGC):
-	#return UISC == Consonant_Preceding_Repha
-	#SPEC-OUTDATED hack to categorize Consonant_With_Stacker and Consonant_Prefixed
-	return UISC in [Consonant_Preceding_Repha, Consonant_With_Stacker, Consonant_Prefixed]
+	return UISC in [Consonant_Preceding_Repha, Consonant_Prefixed]
 def is_SYM(U, UISC, UGC):
 	if U == 0x25CC: return False #SPEC-DRAFT
 	#SPEC-DRAFT return UGC in [So, Sc] or UISC == Symbol_Letter
@@ -229,6 +230,7 @@
 	'M':	is_CONS_MED,
 	'CM':	is_CONS_MOD,
 	'SUB':	is_CONS_SUB,
+	'CS':	is_CONS_WITH_STACKER,
 	'H':	is_HALANT,
 	'HN':	is_HALANT_NUM,
 	'ZWNJ':	is_ZWNJ,
@@ -252,7 +254,7 @@
 	},
 	'M': {
 		'Abv': [Top],
-		'Blw': [Bottom],
+		'Blw': [Bottom, Bottom_And_Left],
 		'Pst': [Right],
 		'Pre': [Left],
 	},
@@ -298,8 +300,10 @@
 		# the nasalization marks, maybe only for U+1CE9..U+1CF1.
 		if U == 0x1CED: UISC = Tone_Mark
 
-		evals = [(k, v(U,UISC,UGC)) for k,v in items]
-		values = [k for k,v in evals if v]
+		# TODO: https://github.com/behdad/harfbuzz/issues/525
+		if U == 0x1A7F: UISC = Consonant_Final; UIPC = Bottom
+
+		values = [k for k,v in items if v(U,UISC,UGC)]
 		assert len(values) == 1, "%s %s %s %s" % (hex(U), UISC, UGC, values)
 		USE = values[0]
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz.pc.in
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz.pc.in	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz.pc.in	2017-10-13 22:53:19 UTC (rev 45535)
@@ -8,6 +8,6 @@
 Version: %VERSION%
 
 Libs: -L${libdir} -lharfbuzz
-Libs.private: %libs_private%
+Libs.private: -lm %libs_private%
 Requires.private: %requires_private%
 Cflags: -I${includedir}/harfbuzz

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.cc	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.cc	2017-10-13 22:53:19 UTC (rev 45535)
@@ -128,6 +128,12 @@
   return blob;
 }
 
+static void
+_hb_blob_destroy (void *data)
+{
+  hb_blob_destroy ((hb_blob_t *) data);
+}
+
 /**
  * hb_blob_create_sub_blob:
  * @parent: Parent blob.
@@ -164,7 +170,7 @@
 			 MIN (length, parent->length - offset),
 			 HB_MEMORY_MODE_READONLY,
 			 hb_blob_reference (parent),
-			 (hb_destroy_func_t) hb_blob_destroy);
+			 _hb_blob_destroy);
 
   return blob;
 }

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.h
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.h	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.h	2017-10-13 22:53:19 UTC (rev 45535)
@@ -504,7 +504,7 @@
 } hb_buffer_diff_flags_t;
 
 /* Compare the contents of two buffers, report types of differences. */
-hb_buffer_diff_flags_t
+HB_EXTERN hb_buffer_diff_flags_t
 hb_buffer_diff (hb_buffer_t *buffer,
 		hb_buffer_t *reference,
 		hb_codepoint_t dottedcircle_glyph,

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.cc	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.cc	2017-10-13 22:53:19 UTC (rev 45535)
@@ -32,6 +32,9 @@
 #include "hb-object-private.hh"
 
 #include <locale.h>
+#ifdef HAVE_XLOCALE_H
+#include <xlocale.h>
+#endif
 
 
 /* hb_options_t */
@@ -246,8 +249,8 @@
 static hb_language_item_t *langs;
 
 #ifdef HB_USE_ATEXIT
-static
-void free_langs (void)
+static void
+free_langs (void)
 {
   while (langs) {
     hb_language_item_t *next = langs->next;
@@ -694,6 +697,48 @@
   return true;
 }
 
+#if defined (HAVE_NEWLOCALE) && defined (HAVE_STRTOD_L)
+#define USE_XLOCALE 1
+#endif
+
+#ifdef USE_XLOCALE
+
+static locale_t C_locale;
+
+#ifdef HB_USE_ATEXIT
+static void
+free_C_locale (void)
+{
+  if (C_locale)
+    freelocale (C_locale);
+}
+#endif
+
+static locale_t
+get_C_locale (void)
+{
+retry:
+  locale_t C = (locale_t) hb_atomic_ptr_get (&C_locale);
+
+  if (unlikely (!C))
+  {
+    C = newlocale (LC_ALL_MASK, "C", NULL);
+
+    if (!hb_atomic_ptr_cmpexch (&C_locale, NULL, C))
+    {
+      freelocale (C_locale);
+      goto retry;
+    }
+
+#ifdef HB_USE_ATEXIT
+    atexit (free_C_locale); /* First person registers atexit() callback. */
+#endif
+  }
+
+  return C;
+}
+#endif
+
 static bool
 parse_float (const char **pp, const char *end, float *pv)
 {
@@ -707,7 +752,11 @@
   float v;
 
   errno = 0;
+#ifdef USE_XLOCALE
+  v = strtod_l (p, &pend, get_C_locale ());
+#else
   v = strtod (p, &pend);
+#endif
   if (errno || p == pend)
     return false;
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.h
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.h	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.h	2017-10-13 22:53:19 UTC (rev 45535)
@@ -43,8 +43,6 @@
 # endif /* !__cplusplus */
 #endif
 
-#if !defined (HB_DONT_DEFINE_STDINT)
-
 #if defined (_SVR4) || defined (SVR4) || defined (__OpenBSD__) || \
     defined (_sgi) || defined (__sun) || defined (sun) || \
     defined (__digital__) || defined (__HP_cc)
@@ -51,22 +49,10 @@
 #  include <inttypes.h>
 #elif defined (_AIX)
 #  include <sys/inttypes.h>
-/* VS 2010 (_MSC_VER 1600) has stdint.h */
-#elif defined (_MSC_VER) && _MSC_VER < 1600
-typedef __int8 int8_t;
-typedef unsigned __int8 uint8_t;
-typedef __int16 int16_t;
-typedef unsigned __int16 uint16_t;
-typedef __int32 int32_t;
-typedef unsigned __int32 uint32_t;
-typedef __int64 int64_t;
-typedef unsigned __int64 uint64_t;
 #else
 #  include <stdint.h>
 #endif
 
-#endif
-
 HB_BEGIN_DECLS
 
 
@@ -321,6 +307,14 @@
   /*9.0*/ HB_SCRIPT_TANGUT			= HB_TAG ('T','a','n','g'),
   /*9.0*/ HB_SCRIPT_NEWA			= HB_TAG ('N','e','w','a'),
 
+  /*
+   * Since 1.6.0
+   */
+  /*10.0*/HB_SCRIPT_MASARAM_GONDI		= HB_TAG ('G','o','n','m'),
+  /*10.0*/HB_SCRIPT_NUSHU			= HB_TAG ('N','s','h','u'),
+  /*10.0*/HB_SCRIPT_SOYOMBO			= HB_TAG ('S','o','y','o'),
+  /*10.0*/HB_SCRIPT_ZANABAZAR_SQUARE		= HB_TAG ('Z','a','n','b'),
+
   /* No script set. */
   HB_SCRIPT_INVALID				= HB_TAG_NONE,
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.cc	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.cc	2017-10-13 22:53:19 UTC (rev 45535)
@@ -30,6 +30,7 @@
 #include "hb-shaper-impl-private.hh"
 
 #include "hb-coretext.h"
+#include <math.h>
 
 
 #ifndef HB_DEBUG_CORETEXT
@@ -36,7 +37,21 @@
 #define HB_DEBUG_CORETEXT (HB_DEBUG+0)
 #endif
 
+/* https://developer.apple.com/documentation/coretext/1508745-ctfontcreatewithgraphicsfont */
+#define HB_CORETEXT_DEFAULT_FONT_SIZE 12.f
 
+static CGFloat
+coretext_font_size (float ptem)
+{
+  /* CoreText points are CSS pixels (96 per inch),
+   * NOT typographic points (72 per inch).
+   *
+   * https://developer.apple.com/library/content/documentation/GraphicsAnimation/Conceptual/HighResolutionOSX/Explained/Explained.html
+   */
+  ptem *= 96.f / 72.f;
+  return ptem <= 0.f ? HB_CORETEXT_DEFAULT_FONT_SIZE : ptem;
+}
+
 static void
 release_table_data (void *user_data)
 {
@@ -62,17 +77,23 @@
 			 release_table_data);
 }
 
+static void
+_hb_cg_font_release (void *data)
+{
+  CGFontRelease ((CGFontRef) data);
+}
+
 hb_face_t *
 hb_coretext_face_create (CGFontRef cg_font)
 {
-  return hb_face_create_for_tables (reference_table, CGFontRetain (cg_font), (hb_destroy_func_t) CGFontRelease);
+  return hb_face_create_for_tables (reference_table, CGFontRetain (cg_font), _hb_cg_font_release);
 }
 
-
 HB_SHAPER_DATA_ENSURE_DEFINE(coretext, face)
-HB_SHAPER_DATA_ENSURE_DEFINE(coretext, font)
+HB_SHAPER_DATA_ENSURE_DEFINE_WITH_CONDITION(coretext, font,
+	fabs (CTFontGetSize((CTFontRef) data) - coretext_font_size (font->ptem)) <= .5
+)
 
-
 /*
  * shaper face data
  */
@@ -113,7 +134,7 @@
 create_cg_font (hb_face_t *face)
 {
   CGFontRef cg_font = NULL;
-  if (face->destroy == (hb_destroy_func_t) CGFontRelease)
+  if (face->destroy == _hb_cg_font_release)
   {
     cg_font = CGFontRetain ((CGFontRef) face->user_data);
   }
@@ -140,7 +161,33 @@
 static CTFontRef
 create_ct_font (CGFontRef cg_font, CGFloat font_size)
 {
-  CTFontRef ct_font = CTFontCreateWithGraphicsFont (cg_font, font_size, NULL, NULL);
+  CTFontRef ct_font = NULL;
+
+  /* CoreText does not enable trak table usage / tracking when creating a CTFont
+   * using CTFontCreateWithGraphicsFont. The only way of enabling tracking seems
+   * to be through the CTFontCreateUIFontForLanguage call. */
+  CFStringRef cg_postscript_name = CGFontCopyPostScriptName (cg_font);
+  if (CFStringHasPrefix (cg_postscript_name, CFSTR (".SFNSText")) ||
+      CFStringHasPrefix (cg_postscript_name, CFSTR (".SFNSDisplay")))
+  {
+    CTFontUIFontType font_type = kCTFontUIFontSystem;
+    if (CFStringHasSuffix (cg_postscript_name, CFSTR ("-Bold")))
+      font_type = kCTFontUIFontEmphasizedSystem;
+
+    ct_font = CTFontCreateUIFontForLanguage (font_type, font_size, NULL);
+    CFStringRef ct_result_name = CTFontCopyPostScriptName(ct_font);
+    if (CFStringCompare (ct_result_name, cg_postscript_name, 0) != kCFCompareEqualTo)
+    {
+      CFRelease(ct_font);
+      ct_font = NULL;
+    }
+    CFRelease (ct_result_name);
+  }
+  CFRelease (cg_postscript_name);
+
+  if (!ct_font)
+    ct_font = CTFontCreateWithGraphicsFont (cg_font, font_size, NULL, NULL);
+
   if (unlikely (!ct_font)) {
     DEBUG_MSG (CORETEXT, cg_font, "Font CTFontCreateWithGraphicsFont() failed");
     return NULL;
@@ -202,51 +249,24 @@
   return ct_font;
 }
 
-struct hb_coretext_shaper_face_data_t {
-  CGFontRef cg_font;
-  CTFontRef ct_font;
-};
-
 hb_coretext_shaper_face_data_t *
 _hb_coretext_shaper_face_data_create (hb_face_t *face)
 {
-  hb_coretext_shaper_face_data_t *data = (hb_coretext_shaper_face_data_t *) calloc (1, sizeof (hb_coretext_shaper_face_data_t));
-  if (unlikely (!data))
-    return NULL;
+  CGFontRef cg_font = create_cg_font (face);
 
-  data->cg_font = create_cg_font (face);
-  if (unlikely (!data->cg_font))
+  if (unlikely (!cg_font))
   {
     DEBUG_MSG (CORETEXT, face, "CGFont creation failed..");
-    free (data);
     return NULL;
   }
 
-  /* We use 36pt size instead of UPEM, because CoreText implements the 'trak' table,
-   * which can make the font too tight at large sizes.  36pt should be a good semi-neutral
-   * size.
-   *
-   * Since we always create CTFont at a fixed size, our CTFont lives in face_data
-   * instead of font_data.  Which is good, because when people change scale on
-   * hb_font_t, we won't need to update our CTFont. */
-  data->ct_font = create_ct_font (data->cg_font, 36.);
-  if (unlikely (!data->ct_font))
-  {
-    DEBUG_MSG (CORETEXT, face, "CTFont creation failed.");
-    CFRelease (data->cg_font);
-    free (data);
-    return NULL;
-  }
-
-  return data;
+  return (hb_coretext_shaper_face_data_t *) cg_font;
 }
 
 void
 _hb_coretext_shaper_face_data_destroy (hb_coretext_shaper_face_data_t *data)
 {
-  CFRelease (data->ct_font);
-  CFRelease (data->cg_font);
-  free (data);
+  CFRelease ((CGFontRef) data);
 }
 
 /*
@@ -256,8 +276,7 @@
 hb_coretext_face_get_cg_font (hb_face_t *face)
 {
   if (unlikely (!hb_coretext_shaper_face_data_ensure (face))) return NULL;
-  hb_coretext_shaper_face_data_t *face_data = HB_SHAPER_DATA_GET (face);
-  return face_data->cg_font;
+  return (CGFontRef) HB_SHAPER_DATA_GET (face);
 }
 
 
@@ -265,17 +284,28 @@
  * shaper font data
  */
 
-struct hb_coretext_shaper_font_data_t {};
-
 hb_coretext_shaper_font_data_t *
-_hb_coretext_shaper_font_data_create (hb_font_t *font HB_UNUSED)
+_hb_coretext_shaper_font_data_create (hb_font_t *font)
 {
-  return (hb_coretext_shaper_font_data_t *) HB_SHAPER_DATA_SUCCEEDED;
+  hb_face_t *face = font->face;
+  if (unlikely (!hb_coretext_shaper_face_data_ensure (face))) return NULL;
+  CGFontRef cg_font = (CGFontRef) HB_SHAPER_DATA_GET (face);
+
+  CTFontRef ct_font = create_ct_font (cg_font, coretext_font_size (font->ptem));
+
+  if (unlikely (!ct_font))
+  {
+    DEBUG_MSG (CORETEXT, font, "CGFont creation failed..");
+    return NULL;
+  }
+
+  return (hb_coretext_shaper_font_data_t *) ct_font;
 }
 
 void
 _hb_coretext_shaper_font_data_destroy (hb_coretext_shaper_font_data_t *data)
 {
+  CFRelease ((CTFontRef) data);
 }
 
 
@@ -303,10 +333,8 @@
 CTFontRef
 hb_coretext_font_get_ct_font (hb_font_t *font)
 {
-  hb_face_t *face = font->face;
-  if (unlikely (!hb_coretext_shaper_face_data_ensure (face))) return NULL;
-  hb_coretext_shaper_face_data_t *face_data = HB_SHAPER_DATA_GET (face);
-  return face_data->ct_font;
+  if (unlikely (!hb_coretext_shaper_font_data_ensure (font))) return NULL;
+  return (CTFontRef)HB_SHAPER_DATA_GET (font);
 }
 
 
@@ -538,9 +566,10 @@
                     unsigned int        num_features)
 {
   hb_face_t *face = font->face;
-  hb_coretext_shaper_face_data_t *face_data = HB_SHAPER_DATA_GET (face);
+  CGFontRef cg_font = (CGFontRef) HB_SHAPER_DATA_GET (face);
+  CTFontRef ct_font = (CTFontRef) HB_SHAPER_DATA_GET (font);
 
-  CGFloat ct_font_size = CTFontGetSize (face_data->ct_font);
+  CGFloat ct_font_size = CTFontGetSize (ct_font);
   CGFloat x_mult = (CGFloat) font->x_scale / ct_font_size;
   CGFloat y_mult = (CGFloat) font->y_scale / ct_font_size;
 
@@ -675,7 +704,7 @@
 	  CTFontDescriptorRef font_desc = CTFontDescriptorCreateWithAttributes (attributes);
 	  CFRelease (attributes);
 
-	  range->font = CTFontCreateCopyWithAttributes (face_data->ct_font, 0.0, NULL, font_desc);
+	  range->font = CTFontCreateCopyWithAttributes (ct_font, 0.0, NULL, font_desc);
 	  CFRelease (font_desc);
 	}
 	else
@@ -829,7 +858,7 @@
 	CFRelease (lang);
       }
       CFAttributedStringSetAttribute (attr_string, CFRangeMake (0, chars_len),
-				      kCTFontAttributeName, face_data->ct_font);
+				      kCTFontAttributeName, ct_font);
 
       if (num_features && range_records.len)
       {
@@ -947,7 +976,7 @@
        */
       CFDictionaryRef attributes = CTRunGetAttributes (run);
       CTFontRef run_ct_font = static_cast<CTFontRef>(CFDictionaryGetValue (attributes, kCTFontAttributeName));
-      if (!CFEqual (run_ct_font, face_data->ct_font))
+      if (!CFEqual (run_ct_font, ct_font))
       {
 	/* The run doesn't use our main font instance.  We have to figure out
 	 * whether font fallback happened, or this is just CoreText giving us
@@ -985,13 +1014,13 @@
 	  CGFontRef run_cg_font = CTFontCopyGraphicsFont (run_ct_font, 0);
 	  if (run_cg_font)
 	  {
-	    matched = CFEqual (run_cg_font, face_data->cg_font);
+	    matched = CFEqual (run_cg_font, cg_font);
 	    CFRelease (run_cg_font);
 	  }
 	}
 	if (!matched)
 	{
-	  CFStringRef font_ps_name = CTFontCopyName (face_data->ct_font, kCTFontPostScriptNameKey);
+	  CFStringRef font_ps_name = CTFontCopyName (ct_font, kCTFontPostScriptNameKey);
 	  CFStringRef run_ps_name = CTFontCopyName (run_ct_font, kCTFontPostScriptNameKey);
 	  CFComparisonResult result = CFStringCompare (run_ps_name, font_ps_name, 0);
 	  CFRelease (run_ps_name);
@@ -1263,22 +1292,20 @@
 hb_coretext_aat_shaper_face_data_t *
 _hb_coretext_aat_shaper_face_data_create (hb_face_t *face)
 {
-  hb_blob_t *mort_blob = face->reference_table (HB_CORETEXT_TAG_MORT);
-  /* Umm, we just reference the table to check whether it exists.
-   * Maybe add better API for this? */
-  if (!hb_blob_get_length (mort_blob))
+  static const hb_tag_t tags[] = {HB_CORETEXT_TAG_MORX, HB_CORETEXT_TAG_MORT, HB_CORETEXT_TAG_KERX};
+
+  for (unsigned int i = 0; i < ARRAY_LENGTH (tags); i++)
   {
-    hb_blob_destroy (mort_blob);
-    mort_blob = face->reference_table (HB_CORETEXT_TAG_MORX);
-    if (!hb_blob_get_length (mort_blob))
+    hb_blob_t *blob = face->reference_table (tags[i]);
+    if (hb_blob_get_length (blob))
     {
-      hb_blob_destroy (mort_blob);
-      return NULL;
+      hb_blob_destroy (blob);
+      return hb_coretext_shaper_face_data_ensure (face) ? (hb_coretext_aat_shaper_face_data_t *) HB_SHAPER_DATA_SUCCEEDED : NULL;
     }
+    hb_blob_destroy (blob);
   }
-  hb_blob_destroy (mort_blob);
 
-  return hb_coretext_shaper_face_data_ensure (face) ? (hb_coretext_aat_shaper_face_data_t *) HB_SHAPER_DATA_SUCCEEDED : NULL;
+  return NULL;
 }
 
 void

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.h
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.h	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.h	2017-10-13 22:53:19 UTC (rev 45535)
@@ -42,6 +42,7 @@
 
 #define HB_CORETEXT_TAG_MORT HB_TAG('m','o','r','t')
 #define HB_CORETEXT_TAG_MORX HB_TAG('m','o','r','x')
+#define HB_CORETEXT_TAG_KERX HB_TAG('k','e','r','x')
 
 
 HB_EXTERN hb_face_t *

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face-private.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face-private.hh	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face-private.hh	2017-10-13 22:53:19 UTC (rev 45535)
@@ -54,13 +54,6 @@
   mutable unsigned int upem;		/* Units-per-EM. */
   mutable unsigned int num_glyphs;	/* Number of glyphs. */
 
-  enum dirty_t {
-    DIRTY_NOTHING	= 0x0000,
-    DIRTY_INDEX		= 0x0001,
-    DIRTY_UPEM		= 0x0002,
-    DIRTY_NUM_GLYPHS	= 0x0004,
-  } dirty;
-
   struct hb_shaper_data_t shaper_data;	/* Various shaper data. */
 
   /* Various non-shaping data. */
@@ -106,8 +99,6 @@
   HB_INTERNAL void load_num_glyphs (void) const;
 };
 
-HB_MARK_AS_FLAG_T (hb_face_t::dirty_t);
-
 extern HB_INTERNAL const hb_face_t _hb_face_nil;
 
 #define HB_SHAPER_DATA_CREATE_FUNC_EXTRA_ARGS

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.cc	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.cc	2017-10-13 22:53:19 UTC (rev 45535)
@@ -51,8 +51,6 @@
   1000, /* upem */
   0,    /* num_glyphs */
 
-  hb_face_t::DIRTY_NOTHING, /* dirty */
-
   {
 #define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_INVALID,
 #include "hb-shaper-list.hh"
@@ -120,8 +118,10 @@
 }
 
 static void
-_hb_face_for_data_closure_destroy (hb_face_for_data_closure_t *closure)
+_hb_face_for_data_closure_destroy (void *data)
 {
+  hb_face_for_data_closure_t *closure = (hb_face_for_data_closure_t *) data;
+
   hb_blob_destroy (closure->blob);
   free (closure);
 }
@@ -171,7 +171,7 @@
 
   face = hb_face_create_for_tables (_hb_face_for_data_reference_table,
 				    closure,
-				    (hb_destroy_func_t) _hb_face_for_data_closure_destroy);
+				    _hb_face_for_data_closure_destroy);
 
   face->index = index;
 
@@ -367,11 +367,6 @@
   if (face->immutable)
     return;
 
-  if (face->index == index)
-    return;
-
-  face->dirty |= face->DIRTY_INDEX;
-
   face->index = index;
 }
 
@@ -407,11 +402,6 @@
   if (face->immutable)
     return;
 
-  if (face->upem == upem)
-    return;
-
-  face->dirty |= face->DIRTY_UPEM;
-
   face->upem = upem;
 }
 
@@ -456,11 +446,6 @@
   if (face->immutable)
     return;
 
-  if (face->num_glyphs == glyph_count)
-    return;
-
-  face->dirty |= face->DIRTY_NUM_GLYPHS;
-
   face->num_glyphs = glyph_count;
 }
 
@@ -489,4 +474,33 @@
   hb_blob_destroy (maxp_blob);
 }
 
+/**
+ * hb_face_get_table_tags:
+ * @face: a face.
+ *
+ * Retrieves table tags for a face, if possible.
+ *
+ * Return value: total number of tables, or 0 if not possible to list.
+ *
+ * Since: 1.6.0
+ **/
+unsigned int
+hb_face_get_table_tags (hb_face_t    *face,
+			unsigned int  start_offset,
+			unsigned int *table_count, /* IN/OUT */
+			hb_tag_t     *table_tags /* OUT */)
+{
+  if (face->destroy != _hb_face_for_data_closure_destroy)
+  {
+    if (table_count)
+      *table_count = 0;
+    return 0;
+  }
 
+  hb_face_for_data_closure_t *data = (hb_face_for_data_closure_t *) face->user_data;
+
+  const OT::OpenTypeFontFile &ot_file = *OT::Sanitizer<OT::OpenTypeFontFile>::lock_instance (data->blob);
+  const OT::OpenTypeFontFace &ot_face = ot_file.get_face (data->index);
+
+  return ot_face.get_table_tags (start_offset, table_count, table_tags);
+}

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.h
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.h	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.h	2017-10-13 22:53:19 UTC (rev 45535)
@@ -111,6 +111,11 @@
 HB_EXTERN unsigned int
 hb_face_get_glyph_count (hb_face_t *face);
 
+HB_EXTERN unsigned int
+hb_face_get_table_tags (hb_face_t    *face,
+			unsigned int  start_offset,
+			unsigned int *table_count, /* IN/OUT */
+			hb_tag_t     *table_tags /* OUT */);
 
 HB_END_DECLS
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font-private.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font-private.hh	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font-private.hh	2017-10-13 22:53:19 UTC (rev 45535)
@@ -108,6 +108,8 @@
   unsigned int x_ppem;
   unsigned int y_ppem;
 
+  float ptem;
+
   /* Font variation coordinates. */
   unsigned int num_coords;
   int *coords;
@@ -116,16 +118,6 @@
   void              *user_data;
   hb_destroy_func_t  destroy;
 
-  enum dirty_t {
-    DIRTY_NOTHING	= 0x0000,
-    DIRTY_FACE		= 0x0001,
-    DIRTY_PARENT	= 0x0002,
-    DIRTY_FUNCS		= 0x0004,
-    DIRTY_SCALE		= 0x0008,
-    DIRTY_PPEM		= 0x0010,
-    DIRTY_VARIATIONS	= 0x0020,
-  } dirty;
-
   struct hb_shaper_data_t shaper_data;
 
 
@@ -553,8 +545,6 @@
   }
 };
 
-HB_MARK_AS_FLAG_T (hb_font_t::dirty_t);
-
 #define HB_SHAPER_DATA_CREATE_FUNC_EXTRA_ARGS
 #define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_PROTOTYPE(shaper, font);
 #include "hb-shaper-list.hh"

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.cc	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.cc	2017-10-13 22:53:19 UTC (rev 45535)
@@ -1157,8 +1157,20 @@
   font->y_scale = parent->y_scale;
   font->x_ppem = parent->x_ppem;
   font->y_ppem = parent->y_ppem;
+  font->ptem = parent->ptem;
 
-  /* TODO: copy variation coordinates. */
+  font->num_coords = parent->num_coords;
+  if (!font->num_coords)
+    font->coords = NULL;
+  else
+  {
+    unsigned int size = parent->num_coords * sizeof (parent->coords[0]);
+    font->coords = (int *) malloc (size);
+    if (unlikely (!font->coords))
+      font->num_coords = 0;
+    else
+      memcpy (font->coords, parent->coords, size);
+  }
 
   return font;
 }
@@ -1188,6 +1200,7 @@
 
     0, /* x_ppem */
     0, /* y_ppem */
+    0, /* ptem */
 
     0, /* num_coords */
     NULL, /* coords */
@@ -1196,8 +1209,6 @@
     NULL, /* user_data */
     NULL, /* destroy */
 
-    hb_font_t::DIRTY_NOTHING, /* dirty */
-
     {
 #define HB_SHAPER_IMPLEMENT(shaper) HB_SHAPER_DATA_INVALID,
 #include "hb-shaper-list.hh"
@@ -1350,11 +1361,6 @@
   if (!parent)
     parent = hb_font_get_empty ();
 
-  if (parent == font->parent)
-    return;
-
-  font->dirty |= font->DIRTY_PARENT;
-
   hb_font_t *old = font->parent;
 
   font->parent = hb_font_reference (parent);
@@ -1397,11 +1403,6 @@
   if (unlikely (!face))
     face = hb_face_get_empty ();
 
-  if (font->face == face)
-    return;
-
-  font->dirty |= font->DIRTY_FACE;
-
   hb_face_t *old = font->face;
 
   font->face = hb_face_reference (face);
@@ -1455,8 +1456,6 @@
   if (!klass)
     klass = hb_font_funcs_get_empty ();
 
-  font->dirty |= font->DIRTY_FUNCS;
-
   hb_font_funcs_reference (klass);
   hb_font_funcs_destroy (font->klass);
   font->klass = klass;
@@ -1512,11 +1511,6 @@
   if (font->immutable)
     return;
 
-  if (font->x_scale == x_scale && font->y_scale == y_scale)
-    return;
-
-  font->dirty |= font->DIRTY_SCALE;
-
   font->x_scale = x_scale;
   font->y_scale = y_scale;
 }
@@ -1558,11 +1552,6 @@
   if (font->immutable)
     return;
 
-  if (font->x_ppem == x_ppem && font->y_ppem == y_ppem)
-    return;
-
-  font->dirty |= font->DIRTY_PPEM;
-
   font->x_ppem = x_ppem;
   font->y_ppem = y_ppem;
 }
@@ -1586,6 +1575,40 @@
   if (y_ppem) *y_ppem = font->y_ppem;
 }
 
+/**
+ * hb_font_set_ptem:
+ * @font: a font.
+ * @ptem: 
+ *
+ * Sets "point size" of the font.
+ *
+ * Since: 1.6.0
+ **/
+void
+hb_font_set_ptem (hb_font_t *font, float ptem)
+{
+  if (font->immutable)
+    return;
+
+  font->ptem = ptem;
+}
+
+/**
+ * hb_font_get_ptem:
+ * @font: a font.
+ *
+ * Gets the "point size" of the font.  A value of 0 means unset.
+ *
+ * Return value: Point size.
+ *
+ * Since: 0.9.2
+ **/
+float
+hb_font_get_ptem (hb_font_t *font)
+{
+  return font->ptem;
+}
+
 /*
  * Variations
  */
@@ -1595,16 +1618,6 @@
 				      int *coords, /* 2.14 normalized */
 				      unsigned int coords_length)
 {
-  if (font->num_coords == coords_length &&
-      (coords_length == 0 ||
-       0 == memcmp (font->coords, coords, coords_length * sizeof (coords[0]))))
-  {
-    free (coords);
-    return;
-  }
-
-  font->dirty |= font->DIRTY_VARIATIONS;
-
   free (font->coords);
 
   font->coords = coords;

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.h
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.h	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-font.h	2017-10-13 22:53:19 UTC (rev 45535)
@@ -607,7 +607,17 @@
 		  unsigned int *x_ppem,
 		  unsigned int *y_ppem);
 
+/*
+ * Point size per EM.  Used for optical-sizing in CoreText.
+ * A value of zero means "not set".
+ */
 HB_EXTERN void
+hb_font_set_ptem (hb_font_t *font, float ptem);
+
+HB_EXTERN float
+hb_font_get_ptem (hb_font_t *font);
+
+HB_EXTERN void
 hb_font_set_variations (hb_font_t *font,
 			const hb_variation_t *variations,
 			unsigned int variations_length);

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.cc	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.cc	2017-10-13 22:53:19 UTC (rev 45535)
@@ -95,14 +95,16 @@
 }
 
 static void
-_hb_ft_face_destroy (FT_Face ft_face)
+_hb_ft_face_destroy (void *data)
 {
-  FT_Done_Face (ft_face);
+  FT_Done_Face ((FT_Face) data);
 }
 
 static void
-_hb_ft_font_destroy (hb_ft_font_t *ft_font)
+_hb_ft_font_destroy (void *data)
 {
+  hb_ft_font_t *ft_font = (hb_ft_font_t *) data;
+
   if (ft_font->unref)
     _hb_ft_face_destroy (ft_font->ft_face);
 
@@ -124,7 +126,7 @@
   if (font->immutable)
     return;
 
-  if (font->destroy != (hb_destroy_func_t) _hb_ft_font_destroy)
+  if (font->destroy != _hb_ft_font_destroy)
     return;
 
   hb_ft_font_t *ft_font = (hb_ft_font_t *) font->user_data;
@@ -144,7 +146,7 @@
 int
 hb_ft_font_get_load_flags (hb_font_t *font)
 {
-  if (font->destroy != (hb_destroy_func_t) _hb_ft_font_destroy)
+  if (font->destroy != _hb_ft_font_destroy)
     return 0;
 
   const hb_ft_font_t *ft_font = (const hb_ft_font_t *) font->user_data;
@@ -155,7 +157,7 @@
 FT_Face
 hb_ft_font_get_face (hb_font_t *font)
 {
-  if (font->destroy != (hb_destroy_func_t) _hb_ft_font_destroy)
+  if (font->destroy != _hb_ft_font_destroy)
     return NULL;
 
   const hb_ft_font_t *ft_font = (const hb_ft_font_t *) font->user_data;
@@ -474,7 +476,7 @@
   hb_font_set_funcs (font,
 		     funcs,
 		     _hb_ft_font_create (ft_face, symbol, unref),
-		     (hb_destroy_func_t) _hb_ft_font_destroy);
+		     _hb_ft_font_destroy);
 }
 
 
@@ -553,7 +555,7 @@
 hb_ft_face_create_referenced (FT_Face ft_face)
 {
   FT_Reference_Face (ft_face);
-  return hb_ft_face_create (ft_face, (hb_destroy_func_t) _hb_ft_face_destroy);
+  return hb_ft_face_create (ft_face, _hb_ft_face_destroy);
 }
 
 static void
@@ -608,6 +610,19 @@
   font = hb_font_create (face);
   hb_face_destroy (face);
   _hb_ft_font_set_funcs (font, ft_face, false);
+  hb_ft_font_changed (font);
+  return font;
+}
+
+void
+hb_ft_font_changed (hb_font_t *font)
+{
+  if (font->destroy != _hb_ft_font_destroy)
+    return;
+
+  hb_ft_font_t *ft_font = (hb_ft_font_t *) font->user_data;
+  FT_Face ft_face = ft_font->ft_face;
+
   hb_font_set_scale (font,
 		     (int) (((uint64_t) ft_face->size->metrics.x_scale * (uint64_t) ft_face->units_per_EM + (1u<<15)) >> 16),
 		     (int) (((uint64_t) ft_face->size->metrics.y_scale * (uint64_t) ft_face->units_per_EM + (1u<<15)) >> 16));
@@ -638,8 +653,6 @@
     free (mm_var);
   }
 #endif
-
-  return font;
 }
 
 /**
@@ -655,7 +668,7 @@
 hb_ft_font_create_referenced (FT_Face ft_face)
 {
   FT_Reference_Face (ft_face);
-  return hb_ft_font_create (ft_face, (hb_destroy_func_t) _hb_ft_face_destroy);
+  return hb_ft_font_create (ft_face, _hb_ft_face_destroy);
 }
 
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.h
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.h	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.h	2017-10-13 22:53:19 UTC (rev 45535)
@@ -116,8 +116,14 @@
 HB_EXTERN int
 hb_ft_font_get_load_flags (hb_font_t *font);
 
-/* Makes an hb_font_t use FreeType internally to implement font functions. */
+/* Call when size or variations settings on underlying FT_Face change. */
 HB_EXTERN void
+hb_ft_font_changed (hb_font_t *font);
+
+/* Makes an hb_font_t use FreeType internally to implement font functions.
+ * Note: this internally creates an FT_Face.  Use it when you create your
+ * hb_face_t using hb_face_create(). */
+HB_EXTERN void
 hb_ft_font_set_funcs (hb_font_t *font);
 
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-glib.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-glib.cc	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-glib.cc	2017-10-13 22:53:19 UTC (rev 45535)
@@ -383,6 +383,13 @@
 }
 
 #if GLIB_CHECK_VERSION(2,31,10)
+
+static void
+_hb_g_bytes_unref (void *data)
+{
+  g_bytes_unref ((GBytes *) data);
+}
+
 /**
  * hb_glib_blob_create:
  *
@@ -397,6 +404,6 @@
 			 size,
 			 HB_MEMORY_MODE_READONLY,
 			 g_bytes_ref (gbytes),
-			 (hb_destroy_func_t) g_bytes_unref);
+			 _hb_g_bytes_unref);
 }
 #endif

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-graphite2.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-graphite2.cc	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-graphite2.cc	2017-10-13 22:53:19 UTC (rev 45535)
@@ -389,7 +389,7 @@
   }
   else
   {
-    curradvx = gr_seg_advance_X(seg);
+    curradvx = gr_seg_advance_X(seg) * xscale;
     for (is = gr_seg_first_slot (seg); is; pPos++, info++, is = gr_slot_next_in_segment (is))
     {
       if (info->cluster != currclus)

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file-private.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file-private.hh	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file-private.hh	2017-10-13 22:53:19 UTC (rev 45535)
@@ -79,6 +79,24 @@
     if (unlikely (i >= numTables)) return Null(TableRecord);
     return tables[i];
   }
+  inline unsigned int get_table_tags (unsigned int start_offset,
+				      unsigned int *table_count, /* IN/OUT */
+				      hb_tag_t     *table_tags /* OUT */) const
+  {
+    if (table_count)
+    {
+      if (start_offset >= numTables)
+        *table_count = 0;
+      else
+        *table_count = MIN (*table_count, numTables - start_offset);
+
+      const TableRecord *sub_tables = tables + start_offset;
+      unsigned int count = *table_count;
+      for (unsigned int i = 0; i < count; i++)
+	table_tags[i] = sub_tables[i].tag;
+    }
+    return numTables;
+  }
   inline bool find_table_index (hb_tag_t tag, unsigned int *table_index) const
   {
     Tag t;

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-font.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-font.cc	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-font.cc	2017-10-13 22:53:19 UTC (rev 45535)
@@ -458,8 +458,10 @@
 }
 
 static void
-_hb_ot_font_destroy (hb_ot_font_t *ot_font)
+_hb_ot_font_destroy (void *data)
 {
+  hb_ot_font_t *ot_font = (hb_ot_font_t *) data;
+
   ot_font->cmap.fini ();
   ot_font->h_metrics.fini ();
   ot_font->v_metrics.fini ();
@@ -627,5 +629,5 @@
   hb_font_set_funcs (font,
 		     _hb_ot_get_font_funcs (),
 		     ot_font,
-		     (hb_destroy_func_t) _hb_ot_font_destroy);
+		     _hb_ot_font_destroy);
 }

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	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gpos-table.hh	2017-10-13 22:53:19 UTC (rev 45535)
@@ -1087,7 +1087,9 @@
     do {
       if (!skippy_iter.prev ()) return_trace (false);
       /* We only want to attach to the first of a MultipleSubst sequence.  Reject others. */
-      if (0 == _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx])) break;
+      if (!_hb_glyph_info_multiplied (&buffer->info[skippy_iter.idx]) ||
+	  0 == _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx]))
+	break;
       skippy_iter.reject ();
     } while (1);
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos-private.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos-private.hh	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos-private.hh	2017-10-13 22:53:19 UTC (rev 45535)
@@ -374,6 +374,13 @@
 
     inline void reject (void) { num_items++; match_glyph_data--; }
 
+    inline matcher_t::may_skip_t
+    may_skip (const hb_apply_context_t *c,
+	      const hb_glyph_info_t    &info) const
+    {
+      return matcher.may_skip (c, info);
+    }
+
     inline bool next (void)
     {
       assert (num_items > 0);
@@ -736,11 +743,17 @@
    * - Ligatures cannot be formed across glyphs attached to different components
    *   of previous ligatures.  Eg. the sequence is LAM,SHADDA,LAM,FATHA,HEH, and
    *   LAM,LAM,HEH form a ligature, leaving SHADDA,FATHA next to eachother.
-   *   However, it would be wrong to ligate that SHADDA,FATHA sequence.o
-   *   There is an exception to this: If a ligature tries ligating with marks that
-   *   belong to it itself, go ahead, assuming that the font designer knows what
-   *   they are doing (otherwise it can break Indic stuff when a matra wants to
-   *   ligate with a conjunct...)
+   *   However, it would be wrong to ligate that SHADDA,FATHA sequence.
+   *   There are a couple of exceptions to this:
+   *
+   *   o If a ligature tries ligating with marks that belong to it itself, go ahead,
+   *     assuming that the font designer knows what they are doing (otherwise it can
+   *     break Indic stuff when a matra wants to ligate with a conjunct,
+   *
+   *   o If two marks want to ligate and they belong to different components of the
+   *     same ligature glyph, and said ligature glyph is to be ignored according to
+   *     mark-filtering rules, then allow.
+   *     https://github.com/behdad/harfbuzz/issues/545
    */
 
   bool is_mark_ligature = _hb_glyph_info_is_mark (&buffer->cur());
@@ -751,6 +764,12 @@
   unsigned int first_lig_id = _hb_glyph_info_get_lig_id (&buffer->cur());
   unsigned int first_lig_comp = _hb_glyph_info_get_lig_comp (&buffer->cur());
 
+  enum {
+    LIGBASE_NOT_CHECKED,
+    LIGBASE_MAY_NOT_SKIP,
+    LIGBASE_MAY_SKIP
+  } ligbase = LIGBASE_NOT_CHECKED;
+
   match_positions[0] = buffer->idx;
   for (unsigned int i = 1; i < count; i++)
   {
@@ -761,13 +780,43 @@
     unsigned int this_lig_id = _hb_glyph_info_get_lig_id (&buffer->info[skippy_iter.idx]);
     unsigned int this_lig_comp = _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx]);
 
-    if (first_lig_id && first_lig_comp) {
+    if (first_lig_id && first_lig_comp)
+    {
       /* If first component was attached to a previous ligature component,
        * all subsequent components should be attached to the same ligature
-       * component, otherwise we shouldn't ligate them. */
+       * component, otherwise we shouldn't ligate them... */
       if (first_lig_id != this_lig_id || first_lig_comp != this_lig_comp)
-	return_trace (false);
-    } else {
+      {
+        /* ...unless, we are attached to a base ligature and that base
+	 * ligature is ignorable. */
+        if (ligbase == LIGBASE_NOT_CHECKED)
+	{
+	  bool found = false;
+	  const hb_glyph_info_t *out = buffer->out_info;
+	  unsigned int j = buffer->out_len;
+	  while (j && _hb_glyph_info_get_lig_id (&out[j - 1]) == first_lig_id)
+	  {
+	    if (_hb_glyph_info_get_lig_comp (&out[j - 1]) == 0)
+	    {
+	      j--;
+	      found = true;
+	      break;
+	    }
+	    j--;
+	  }
+
+	  if (found && skippy_iter.may_skip (c, out[j]) == hb_apply_context_t::matcher_t::SKIP_YES)
+	    ligbase = LIGBASE_MAY_SKIP;
+	  else
+	    ligbase = LIGBASE_MAY_NOT_SKIP;
+	}
+
+        if (ligbase == LIGBASE_MAY_NOT_SKIP)
+	  return_trace (false);
+      }
+    }
+    else
+    {
       /* If first component was NOT attached to a previous ligature component,
        * all subsequent components should also NOT be attached to any ligature
        * component, unless they are attached to the first component itself! */

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-private.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-private.hh	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-private.hh	2017-10-13 22:53:19 UTC (rev 45535)
@@ -347,6 +347,8 @@
   return _hb_glyph_info_is_unicode_mark (info) ? info->unicode_props()>>8 : 0;
 }
 
+#define info_cc(info) (_hb_glyph_info_get_modified_combining_class (&(info)))
+
 static inline bool
 _hb_glyph_info_is_unicode_space (const hb_glyph_info_t *info)
 {

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-arabic-table.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-arabic-table.hh	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-arabic-table.hh	2017-10-13 22:53:19 UTC (rev 45535)
@@ -6,10 +6,10 @@
  *
  * on files with these headers:
  *
- * # ArabicShaping-9.0.0.txt
- * # Date: 2016-02-24, 22:25:00 GMT [RP]
- * # Blocks-9.0.0.txt
- * # Date: 2016-02-05, 23:48:00 GMT [KW]
+ * # ArabicShaping-10.0.0.txt
+ * # Date: 2017-02-16, 00:00:00 GMT [RP, KW]
+ * # Blocks-10.0.0.txt
+ * # Date: 2017-04-12, 17:30:00 GMT [KW]
  * UnicodeData.txt does not have a header.
  */
 
@@ -72,7 +72,10 @@
   /* Mandaic */
 
   /* 0840 */ R,D,D,D,D,D,R,R,D,R,D,D,D,D,D,D,D,D,D,D,R,D,U,U,U,X,X,X,X,X,X,X,
-  /* 0860 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
+
+  /* Syriac Supplement */
+
+  /* 0860 */ D,U,D,D,D,D,U,R,D,R,R,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
   /* 0880 */ X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,X,
 
   /* Arabic Extended-A */
@@ -130,7 +133,7 @@
   /* 1E920 */ D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,D,
   /* 1E940 */ D,D,D,D,
 
-}; /* Table items: 1214; occupancy: 54% */
+}; /* Table items: 1214; occupancy: 55% */
 
 
 static unsigned int

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-arabic.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-arabic.cc	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-arabic.cc	2017-10-13 22:53:19 UTC (rev 45535)
@@ -613,6 +613,80 @@
   HB_BUFFER_DEALLOCATE_VAR (buffer, arabic_shaping_action);
 }
 
+/* http://www.unicode.org/reports/tr53/tr53-1.pdf */
+
+static hb_codepoint_t
+modifier_combining_marks[] =
+{
+  0x0654u, /* ARABIC HAMZA ABOVE */
+  0x0655u, /* ARABIC HAMZA BELOW */
+  0x0658u, /* ARABIC MARK NOON GHUNNA */
+  0x06DCu, /* ARABIC SMALL HIGH SEEN */
+  0x06E3u, /* ARABIC SMALL LOW SEEN */
+  0x06E7u, /* ARABIC SMALL HIGH YEH */
+  0x06E8u, /* ARABIC SMALL HIGH NOON */
+  0x08F3u, /* ARABIC SMALL HIGH WAW */
+};
+
+static inline bool
+info_is_mcm (const hb_glyph_info_t &info)
+{
+  hb_codepoint_t u = info.codepoint;
+  for (unsigned int i = 0; i < ARRAY_LENGTH (modifier_combining_marks); i++)
+    if (u == modifier_combining_marks[i])
+      return true;
+  return false;
+}
+
+static void
+reorder_marks_arabic (const hb_ot_shape_plan_t *plan,
+		      hb_buffer_t              *buffer,
+		      unsigned int              start,
+		      unsigned int              end)
+{
+  hb_glyph_info_t *info = buffer->info;
+
+  unsigned int i = start;
+  for (unsigned int cc = 220; cc <= 230; cc += 10)
+  {
+    DEBUG_MSG (ARABIC, buffer, "Looking for %d's starting at %d\n", cc, i);
+    while (i < end && info_cc(info[i]) < cc)
+      i++;
+    DEBUG_MSG (ARABIC, buffer, "Looking for %d's stopped at %d\n", cc, i);
+
+    if (i == end)
+      break;
+
+    if (info_cc(info[i]) > cc)
+      continue;
+
+    /* Technically we should also check "info_cc(info[j]) == cc"
+     * in the following loop.  But not doing it is safe; we might
+     * end up moving all the 220 MCMs and 230 MCMs together in one
+     * move and be done. */
+    unsigned int j = i;
+    while (j < end && info_is_mcm (info[j]))
+      j++;
+    DEBUG_MSG (ARABIC, buffer, "Found %d's from %d to %d\n", cc, i, j);
+
+    if (i == j)
+      continue;
+
+    /* Shift it! */
+    DEBUG_MSG (ARABIC, buffer, "Shifting %d's: %d %d\n", cc, i, j);
+    hb_glyph_info_t temp[HB_OT_SHAPE_COMPLEX_MAX_COMBINING_MARKS];
+    assert (j - i <= ARRAY_LENGTH (temp));
+    buffer->merge_clusters (start, j);
+    memmove (temp, &info[i], (j - i) * sizeof (hb_glyph_info_t));
+    memmove (&info[start + j - i], &info[start], (i - start) * sizeof (hb_glyph_info_t));
+    memmove (&info[start], temp, (j - i) * sizeof (hb_glyph_info_t));
+
+    start += j - i;
+
+    i = j;
+  }
+}
+
 const hb_ot_complex_shaper_t _hb_ot_complex_shaper_arabic =
 {
   "arabic",
@@ -627,6 +701,7 @@
   NULL, /* compose */
   setup_masks_arabic,
   NULL, /* disable_otl */
+  reorder_marks_arabic,
   HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE,
   true, /* fallback_position */
 };

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-default.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-default.cc	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-default.cc	2017-10-13 22:53:19 UTC (rev 45535)
@@ -41,6 +41,7 @@
   NULL, /* compose */
   NULL, /* setup_masks */
   NULL, /* disable_otl */
+  NULL, /* reorder_marks */
   HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE,
   true, /* fallback_position */
 };

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-hangul.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-hangul.cc	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-hangul.cc	2017-10-13 22:53:19 UTC (rev 45535)
@@ -426,6 +426,7 @@
   NULL, /* compose */
   setup_masks_hangul,
   NULL, /* disable_otl */
+  NULL, /* reorder_marks */
   HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE,
   false, /* fallback_position */
 };

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-hebrew.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-hebrew.cc	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-hebrew.cc	2017-10-13 22:53:19 UTC (rev 45535)
@@ -181,6 +181,7 @@
   compose_hebrew,
   NULL, /* setup_masks */
   disable_otl_hebrew,
+  NULL, /* reorder_marks */
   HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE,
   true, /* fallback_position */
 };

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-machine.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-machine.hh	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-machine.hh	2017-10-13 22:53:19 UTC (rev 45535)
@@ -56,7 +56,7 @@
 	5u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 5u, 7u, 7u, 7u, 5u, 8u, 
 	5u, 7u, 7u, 7u, 8u, 8u, 1u, 16u, 8u, 13u, 4u, 8u, 6u, 6u, 16u, 16u, 
 	4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 16u, 16u, 4u, 8u, 6u, 6u, 
-	16u, 16u, 8u, 8u, 1u, 18u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 
+	16u, 16u, 8u, 8u, 1u, 19u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 
 	3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 
 	3u, 17u, 4u, 17u, 1u, 16u, 3u, 17u, 3u, 17u, 4u, 17u, 5u, 14u, 5u, 14u, 
 	5u, 10u, 9u, 10u, 9u, 9u, 9u, 10u, 9u, 10u, 9u, 9u, 5u, 10u, 3u, 13u, 
@@ -101,7 +101,7 @@
 	3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 14u, 4u, 14u, 
 	5u, 14u, 3u, 14u, 4u, 14u, 5u, 14u, 3u, 13u, 3u, 10u, 5u, 10u, 3u, 10u, 
 	3u, 13u, 1u, 16u, 3u, 10u, 5u, 10u, 5u, 10u, 9u, 10u, 9u, 9u, 9u, 10u, 
-	9u, 10u, 9u, 9u, 5u, 10u, 0
+	9u, 10u, 9u, 9u, 5u, 10u, 1u, 16u, 0
 };
 
 static const char _indic_syllable_machine_key_spans[] = {
@@ -127,7 +127,7 @@
 	3, 4, 3, 1, 4, 3, 1, 4, 
 	3, 1, 1, 16, 6, 5, 1, 1, 
 	5, 1, 1, 5, 1, 1, 5, 1, 
-	1, 1, 18, 15, 15, 14, 16, 15, 
+	1, 1, 19, 15, 15, 14, 16, 15, 
 	15, 14, 16, 15, 15, 14, 16, 15, 
 	15, 14, 16, 15, 15, 14, 10, 10, 
 	6, 2, 1, 2, 2, 1, 6, 11, 
@@ -172,7 +172,7 @@
 	12, 11, 10, 12, 11, 10, 12, 11, 
 	10, 12, 11, 10, 11, 8, 6, 8, 
 	11, 16, 8, 6, 6, 2, 1, 2, 
-	2, 1, 6
+	2, 1, 6, 16
 };
 
 static const short _indic_syllable_machine_index_offsets[] = {
@@ -198,52 +198,52 @@
 	954, 958, 963, 967, 969, 974, 978, 980, 
 	985, 989, 991, 993, 1010, 1017, 1023, 1025, 
 	1027, 1033, 1035, 1037, 1043, 1045, 1047, 1053, 
-	1055, 1057, 1059, 1078, 1094, 1110, 1125, 1142, 
-	1158, 1174, 1189, 1206, 1222, 1238, 1253, 1270, 
-	1286, 1302, 1317, 1334, 1350, 1366, 1381, 1392, 
-	1403, 1410, 1413, 1415, 1418, 1421, 1423, 1430, 
-	1442, 1451, 1458, 1467, 1479, 1492, 1505, 1517, 
-	1528, 1541, 1553, 1564, 1577, 1589, 1600, 1613, 
-	1625, 1636, 1649, 1666, 1678, 1694, 1710, 1727, 
-	1744, 1761, 1778, 1795, 1811, 1827, 1844, 1861, 
-	1878, 1895, 1912, 1928, 1944, 1961, 1978, 1995, 
-	2012, 2029, 2045, 2061, 2078, 2095, 2112, 2129, 
-	2146, 2162, 2178, 2194, 2210, 2225, 2242, 2258, 
-	2274, 2289, 2306, 2322, 2338, 2353, 2370, 2386, 
-	2402, 2417, 2434, 2450, 2466, 2481, 2492, 2503, 
-	2510, 2513, 2515, 2518, 2521, 2523, 2530, 2542, 
-	2551, 2558, 2567, 2579, 2592, 2605, 2617, 2628, 
-	2641, 2653, 2664, 2677, 2689, 2700, 2713, 2725, 
-	2736, 2749, 2766, 2778, 2794, 2810, 2827, 2844, 
-	2861, 2878, 2895, 2911, 2927, 2944, 2961, 2978, 
-	2995, 3012, 3028, 3044, 3061, 3078, 3095, 3112, 
-	3129, 3145, 3161, 3178, 3195, 3212, 3229, 3241, 
-	3258, 3274, 3290, 3305, 3322, 3338, 3354, 3369, 
-	3386, 3402, 3418, 3433, 3450, 3466, 3482, 3497, 
-	3514, 3530, 3546, 3561, 3572, 3583, 3590, 3593, 
-	3595, 3598, 3601, 3603, 3610, 3622, 3631, 3638, 
-	3647, 3659, 3672, 3685, 3697, 3708, 3721, 3733, 
-	3744, 3757, 3769, 3780, 3793, 3805, 3816, 3829, 
-	3846, 3858, 3874, 3890, 3907, 3924, 3941, 3958, 
-	3975, 3991, 4007, 4024, 4041, 4058, 4075, 4092, 
-	4108, 4124, 4141, 4158, 4175, 4192, 4209, 4225, 
-	4241, 4258, 4275, 4292, 4309, 4326, 4338, 4354, 
-	4366, 4382, 4398, 4413, 4430, 4446, 4462, 4477, 
-	4494, 4510, 4526, 4541, 4558, 4574, 4590, 4605, 
-	4622, 4638, 4654, 4669, 4680, 4691, 4698, 4701, 
-	4703, 4706, 4709, 4711, 4718, 4730, 4739, 4746, 
-	4755, 4767, 4780, 4793, 4805, 4816, 4829, 4841, 
-	4852, 4865, 4877, 4888, 4901, 4913, 4924, 4937, 
-	4954, 4966, 4982, 4998, 5015, 5032, 5049, 5066, 
-	5083, 5099, 5115, 5132, 5149, 5166, 5183, 5200, 
-	5216, 5232, 5249, 5266, 5283, 5300, 5317, 5333, 
-	5349, 5366, 5383, 5400, 5417, 5434, 5450, 5468, 
-	5484, 5502, 5514, 5521, 5524, 5526, 5529, 5532, 
-	5534, 5541, 5558, 5574, 5590, 5605, 5621, 5637, 
-	5654, 5667, 5679, 5690, 5703, 5715, 5726, 5739, 
-	5751, 5762, 5775, 5787, 5798, 5810, 5819, 5826, 
-	5835, 5847, 5864, 5873, 5880, 5887, 5890, 5892, 
-	5895, 5898, 5900
+	1055, 1057, 1059, 1079, 1095, 1111, 1126, 1143, 
+	1159, 1175, 1190, 1207, 1223, 1239, 1254, 1271, 
+	1287, 1303, 1318, 1335, 1351, 1367, 1382, 1393, 
+	1404, 1411, 1414, 1416, 1419, 1422, 1424, 1431, 
+	1443, 1452, 1459, 1468, 1480, 1493, 1506, 1518, 
+	1529, 1542, 1554, 1565, 1578, 1590, 1601, 1614, 
+	1626, 1637, 1650, 1667, 1679, 1695, 1711, 1728, 
+	1745, 1762, 1779, 1796, 1812, 1828, 1845, 1862, 
+	1879, 1896, 1913, 1929, 1945, 1962, 1979, 1996, 
+	2013, 2030, 2046, 2062, 2079, 2096, 2113, 2130, 
+	2147, 2163, 2179, 2195, 2211, 2226, 2243, 2259, 
+	2275, 2290, 2307, 2323, 2339, 2354, 2371, 2387, 
+	2403, 2418, 2435, 2451, 2467, 2482, 2493, 2504, 
+	2511, 2514, 2516, 2519, 2522, 2524, 2531, 2543, 
+	2552, 2559, 2568, 2580, 2593, 2606, 2618, 2629, 
+	2642, 2654, 2665, 2678, 2690, 2701, 2714, 2726, 
+	2737, 2750, 2767, 2779, 2795, 2811, 2828, 2845, 
+	2862, 2879, 2896, 2912, 2928, 2945, 2962, 2979, 
+	2996, 3013, 3029, 3045, 3062, 3079, 3096, 3113, 
+	3130, 3146, 3162, 3179, 3196, 3213, 3230, 3242, 
+	3259, 3275, 3291, 3306, 3323, 3339, 3355, 3370, 
+	3387, 3403, 3419, 3434, 3451, 3467, 3483, 3498, 
+	3515, 3531, 3547, 3562, 3573, 3584, 3591, 3594, 
+	3596, 3599, 3602, 3604, 3611, 3623, 3632, 3639, 
+	3648, 3660, 3673, 3686, 3698, 3709, 3722, 3734, 
+	3745, 3758, 3770, 3781, 3794, 3806, 3817, 3830, 
+	3847, 3859, 3875, 3891, 3908, 3925, 3942, 3959, 
+	3976, 3992, 4008, 4025, 4042, 4059, 4076, 4093, 
+	4109, 4125, 4142, 4159, 4176, 4193, 4210, 4226, 
+	4242, 4259, 4276, 4293, 4310, 4327, 4339, 4355, 
+	4367, 4383, 4399, 4414, 4431, 4447, 4463, 4478, 
+	4495, 4511, 4527, 4542, 4559, 4575, 4591, 4606, 
+	4623, 4639, 4655, 4670, 4681, 4692, 4699, 4702, 
+	4704, 4707, 4710, 4712, 4719, 4731, 4740, 4747, 
+	4756, 4768, 4781, 4794, 4806, 4817, 4830, 4842, 
+	4853, 4866, 4878, 4889, 4902, 4914, 4925, 4938, 
+	4955, 4967, 4983, 4999, 5016, 5033, 5050, 5067, 
+	5084, 5100, 5116, 5133, 5150, 5167, 5184, 5201, 
+	5217, 5233, 5250, 5267, 5284, 5301, 5318, 5334, 
+	5350, 5367, 5384, 5401, 5418, 5435, 5451, 5469, 
+	5485, 5503, 5515, 5522, 5525, 5527, 5530, 5533, 
+	5535, 5542, 5559, 5575, 5591, 5606, 5622, 5638, 
+	5655, 5668, 5680, 5691, 5704, 5716, 5727, 5740, 
+	5752, 5763, 5776, 5788, 5799, 5811, 5820, 5827, 
+	5836, 5848, 5865, 5874, 5881, 5888, 5891, 5893, 
+	5896, 5899, 5901, 5908
 };
 
 static const short _indic_syllable_machine_indicies[] = {
@@ -381,611 +381,613 @@
 	161, 161, 162, 157, 0, 183, 0, 184, 
 	0, 186, 185, 188, 189, 190, 191, 192, 
 	193, 84, 79, 194, 195, 196, 196, 156, 
-	197, 198, 199, 200, 201, 187, 203, 204, 
-	205, 206, 6, 1, 207, 208, 202, 202, 
-	38, 209, 202, 202, 210, 202, 211, 204, 
-	212, 212, 6, 1, 207, 208, 202, 202, 
-	202, 209, 202, 202, 210, 202, 204, 212, 
-	212, 6, 1, 207, 208, 202, 202, 202, 
-	209, 202, 202, 210, 202, 213, 202, 202, 
-	202, 19, 214, 202, 1, 207, 208, 202, 
-	202, 202, 215, 202, 213, 202, 216, 217, 
-	218, 219, 6, 1, 207, 208, 202, 202, 
-	36, 220, 202, 202, 210, 202, 221, 217, 
-	222, 222, 6, 1, 207, 208, 202, 202, 
-	202, 220, 202, 202, 210, 202, 217, 222, 
-	222, 6, 1, 207, 208, 202, 202, 202, 
-	220, 202, 202, 210, 202, 223, 202, 202, 
-	202, 19, 224, 202, 1, 207, 208, 202, 
-	202, 202, 215, 202, 223, 202, 225, 226, 
-	227, 228, 6, 1, 207, 208, 202, 202, 
-	34, 229, 202, 202, 210, 202, 230, 226, 
-	231, 231, 6, 1, 207, 208, 202, 202, 
-	202, 229, 202, 202, 210, 202, 226, 231, 
-	231, 6, 1, 207, 208, 202, 202, 202, 
-	229, 202, 202, 210, 202, 232, 202, 202, 
-	202, 19, 233, 202, 1, 207, 208, 202, 
-	202, 202, 215, 202, 232, 202, 234, 235, 
-	236, 237, 6, 1, 207, 208, 202, 202, 
-	32, 238, 202, 202, 210, 202, 239, 235, 
-	240, 240, 6, 1, 207, 208, 202, 202, 
-	202, 238, 202, 202, 210, 202, 235, 240, 
-	240, 6, 1, 207, 208, 202, 202, 202, 
-	238, 202, 202, 210, 202, 241, 202, 202, 
-	202, 19, 242, 202, 1, 207, 208, 202, 
-	202, 202, 215, 202, 241, 202, 243, 244, 
-	245, 246, 6, 1, 207, 208, 202, 202, 
-	30, 247, 202, 202, 210, 202, 248, 244, 
-	249, 249, 6, 1, 207, 208, 202, 202, 
-	202, 247, 202, 202, 210, 202, 244, 249, 
-	249, 6, 1, 207, 208, 202, 202, 202, 
-	247, 202, 202, 210, 202, 19, 250, 202, 
-	1, 207, 208, 202, 202, 202, 215, 202, 
-	251, 251, 202, 1, 207, 208, 202, 202, 
-	202, 215, 202, 252, 202, 202, 253, 207, 
-	208, 202, 207, 208, 202, 254, 202, 207, 
-	255, 202, 207, 256, 202, 207, 202, 252, 
-	202, 202, 202, 207, 208, 202, 257, 202, 
-	258, 259, 202, 1, 207, 208, 202, 202, 
-	4, 202, 3, 202, 251, 251, 202, 1, 
-	207, 208, 202, 251, 251, 202, 1, 207, 
-	208, 202, 257, 202, 251, 251, 202, 1, 
-	207, 208, 202, 257, 202, 258, 251, 202, 
-	1, 207, 208, 202, 202, 4, 202, 19, 
-	202, 260, 260, 6, 1, 207, 208, 202, 
-	202, 202, 215, 202, 261, 28, 262, 263, 
-	9, 1, 207, 208, 202, 202, 202, 215, 
-	202, 28, 262, 263, 9, 1, 207, 208, 
-	202, 202, 202, 215, 202, 262, 262, 9, 
-	1, 207, 208, 202, 202, 202, 215, 202, 
-	264, 25, 265, 266, 12, 1, 207, 208, 
-	202, 202, 202, 215, 202, 25, 265, 266, 
-	12, 1, 207, 208, 202, 202, 202, 215, 
-	202, 265, 265, 12, 1, 207, 208, 202, 
-	202, 202, 215, 202, 267, 22, 268, 269, 
-	15, 1, 207, 208, 202, 202, 202, 215, 
-	202, 22, 268, 269, 15, 1, 207, 208, 
-	202, 202, 202, 215, 202, 268, 268, 15, 
-	1, 207, 208, 202, 202, 202, 215, 202, 
-	270, 19, 251, 271, 202, 1, 207, 208, 
-	202, 202, 202, 215, 202, 19, 251, 271, 
-	202, 1, 207, 208, 202, 202, 202, 215, 
-	202, 251, 272, 202, 1, 207, 208, 202, 
-	202, 202, 215, 202, 19, 202, 251, 251, 
-	202, 1, 207, 208, 202, 202, 202, 215, 
-	202, 2, 3, 202, 202, 19, 250, 202, 
-	1, 207, 208, 202, 202, 202, 215, 202, 
-	2, 202, 244, 249, 249, 6, 1, 207, 
-	208, 202, 202, 202, 247, 202, 243, 244, 
-	249, 249, 6, 1, 207, 208, 202, 202, 
-	202, 247, 202, 202, 210, 202, 243, 244, 
-	245, 249, 6, 1, 207, 208, 202, 202, 
-	30, 247, 202, 202, 210, 202, 241, 202, 
-	273, 202, 260, 260, 6, 1, 207, 208, 
-	202, 202, 202, 215, 202, 241, 202, 241, 
-	202, 202, 202, 251, 251, 202, 1, 207, 
-	208, 202, 202, 202, 215, 202, 241, 202, 
-	241, 202, 202, 202, 251, 274, 202, 1, 
-	207, 208, 202, 202, 202, 215, 202, 241, 
-	202, 241, 202, 273, 202, 251, 251, 202, 
-	1, 207, 208, 202, 202, 202, 215, 202, 
-	241, 202, 241, 3, 202, 202, 19, 242, 
-	202, 1, 207, 208, 202, 202, 202, 215, 
-	202, 241, 202, 234, 235, 240, 240, 6, 
-	1, 207, 208, 202, 202, 202, 238, 202, 
-	202, 210, 202, 234, 235, 236, 240, 6, 
-	1, 207, 208, 202, 202, 32, 238, 202, 
-	202, 210, 202, 232, 202, 275, 202, 260, 
-	260, 6, 1, 207, 208, 202, 202, 202, 
-	215, 202, 232, 202, 232, 202, 202, 202, 
-	251, 251, 202, 1, 207, 208, 202, 202, 
-	202, 215, 202, 232, 202, 232, 202, 202, 
-	202, 251, 276, 202, 1, 207, 208, 202, 
-	202, 202, 215, 202, 232, 202, 232, 202, 
-	275, 202, 251, 251, 202, 1, 207, 208, 
-	202, 202, 202, 215, 202, 232, 202, 232, 
-	3, 202, 202, 19, 233, 202, 1, 207, 
-	208, 202, 202, 202, 215, 202, 232, 202, 
-	225, 226, 231, 231, 6, 1, 207, 208, 
-	202, 202, 202, 229, 202, 202, 210, 202, 
-	225, 226, 227, 231, 6, 1, 207, 208, 
-	202, 202, 34, 229, 202, 202, 210, 202, 
-	223, 202, 277, 202, 260, 260, 6, 1, 
-	207, 208, 202, 202, 202, 215, 202, 223, 
-	202, 223, 202, 202, 202, 251, 251, 202, 
-	1, 207, 208, 202, 202, 202, 215, 202, 
-	223, 202, 223, 202, 202, 202, 251, 278, 
-	202, 1, 207, 208, 202, 202, 202, 215, 
-	202, 223, 202, 223, 202, 277, 202, 251, 
-	251, 202, 1, 207, 208, 202, 202, 202, 
-	215, 202, 223, 202, 223, 3, 202, 202, 
-	19, 224, 202, 1, 207, 208, 202, 202, 
-	202, 215, 202, 223, 202, 216, 217, 222, 
-	222, 6, 1, 207, 208, 202, 202, 202, 
-	220, 202, 202, 210, 202, 216, 217, 218, 
-	222, 6, 1, 207, 208, 202, 202, 36, 
-	220, 202, 202, 210, 202, 213, 202, 279, 
-	202, 260, 260, 6, 1, 207, 208, 202, 
-	202, 202, 215, 202, 213, 202, 213, 202, 
-	202, 202, 251, 251, 202, 1, 207, 208, 
-	202, 202, 202, 215, 202, 213, 202, 213, 
-	202, 202, 202, 251, 280, 202, 1, 207, 
-	208, 202, 202, 202, 215, 202, 213, 202, 
-	213, 202, 279, 202, 251, 251, 202, 1, 
-	207, 208, 202, 202, 202, 215, 202, 213, 
-	202, 213, 3, 202, 202, 19, 214, 202, 
-	1, 207, 208, 202, 202, 202, 215, 202, 
-	213, 202, 203, 204, 212, 212, 6, 1, 
-	207, 208, 202, 202, 202, 209, 202, 202, 
-	210, 202, 203, 204, 205, 212, 6, 1, 
-	207, 208, 202, 202, 38, 209, 202, 202, 
-	210, 202, 282, 283, 284, 285, 45, 40, 
-	286, 287, 281, 281, 77, 288, 281, 281, 
-	289, 281, 290, 283, 291, 285, 45, 40, 
-	286, 287, 281, 281, 281, 288, 281, 281, 
-	289, 281, 283, 291, 285, 45, 40, 286, 
-	287, 281, 281, 281, 288, 281, 281, 289, 
-	281, 292, 281, 281, 281, 58, 293, 281, 
-	40, 286, 287, 281, 281, 281, 294, 281, 
-	292, 281, 295, 296, 297, 298, 45, 40, 
-	286, 287, 281, 281, 75, 299, 281, 281, 
-	289, 281, 300, 296, 301, 301, 45, 40, 
-	286, 287, 281, 281, 281, 299, 281, 281, 
-	289, 281, 296, 301, 301, 45, 40, 286, 
-	287, 281, 281, 281, 299, 281, 281, 289, 
-	281, 302, 281, 281, 281, 58, 303, 281, 
-	40, 286, 287, 281, 281, 281, 294, 281, 
-	302, 281, 304, 305, 306, 307, 45, 40, 
-	286, 287, 281, 281, 73, 308, 281, 281, 
-	289, 281, 309, 305, 310, 310, 45, 40, 
-	286, 287, 281, 281, 281, 308, 281, 281, 
-	289, 281, 305, 310, 310, 45, 40, 286, 
-	287, 281, 281, 281, 308, 281, 281, 289, 
-	281, 311, 281, 281, 281, 58, 312, 281, 
-	40, 286, 287, 281, 281, 281, 294, 281, 
-	311, 281, 313, 314, 315, 316, 45, 40, 
-	286, 287, 281, 281, 71, 317, 281, 281, 
-	289, 281, 318, 314, 319, 319, 45, 40, 
-	286, 287, 281, 281, 281, 317, 281, 281, 
-	289, 281, 314, 319, 319, 45, 40, 286, 
-	287, 281, 281, 281, 317, 281, 281, 289, 
-	281, 320, 281, 281, 281, 58, 321, 281, 
-	40, 286, 287, 281, 281, 281, 294, 281, 
-	320, 281, 322, 323, 324, 325, 45, 40, 
-	286, 287, 281, 281, 69, 326, 281, 281, 
-	289, 281, 327, 323, 328, 328, 45, 40, 
-	286, 287, 281, 281, 281, 326, 281, 281, 
-	289, 281, 323, 328, 328, 45, 40, 286, 
-	287, 281, 281, 281, 326, 281, 281, 289, 
-	281, 58, 329, 281, 40, 286, 287, 281, 
-	281, 281, 294, 281, 330, 330, 281, 40, 
-	286, 287, 281, 281, 281, 294, 281, 331, 
-	281, 281, 332, 286, 287, 281, 286, 287, 
-	281, 333, 281, 286, 334, 281, 286, 335, 
-	281, 286, 281, 331, 281, 281, 281, 286, 
-	287, 281, 336, 281, 337, 338, 281, 40, 
-	286, 287, 281, 281, 43, 281, 42, 281, 
-	330, 330, 281, 40, 286, 287, 281, 330, 
-	330, 281, 40, 286, 287, 281, 336, 281, 
-	330, 330, 281, 40, 286, 287, 281, 336, 
-	281, 337, 330, 281, 40, 286, 287, 281, 
-	281, 43, 281, 58, 281, 339, 339, 45, 
-	40, 286, 287, 281, 281, 281, 294, 281, 
-	340, 67, 341, 342, 48, 40, 286, 287, 
-	281, 281, 281, 294, 281, 67, 341, 342, 
-	48, 40, 286, 287, 281, 281, 281, 294, 
-	281, 341, 341, 48, 40, 286, 287, 281, 
-	281, 281, 294, 281, 343, 64, 344, 345, 
-	51, 40, 286, 287, 281, 281, 281, 294, 
-	281, 64, 344, 345, 51, 40, 286, 287, 
-	281, 281, 281, 294, 281, 344, 344, 51, 
-	40, 286, 287, 281, 281, 281, 294, 281, 
-	346, 61, 347, 348, 54, 40, 286, 287, 
-	281, 281, 281, 294, 281, 61, 347, 348, 
-	54, 40, 286, 287, 281, 281, 281, 294, 
-	281, 347, 347, 54, 40, 286, 287, 281, 
-	281, 281, 294, 281, 349, 58, 330, 350, 
-	281, 40, 286, 287, 281, 281, 281, 294, 
-	281, 58, 330, 350, 281, 40, 286, 287, 
-	281, 281, 281, 294, 281, 330, 351, 281, 
-	40, 286, 287, 281, 281, 281, 294, 281, 
-	58, 281, 330, 330, 281, 40, 286, 287, 
-	281, 281, 281, 294, 281, 41, 42, 281, 
-	281, 58, 329, 281, 40, 286, 287, 281, 
-	281, 281, 294, 281, 41, 281, 323, 328, 
-	328, 45, 40, 286, 287, 281, 281, 281, 
-	326, 281, 322, 323, 328, 328, 45, 40, 
-	286, 287, 281, 281, 281, 326, 281, 281, 
-	289, 281, 322, 323, 324, 328, 45, 40, 
-	286, 287, 281, 281, 69, 326, 281, 281, 
-	289, 281, 320, 281, 352, 281, 339, 339, 
-	45, 40, 286, 287, 281, 281, 281, 294, 
-	281, 320, 281, 320, 281, 281, 281, 330, 
-	330, 281, 40, 286, 287, 281, 281, 281, 
-	294, 281, 320, 281, 320, 281, 281, 281, 
-	330, 353, 281, 40, 286, 287, 281, 281, 
-	281, 294, 281, 320, 281, 320, 281, 352, 
-	281, 330, 330, 281, 40, 286, 287, 281, 
-	281, 281, 294, 281, 320, 281, 320, 42, 
-	281, 281, 58, 321, 281, 40, 286, 287, 
-	281, 281, 281, 294, 281, 320, 281, 313, 
-	314, 319, 319, 45, 40, 286, 287, 281, 
-	281, 281, 317, 281, 281, 289, 281, 313, 
-	314, 315, 319, 45, 40, 286, 287, 281, 
-	281, 71, 317, 281, 281, 289, 281, 311, 
-	281, 354, 281, 339, 339, 45, 40, 286, 
-	287, 281, 281, 281, 294, 281, 311, 281, 
-	311, 281, 281, 281, 330, 330, 281, 40, 
-	286, 287, 281, 281, 281, 294, 281, 311, 
-	281, 311, 281, 281, 281, 330, 355, 281, 
-	40, 286, 287, 281, 281, 281, 294, 281, 
-	311, 281, 311, 281, 354, 281, 330, 330, 
-	281, 40, 286, 287, 281, 281, 281, 294, 
-	281, 311, 281, 311, 42, 281, 281, 58, 
-	312, 281, 40, 286, 287, 281, 281, 281, 
-	294, 281, 311, 281, 304, 305, 310, 310, 
-	45, 40, 286, 287, 281, 281, 281, 308, 
-	281, 281, 289, 281, 304, 305, 306, 310, 
-	45, 40, 286, 287, 281, 281, 73, 308, 
-	281, 281, 289, 281, 302, 281, 356, 281, 
-	339, 339, 45, 40, 286, 287, 281, 281, 
-	281, 294, 281, 302, 281, 302, 281, 281, 
-	281, 330, 330, 281, 40, 286, 287, 281, 
-	281, 281, 294, 281, 302, 281, 302, 281, 
-	281, 281, 330, 357, 281, 40, 286, 287, 
-	281, 281, 281, 294, 281, 302, 281, 302, 
-	281, 356, 281, 330, 330, 281, 40, 286, 
-	287, 281, 281, 281, 294, 281, 302, 281, 
-	302, 42, 281, 281, 58, 303, 281, 40, 
-	286, 287, 281, 281, 281, 294, 281, 302, 
-	281, 295, 296, 301, 301, 45, 40, 286, 
-	287, 281, 281, 281, 299, 281, 281, 289, 
-	281, 295, 296, 297, 301, 45, 40, 286, 
-	287, 281, 281, 75, 299, 281, 281, 289, 
-	281, 292, 281, 358, 281, 339, 339, 45, 
-	40, 286, 287, 281, 281, 281, 294, 281, 
-	292, 281, 292, 281, 281, 281, 330, 330, 
-	281, 40, 286, 287, 281, 281, 281, 294, 
-	281, 292, 281, 292, 281, 281, 281, 330, 
-	359, 281, 40, 286, 287, 281, 281, 281, 
-	294, 281, 292, 281, 292, 281, 358, 281, 
-	330, 330, 281, 40, 286, 287, 281, 281, 
-	281, 294, 281, 292, 281, 76, 44, 44, 
-	45, 40, 281, 281, 281, 281, 281, 76, 
-	281, 292, 42, 281, 281, 58, 293, 281, 
-	40, 286, 287, 281, 281, 281, 294, 281, 
-	292, 281, 282, 283, 291, 285, 45, 40, 
-	286, 287, 281, 281, 281, 288, 281, 281, 
-	289, 281, 361, 191, 362, 362, 84, 79, 
-	194, 195, 360, 360, 360, 197, 360, 360, 
-	200, 360, 191, 362, 362, 84, 79, 194, 
-	195, 360, 360, 360, 197, 360, 360, 200, 
-	360, 363, 360, 360, 360, 98, 364, 360, 
-	79, 194, 195, 360, 360, 360, 365, 360, 
-	363, 360, 366, 367, 368, 369, 84, 79, 
-	194, 195, 360, 360, 115, 370, 360, 360, 
-	200, 360, 371, 367, 372, 372, 84, 79, 
-	194, 195, 360, 360, 360, 370, 360, 360, 
-	200, 360, 367, 372, 372, 84, 79, 194, 
-	195, 360, 360, 360, 370, 360, 360, 200, 
-	360, 373, 360, 360, 360, 98, 374, 360, 
-	79, 194, 195, 360, 360, 360, 365, 360, 
-	373, 360, 375, 376, 377, 378, 84, 79, 
-	194, 195, 360, 360, 113, 379, 360, 360, 
-	200, 360, 380, 376, 381, 381, 84, 79, 
-	194, 195, 360, 360, 360, 379, 360, 360, 
-	200, 360, 376, 381, 381, 84, 79, 194, 
-	195, 360, 360, 360, 379, 360, 360, 200, 
-	360, 382, 360, 360, 360, 98, 383, 360, 
-	79, 194, 195, 360, 360, 360, 365, 360, 
-	382, 360, 384, 385, 386, 387, 84, 79, 
-	194, 195, 360, 360, 111, 388, 360, 360, 
-	200, 360, 389, 385, 390, 390, 84, 79, 
-	194, 195, 360, 360, 360, 388, 360, 360, 
-	200, 360, 385, 390, 390, 84, 79, 194, 
-	195, 360, 360, 360, 388, 360, 360, 200, 
-	360, 391, 360, 360, 360, 98, 392, 360, 
-	79, 194, 195, 360, 360, 360, 365, 360, 
-	391, 360, 393, 394, 395, 396, 84, 79, 
-	194, 195, 360, 360, 109, 397, 360, 360, 
-	200, 360, 398, 394, 399, 399, 84, 79, 
-	194, 195, 360, 360, 360, 397, 360, 360, 
-	200, 360, 394, 399, 399, 84, 79, 194, 
-	195, 360, 360, 360, 397, 360, 360, 200, 
-	360, 98, 400, 360, 79, 194, 195, 360, 
-	360, 360, 365, 360, 401, 401, 360, 79, 
-	194, 195, 360, 360, 360, 365, 360, 402, 
-	360, 360, 403, 194, 195, 360, 194, 195, 
-	360, 404, 360, 194, 405, 360, 194, 406, 
-	360, 194, 360, 402, 360, 360, 360, 194, 
-	195, 360, 407, 360, 408, 409, 360, 79, 
-	194, 195, 360, 360, 82, 360, 81, 360, 
-	401, 401, 360, 79, 194, 195, 360, 401, 
-	401, 360, 79, 194, 195, 360, 407, 360, 
-	401, 401, 360, 79, 194, 195, 360, 407, 
-	360, 408, 401, 360, 79, 194, 195, 360, 
-	360, 82, 360, 98, 360, 410, 410, 84, 
-	79, 194, 195, 360, 360, 360, 365, 360, 
-	411, 107, 412, 413, 88, 79, 194, 195, 
-	360, 360, 360, 365, 360, 107, 412, 413, 
-	88, 79, 194, 195, 360, 360, 360, 365, 
-	360, 412, 412, 88, 79, 194, 195, 360, 
-	360, 360, 365, 360, 414, 104, 415, 416, 
-	91, 79, 194, 195, 360, 360, 360, 365, 
-	360, 104, 415, 416, 91, 79, 194, 195, 
-	360, 360, 360, 365, 360, 415, 415, 91, 
-	79, 194, 195, 360, 360, 360, 365, 360, 
-	417, 101, 418, 419, 94, 79, 194, 195, 
-	360, 360, 360, 365, 360, 101, 418, 419, 
-	94, 79, 194, 195, 360, 360, 360, 365, 
-	360, 418, 418, 94, 79, 194, 195, 360, 
-	360, 360, 365, 360, 420, 98, 401, 421, 
-	360, 79, 194, 195, 360, 360, 360, 365, 
-	360, 98, 401, 421, 360, 79, 194, 195, 
-	360, 360, 360, 365, 360, 401, 422, 360, 
-	79, 194, 195, 360, 360, 360, 365, 360, 
-	98, 360, 401, 401, 360, 79, 194, 195, 
-	360, 360, 360, 365, 360, 80, 81, 360, 
-	360, 98, 400, 360, 79, 194, 195, 360, 
-	360, 360, 365, 360, 80, 360, 394, 399, 
-	399, 84, 79, 194, 195, 360, 360, 360, 
-	397, 360, 393, 394, 399, 399, 84, 79, 
-	194, 195, 360, 360, 360, 397, 360, 360, 
-	200, 360, 393, 394, 395, 399, 84, 79, 
-	194, 195, 360, 360, 109, 397, 360, 360, 
-	200, 360, 391, 360, 423, 360, 410, 410, 
-	84, 79, 194, 195, 360, 360, 360, 365, 
-	360, 391, 360, 391, 360, 360, 360, 401, 
-	401, 360, 79, 194, 195, 360, 360, 360, 
-	365, 360, 391, 360, 391, 360, 360, 360, 
-	401, 424, 360, 79, 194, 195, 360, 360, 
-	360, 365, 360, 391, 360, 391, 360, 423, 
-	360, 401, 401, 360, 79, 194, 195, 360, 
-	360, 360, 365, 360, 391, 360, 391, 81, 
-	360, 360, 98, 392, 360, 79, 194, 195, 
-	360, 360, 360, 365, 360, 391, 360, 384, 
-	385, 390, 390, 84, 79, 194, 195, 360, 
-	360, 360, 388, 360, 360, 200, 360, 384, 
-	385, 386, 390, 84, 79, 194, 195, 360, 
-	360, 111, 388, 360, 360, 200, 360, 382, 
-	360, 425, 360, 410, 410, 84, 79, 194, 
-	195, 360, 360, 360, 365, 360, 382, 360, 
-	382, 360, 360, 360, 401, 401, 360, 79, 
-	194, 195, 360, 360, 360, 365, 360, 382, 
-	360, 382, 360, 360, 360, 401, 426, 360, 
-	79, 194, 195, 360, 360, 360, 365, 360, 
-	382, 360, 382, 360, 425, 360, 401, 401, 
-	360, 79, 194, 195, 360, 360, 360, 365, 
-	360, 382, 360, 382, 81, 360, 360, 98, 
-	383, 360, 79, 194, 195, 360, 360, 360, 
-	365, 360, 382, 360, 375, 376, 381, 381, 
-	84, 79, 194, 195, 360, 360, 360, 379, 
-	360, 360, 200, 360, 375, 376, 377, 381, 
-	84, 79, 194, 195, 360, 360, 113, 379, 
-	360, 360, 200, 360, 373, 360, 427, 360, 
-	410, 410, 84, 79, 194, 195, 360, 360, 
-	360, 365, 360, 373, 360, 373, 360, 360, 
-	360, 401, 401, 360, 79, 194, 195, 360, 
-	360, 360, 365, 360, 373, 360, 373, 360, 
-	360, 360, 401, 428, 360, 79, 194, 195, 
-	360, 360, 360, 365, 360, 373, 360, 373, 
-	360, 427, 360, 401, 401, 360, 79, 194, 
-	195, 360, 360, 360, 365, 360, 373, 360, 
-	373, 81, 360, 360, 98, 374, 360, 79, 
-	194, 195, 360, 360, 360, 365, 360, 373, 
-	360, 366, 367, 372, 372, 84, 79, 194, 
-	195, 360, 360, 360, 370, 360, 360, 200, 
-	360, 366, 367, 368, 372, 84, 79, 194, 
-	195, 360, 360, 115, 370, 360, 360, 200, 
-	360, 363, 360, 429, 360, 410, 410, 84, 
-	79, 194, 195, 360, 360, 360, 365, 360, 
-	363, 360, 363, 360, 360, 360, 401, 401, 
-	360, 79, 194, 195, 360, 360, 360, 365, 
-	360, 363, 360, 363, 360, 360, 360, 401, 
-	430, 360, 79, 194, 195, 360, 360, 360, 
-	365, 360, 363, 360, 363, 360, 429, 360, 
-	401, 401, 360, 79, 194, 195, 360, 360, 
-	360, 365, 360, 363, 360, 363, 81, 360, 
-	360, 98, 364, 360, 79, 194, 195, 360, 
-	360, 360, 365, 360, 363, 360, 116, 83, 
-	83, 84, 79, 431, 431, 431, 431, 156, 
-	116, 431, 190, 191, 362, 362, 84, 79, 
-	194, 195, 360, 360, 360, 197, 360, 360, 
-	200, 360, 116, 83, 83, 84, 79, 431, 
-	431, 431, 431, 431, 116, 431, 433, 434, 
-	435, 436, 123, 118, 437, 438, 432, 432, 
-	155, 439, 432, 432, 440, 432, 441, 434, 
-	436, 436, 123, 118, 437, 438, 432, 432, 
-	432, 439, 432, 432, 440, 432, 434, 436, 
-	436, 123, 118, 437, 438, 432, 432, 432, 
-	439, 432, 432, 440, 432, 442, 432, 432, 
-	432, 136, 443, 432, 118, 437, 438, 432, 
-	432, 432, 444, 432, 442, 432, 445, 446, 
-	447, 448, 123, 118, 437, 438, 432, 432, 
-	153, 449, 432, 432, 440, 432, 450, 446, 
-	451, 451, 123, 118, 437, 438, 432, 432, 
-	432, 449, 432, 432, 440, 432, 446, 451, 
-	451, 123, 118, 437, 438, 432, 432, 432, 
-	449, 432, 432, 440, 432, 452, 432, 432, 
-	432, 136, 453, 432, 118, 437, 438, 432, 
-	432, 432, 444, 432, 452, 432, 454, 455, 
-	456, 457, 123, 118, 437, 438, 432, 432, 
-	151, 458, 432, 432, 440, 432, 459, 455, 
-	460, 460, 123, 118, 437, 438, 432, 432, 
-	432, 458, 432, 432, 440, 432, 455, 460, 
-	460, 123, 118, 437, 438, 432, 432, 432, 
-	458, 432, 432, 440, 432, 461, 432, 432, 
-	432, 136, 462, 432, 118, 437, 438, 432, 
-	432, 432, 444, 432, 461, 432, 463, 464, 
-	465, 466, 123, 118, 437, 438, 432, 432, 
-	149, 467, 432, 432, 440, 432, 468, 464, 
-	469, 469, 123, 118, 437, 438, 432, 432, 
-	432, 467, 432, 432, 440, 432, 464, 469, 
-	469, 123, 118, 437, 438, 432, 432, 432, 
-	467, 432, 432, 440, 432, 470, 432, 432, 
-	432, 136, 471, 432, 118, 437, 438, 432, 
-	432, 432, 444, 432, 470, 432, 472, 473, 
-	474, 475, 123, 118, 437, 438, 432, 432, 
-	147, 476, 432, 432, 440, 432, 477, 473, 
-	478, 478, 123, 118, 437, 438, 432, 432, 
-	432, 476, 432, 432, 440, 432, 473, 478, 
-	478, 123, 118, 437, 438, 432, 432, 432, 
-	476, 432, 432, 440, 432, 136, 479, 432, 
-	118, 437, 438, 432, 432, 432, 444, 432, 
-	480, 480, 432, 118, 437, 438, 432, 432, 
-	432, 444, 432, 481, 432, 432, 482, 437, 
-	438, 432, 437, 438, 432, 483, 432, 437, 
-	484, 432, 437, 485, 432, 437, 432, 481, 
-	432, 432, 432, 437, 438, 432, 486, 432, 
-	487, 488, 432, 118, 437, 438, 432, 432, 
-	121, 432, 120, 432, 480, 480, 432, 118, 
-	437, 438, 432, 480, 480, 432, 118, 437, 
-	438, 432, 486, 432, 480, 480, 432, 118, 
-	437, 438, 432, 486, 432, 487, 480, 432, 
-	118, 437, 438, 432, 432, 121, 432, 136, 
-	432, 489, 489, 123, 118, 437, 438, 432, 
-	432, 432, 444, 432, 490, 145, 491, 492, 
-	126, 118, 437, 438, 432, 432, 432, 444, 
-	432, 145, 491, 492, 126, 118, 437, 438, 
-	432, 432, 432, 444, 432, 491, 491, 126, 
-	118, 437, 438, 432, 432, 432, 444, 432, 
-	493, 142, 494, 495, 129, 118, 437, 438, 
-	432, 432, 432, 444, 432, 142, 494, 495, 
-	129, 118, 437, 438, 432, 432, 432, 444, 
-	432, 494, 494, 129, 118, 437, 438, 432, 
-	432, 432, 444, 432, 496, 139, 497, 498, 
-	132, 118, 437, 438, 432, 432, 432, 444, 
-	432, 139, 497, 498, 132, 118, 437, 438, 
-	432, 432, 432, 444, 432, 497, 497, 132, 
-	118, 437, 438, 432, 432, 432, 444, 432, 
-	499, 136, 480, 500, 432, 118, 437, 438, 
-	432, 432, 432, 444, 432, 136, 480, 500, 
-	432, 118, 437, 438, 432, 432, 432, 444, 
-	432, 480, 501, 432, 118, 437, 438, 432, 
-	432, 432, 444, 432, 136, 432, 480, 480, 
-	432, 118, 437, 438, 432, 432, 432, 444, 
-	432, 119, 120, 432, 432, 136, 479, 432, 
-	118, 437, 438, 432, 432, 432, 444, 432, 
-	119, 432, 473, 478, 478, 123, 118, 437, 
-	438, 432, 432, 432, 476, 432, 472, 473, 
-	478, 478, 123, 118, 437, 438, 432, 432, 
-	432, 476, 432, 432, 440, 432, 472, 473, 
-	474, 478, 123, 118, 437, 438, 432, 432, 
-	147, 476, 432, 432, 440, 432, 470, 432, 
-	502, 432, 489, 489, 123, 118, 437, 438, 
-	432, 432, 432, 444, 432, 470, 432, 470, 
-	432, 432, 432, 480, 480, 432, 118, 437, 
-	438, 432, 432, 432, 444, 432, 470, 432, 
-	470, 432, 432, 432, 480, 503, 432, 118, 
-	437, 438, 432, 432, 432, 444, 432, 470, 
-	432, 470, 432, 502, 432, 480, 480, 432, 
-	118, 437, 438, 432, 432, 432, 444, 432, 
-	470, 432, 470, 120, 432, 432, 136, 471, 
-	432, 118, 437, 438, 432, 432, 432, 444, 
-	432, 470, 432, 463, 464, 469, 469, 123, 
-	118, 437, 438, 432, 432, 432, 467, 432, 
-	432, 440, 432, 463, 464, 465, 469, 123, 
-	118, 437, 438, 432, 432, 149, 467, 432, 
-	432, 440, 432, 461, 432, 504, 432, 489, 
-	489, 123, 118, 437, 438, 432, 432, 432, 
-	444, 432, 461, 432, 461, 432, 432, 432, 
-	480, 480, 432, 118, 437, 438, 432, 432, 
-	432, 444, 432, 461, 432, 461, 432, 432, 
-	432, 480, 505, 432, 118, 437, 438, 432, 
-	432, 432, 444, 432, 461, 432, 461, 432, 
-	504, 432, 480, 480, 432, 118, 437, 438, 
-	432, 432, 432, 444, 432, 461, 432, 461, 
-	120, 432, 432, 136, 462, 432, 118, 437, 
-	438, 432, 432, 432, 444, 432, 461, 432, 
-	454, 455, 460, 460, 123, 118, 437, 438, 
-	432, 432, 432, 458, 432, 432, 440, 432, 
-	454, 455, 456, 460, 123, 118, 437, 438, 
-	432, 432, 151, 458, 432, 432, 440, 432, 
-	452, 432, 506, 432, 489, 489, 123, 118, 
-	437, 438, 432, 432, 432, 444, 432, 452, 
-	432, 452, 432, 432, 432, 480, 480, 432, 
-	118, 437, 438, 432, 432, 432, 444, 432, 
-	452, 432, 452, 432, 432, 432, 480, 507, 
-	432, 118, 437, 438, 432, 432, 432, 444, 
-	432, 452, 432, 452, 432, 506, 432, 480, 
-	480, 432, 118, 437, 438, 432, 432, 432, 
-	444, 432, 452, 432, 452, 120, 432, 432, 
-	136, 453, 432, 118, 437, 438, 432, 432, 
-	432, 444, 432, 452, 432, 445, 446, 451, 
-	451, 123, 118, 437, 438, 432, 432, 432, 
-	449, 432, 432, 440, 432, 445, 446, 447, 
-	451, 123, 118, 437, 438, 432, 432, 153, 
-	449, 432, 432, 440, 432, 442, 432, 508, 
-	432, 489, 489, 123, 118, 437, 438, 432, 
-	432, 432, 444, 432, 442, 432, 442, 432, 
-	432, 432, 480, 480, 432, 118, 437, 438, 
-	432, 432, 432, 444, 432, 442, 432, 442, 
-	432, 432, 432, 480, 509, 432, 118, 437, 
-	438, 432, 432, 432, 444, 432, 442, 432, 
-	442, 432, 508, 432, 480, 480, 432, 118, 
-	437, 438, 432, 432, 432, 444, 432, 442, 
-	432, 442, 120, 432, 432, 136, 443, 432, 
-	118, 437, 438, 432, 432, 432, 444, 432, 
-	442, 432, 433, 434, 436, 436, 123, 118, 
-	437, 438, 432, 432, 432, 439, 432, 432, 
-	440, 432, 188, 189, 190, 191, 510, 362, 
-	84, 79, 194, 195, 196, 196, 156, 197, 
-	360, 188, 200, 360, 203, 511, 205, 206, 
-	6, 1, 207, 208, 202, 202, 38, 209, 
-	202, 202, 210, 202, 213, 189, 190, 191, 
-	512, 513, 84, 157, 514, 515, 202, 196, 
-	156, 516, 202, 213, 200, 202, 116, 517, 
-	517, 84, 157, 207, 208, 202, 202, 156, 
-	518, 202, 519, 202, 202, 520, 514, 515, 
-	202, 514, 515, 202, 254, 202, 514, 521, 
-	202, 514, 522, 202, 514, 202, 519, 202, 
-	202, 202, 514, 515, 202, 523, 3, 360, 
-	360, 401, 430, 360, 79, 194, 195, 360, 
-	360, 360, 365, 360, 523, 360, 524, 367, 
-	525, 526, 84, 157, 514, 515, 202, 202, 
-	158, 370, 202, 202, 200, 202, 527, 367, 
-	528, 528, 84, 157, 514, 515, 202, 202, 
-	202, 370, 202, 202, 200, 202, 367, 528, 
-	528, 84, 157, 514, 515, 202, 202, 202, 
-	370, 202, 202, 200, 202, 524, 367, 528, 
-	528, 84, 157, 514, 515, 202, 202, 202, 
-	370, 202, 202, 200, 202, 524, 367, 525, 
-	528, 84, 157, 514, 515, 202, 202, 158, 
-	370, 202, 202, 200, 202, 213, 202, 279, 
-	116, 529, 529, 160, 157, 207, 208, 202, 
-	202, 202, 518, 202, 213, 202, 530, 184, 
-	531, 532, 162, 157, 514, 515, 202, 202, 
-	202, 533, 202, 184, 531, 532, 162, 157, 
-	514, 515, 202, 202, 202, 533, 202, 531, 
-	531, 162, 157, 514, 515, 202, 202, 202, 
-	533, 202, 534, 181, 535, 536, 165, 157, 
-	514, 515, 202, 202, 202, 533, 202, 181, 
-	535, 536, 165, 157, 514, 515, 202, 202, 
-	202, 533, 202, 535, 535, 165, 157, 514, 
-	515, 202, 202, 202, 533, 202, 537, 178, 
-	538, 539, 168, 157, 514, 515, 202, 202, 
-	202, 533, 202, 178, 538, 539, 168, 157, 
-	514, 515, 202, 202, 202, 533, 202, 538, 
-	538, 168, 157, 514, 515, 202, 202, 202, 
-	533, 202, 540, 175, 541, 542, 202, 157, 
-	514, 515, 202, 202, 202, 533, 202, 175, 
-	541, 542, 202, 157, 514, 515, 202, 202, 
-	202, 533, 202, 541, 541, 202, 157, 514, 
-	515, 202, 202, 202, 533, 202, 543, 202, 
-	544, 545, 202, 157, 514, 515, 202, 202, 
-	172, 202, 171, 202, 541, 541, 202, 157, 
-	514, 515, 202, 541, 541, 202, 157, 514, 
-	515, 202, 543, 202, 541, 541, 202, 157, 
-	514, 515, 202, 543, 202, 544, 541, 202, 
-	157, 514, 515, 202, 202, 172, 202, 523, 
-	171, 360, 360, 98, 364, 360, 79, 194, 
-	195, 360, 360, 360, 365, 360, 523, 360, 
-	547, 546, 548, 548, 546, 186, 549, 550, 
-	546, 548, 548, 546, 186, 549, 550, 546, 
-	551, 546, 546, 552, 549, 550, 546, 549, 
-	550, 546, 553, 546, 549, 554, 546, 549, 
-	555, 546, 549, 546, 551, 546, 546, 546, 
-	549, 550, 546, 0
+	197, 198, 199, 200, 201, 202, 187, 204, 
+	205, 206, 207, 6, 1, 208, 209, 203, 
+	203, 38, 210, 203, 203, 211, 203, 212, 
+	205, 213, 213, 6, 1, 208, 209, 203, 
+	203, 203, 210, 203, 203, 211, 203, 205, 
+	213, 213, 6, 1, 208, 209, 203, 203, 
+	203, 210, 203, 203, 211, 203, 214, 203, 
+	203, 203, 19, 215, 203, 1, 208, 209, 
+	203, 203, 203, 216, 203, 214, 203, 217, 
+	218, 219, 220, 6, 1, 208, 209, 203, 
+	203, 36, 221, 203, 203, 211, 203, 222, 
+	218, 223, 223, 6, 1, 208, 209, 203, 
+	203, 203, 221, 203, 203, 211, 203, 218, 
+	223, 223, 6, 1, 208, 209, 203, 203, 
+	203, 221, 203, 203, 211, 203, 224, 203, 
+	203, 203, 19, 225, 203, 1, 208, 209, 
+	203, 203, 203, 216, 203, 224, 203, 226, 
+	227, 228, 229, 6, 1, 208, 209, 203, 
+	203, 34, 230, 203, 203, 211, 203, 231, 
+	227, 232, 232, 6, 1, 208, 209, 203, 
+	203, 203, 230, 203, 203, 211, 203, 227, 
+	232, 232, 6, 1, 208, 209, 203, 203, 
+	203, 230, 203, 203, 211, 203, 233, 203, 
+	203, 203, 19, 234, 203, 1, 208, 209, 
+	203, 203, 203, 216, 203, 233, 203, 235, 
+	236, 237, 238, 6, 1, 208, 209, 203, 
+	203, 32, 239, 203, 203, 211, 203, 240, 
+	236, 241, 241, 6, 1, 208, 209, 203, 
+	203, 203, 239, 203, 203, 211, 203, 236, 
+	241, 241, 6, 1, 208, 209, 203, 203, 
+	203, 239, 203, 203, 211, 203, 242, 203, 
+	203, 203, 19, 243, 203, 1, 208, 209, 
+	203, 203, 203, 216, 203, 242, 203, 244, 
+	245, 246, 247, 6, 1, 208, 209, 203, 
+	203, 30, 248, 203, 203, 211, 203, 249, 
+	245, 250, 250, 6, 1, 208, 209, 203, 
+	203, 203, 248, 203, 203, 211, 203, 245, 
+	250, 250, 6, 1, 208, 209, 203, 203, 
+	203, 248, 203, 203, 211, 203, 19, 251, 
+	203, 1, 208, 209, 203, 203, 203, 216, 
+	203, 252, 252, 203, 1, 208, 209, 203, 
+	203, 203, 216, 203, 253, 203, 203, 254, 
+	208, 209, 203, 208, 209, 203, 255, 203, 
+	208, 256, 203, 208, 257, 203, 208, 203, 
+	253, 203, 203, 203, 208, 209, 203, 258, 
+	203, 259, 260, 203, 1, 208, 209, 203, 
+	203, 4, 203, 3, 203, 252, 252, 203, 
+	1, 208, 209, 203, 252, 252, 203, 1, 
+	208, 209, 203, 258, 203, 252, 252, 203, 
+	1, 208, 209, 203, 258, 203, 259, 252, 
+	203, 1, 208, 209, 203, 203, 4, 203, 
+	19, 203, 261, 261, 6, 1, 208, 209, 
+	203, 203, 203, 216, 203, 262, 28, 263, 
+	264, 9, 1, 208, 209, 203, 203, 203, 
+	216, 203, 28, 263, 264, 9, 1, 208, 
+	209, 203, 203, 203, 216, 203, 263, 263, 
+	9, 1, 208, 209, 203, 203, 203, 216, 
+	203, 265, 25, 266, 267, 12, 1, 208, 
+	209, 203, 203, 203, 216, 203, 25, 266, 
+	267, 12, 1, 208, 209, 203, 203, 203, 
+	216, 203, 266, 266, 12, 1, 208, 209, 
+	203, 203, 203, 216, 203, 268, 22, 269, 
+	270, 15, 1, 208, 209, 203, 203, 203, 
+	216, 203, 22, 269, 270, 15, 1, 208, 
+	209, 203, 203, 203, 216, 203, 269, 269, 
+	15, 1, 208, 209, 203, 203, 203, 216, 
+	203, 271, 19, 252, 272, 203, 1, 208, 
+	209, 203, 203, 203, 216, 203, 19, 252, 
+	272, 203, 1, 208, 209, 203, 203, 203, 
+	216, 203, 252, 273, 203, 1, 208, 209, 
+	203, 203, 203, 216, 203, 19, 203, 252, 
+	252, 203, 1, 208, 209, 203, 203, 203, 
+	216, 203, 2, 3, 203, 203, 19, 251, 
+	203, 1, 208, 209, 203, 203, 203, 216, 
+	203, 2, 203, 245, 250, 250, 6, 1, 
+	208, 209, 203, 203, 203, 248, 203, 244, 
+	245, 250, 250, 6, 1, 208, 209, 203, 
+	203, 203, 248, 203, 203, 211, 203, 244, 
+	245, 246, 250, 6, 1, 208, 209, 203, 
+	203, 30, 248, 203, 203, 211, 203, 242, 
+	203, 274, 203, 261, 261, 6, 1, 208, 
+	209, 203, 203, 203, 216, 203, 242, 203, 
+	242, 203, 203, 203, 252, 252, 203, 1, 
+	208, 209, 203, 203, 203, 216, 203, 242, 
+	203, 242, 203, 203, 203, 252, 275, 203, 
+	1, 208, 209, 203, 203, 203, 216, 203, 
+	242, 203, 242, 203, 274, 203, 252, 252, 
+	203, 1, 208, 209, 203, 203, 203, 216, 
+	203, 242, 203, 242, 3, 203, 203, 19, 
+	243, 203, 1, 208, 209, 203, 203, 203, 
+	216, 203, 242, 203, 235, 236, 241, 241, 
+	6, 1, 208, 209, 203, 203, 203, 239, 
+	203, 203, 211, 203, 235, 236, 237, 241, 
+	6, 1, 208, 209, 203, 203, 32, 239, 
+	203, 203, 211, 203, 233, 203, 276, 203, 
+	261, 261, 6, 1, 208, 209, 203, 203, 
+	203, 216, 203, 233, 203, 233, 203, 203, 
+	203, 252, 252, 203, 1, 208, 209, 203, 
+	203, 203, 216, 203, 233, 203, 233, 203, 
+	203, 203, 252, 277, 203, 1, 208, 209, 
+	203, 203, 203, 216, 203, 233, 203, 233, 
+	203, 276, 203, 252, 252, 203, 1, 208, 
+	209, 203, 203, 203, 216, 203, 233, 203, 
+	233, 3, 203, 203, 19, 234, 203, 1, 
+	208, 209, 203, 203, 203, 216, 203, 233, 
+	203, 226, 227, 232, 232, 6, 1, 208, 
+	209, 203, 203, 203, 230, 203, 203, 211, 
+	203, 226, 227, 228, 232, 6, 1, 208, 
+	209, 203, 203, 34, 230, 203, 203, 211, 
+	203, 224, 203, 278, 203, 261, 261, 6, 
+	1, 208, 209, 203, 203, 203, 216, 203, 
+	224, 203, 224, 203, 203, 203, 252, 252, 
+	203, 1, 208, 209, 203, 203, 203, 216, 
+	203, 224, 203, 224, 203, 203, 203, 252, 
+	279, 203, 1, 208, 209, 203, 203, 203, 
+	216, 203, 224, 203, 224, 203, 278, 203, 
+	252, 252, 203, 1, 208, 209, 203, 203, 
+	203, 216, 203, 224, 203, 224, 3, 203, 
+	203, 19, 225, 203, 1, 208, 209, 203, 
+	203, 203, 216, 203, 224, 203, 217, 218, 
+	223, 223, 6, 1, 208, 209, 203, 203, 
+	203, 221, 203, 203, 211, 203, 217, 218, 
+	219, 223, 6, 1, 208, 209, 203, 203, 
+	36, 221, 203, 203, 211, 203, 214, 203, 
+	280, 203, 261, 261, 6, 1, 208, 209, 
+	203, 203, 203, 216, 203, 214, 203, 214, 
+	203, 203, 203, 252, 252, 203, 1, 208, 
+	209, 203, 203, 203, 216, 203, 214, 203, 
+	214, 203, 203, 203, 252, 281, 203, 1, 
+	208, 209, 203, 203, 203, 216, 203, 214, 
+	203, 214, 203, 280, 203, 252, 252, 203, 
+	1, 208, 209, 203, 203, 203, 216, 203, 
+	214, 203, 214, 3, 203, 203, 19, 215, 
+	203, 1, 208, 209, 203, 203, 203, 216, 
+	203, 214, 203, 204, 205, 213, 213, 6, 
+	1, 208, 209, 203, 203, 203, 210, 203, 
+	203, 211, 203, 204, 205, 206, 213, 6, 
+	1, 208, 209, 203, 203, 38, 210, 203, 
+	203, 211, 203, 283, 284, 285, 286, 45, 
+	40, 287, 288, 282, 282, 77, 289, 282, 
+	282, 290, 282, 291, 284, 292, 286, 45, 
+	40, 287, 288, 282, 282, 282, 289, 282, 
+	282, 290, 282, 284, 292, 286, 45, 40, 
+	287, 288, 282, 282, 282, 289, 282, 282, 
+	290, 282, 293, 282, 282, 282, 58, 294, 
+	282, 40, 287, 288, 282, 282, 282, 295, 
+	282, 293, 282, 296, 297, 298, 299, 45, 
+	40, 287, 288, 282, 282, 75, 300, 282, 
+	282, 290, 282, 301, 297, 302, 302, 45, 
+	40, 287, 288, 282, 282, 282, 300, 282, 
+	282, 290, 282, 297, 302, 302, 45, 40, 
+	287, 288, 282, 282, 282, 300, 282, 282, 
+	290, 282, 303, 282, 282, 282, 58, 304, 
+	282, 40, 287, 288, 282, 282, 282, 295, 
+	282, 303, 282, 305, 306, 307, 308, 45, 
+	40, 287, 288, 282, 282, 73, 309, 282, 
+	282, 290, 282, 310, 306, 311, 311, 45, 
+	40, 287, 288, 282, 282, 282, 309, 282, 
+	282, 290, 282, 306, 311, 311, 45, 40, 
+	287, 288, 282, 282, 282, 309, 282, 282, 
+	290, 282, 312, 282, 282, 282, 58, 313, 
+	282, 40, 287, 288, 282, 282, 282, 295, 
+	282, 312, 282, 314, 315, 316, 317, 45, 
+	40, 287, 288, 282, 282, 71, 318, 282, 
+	282, 290, 282, 319, 315, 320, 320, 45, 
+	40, 287, 288, 282, 282, 282, 318, 282, 
+	282, 290, 282, 315, 320, 320, 45, 40, 
+	287, 288, 282, 282, 282, 318, 282, 282, 
+	290, 282, 321, 282, 282, 282, 58, 322, 
+	282, 40, 287, 288, 282, 282, 282, 295, 
+	282, 321, 282, 323, 324, 325, 326, 45, 
+	40, 287, 288, 282, 282, 69, 327, 282, 
+	282, 290, 282, 328, 324, 329, 329, 45, 
+	40, 287, 288, 282, 282, 282, 327, 282, 
+	282, 290, 282, 324, 329, 329, 45, 40, 
+	287, 288, 282, 282, 282, 327, 282, 282, 
+	290, 282, 58, 330, 282, 40, 287, 288, 
+	282, 282, 282, 295, 282, 331, 331, 282, 
+	40, 287, 288, 282, 282, 282, 295, 282, 
+	332, 282, 282, 333, 287, 288, 282, 287, 
+	288, 282, 334, 282, 287, 335, 282, 287, 
+	336, 282, 287, 282, 332, 282, 282, 282, 
+	287, 288, 282, 337, 282, 338, 339, 282, 
+	40, 287, 288, 282, 282, 43, 282, 42, 
+	282, 331, 331, 282, 40, 287, 288, 282, 
+	331, 331, 282, 40, 287, 288, 282, 337, 
+	282, 331, 331, 282, 40, 287, 288, 282, 
+	337, 282, 338, 331, 282, 40, 287, 288, 
+	282, 282, 43, 282, 58, 282, 340, 340, 
+	45, 40, 287, 288, 282, 282, 282, 295, 
+	282, 341, 67, 342, 343, 48, 40, 287, 
+	288, 282, 282, 282, 295, 282, 67, 342, 
+	343, 48, 40, 287, 288, 282, 282, 282, 
+	295, 282, 342, 342, 48, 40, 287, 288, 
+	282, 282, 282, 295, 282, 344, 64, 345, 
+	346, 51, 40, 287, 288, 282, 282, 282, 
+	295, 282, 64, 345, 346, 51, 40, 287, 
+	288, 282, 282, 282, 295, 282, 345, 345, 
+	51, 40, 287, 288, 282, 282, 282, 295, 
+	282, 347, 61, 348, 349, 54, 40, 287, 
+	288, 282, 282, 282, 295, 282, 61, 348, 
+	349, 54, 40, 287, 288, 282, 282, 282, 
+	295, 282, 348, 348, 54, 40, 287, 288, 
+	282, 282, 282, 295, 282, 350, 58, 331, 
+	351, 282, 40, 287, 288, 282, 282, 282, 
+	295, 282, 58, 331, 351, 282, 40, 287, 
+	288, 282, 282, 282, 295, 282, 331, 352, 
+	282, 40, 287, 288, 282, 282, 282, 295, 
+	282, 58, 282, 331, 331, 282, 40, 287, 
+	288, 282, 282, 282, 295, 282, 41, 42, 
+	282, 282, 58, 330, 282, 40, 287, 288, 
+	282, 282, 282, 295, 282, 41, 282, 324, 
+	329, 329, 45, 40, 287, 288, 282, 282, 
+	282, 327, 282, 323, 324, 329, 329, 45, 
+	40, 287, 288, 282, 282, 282, 327, 282, 
+	282, 290, 282, 323, 324, 325, 329, 45, 
+	40, 287, 288, 282, 282, 69, 327, 282, 
+	282, 290, 282, 321, 282, 353, 282, 340, 
+	340, 45, 40, 287, 288, 282, 282, 282, 
+	295, 282, 321, 282, 321, 282, 282, 282, 
+	331, 331, 282, 40, 287, 288, 282, 282, 
+	282, 295, 282, 321, 282, 321, 282, 282, 
+	282, 331, 354, 282, 40, 287, 288, 282, 
+	282, 282, 295, 282, 321, 282, 321, 282, 
+	353, 282, 331, 331, 282, 40, 287, 288, 
+	282, 282, 282, 295, 282, 321, 282, 321, 
+	42, 282, 282, 58, 322, 282, 40, 287, 
+	288, 282, 282, 282, 295, 282, 321, 282, 
+	314, 315, 320, 320, 45, 40, 287, 288, 
+	282, 282, 282, 318, 282, 282, 290, 282, 
+	314, 315, 316, 320, 45, 40, 287, 288, 
+	282, 282, 71, 318, 282, 282, 290, 282, 
+	312, 282, 355, 282, 340, 340, 45, 40, 
+	287, 288, 282, 282, 282, 295, 282, 312, 
+	282, 312, 282, 282, 282, 331, 331, 282, 
+	40, 287, 288, 282, 282, 282, 295, 282, 
+	312, 282, 312, 282, 282, 282, 331, 356, 
+	282, 40, 287, 288, 282, 282, 282, 295, 
+	282, 312, 282, 312, 282, 355, 282, 331, 
+	331, 282, 40, 287, 288, 282, 282, 282, 
+	295, 282, 312, 282, 312, 42, 282, 282, 
+	58, 313, 282, 40, 287, 288, 282, 282, 
+	282, 295, 282, 312, 282, 305, 306, 311, 
+	311, 45, 40, 287, 288, 282, 282, 282, 
+	309, 282, 282, 290, 282, 305, 306, 307, 
+	311, 45, 40, 287, 288, 282, 282, 73, 
+	309, 282, 282, 290, 282, 303, 282, 357, 
+	282, 340, 340, 45, 40, 287, 288, 282, 
+	282, 282, 295, 282, 303, 282, 303, 282, 
+	282, 282, 331, 331, 282, 40, 287, 288, 
+	282, 282, 282, 295, 282, 303, 282, 303, 
+	282, 282, 282, 331, 358, 282, 40, 287, 
+	288, 282, 282, 282, 295, 282, 303, 282, 
+	303, 282, 357, 282, 331, 331, 282, 40, 
+	287, 288, 282, 282, 282, 295, 282, 303, 
+	282, 303, 42, 282, 282, 58, 304, 282, 
+	40, 287, 288, 282, 282, 282, 295, 282, 
+	303, 282, 296, 297, 302, 302, 45, 40, 
+	287, 288, 282, 282, 282, 300, 282, 282, 
+	290, 282, 296, 297, 298, 302, 45, 40, 
+	287, 288, 282, 282, 75, 300, 282, 282, 
+	290, 282, 293, 282, 359, 282, 340, 340, 
+	45, 40, 287, 288, 282, 282, 282, 295, 
+	282, 293, 282, 293, 282, 282, 282, 331, 
+	331, 282, 40, 287, 288, 282, 282, 282, 
+	295, 282, 293, 282, 293, 282, 282, 282, 
+	331, 360, 282, 40, 287, 288, 282, 282, 
+	282, 295, 282, 293, 282, 293, 282, 359, 
+	282, 331, 331, 282, 40, 287, 288, 282, 
+	282, 282, 295, 282, 293, 282, 76, 44, 
+	44, 45, 40, 282, 282, 282, 282, 282, 
+	76, 282, 293, 42, 282, 282, 58, 294, 
+	282, 40, 287, 288, 282, 282, 282, 295, 
+	282, 293, 282, 283, 284, 292, 286, 45, 
+	40, 287, 288, 282, 282, 282, 289, 282, 
+	282, 290, 282, 362, 191, 363, 363, 84, 
+	79, 194, 195, 361, 361, 361, 197, 361, 
+	361, 200, 361, 191, 363, 363, 84, 79, 
+	194, 195, 361, 361, 361, 197, 361, 361, 
+	200, 361, 364, 361, 361, 361, 98, 365, 
+	361, 79, 194, 195, 361, 361, 361, 366, 
+	361, 364, 361, 367, 368, 369, 370, 84, 
+	79, 194, 195, 361, 361, 115, 371, 361, 
+	361, 200, 361, 372, 368, 373, 373, 84, 
+	79, 194, 195, 361, 361, 361, 371, 361, 
+	361, 200, 361, 368, 373, 373, 84, 79, 
+	194, 195, 361, 361, 361, 371, 361, 361, 
+	200, 361, 374, 361, 361, 361, 98, 375, 
+	361, 79, 194, 195, 361, 361, 361, 366, 
+	361, 374, 361, 376, 377, 378, 379, 84, 
+	79, 194, 195, 361, 361, 113, 380, 361, 
+	361, 200, 361, 381, 377, 382, 382, 84, 
+	79, 194, 195, 361, 361, 361, 380, 361, 
+	361, 200, 361, 377, 382, 382, 84, 79, 
+	194, 195, 361, 361, 361, 380, 361, 361, 
+	200, 361, 383, 361, 361, 361, 98, 384, 
+	361, 79, 194, 195, 361, 361, 361, 366, 
+	361, 383, 361, 385, 386, 387, 388, 84, 
+	79, 194, 195, 361, 361, 111, 389, 361, 
+	361, 200, 361, 390, 386, 391, 391, 84, 
+	79, 194, 195, 361, 361, 361, 389, 361, 
+	361, 200, 361, 386, 391, 391, 84, 79, 
+	194, 195, 361, 361, 361, 389, 361, 361, 
+	200, 361, 392, 361, 361, 361, 98, 393, 
+	361, 79, 194, 195, 361, 361, 361, 366, 
+	361, 392, 361, 394, 395, 396, 397, 84, 
+	79, 194, 195, 361, 361, 109, 398, 361, 
+	361, 200, 361, 399, 395, 400, 400, 84, 
+	79, 194, 195, 361, 361, 361, 398, 361, 
+	361, 200, 361, 395, 400, 400, 84, 79, 
+	194, 195, 361, 361, 361, 398, 361, 361, 
+	200, 361, 98, 401, 361, 79, 194, 195, 
+	361, 361, 361, 366, 361, 402, 402, 361, 
+	79, 194, 195, 361, 361, 361, 366, 361, 
+	403, 361, 361, 404, 194, 195, 361, 194, 
+	195, 361, 405, 361, 194, 406, 361, 194, 
+	407, 361, 194, 361, 403, 361, 361, 361, 
+	194, 195, 361, 408, 361, 409, 410, 361, 
+	79, 194, 195, 361, 361, 82, 361, 81, 
+	361, 402, 402, 361, 79, 194, 195, 361, 
+	402, 402, 361, 79, 194, 195, 361, 408, 
+	361, 402, 402, 361, 79, 194, 195, 361, 
+	408, 361, 409, 402, 361, 79, 194, 195, 
+	361, 361, 82, 361, 98, 361, 411, 411, 
+	84, 79, 194, 195, 361, 361, 361, 366, 
+	361, 412, 107, 413, 414, 88, 79, 194, 
+	195, 361, 361, 361, 366, 361, 107, 413, 
+	414, 88, 79, 194, 195, 361, 361, 361, 
+	366, 361, 413, 413, 88, 79, 194, 195, 
+	361, 361, 361, 366, 361, 415, 104, 416, 
+	417, 91, 79, 194, 195, 361, 361, 361, 
+	366, 361, 104, 416, 417, 91, 79, 194, 
+	195, 361, 361, 361, 366, 361, 416, 416, 
+	91, 79, 194, 195, 361, 361, 361, 366, 
+	361, 418, 101, 419, 420, 94, 79, 194, 
+	195, 361, 361, 361, 366, 361, 101, 419, 
+	420, 94, 79, 194, 195, 361, 361, 361, 
+	366, 361, 419, 419, 94, 79, 194, 195, 
+	361, 361, 361, 366, 361, 421, 98, 402, 
+	422, 361, 79, 194, 195, 361, 361, 361, 
+	366, 361, 98, 402, 422, 361, 79, 194, 
+	195, 361, 361, 361, 366, 361, 402, 423, 
+	361, 79, 194, 195, 361, 361, 361, 366, 
+	361, 98, 361, 402, 402, 361, 79, 194, 
+	195, 361, 361, 361, 366, 361, 80, 81, 
+	361, 361, 98, 401, 361, 79, 194, 195, 
+	361, 361, 361, 366, 361, 80, 361, 395, 
+	400, 400, 84, 79, 194, 195, 361, 361, 
+	361, 398, 361, 394, 395, 400, 400, 84, 
+	79, 194, 195, 361, 361, 361, 398, 361, 
+	361, 200, 361, 394, 395, 396, 400, 84, 
+	79, 194, 195, 361, 361, 109, 398, 361, 
+	361, 200, 361, 392, 361, 424, 361, 411, 
+	411, 84, 79, 194, 195, 361, 361, 361, 
+	366, 361, 392, 361, 392, 361, 361, 361, 
+	402, 402, 361, 79, 194, 195, 361, 361, 
+	361, 366, 361, 392, 361, 392, 361, 361, 
+	361, 402, 425, 361, 79, 194, 195, 361, 
+	361, 361, 366, 361, 392, 361, 392, 361, 
+	424, 361, 402, 402, 361, 79, 194, 195, 
+	361, 361, 361, 366, 361, 392, 361, 392, 
+	81, 361, 361, 98, 393, 361, 79, 194, 
+	195, 361, 361, 361, 366, 361, 392, 361, 
+	385, 386, 391, 391, 84, 79, 194, 195, 
+	361, 361, 361, 389, 361, 361, 200, 361, 
+	385, 386, 387, 391, 84, 79, 194, 195, 
+	361, 361, 111, 389, 361, 361, 200, 361, 
+	383, 361, 426, 361, 411, 411, 84, 79, 
+	194, 195, 361, 361, 361, 366, 361, 383, 
+	361, 383, 361, 361, 361, 402, 402, 361, 
+	79, 194, 195, 361, 361, 361, 366, 361, 
+	383, 361, 383, 361, 361, 361, 402, 427, 
+	361, 79, 194, 195, 361, 361, 361, 366, 
+	361, 383, 361, 383, 361, 426, 361, 402, 
+	402, 361, 79, 194, 195, 361, 361, 361, 
+	366, 361, 383, 361, 383, 81, 361, 361, 
+	98, 384, 361, 79, 194, 195, 361, 361, 
+	361, 366, 361, 383, 361, 376, 377, 382, 
+	382, 84, 79, 194, 195, 361, 361, 361, 
+	380, 361, 361, 200, 361, 376, 377, 378, 
+	382, 84, 79, 194, 195, 361, 361, 113, 
+	380, 361, 361, 200, 361, 374, 361, 428, 
+	361, 411, 411, 84, 79, 194, 195, 361, 
+	361, 361, 366, 361, 374, 361, 374, 361, 
+	361, 361, 402, 402, 361, 79, 194, 195, 
+	361, 361, 361, 366, 361, 374, 361, 374, 
+	361, 361, 361, 402, 429, 361, 79, 194, 
+	195, 361, 361, 361, 366, 361, 374, 361, 
+	374, 361, 428, 361, 402, 402, 361, 79, 
+	194, 195, 361, 361, 361, 366, 361, 374, 
+	361, 374, 81, 361, 361, 98, 375, 361, 
+	79, 194, 195, 361, 361, 361, 366, 361, 
+	374, 361, 367, 368, 373, 373, 84, 79, 
+	194, 195, 361, 361, 361, 371, 361, 361, 
+	200, 361, 367, 368, 369, 373, 84, 79, 
+	194, 195, 361, 361, 115, 371, 361, 361, 
+	200, 361, 364, 361, 430, 361, 411, 411, 
+	84, 79, 194, 195, 361, 361, 361, 366, 
+	361, 364, 361, 364, 361, 361, 361, 402, 
+	402, 361, 79, 194, 195, 361, 361, 361, 
+	366, 361, 364, 361, 364, 361, 361, 361, 
+	402, 431, 361, 79, 194, 195, 361, 361, 
+	361, 366, 361, 364, 361, 364, 361, 430, 
+	361, 402, 402, 361, 79, 194, 195, 361, 
+	361, 361, 366, 361, 364, 361, 364, 81, 
+	361, 361, 98, 365, 361, 79, 194, 195, 
+	361, 361, 361, 366, 361, 364, 361, 116, 
+	83, 83, 84, 79, 432, 432, 432, 432, 
+	156, 116, 432, 190, 191, 363, 363, 84, 
+	79, 194, 195, 361, 361, 361, 197, 361, 
+	361, 200, 361, 116, 83, 83, 84, 79, 
+	432, 432, 432, 432, 432, 116, 432, 434, 
+	435, 436, 437, 123, 118, 438, 439, 433, 
+	433, 155, 440, 433, 433, 441, 433, 442, 
+	435, 437, 437, 123, 118, 438, 439, 433, 
+	433, 433, 440, 433, 433, 441, 433, 435, 
+	437, 437, 123, 118, 438, 439, 433, 433, 
+	433, 440, 433, 433, 441, 433, 443, 433, 
+	433, 433, 136, 444, 433, 118, 438, 439, 
+	433, 433, 433, 445, 433, 443, 433, 446, 
+	447, 448, 449, 123, 118, 438, 439, 433, 
+	433, 153, 450, 433, 433, 441, 433, 451, 
+	447, 452, 452, 123, 118, 438, 439, 433, 
+	433, 433, 450, 433, 433, 441, 433, 447, 
+	452, 452, 123, 118, 438, 439, 433, 433, 
+	433, 450, 433, 433, 441, 433, 453, 433, 
+	433, 433, 136, 454, 433, 118, 438, 439, 
+	433, 433, 433, 445, 433, 453, 433, 455, 
+	456, 457, 458, 123, 118, 438, 439, 433, 
+	433, 151, 459, 433, 433, 441, 433, 460, 
+	456, 461, 461, 123, 118, 438, 439, 433, 
+	433, 433, 459, 433, 433, 441, 433, 456, 
+	461, 461, 123, 118, 438, 439, 433, 433, 
+	433, 459, 433, 433, 441, 433, 462, 433, 
+	433, 433, 136, 463, 433, 118, 438, 439, 
+	433, 433, 433, 445, 433, 462, 433, 464, 
+	465, 466, 467, 123, 118, 438, 439, 433, 
+	433, 149, 468, 433, 433, 441, 433, 469, 
+	465, 470, 470, 123, 118, 438, 439, 433, 
+	433, 433, 468, 433, 433, 441, 433, 465, 
+	470, 470, 123, 118, 438, 439, 433, 433, 
+	433, 468, 433, 433, 441, 433, 471, 433, 
+	433, 433, 136, 472, 433, 118, 438, 439, 
+	433, 433, 433, 445, 433, 471, 433, 473, 
+	474, 475, 476, 123, 118, 438, 439, 433, 
+	433, 147, 477, 433, 433, 441, 433, 478, 
+	474, 479, 479, 123, 118, 438, 439, 433, 
+	433, 433, 477, 433, 433, 441, 433, 474, 
+	479, 479, 123, 118, 438, 439, 433, 433, 
+	433, 477, 433, 433, 441, 433, 136, 480, 
+	433, 118, 438, 439, 433, 433, 433, 445, 
+	433, 481, 481, 433, 118, 438, 439, 433, 
+	433, 433, 445, 433, 482, 433, 433, 483, 
+	438, 439, 433, 438, 439, 433, 484, 433, 
+	438, 485, 433, 438, 486, 433, 438, 433, 
+	482, 433, 433, 433, 438, 439, 433, 487, 
+	433, 488, 489, 433, 118, 438, 439, 433, 
+	433, 121, 433, 120, 433, 481, 481, 433, 
+	118, 438, 439, 433, 481, 481, 433, 118, 
+	438, 439, 433, 487, 433, 481, 481, 433, 
+	118, 438, 439, 433, 487, 433, 488, 481, 
+	433, 118, 438, 439, 433, 433, 121, 433, 
+	136, 433, 490, 490, 123, 118, 438, 439, 
+	433, 433, 433, 445, 433, 491, 145, 492, 
+	493, 126, 118, 438, 439, 433, 433, 433, 
+	445, 433, 145, 492, 493, 126, 118, 438, 
+	439, 433, 433, 433, 445, 433, 492, 492, 
+	126, 118, 438, 439, 433, 433, 433, 445, 
+	433, 494, 142, 495, 496, 129, 118, 438, 
+	439, 433, 433, 433, 445, 433, 142, 495, 
+	496, 129, 118, 438, 439, 433, 433, 433, 
+	445, 433, 495, 495, 129, 118, 438, 439, 
+	433, 433, 433, 445, 433, 497, 139, 498, 
+	499, 132, 118, 438, 439, 433, 433, 433, 
+	445, 433, 139, 498, 499, 132, 118, 438, 
+	439, 433, 433, 433, 445, 433, 498, 498, 
+	132, 118, 438, 439, 433, 433, 433, 445, 
+	433, 500, 136, 481, 501, 433, 118, 438, 
+	439, 433, 433, 433, 445, 433, 136, 481, 
+	501, 433, 118, 438, 439, 433, 433, 433, 
+	445, 433, 481, 502, 433, 118, 438, 439, 
+	433, 433, 433, 445, 433, 136, 433, 481, 
+	481, 433, 118, 438, 439, 433, 433, 433, 
+	445, 433, 119, 120, 433, 433, 136, 480, 
+	433, 118, 438, 439, 433, 433, 433, 445, 
+	433, 119, 433, 474, 479, 479, 123, 118, 
+	438, 439, 433, 433, 433, 477, 433, 473, 
+	474, 479, 479, 123, 118, 438, 439, 433, 
+	433, 433, 477, 433, 433, 441, 433, 473, 
+	474, 475, 479, 123, 118, 438, 439, 433, 
+	433, 147, 477, 433, 433, 441, 433, 471, 
+	433, 503, 433, 490, 490, 123, 118, 438, 
+	439, 433, 433, 433, 445, 433, 471, 433, 
+	471, 433, 433, 433, 481, 481, 433, 118, 
+	438, 439, 433, 433, 433, 445, 433, 471, 
+	433, 471, 433, 433, 433, 481, 504, 433, 
+	118, 438, 439, 433, 433, 433, 445, 433, 
+	471, 433, 471, 433, 503, 433, 481, 481, 
+	433, 118, 438, 439, 433, 433, 433, 445, 
+	433, 471, 433, 471, 120, 433, 433, 136, 
+	472, 433, 118, 438, 439, 433, 433, 433, 
+	445, 433, 471, 433, 464, 465, 470, 470, 
+	123, 118, 438, 439, 433, 433, 433, 468, 
+	433, 433, 441, 433, 464, 465, 466, 470, 
+	123, 118, 438, 439, 433, 433, 149, 468, 
+	433, 433, 441, 433, 462, 433, 505, 433, 
+	490, 490, 123, 118, 438, 439, 433, 433, 
+	433, 445, 433, 462, 433, 462, 433, 433, 
+	433, 481, 481, 433, 118, 438, 439, 433, 
+	433, 433, 445, 433, 462, 433, 462, 433, 
+	433, 433, 481, 506, 433, 118, 438, 439, 
+	433, 433, 433, 445, 433, 462, 433, 462, 
+	433, 505, 433, 481, 481, 433, 118, 438, 
+	439, 433, 433, 433, 445, 433, 462, 433, 
+	462, 120, 433, 433, 136, 463, 433, 118, 
+	438, 439, 433, 433, 433, 445, 433, 462, 
+	433, 455, 456, 461, 461, 123, 118, 438, 
+	439, 433, 433, 433, 459, 433, 433, 441, 
+	433, 455, 456, 457, 461, 123, 118, 438, 
+	439, 433, 433, 151, 459, 433, 433, 441, 
+	433, 453, 433, 507, 433, 490, 490, 123, 
+	118, 438, 439, 433, 433, 433, 445, 433, 
+	453, 433, 453, 433, 433, 433, 481, 481, 
+	433, 118, 438, 439, 433, 433, 433, 445, 
+	433, 453, 433, 453, 433, 433, 433, 481, 
+	508, 433, 118, 438, 439, 433, 433, 433, 
+	445, 433, 453, 433, 453, 433, 507, 433, 
+	481, 481, 433, 118, 438, 439, 433, 433, 
+	433, 445, 433, 453, 433, 453, 120, 433, 
+	433, 136, 454, 433, 118, 438, 439, 433, 
+	433, 433, 445, 433, 453, 433, 446, 447, 
+	452, 452, 123, 118, 438, 439, 433, 433, 
+	433, 450, 433, 433, 441, 433, 446, 447, 
+	448, 452, 123, 118, 438, 439, 433, 433, 
+	153, 450, 433, 433, 441, 433, 443, 433, 
+	509, 433, 490, 490, 123, 118, 438, 439, 
+	433, 433, 433, 445, 433, 443, 433, 443, 
+	433, 433, 433, 481, 481, 433, 118, 438, 
+	439, 433, 433, 433, 445, 433, 443, 433, 
+	443, 433, 433, 433, 481, 510, 433, 118, 
+	438, 439, 433, 433, 433, 445, 433, 443, 
+	433, 443, 433, 509, 433, 481, 481, 433, 
+	118, 438, 439, 433, 433, 433, 445, 433, 
+	443, 433, 443, 120, 433, 433, 136, 444, 
+	433, 118, 438, 439, 433, 433, 433, 445, 
+	433, 443, 433, 434, 435, 437, 437, 123, 
+	118, 438, 439, 433, 433, 433, 440, 433, 
+	433, 441, 433, 188, 189, 190, 191, 511, 
+	363, 84, 79, 194, 195, 196, 196, 156, 
+	197, 361, 188, 200, 361, 204, 512, 206, 
+	207, 6, 1, 208, 209, 203, 203, 38, 
+	210, 203, 203, 211, 203, 214, 189, 190, 
+	191, 513, 514, 84, 157, 515, 516, 203, 
+	196, 156, 517, 203, 214, 200, 203, 116, 
+	518, 518, 84, 157, 208, 209, 203, 203, 
+	156, 519, 203, 520, 203, 203, 521, 515, 
+	516, 203, 515, 516, 203, 255, 203, 515, 
+	522, 203, 515, 523, 203, 515, 203, 520, 
+	203, 203, 203, 515, 516, 203, 524, 3, 
+	361, 361, 402, 431, 361, 79, 194, 195, 
+	361, 361, 361, 366, 361, 524, 361, 525, 
+	368, 526, 527, 84, 157, 515, 516, 203, 
+	203, 158, 371, 203, 203, 200, 203, 528, 
+	368, 529, 529, 84, 157, 515, 516, 203, 
+	203, 203, 371, 203, 203, 200, 203, 368, 
+	529, 529, 84, 157, 515, 516, 203, 203, 
+	203, 371, 203, 203, 200, 203, 525, 368, 
+	529, 529, 84, 157, 515, 516, 203, 203, 
+	203, 371, 203, 203, 200, 203, 525, 368, 
+	526, 529, 84, 157, 515, 516, 203, 203, 
+	158, 371, 203, 203, 200, 203, 214, 203, 
+	280, 116, 530, 530, 160, 157, 208, 209, 
+	203, 203, 203, 519, 203, 214, 203, 531, 
+	184, 532, 533, 162, 157, 515, 516, 203, 
+	203, 203, 534, 203, 184, 532, 533, 162, 
+	157, 515, 516, 203, 203, 203, 534, 203, 
+	532, 532, 162, 157, 515, 516, 203, 203, 
+	203, 534, 203, 535, 181, 536, 537, 165, 
+	157, 515, 516, 203, 203, 203, 534, 203, 
+	181, 536, 537, 165, 157, 515, 516, 203, 
+	203, 203, 534, 203, 536, 536, 165, 157, 
+	515, 516, 203, 203, 203, 534, 203, 538, 
+	178, 539, 540, 168, 157, 515, 516, 203, 
+	203, 203, 534, 203, 178, 539, 540, 168, 
+	157, 515, 516, 203, 203, 203, 534, 203, 
+	539, 539, 168, 157, 515, 516, 203, 203, 
+	203, 534, 203, 541, 175, 542, 543, 203, 
+	157, 515, 516, 203, 203, 203, 534, 203, 
+	175, 542, 543, 203, 157, 515, 516, 203, 
+	203, 203, 534, 203, 542, 542, 203, 157, 
+	515, 516, 203, 203, 203, 534, 203, 544, 
+	203, 545, 546, 203, 157, 515, 516, 203, 
+	203, 172, 203, 171, 203, 542, 542, 203, 
+	157, 515, 516, 203, 542, 542, 203, 157, 
+	515, 516, 203, 544, 203, 542, 542, 203, 
+	157, 515, 516, 203, 544, 203, 545, 542, 
+	203, 157, 515, 516, 203, 203, 172, 203, 
+	524, 171, 361, 361, 98, 365, 361, 79, 
+	194, 195, 361, 361, 361, 366, 361, 524, 
+	361, 548, 547, 549, 549, 547, 186, 550, 
+	551, 547, 549, 549, 547, 186, 550, 551, 
+	547, 552, 547, 547, 553, 550, 551, 547, 
+	550, 551, 547, 554, 547, 550, 555, 547, 
+	550, 556, 547, 550, 547, 552, 547, 547, 
+	547, 550, 551, 547, 188, 432, 432, 432, 
+	432, 432, 432, 432, 432, 432, 196, 432, 
+	432, 432, 432, 188, 432, 0
 };
 
 static const short _indic_syllable_machine_trans_targs[] = {
@@ -1014,51 +1016,51 @@
 	169, 170, 520, 172, 173, 517, 175, 176, 
 	514, 178, 532, 178, 179, 258, 337, 339, 
 	413, 415, 359, 360, 416, 412, 494, 495, 
-	384, 530, 178, 180, 182, 36, 257, 202, 
-	203, 255, 227, 181, 35, 183, 251, 1, 
-	184, 186, 34, 250, 248, 185, 33, 187, 
-	244, 188, 190, 32, 243, 241, 189, 31, 
-	191, 237, 192, 194, 30, 236, 234, 193, 
-	29, 195, 230, 196, 198, 28, 229, 226, 
-	197, 27, 212, 0, 201, 206, 178, 204, 
-	205, 208, 2, 211, 3, 214, 6, 24, 
-	217, 9, 21, 220, 12, 18, 223, 15, 
-	225, 231, 233, 238, 240, 245, 247, 252, 
-	254, 178, 259, 261, 73, 334, 281, 282, 
-	335, 306, 260, 72, 262, 330, 38, 263, 
-	265, 71, 329, 327, 264, 70, 266, 323, 
-	267, 269, 69, 322, 320, 268, 68, 270, 
-	316, 271, 273, 67, 315, 313, 272, 66, 
-	274, 309, 275, 277, 65, 308, 305, 276, 
-	64, 291, 37, 280, 285, 178, 283, 284, 
-	287, 39, 290, 40, 293, 43, 61, 296, 
-	46, 58, 299, 49, 55, 302, 52, 304, 
-	310, 312, 317, 319, 324, 326, 331, 333, 
-	178, 338, 109, 340, 408, 75, 341, 343, 
-	108, 407, 405, 342, 107, 344, 401, 345, 
-	347, 106, 400, 398, 346, 105, 348, 394, 
-	349, 351, 104, 393, 391, 350, 103, 352, 
-	387, 353, 355, 102, 386, 383, 354, 101, 
-	369, 74, 358, 363, 178, 361, 362, 365, 
-	76, 368, 77, 371, 80, 98, 374, 83, 
-	95, 377, 86, 92, 380, 89, 382, 388, 
-	390, 395, 397, 402, 404, 409, 411, 178, 
-	178, 417, 419, 146, 145, 439, 440, 492, 
-	464, 418, 420, 488, 111, 421, 423, 144, 
-	487, 485, 422, 143, 424, 481, 425, 427, 
-	142, 480, 478, 426, 141, 428, 474, 429, 
-	431, 140, 473, 471, 430, 139, 432, 467, 
-	433, 435, 138, 466, 463, 434, 137, 449, 
-	110, 438, 443, 178, 441, 442, 445, 112, 
-	448, 113, 451, 116, 134, 454, 119, 131, 
-	457, 122, 128, 460, 125, 462, 468, 470, 
-	475, 477, 482, 484, 489, 491, 147, 496, 
-	497, 511, 500, 501, 529, 148, 505, 499, 
-	504, 502, 503, 506, 507, 150, 510, 508, 
-	149, 151, 513, 153, 174, 163, 516, 156, 
-	171, 519, 159, 168, 522, 162, 165, 525, 
-	164, 528, 178, 531, 177, 534, 535, 533, 
-	538, 178, 536, 537
+	384, 530, 539, 178, 180, 182, 36, 257, 
+	202, 203, 255, 227, 181, 35, 183, 251, 
+	1, 184, 186, 34, 250, 248, 185, 33, 
+	187, 244, 188, 190, 32, 243, 241, 189, 
+	31, 191, 237, 192, 194, 30, 236, 234, 
+	193, 29, 195, 230, 196, 198, 28, 229, 
+	226, 197, 27, 212, 0, 201, 206, 178, 
+	204, 205, 208, 2, 211, 3, 214, 6, 
+	24, 217, 9, 21, 220, 12, 18, 223, 
+	15, 225, 231, 233, 238, 240, 245, 247, 
+	252, 254, 178, 259, 261, 73, 334, 281, 
+	282, 335, 306, 260, 72, 262, 330, 38, 
+	263, 265, 71, 329, 327, 264, 70, 266, 
+	323, 267, 269, 69, 322, 320, 268, 68, 
+	270, 316, 271, 273, 67, 315, 313, 272, 
+	66, 274, 309, 275, 277, 65, 308, 305, 
+	276, 64, 291, 37, 280, 285, 178, 283, 
+	284, 287, 39, 290, 40, 293, 43, 61, 
+	296, 46, 58, 299, 49, 55, 302, 52, 
+	304, 310, 312, 317, 319, 324, 326, 331, 
+	333, 178, 338, 109, 340, 408, 75, 341, 
+	343, 108, 407, 405, 342, 107, 344, 401, 
+	345, 347, 106, 400, 398, 346, 105, 348, 
+	394, 349, 351, 104, 393, 391, 350, 103, 
+	352, 387, 353, 355, 102, 386, 383, 354, 
+	101, 369, 74, 358, 363, 178, 361, 362, 
+	365, 76, 368, 77, 371, 80, 98, 374, 
+	83, 95, 377, 86, 92, 380, 89, 382, 
+	388, 390, 395, 397, 402, 404, 409, 411, 
+	178, 178, 417, 419, 146, 145, 439, 440, 
+	492, 464, 418, 420, 488, 111, 421, 423, 
+	144, 487, 485, 422, 143, 424, 481, 425, 
+	427, 142, 480, 478, 426, 141, 428, 474, 
+	429, 431, 140, 473, 471, 430, 139, 432, 
+	467, 433, 435, 138, 466, 463, 434, 137, 
+	449, 110, 438, 443, 178, 441, 442, 445, 
+	112, 448, 113, 451, 116, 134, 454, 119, 
+	131, 457, 122, 128, 460, 125, 462, 468, 
+	470, 475, 477, 482, 484, 489, 491, 147, 
+	496, 497, 511, 500, 501, 529, 148, 505, 
+	499, 504, 502, 503, 506, 507, 150, 510, 
+	508, 149, 151, 513, 153, 174, 163, 516, 
+	156, 171, 519, 159, 168, 522, 162, 165, 
+	525, 164, 528, 178, 531, 177, 534, 535, 
+	533, 538, 178, 536, 537
 };
 
 static const char _indic_syllable_machine_trans_actions[] = {
@@ -1087,51 +1089,51 @@
 	0, 0, 2, 0, 0, 2, 0, 0, 
 	2, 9, 0, 12, 2, 2, 6, 2, 
 	13, 13, 0, 0, 2, 2, 6, 2, 
-	6, 2, 14, 2, 2, 0, 2, 0, 
+	6, 2, 0, 14, 2, 2, 0, 2, 
+	0, 0, 2, 2, 2, 0, 2, 2, 
+	0, 2, 2, 0, 2, 2, 2, 0, 
+	2, 2, 2, 2, 0, 2, 2, 2, 
+	0, 2, 2, 2, 2, 0, 2, 2, 
+	2, 0, 2, 2, 2, 2, 0, 2, 
+	2, 2, 0, 2, 0, 0, 0, 15, 
+	0, 0, 2, 0, 2, 0, 2, 0, 
+	0, 2, 0, 0, 2, 0, 0, 2, 
+	0, 2, 2, 2, 2, 2, 2, 2, 
+	2, 2, 16, 2, 2, 0, 2, 0, 
 	0, 2, 2, 2, 0, 2, 2, 0, 
 	2, 2, 0, 2, 2, 2, 0, 2, 
 	2, 2, 2, 0, 2, 2, 2, 0, 
 	2, 2, 2, 2, 0, 2, 2, 2, 
 	0, 2, 2, 2, 2, 0, 2, 2, 
-	2, 0, 2, 0, 0, 0, 15, 0, 
+	2, 0, 2, 0, 0, 0, 17, 0, 
 	0, 2, 0, 2, 0, 2, 0, 0, 
 	2, 0, 0, 2, 0, 0, 2, 0, 
 	2, 2, 2, 2, 2, 2, 2, 2, 
-	2, 16, 2, 2, 0, 2, 0, 0, 
-	2, 2, 2, 0, 2, 2, 0, 2, 
-	2, 0, 2, 2, 2, 0, 2, 2, 
-	2, 2, 0, 2, 2, 2, 0, 2, 
-	2, 2, 2, 0, 2, 2, 2, 0, 
-	2, 2, 2, 2, 0, 2, 2, 2, 
-	0, 2, 0, 0, 0, 17, 0, 0, 
+	2, 18, 6, 0, 6, 6, 0, 6, 
+	2, 0, 6, 2, 6, 0, 6, 6, 
+	6, 2, 0, 6, 2, 6, 0, 6, 
+	6, 6, 2, 0, 6, 2, 6, 0, 
+	6, 6, 6, 2, 0, 6, 2, 6, 
+	0, 6, 0, 0, 0, 19, 0, 0, 
 	2, 0, 2, 0, 2, 0, 0, 2, 
 	0, 0, 2, 0, 0, 2, 0, 2, 
 	2, 2, 2, 2, 2, 2, 2, 2, 
-	18, 6, 0, 6, 6, 0, 6, 2, 
-	0, 6, 2, 6, 0, 6, 6, 6, 
-	2, 0, 6, 2, 6, 0, 6, 6, 
-	6, 2, 0, 6, 2, 6, 0, 6, 
-	6, 6, 2, 0, 6, 2, 6, 0, 
-	6, 0, 0, 0, 19, 0, 0, 2, 
-	0, 2, 0, 2, 0, 0, 2, 0, 
-	0, 2, 0, 0, 2, 0, 2, 2, 
-	2, 2, 2, 2, 2, 2, 2, 20, 
-	21, 2, 2, 0, 0, 0, 0, 2, 
-	2, 2, 2, 2, 0, 2, 2, 0, 
-	2, 2, 2, 0, 2, 2, 2, 2, 
+	20, 21, 2, 2, 0, 0, 0, 0, 
+	2, 2, 2, 2, 2, 0, 2, 2, 
 	0, 2, 2, 2, 0, 2, 2, 2, 
 	2, 0, 2, 2, 2, 0, 2, 2, 
 	2, 2, 0, 2, 2, 2, 0, 2, 
-	0, 0, 0, 22, 0, 0, 2, 0, 
-	2, 0, 2, 0, 0, 2, 0, 0, 
-	2, 0, 0, 2, 0, 2, 2, 2, 
-	2, 2, 2, 2, 2, 2, 0, 0, 
-	8, 2, 0, 0, 2, 0, 2, 0, 
-	0, 0, 0, 8, 8, 0, 8, 8, 
-	0, 0, 2, 0, 0, 0, 2, 0, 
-	0, 2, 0, 0, 2, 0, 0, 2, 
-	0, 2, 23, 2, 0, 0, 0, 0, 
-	0, 24, 0, 0
+	2, 2, 2, 0, 2, 2, 2, 0, 
+	2, 0, 0, 0, 22, 0, 0, 2, 
+	0, 2, 0, 2, 0, 0, 2, 0, 
+	0, 2, 0, 0, 2, 0, 2, 2, 
+	2, 2, 2, 2, 2, 2, 2, 0, 
+	0, 8, 2, 0, 0, 2, 0, 2, 
+	0, 0, 0, 0, 8, 8, 0, 8, 
+	8, 0, 0, 2, 0, 0, 0, 2, 
+	0, 0, 2, 0, 0, 2, 0, 0, 
+	2, 0, 2, 23, 2, 0, 0, 0, 
+	0, 0, 24, 0, 0
 };
 
 static const char _indic_syllable_machine_to_state_actions[] = {
@@ -1202,7 +1204,7 @@
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0
+	0, 0, 0, 0
 };
 
 static const char _indic_syllable_machine_from_state_actions[] = {
@@ -1273,7 +1275,7 @@
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0
+	0, 0, 0, 0
 };
 
 static const short _indic_syllable_machine_eof_trans[] = {
@@ -1299,52 +1301,52 @@
 	1, 1, 1, 1, 1, 1, 1, 1, 
 	1, 1, 1, 1, 1, 1, 1, 1, 
 	1, 1, 1, 1, 1, 1, 1, 1, 
-	1, 186, 0, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 282, 282, 282, 282, 282, 282, 
-	282, 282, 282, 282, 282, 282, 282, 282, 
-	282, 282, 282, 282, 282, 282, 282, 282, 
-	282, 282, 282, 282, 282, 282, 282, 282, 
-	282, 282, 282, 282, 282, 282, 282, 282, 
-	282, 282, 282, 282, 282, 282, 282, 282, 
-	282, 282, 282, 282, 282, 282, 282, 282, 
-	282, 282, 282, 282, 282, 282, 282, 282, 
-	282, 282, 282, 282, 282, 282, 282, 282, 
-	282, 282, 282, 282, 282, 282, 282, 282, 
-	282, 361, 361, 361, 361, 361, 361, 361, 
-	361, 361, 361, 361, 361, 361, 361, 361, 
-	361, 361, 361, 361, 361, 361, 361, 361, 
-	361, 361, 361, 361, 361, 361, 361, 361, 
-	361, 361, 361, 361, 361, 361, 361, 361, 
-	361, 361, 361, 361, 361, 361, 361, 361, 
-	361, 361, 361, 361, 361, 361, 361, 361, 
-	361, 361, 361, 361, 361, 361, 361, 361, 
-	361, 361, 361, 361, 361, 361, 361, 361, 
-	361, 361, 361, 361, 361, 432, 361, 432, 
-	433, 433, 433, 433, 433, 433, 433, 433, 
-	433, 433, 433, 433, 433, 433, 433, 433, 
-	433, 433, 433, 433, 433, 433, 433, 433, 
-	433, 433, 433, 433, 433, 433, 433, 433, 
-	433, 433, 433, 433, 433, 433, 433, 433, 
-	433, 433, 433, 433, 433, 433, 433, 433, 
-	433, 433, 433, 433, 433, 433, 433, 433, 
-	433, 433, 433, 433, 433, 433, 433, 433, 
-	433, 433, 433, 433, 433, 433, 433, 433, 
-	433, 433, 433, 433, 433, 433, 361, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 361, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 203, 203, 203, 203, 203, 203, 203, 
-	203, 361, 547, 547, 547, 547, 547, 547, 
-	547, 547, 547
+	1, 186, 0, 204, 204, 204, 204, 204, 
+	204, 204, 204, 204, 204, 204, 204, 204, 
+	204, 204, 204, 204, 204, 204, 204, 204, 
+	204, 204, 204, 204, 204, 204, 204, 204, 
+	204, 204, 204, 204, 204, 204, 204, 204, 
+	204, 204, 204, 204, 204, 204, 204, 204, 
+	204, 204, 204, 204, 204, 204, 204, 204, 
+	204, 204, 204, 204, 204, 204, 204, 204, 
+	204, 204, 204, 204, 204, 204, 204, 204, 
+	204, 204, 204, 204, 204, 204, 204, 204, 
+	204, 204, 283, 283, 283, 283, 283, 283, 
+	283, 283, 283, 283, 283, 283, 283, 283, 
+	283, 283, 283, 283, 283, 283, 283, 283, 
+	283, 283, 283, 283, 283, 283, 283, 283, 
+	283, 283, 283, 283, 283, 283, 283, 283, 
+	283, 283, 283, 283, 283, 283, 283, 283, 
+	283, 283, 283, 283, 283, 283, 283, 283, 
+	283, 283, 283, 283, 283, 283, 283, 283, 
+	283, 283, 283, 283, 283, 283, 283, 283, 
+	283, 283, 283, 283, 283, 283, 283, 283, 
+	283, 362, 362, 362, 362, 362, 362, 362, 
+	362, 362, 362, 362, 362, 362, 362, 362, 
+	362, 362, 362, 362, 362, 362, 362, 362, 
+	362, 362, 362, 362, 362, 362, 362, 362, 
+	362, 362, 362, 362, 362, 362, 362, 362, 
+	362, 362, 362, 362, 362, 362, 362, 362, 
+	362, 362, 362, 362, 362, 362, 362, 362, 
+	362, 362, 362, 362, 362, 362, 362, 362, 
+	362, 362, 362, 362, 362, 362, 362, 362, 
+	362, 362, 362, 362, 362, 433, 362, 433, 
+	434, 434, 434, 434, 434, 434, 434, 434, 
+	434, 434, 434, 434, 434, 434, 434, 434, 
+	434, 434, 434, 434, 434, 434, 434, 434, 
+	434, 434, 434, 434, 434, 434, 434, 434, 
+	434, 434, 434, 434, 434, 434, 434, 434, 
+	434, 434, 434, 434, 434, 434, 434, 434, 
+	434, 434, 434, 434, 434, 434, 434, 434, 
+	434, 434, 434, 434, 434, 434, 434, 434, 
+	434, 434, 434, 434, 434, 434, 434, 434, 
+	434, 434, 434, 434, 434, 434, 362, 204, 
+	204, 204, 204, 204, 204, 204, 204, 204, 
+	204, 362, 204, 204, 204, 204, 204, 204, 
+	204, 204, 204, 204, 204, 204, 204, 204, 
+	204, 204, 204, 204, 204, 204, 204, 204, 
+	204, 362, 548, 548, 548, 548, 548, 548, 
+	548, 548, 548, 433
 };
 
 static const int indic_syllable_machine_start = 178;
@@ -1358,7 +1360,7 @@
 
 
 
-#line 96 "hb-ot-shape-complex-indic-machine.rl"
+#line 97 "hb-ot-shape-complex-indic-machine.rl"
 
 
 #define found_syllable(syllable_type) \
@@ -1378,7 +1380,7 @@
   int cs;
   hb_glyph_info_t *info = buffer->info;
   
-#line 1382 "hb-ot-shape-complex-indic-machine.hh"
+#line 1384 "hb-ot-shape-complex-indic-machine.hh"
 	{
 	cs = indic_syllable_machine_start;
 	ts = 0;
@@ -1386,7 +1388,7 @@
 	act = 0;
 	}
 
-#line 117 "hb-ot-shape-complex-indic-machine.rl"
+#line 118 "hb-ot-shape-complex-indic-machine.rl"
 
 
   p = 0;
@@ -1395,7 +1397,7 @@
   unsigned int last = 0;
   unsigned int syllable_serial = 1;
   
-#line 1399 "hb-ot-shape-complex-indic-machine.hh"
+#line 1401 "hb-ot-shape-complex-indic-machine.hh"
 	{
 	int _slen;
 	int _trans;
@@ -1409,7 +1411,7 @@
 #line 1 "NONE"
 	{ts = p;}
 	break;
-#line 1413 "hb-ot-shape-complex-indic-machine.hh"
+#line 1415 "hb-ot-shape-complex-indic-machine.hh"
 	}
 
 	_keys = _indic_syllable_machine_trans_keys + (cs<<1);
@@ -1432,71 +1434,71 @@
 	{te = p+1;}
 	break;
 	case 15:
-#line 87 "hb-ot-shape-complex-indic-machine.rl"
+#line 88 "hb-ot-shape-complex-indic-machine.rl"
 	{te = p+1;{ found_syllable (consonant_syllable); }}
 	break;
 	case 17:
-#line 88 "hb-ot-shape-complex-indic-machine.rl"
+#line 89 "hb-ot-shape-complex-indic-machine.rl"
 	{te = p+1;{ found_syllable (vowel_syllable); }}
 	break;
 	case 22:
-#line 89 "hb-ot-shape-complex-indic-machine.rl"
+#line 90 "hb-ot-shape-complex-indic-machine.rl"
 	{te = p+1;{ found_syllable (standalone_cluster); }}
 	break;
 	case 24:
-#line 90 "hb-ot-shape-complex-indic-machine.rl"
+#line 91 "hb-ot-shape-complex-indic-machine.rl"
 	{te = p+1;{ found_syllable (symbol_cluster); }}
 	break;
 	case 19:
-#line 91 "hb-ot-shape-complex-indic-machine.rl"
+#line 92 "hb-ot-shape-complex-indic-machine.rl"
 	{te = p+1;{ found_syllable (broken_cluster); }}
 	break;
 	case 12:
-#line 92 "hb-ot-shape-complex-indic-machine.rl"
+#line 93 "hb-ot-shape-complex-indic-machine.rl"
 	{te = p+1;{ found_syllable (non_indic_cluster); }}
 	break;
 	case 14:
-#line 87 "hb-ot-shape-complex-indic-machine.rl"
+#line 88 "hb-ot-shape-complex-indic-machine.rl"
 	{te = p;p--;{ found_syllable (consonant_syllable); }}
 	break;
 	case 16:
-#line 88 "hb-ot-shape-complex-indic-machine.rl"
+#line 89 "hb-ot-shape-complex-indic-machine.rl"
 	{te = p;p--;{ found_syllable (vowel_syllable); }}
 	break;
 	case 21:
-#line 89 "hb-ot-shape-complex-indic-machine.rl"
+#line 90 "hb-ot-shape-complex-indic-machine.rl"
 	{te = p;p--;{ found_syllable (standalone_cluster); }}
 	break;
 	case 23:
-#line 90 "hb-ot-shape-complex-indic-machine.rl"
+#line 91 "hb-ot-shape-complex-indic-machine.rl"
 	{te = p;p--;{ found_syllable (symbol_cluster); }}
 	break;
 	case 18:
-#line 91 "hb-ot-shape-complex-indic-machine.rl"
+#line 92 "hb-ot-shape-complex-indic-machine.rl"
 	{te = p;p--;{ found_syllable (broken_cluster); }}
 	break;
 	case 20:
-#line 92 "hb-ot-shape-complex-indic-machine.rl"
+#line 93 "hb-ot-shape-complex-indic-machine.rl"
 	{te = p;p--;{ found_syllable (non_indic_cluster); }}
 	break;
 	case 1:
-#line 87 "hb-ot-shape-complex-indic-machine.rl"
+#line 88 "hb-ot-shape-complex-indic-machine.rl"
 	{{p = ((te))-1;}{ found_syllable (consonant_syllable); }}
 	break;
 	case 3:
-#line 88 "hb-ot-shape-complex-indic-machine.rl"
+#line 89 "hb-ot-shape-complex-indic-machine.rl"
 	{{p = ((te))-1;}{ found_syllable (vowel_syllable); }}
 	break;
 	case 7:
-#line 89 "hb-ot-shape-complex-indic-machine.rl"
+#line 90 "hb-ot-shape-complex-indic-machine.rl"
 	{{p = ((te))-1;}{ found_syllable (standalone_cluster); }}
 	break;
 	case 9:
-#line 90 "hb-ot-shape-complex-indic-machine.rl"
+#line 91 "hb-ot-shape-complex-indic-machine.rl"
 	{{p = ((te))-1;}{ found_syllable (symbol_cluster); }}
 	break;
 	case 4:
-#line 91 "hb-ot-shape-complex-indic-machine.rl"
+#line 92 "hb-ot-shape-complex-indic-machine.rl"
 	{{p = ((te))-1;}{ found_syllable (broken_cluster); }}
 	break;
 	case 5:
@@ -1517,22 +1519,22 @@
 	case 8:
 #line 1 "NONE"
 	{te = p+1;}
-#line 87 "hb-ot-shape-complex-indic-machine.rl"
+#line 88 "hb-ot-shape-complex-indic-machine.rl"
 	{act = 1;}
 	break;
 	case 6:
 #line 1 "NONE"
 	{te = p+1;}
-#line 91 "hb-ot-shape-complex-indic-machine.rl"
+#line 92 "hb-ot-shape-complex-indic-machine.rl"
 	{act = 5;}
 	break;
 	case 13:
 #line 1 "NONE"
 	{te = p+1;}
-#line 92 "hb-ot-shape-complex-indic-machine.rl"
+#line 93 "hb-ot-shape-complex-indic-machine.rl"
 	{act = 6;}
 	break;
-#line 1536 "hb-ot-shape-complex-indic-machine.hh"
+#line 1538 "hb-ot-shape-complex-indic-machine.hh"
 	}
 
 _again:
@@ -1541,7 +1543,7 @@
 #line 1 "NONE"
 	{ts = 0;}
 	break;
-#line 1545 "hb-ot-shape-complex-indic-machine.hh"
+#line 1547 "hb-ot-shape-complex-indic-machine.hh"
 	}
 
 	if ( ++p != pe )
@@ -1557,7 +1559,7 @@
 
 	}
 
-#line 126 "hb-ot-shape-complex-indic-machine.rl"
+#line 127 "hb-ot-shape-complex-indic-machine.rl"
 
 }
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-machine.rl
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-machine.rl	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-machine.rl	2017-10-13 22:53:19 UTC (rev 45535)
@@ -57,6 +57,7 @@
 Ra    = 16;
 CM    = 17;
 Symbol= 18;
+CS    = 19;
 
 c = (C | Ra);			# is_consonant
 n = ((ZWNJ?.RS)? (N.N?)?);	# is_consonant_modifier
@@ -76,9 +77,9 @@
 halant_or_matra_group = (final_halant_group | (h.ZWJ)? matra_group{0,4}) (Coeng (cn|V))?;
 
 
-consonant_syllable =	Repha? (cn.halant_group){0,4} cn medial_group halant_or_matra_group syllable_tail;
+consonant_syllable =	(Repha|CS)? (cn.halant_group){0,4} cn medial_group halant_or_matra_group syllable_tail;
 vowel_syllable =	reph? V.n? (ZWJ | (halant_group.cn){0,4} medial_group halant_or_matra_group syllable_tail);
-standalone_cluster =	(Repha? PLACEHOLDER | reph? DOTTEDCIRCLE).n? (halant_group.cn){0,4} medial_group halant_or_matra_group syllable_tail;
+standalone_cluster =	((Repha|CS)? PLACEHOLDER | reph? DOTTEDCIRCLE).n? (halant_group.cn){0,4} medial_group halant_or_matra_group syllable_tail;
 symbol_cluster = 	symbol syllable_tail;
 broken_cluster =	reph? n? (halant_group.cn){0,4} medial_group halant_or_matra_group syllable_tail;
 other =			any;

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-private.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-private.hh	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-private.hh	2017-10-13 22:53:19 UTC (rev 45535)
@@ -60,7 +60,8 @@
   OT_Repha = 15, /* Atomically-encoded logical or visual repha. */
   OT_Ra = 16,
   OT_CM = 17,  /* Consonant-Medial. */
-  OT_Symbol = 18 /* Avagraha, etc that take marks (SM,A,VD). */
+  OT_Symbol = 18, /* Avagraha, etc that take marks (SM,A,VD). */
+  OT_CS = 19
 };
 
 #define MEDIAL_FLAGS (FLAG (OT_CM))
@@ -70,7 +71,7 @@
  * We treat Vowels and placeholders as if they were consonants.  This is safe because Vowels
  * cannot happen in a consonant syllable.  The plus side however is, we can call the
  * consonant syllable logic from the vowel syllable function and get it all right! */
-#define CONSONANT_FLAGS (FLAG (OT_C) | FLAG (OT_Ra) | MEDIAL_FLAGS | FLAG (OT_V) | FLAG (OT_PLACEHOLDER) | FLAG (OT_DOTTEDCIRCLE))
+#define CONSONANT_FLAGS (FLAG (OT_C) | FLAG (OT_CS) | FLAG (OT_Ra) | MEDIAL_FLAGS | FLAG (OT_V) | FLAG (OT_PLACEHOLDER) | FLAG (OT_DOTTEDCIRCLE))
 #define JOINER_FLAGS (FLAG (OT_ZWJ) | FLAG (OT_ZWNJ))
 #define HALANT_OR_COENG_FLAGS (FLAG (OT_H) | FLAG (OT_Coeng))
 
@@ -121,8 +122,8 @@
   INDIC_SYLLABIC_CATEGORY_CONSONANT_PREFIXED		= OT_X, /* Don't care. */
   INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED		= OT_CM,
   INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA	= OT_N,
-  INDIC_SYLLABIC_CATEGORY_CONSONANT_WITH_STACKER	= OT_C,
-  INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK		= OT_SM,
+  INDIC_SYLLABIC_CATEGORY_CONSONANT_WITH_STACKER	= OT_CS,
+  INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK		= OT_SM, /* https://github.com/behdad/harfbuzz/issues/552 */
   INDIC_SYLLABIC_CATEGORY_INVISIBLE_STACKER		= OT_Coeng,
   INDIC_SYLLABIC_CATEGORY_JOINER			= OT_ZWJ,
   INDIC_SYLLABIC_CATEGORY_MODIFYING_LETTER		= OT_X,

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-table.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-table.cc	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-table.cc	2017-10-13 22:53:19 UTC (rev 45535)
@@ -6,12 +6,12 @@
  *
  * on files with these headers:
  *
- * # IndicSyllabicCategory-9.0.0.txt
- * # Date: 2016-05-21, 02:46:00 GMT [RP]
- * # IndicPositionalCategory-9.0.0.txt
- * # Date: 2016-02-25, 00:48:00 GMT [RP]
- * # Blocks-9.0.0.txt
- * # Date: 2016-02-05, 23:48:00 GMT [KW]
+ * # IndicSyllabicCategory-10.0.0.txt
+ * # Date: 2017-05-31, 01:07:00 GMT [KW, RP]
+ * # IndicPositionalCategory-10.0.0.txt
+ * # Date: 2017-05-31, 01:07:00 GMT [RP]
+ * # Blocks-10.0.0.txt
+ * # Date: 2017-04-12, 17:30:00 GMT [KW]
  */
 
 #include "hb-ot-shape-complex-indic-private.hh"
@@ -18,49 +18,50 @@
 
 
 #define ISC_A	INDIC_SYLLABIC_CATEGORY_AVAGRAHA		/*  15 chars; Avagraha */
-#define ISC_Bi	INDIC_SYLLABIC_CATEGORY_BINDU			/*  67 chars; Bindu */
+#define ISC_Bi	INDIC_SYLLABIC_CATEGORY_BINDU			/*  80 chars; Bindu */
 #define ISC_BJN	INDIC_SYLLABIC_CATEGORY_BRAHMI_JOINING_NUMBER	/*  20 chars; Brahmi_Joining_Number */
-#define ISC_Ca	INDIC_SYLLABIC_CATEGORY_CANTILLATION_MARK	/*  53 chars; Cantillation_Mark */
-#define ISC_C	INDIC_SYLLABIC_CATEGORY_CONSONANT		/* 1907 chars; Consonant */
+#define ISC_Ca	INDIC_SYLLABIC_CATEGORY_CANTILLATION_MARK	/*  57 chars; Cantillation_Mark */
+#define ISC_C	INDIC_SYLLABIC_CATEGORY_CONSONANT		/* 2024 chars; Consonant */
 #define ISC_CD	INDIC_SYLLABIC_CATEGORY_CONSONANT_DEAD		/*  10 chars; Consonant_Dead */
-#define ISC_CF	INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL		/*  62 chars; Consonant_Final */
+#define ISC_CF	INDIC_SYLLABIC_CATEGORY_CONSONANT_FINAL		/*  68 chars; Consonant_Final */
 #define ISC_CHL	INDIC_SYLLABIC_CATEGORY_CONSONANT_HEAD_LETTER	/*   5 chars; Consonant_Head_Letter */
 #define ISC_CK	INDIC_SYLLABIC_CATEGORY_CONSONANT_KILLER	/*   2 chars; Consonant_Killer */
-#define ISC_CM	INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL	/*  22 chars; Consonant_Medial */
-#define ISC_CP	INDIC_SYLLABIC_CATEGORY_CONSONANT_PLACEHOLDER	/*  16 chars; Consonant_Placeholder */
-#define ISC_CPR	INDIC_SYLLABIC_CATEGORY_CONSONANT_PRECEDING_REPHA	/*   1 chars; Consonant_Preceding_Repha */
-#define ISC_CPrf	INDIC_SYLLABIC_CATEGORY_CONSONANT_PREFIXED	/*   2 chars; Consonant_Prefixed */
-#define ISC_CS	INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED	/*  90 chars; Consonant_Subjoined */
-#define ISC_CSR	INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA	/*   4 chars; Consonant_Succeeding_Repha */
+#define ISC_CM	INDIC_SYLLABIC_CATEGORY_CONSONANT_MEDIAL	/*  27 chars; Consonant_Medial */
+#define ISC_CP	INDIC_SYLLABIC_CATEGORY_CONSONANT_PLACEHOLDER	/*  18 chars; Consonant_Placeholder */
+#define ISC_CPR	INDIC_SYLLABIC_CATEGORY_CONSONANT_PRECEDING_REPHA	/*   2 chars; Consonant_Preceding_Repha */
+#define ISC_CPrf	INDIC_SYLLABIC_CATEGORY_CONSONANT_PREFIXED	/*   7 chars; Consonant_Prefixed */
+#define ISC_CS	INDIC_SYLLABIC_CATEGORY_CONSONANT_SUBJOINED	/*  95 chars; Consonant_Subjoined */
+#define ISC_CSR	INDIC_SYLLABIC_CATEGORY_CONSONANT_SUCCEEDING_REPHA	/*   5 chars; Consonant_Succeeding_Repha */
 #define ISC_CWS	INDIC_SYLLABIC_CATEGORY_CONSONANT_WITH_STACKER	/*   4 chars; Consonant_With_Stacker */
-#define ISC_GM	INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK		/*   2 chars; Gemination_Mark */
-#define ISC_IS	INDIC_SYLLABIC_CATEGORY_INVISIBLE_STACKER	/*   7 chars; Invisible_Stacker */
+#define ISC_GM	INDIC_SYLLABIC_CATEGORY_GEMINATION_MARK		/*   3 chars; Gemination_Mark */
+#define ISC_IS	INDIC_SYLLABIC_CATEGORY_INVISIBLE_STACKER	/*  10 chars; Invisible_Stacker */
 #define ISC_ZWJ	INDIC_SYLLABIC_CATEGORY_JOINER			/*   1 chars; Joiner */
 #define ISC_ML	INDIC_SYLLABIC_CATEGORY_MODIFYING_LETTER	/*   1 chars; Modifying_Letter */
 #define ISC_ZWNJ	INDIC_SYLLABIC_CATEGORY_NON_JOINER		/*   1 chars; Non_Joiner */
-#define ISC_N	INDIC_SYLLABIC_CATEGORY_NUKTA			/*  24 chars; Nukta */
-#define ISC_Nd	INDIC_SYLLABIC_CATEGORY_NUMBER			/* 459 chars; Number */
+#define ISC_N	INDIC_SYLLABIC_CATEGORY_NUKTA			/*  28 chars; Nukta */
+#define ISC_Nd	INDIC_SYLLABIC_CATEGORY_NUMBER			/* 469 chars; Number */
 #define ISC_NJ	INDIC_SYLLABIC_CATEGORY_NUMBER_JOINER		/*   1 chars; Number_Joiner */
 #define ISC_x	INDIC_SYLLABIC_CATEGORY_OTHER			/*   1 chars; Other */
-#define ISC_PK	INDIC_SYLLABIC_CATEGORY_PURE_KILLER		/*  16 chars; Pure_Killer */
+#define ISC_PK	INDIC_SYLLABIC_CATEGORY_PURE_KILLER		/*  21 chars; Pure_Killer */
 #define ISC_RS	INDIC_SYLLABIC_CATEGORY_REGISTER_SHIFTER	/*   2 chars; Register_Shifter */
 #define ISC_SM	INDIC_SYLLABIC_CATEGORY_SYLLABLE_MODIFIER	/*  22 chars; Syllable_Modifier */
 #define ISC_TL	INDIC_SYLLABIC_CATEGORY_TONE_LETTER		/*   7 chars; Tone_Letter */
 #define ISC_TM	INDIC_SYLLABIC_CATEGORY_TONE_MARK		/*  42 chars; Tone_Mark */
 #define ISC_V	INDIC_SYLLABIC_CATEGORY_VIRAMA			/*  24 chars; Virama */
-#define ISC_Vs	INDIC_SYLLABIC_CATEGORY_VISARGA			/*  31 chars; Visarga */
+#define ISC_Vs	INDIC_SYLLABIC_CATEGORY_VISARGA			/*  34 chars; Visarga */
 #define ISC_Vo	INDIC_SYLLABIC_CATEGORY_VOWEL			/*  30 chars; Vowel */
-#define ISC_M	INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT		/* 602 chars; Vowel_Dependent */
-#define ISC_VI	INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT	/* 431 chars; Vowel_Independent */
+#define ISC_M	INDIC_SYLLABIC_CATEGORY_VOWEL_DEPENDENT		/* 633 chars; Vowel_Dependent */
+#define ISC_VI	INDIC_SYLLABIC_CATEGORY_VOWEL_INDEPENDENT	/* 443 chars; Vowel_Independent */
 
-#define IMC_B	INDIC_MATRA_CATEGORY_BOTTOM			/* 300 chars; Bottom */
+#define IMC_B	INDIC_MATRA_CATEGORY_BOTTOM			/* 330 chars; Bottom */
+#define IMC_BL	INDIC_MATRA_CATEGORY_BOTTOM_AND_LEFT		/*   1 chars; Bottom_And_Left */
 #define IMC_BR	INDIC_MATRA_CATEGORY_BOTTOM_AND_RIGHT		/*   2 chars; Bottom_And_Right */
 #define IMC_L	INDIC_MATRA_CATEGORY_LEFT			/*  57 chars; Left */
 #define IMC_LR	INDIC_MATRA_CATEGORY_LEFT_AND_RIGHT		/*  21 chars; Left_And_Right */
 #define IMC_x	INDIC_MATRA_CATEGORY_NOT_APPLICABLE		/*   1 chars; Not_Applicable */
 #define IMC_O	INDIC_MATRA_CATEGORY_OVERSTRUCK			/*  10 chars; Overstruck */
-#define IMC_R	INDIC_MATRA_CATEGORY_RIGHT			/* 258 chars; Right */
-#define IMC_T	INDIC_MATRA_CATEGORY_TOP			/* 342 chars; Top */
+#define IMC_R	INDIC_MATRA_CATEGORY_RIGHT			/* 262 chars; Right */
+#define IMC_T	INDIC_MATRA_CATEGORY_TOP			/* 380 chars; Top */
 #define IMC_TB	INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM		/*  10 chars; Top_And_Bottom */
 #define IMC_TBR	INDIC_MATRA_CATEGORY_TOP_AND_BOTTOM_AND_RIGHT	/*   1 chars; Top_And_Bottom_And_Right */
 #define IMC_TL	INDIC_MATRA_CATEGORY_TOP_AND_LEFT		/*   6 chars; Top_And_Left */
@@ -133,7 +134,7 @@
   /* 09E0 */ _(VI,x), _(VI,x),  _(M,B),  _(M,B),  _(x,x),  _(x,x), _(Nd,x), _(Nd,x),
   /* 09E8 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
   /* 09F0 */  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 09F8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 09F8 */  _(x,x),  _(x,x),  _(x,x),  _(x,x), _(Bi,x),  _(x,x),  _(x,x),  _(x,x),
 
   /* Gurmukhi */
 
@@ -171,7 +172,7 @@
   /* 0AE0 */ _(VI,x), _(VI,x),  _(M,B),  _(M,B),  _(x,x),  _(x,x), _(Nd,x), _(Nd,x),
   /* 0AE8 */ _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x), _(Nd,x),
   /* 0AF0 */  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
-  /* 0AF8 */  _(x,x),  _(C,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* 0AF8 */  _(x,x),  _(C,x), _(Ca,T), _(Ca,T), _(Ca,T),  _(N,T),  _(N,T),  _(N,T),
 
   /* Oriya */
 
@@ -251,7 +252,7 @@
 
   /* Malayalam */
 
-  /* 0D00 */  _(x,x), _(Bi,T), _(Bi,R), _(Vs,R),  _(x,x), _(VI,x), _(VI,x), _(VI,x),
+  /* 0D00 */ _(Bi,T), _(Bi,T), _(Bi,R), _(Vs,R),  _(x,x), _(VI,x), _(VI,x), _(VI,x),
   /* 0D08 */ _(VI,x), _(VI,x), _(VI,x), _(VI,x), _(VI,x),  _(x,x), _(VI,x), _(VI,x),
   /* 0D10 */ _(VI,x),  _(x,x), _(VI,x), _(VI,x), _(VI,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0D18 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
@@ -258,7 +259,7 @@
   /* 0D20 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0D28 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
   /* 0D30 */  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),  _(C,x),
-  /* 0D38 */  _(C,x),  _(C,x),  _(C,x),  _(x,x),  _(x,x),  _(A,x),  _(M,R),  _(M,R),
+  /* 0D38 */  _(C,x),  _(C,x),  _(C,x), _(PK,T), _(PK,T),  _(A,x),  _(M,R),  _(M,R),
   /* 0D40 */  _(M,R),  _(M,R),  _(M,R),  _(M,B),  _(M,B),  _(x,x),  _(M,L),  _(M,L),
   /* 0D48 */  _(M,L),  _(x,x), _(M,LR), _(M,LR), _(M,LR),  _(V,T),_(CPR,x),  _(x,x),
   /* 0D50 */  _(x,x),  _(x,x),  _(x,x),  _(x,x), _(CD,x), _(CD,x), _(CD,x),  _(M,R),
@@ -341,7 +342,7 @@
   /* 1CD8 */ _(Ca,B), _(Ca,B), _(Ca,T), _(Ca,T), _(Ca,B), _(Ca,B), _(Ca,B), _(Ca,B),
   /* 1CE0 */ _(Ca,T), _(Ca,R),  _(x,O),  _(x,O),  _(x,O),  _(x,O),  _(x,O),  _(x,O),
   /* 1CE8 */  _(x,O),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,B),  _(x,x),  _(x,x),
-  /* 1CF0 */  _(x,x),  _(x,x), _(Vs,x), _(Vs,x), _(Ca,T),  _(x,x),  _(x,x),  _(x,x),
+  /* 1CF0 */  _(x,x),  _(x,x), _(Vs,x), _(Vs,x), _(Ca,T),  _(x,x),  _(x,x), _(Ca,R),
   /* 1CF8 */ _(Ca,x), _(Ca,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
 #define indic_offset_0x2008u 1656
@@ -368,7 +369,7 @@
 
   /* A8E0 */ _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T),
   /* A8E8 */ _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T), _(Ca,T),
-  /* A8F0 */ _(Ca,T), _(Ca,T),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
+  /* A8F0 */ _(Ca,T), _(Ca,T), _(Bi,x), _(Bi,x),  _(x,x),  _(x,x),  _(x,x),  _(x,x),
 
 #define indic_offset_0xa9e0u 1720
 
@@ -390,7 +391,7 @@
   /* AA70 */  _(x,x),  _(C,x),  _(C,x),  _(C,x), _(CP,x), _(CP,x), _(CP,x),  _(x,x),
   /* AA78 */  _(x,x),  _(x,x),  _(C,x), _(TM,R), _(TM,T), _(TM,R),  _(C,x),  _(C,x),
 
-}; /* Table items: 1784; occupancy: 69% */
+}; /* Table items: 1784; occupancy: 70% */
 
 INDIC_TABLE_ELEMENT_TYPE
 hb_indic_get_categories (hb_codepoint_t u)
@@ -422,13 +423,6 @@
       if (hb_in_range<hb_codepoint_t> (u, 0xAA60u, 0xAA7Fu)) return indic_table[u - 0xAA60u + indic_offset_0xaa60u];
       break;
 
-    case 0x11u:
-      // According to ScriptExtensions.txt, these Grantha marks may also be used in Tamil,
-      // so the Indic shaper needs to know their categories.
-      if (unlikely (u == 0x11303)) return _(Vs,R);
-      if (unlikely (u == 0x1133c)) return _(N,B);
-      break;
-
     default:
       break;
   }
@@ -474,6 +468,7 @@
 #undef ISC_VI
 
 #undef IMC_B
+#undef IMC_BL
 #undef IMC_BR
 #undef IMC_L
 #undef IMC_LR

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	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic.cc	2017-10-13 22:53:19 UTC (rev 45535)
@@ -208,7 +208,21 @@
     cat = OT_M;
     pos = POS_ABOVE_C;
   }
+  else if (unlikely (u == 0x0A51u))
+  {
+    /* https://github.com/behdad/harfbuzz/issues/524 */
+    cat = OT_M;
+    pos = POS_BELOW_C;
+  }
 
+  /* According to ScriptExtensions.txt, these Grantha marks may also be used in Tamil,
+   * so the Indic shaper needs to know their categories. */
+  else if (unlikely (u == 0x11303u)) cat = OT_SM;
+  else if (unlikely (u == 0x1133cu)) cat = OT_N;
+
+  else if (unlikely (u == 0x0AFBu)) cat = OT_N; /* https://github.com/behdad/harfbuzz/issues/552 */
+
+  else if (unlikely (u == 0x0980u)) cat = OT_PLACEHOLDER; /* https://github.com/behdad/harfbuzz/issues/538 */
   else if (unlikely (u == 0x17C6u)) cat = OT_N; /* Khmer Bindu doesn't like to be repositioned. */
   else if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x2010u, 0x2011u)))
 				    cat = OT_PLACEHOLDER;
@@ -677,6 +691,21 @@
   const indic_shape_plan_t *indic_plan = (const indic_shape_plan_t *) plan->data;
   hb_glyph_info_t *info = buffer->info;
 
+  /* https://github.com/behdad/harfbuzz/issues/435#issuecomment-335560167
+   * // For compatibility with legacy useage in Kannada,
+   * // Ra+h+ZWJ must behave like Ra+ZWJ+h...
+   */
+  if (buffer->props.script == HB_SCRIPT_KANNADA &&
+      start + 3 <= end &&
+      is_one_of (info[start  ], FLAG (OT_Ra)) &&
+      is_one_of (info[start+1], FLAG (OT_H)) &&
+      is_one_of (info[start+2], FLAG (OT_ZWJ)))
+  {
+    buffer->merge_clusters (start+1, start+3);
+    hb_glyph_info_t tmp = info[start+1];
+    info[start+1] = info[start+2];
+    info[start+2] = tmp;
+  }
 
   /* 1. Find base consonant:
    *
@@ -842,8 +871,8 @@
 
   /* 2. Decompose and reorder Matras:
    *
-   * Each matra and any syllable modifier sign in the cluster are moved to the
-   * appropriate position relative to the consonant(s) in the cluster. The
+   * Each matra and any syllable modifier sign in the syllable are moved to the
+   * appropriate position relative to the consonant(s) in the syllable. The
    * shaping engine decomposes two- or three-part matras into their constituent
    * parts before any repositioning. Matra characters are classified by which
    * consonant in a conjunct they have affinity for and are reordered to the
@@ -1269,7 +1298,7 @@
 
 
   /* This function relies heavily on halant glyphs.  Lots of ligation
-   * and possibly multiplication substitutions happened prior to this
+   * and possibly multiple substitutions happened prior to this
    * phase, and that might have messed up our properties.  Recover
    * from a particular case of that where we're fairly sure that a
    * class of OT_H is desired but has been lost. */
@@ -1293,7 +1322,7 @@
    * After the localized forms and basic shaping forms GSUB features have been
    * applied (see below), the shaping engine performs some final glyph
    * reordering before applying all the remaining font features to the entire
-   * cluster.
+   * syllable.
    */
 
   bool try_pref = !!indic_plan->mask_array[PREF];
@@ -1676,8 +1705,8 @@
         break;
 
       default:
-	/* Uniscribe merges the entire cluster... Except for Tamil & Sinhala.
-	 * This means, half forms are submerged into the main consonants cluster.
+	/* Uniscribe merges the entire syllable into a single cluster... Except for Tamil & Sinhala.
+	 * This means, half forms are submerged into the main consonant's cluster.
 	 * This is unnecessary, and makes cursor positioning harder, but that's what
 	 * Uniscribe does. */
 	buffer->merge_clusters (start, end);
@@ -1826,6 +1855,7 @@
   compose_indic,
   setup_masks_indic,
   NULL, /* disable_otl */
+  NULL, /* reorder_marks */
   HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE,
   false, /* fallback_position */
 };

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.hh	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.hh	2017-10-13 22:53:19 UTC (rev 45535)
@@ -1,5 +1,5 @@
 
-#line 1 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+#line 1 "hb-ot-shape-complex-myanmar-machine.rl"
 /*
  * Copyright © 2011,2012  Google, Inc.
  *
@@ -32,199 +32,203 @@
 #include "hb-private.hh"
 
 
-#line 36 "../../src/hb-ot-shape-complex-myanmar-machine.hh.tmp"
+#line 36 "hb-ot-shape-complex-myanmar-machine.hh"
 static const unsigned char _myanmar_syllable_machine_trans_keys[] = {
-	1u, 31u, 3u, 30u, 5u, 29u, 5u, 8u, 5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u, 
+	1u, 32u, 3u, 30u, 5u, 29u, 5u, 8u, 5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u, 
 	3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 1u, 16u, 3u, 29u, 3u, 29u, 3u, 29u, 
 	3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 5u, 29u, 5u, 8u, 
 	5u, 29u, 3u, 25u, 5u, 25u, 5u, 25u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 
-	3u, 30u, 3u, 29u, 1u, 30u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 
-	3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 8u, 8u, 0
+	3u, 30u, 3u, 29u, 1u, 32u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 
+	3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 1u, 32u, 8u, 8u, 0
 };
 
 static const char _myanmar_syllable_machine_key_spans[] = {
-	31, 28, 25, 4, 25, 23, 21, 21, 
+	32, 28, 25, 4, 25, 23, 21, 21, 
 	27, 27, 27, 27, 16, 27, 27, 27, 
 	27, 27, 27, 27, 27, 27, 25, 4, 
 	25, 23, 21, 21, 27, 27, 27, 27, 
-	28, 27, 30, 27, 27, 27, 27, 27, 
-	27, 27, 27, 27, 1
+	28, 27, 32, 27, 27, 27, 27, 27, 
+	27, 27, 27, 27, 32, 1
 };
 
 static const short _myanmar_syllable_machine_index_offsets[] = {
-	0, 32, 61, 87, 92, 118, 142, 164, 
-	186, 214, 242, 270, 298, 315, 343, 371, 
-	399, 427, 455, 483, 511, 539, 567, 593, 
-	598, 624, 648, 670, 692, 720, 748, 776, 
-	804, 833, 861, 892, 920, 948, 976, 1004, 
-	1032, 1060, 1088, 1116, 1144
+	0, 33, 62, 88, 93, 119, 143, 165, 
+	187, 215, 243, 271, 299, 316, 344, 372, 
+	400, 428, 456, 484, 512, 540, 568, 594, 
+	599, 625, 649, 671, 693, 721, 749, 777, 
+	805, 834, 862, 895, 923, 951, 979, 1007, 
+	1035, 1063, 1091, 1119, 1147, 1180
 };
 
 static const char _myanmar_syllable_machine_indicies[] = {
 	1, 1, 2, 3, 4, 4, 0, 5, 
 	0, 6, 1, 0, 0, 0, 0, 7, 
-	0, 8, 1, 0, 9, 10, 11, 12, 
-	13, 14, 15, 16, 17, 18, 19, 0, 
-	21, 22, 23, 23, 20, 24, 20, 25, 
-	20, 20, 20, 20, 20, 20, 20, 26, 
-	20, 20, 27, 28, 29, 30, 31, 32, 
-	33, 34, 35, 36, 20, 23, 23, 20, 
-	24, 20, 20, 20, 20, 20, 20, 20, 
-	20, 20, 37, 20, 20, 20, 20, 20, 
-	20, 31, 20, 20, 20, 35, 20, 23, 
-	23, 20, 24, 20, 23, 23, 20, 24, 
-	20, 20, 20, 20, 20, 20, 20, 20, 
-	20, 20, 20, 20, 20, 20, 20, 20, 
-	31, 20, 20, 20, 35, 20, 38, 20, 
-	23, 23, 20, 24, 20, 31, 20, 20, 
-	20, 20, 20, 20, 20, 39, 20, 20, 
-	20, 20, 20, 20, 31, 20, 23, 23, 
-	20, 24, 20, 20, 20, 20, 20, 20, 
-	20, 20, 20, 39, 20, 20, 20, 20, 
-	20, 20, 31, 20, 23, 23, 20, 24, 
-	20, 20, 20, 20, 20, 20, 20, 20, 
-	20, 20, 20, 20, 20, 20, 20, 20, 
-	31, 20, 21, 20, 23, 23, 20, 24, 
-	20, 25, 20, 20, 20, 20, 20, 20, 
-	20, 40, 20, 20, 40, 20, 20, 20, 
-	31, 41, 20, 20, 35, 20, 21, 20, 
-	23, 23, 20, 24, 20, 25, 20, 20, 
-	20, 20, 20, 20, 20, 20, 20, 20, 
-	20, 20, 20, 20, 31, 20, 20, 20, 
-	35, 20, 21, 20, 23, 23, 20, 24, 
-	20, 25, 20, 20, 20, 20, 20, 20, 
-	20, 40, 20, 20, 20, 20, 20, 20, 
-	31, 41, 20, 20, 35, 20, 21, 20, 
-	23, 23, 20, 24, 20, 25, 20, 20, 
-	20, 20, 20, 20, 20, 20, 20, 20, 
-	20, 20, 20, 20, 31, 41, 20, 20, 
-	35, 20, 1, 1, 20, 20, 20, 20, 
-	20, 20, 20, 20, 20, 20, 20, 20, 
-	20, 1, 20, 21, 20, 23, 23, 20, 
-	24, 20, 25, 20, 20, 20, 20, 20, 
-	20, 20, 26, 20, 20, 27, 28, 29, 
-	30, 31, 32, 33, 34, 35, 20, 21, 
-	20, 23, 23, 20, 24, 20, 25, 20, 
-	20, 20, 20, 20, 20, 20, 34, 20, 
-	20, 20, 20, 20, 20, 31, 32, 33, 
-	34, 35, 20, 21, 20, 23, 23, 20, 
-	24, 20, 25, 20, 20, 20, 20, 20, 
-	20, 20, 20, 20, 20, 20, 20, 20, 
-	20, 31, 32, 33, 34, 35, 20, 21, 
-	20, 23, 23, 20, 24, 20, 25, 20, 
-	20, 20, 20, 20, 20, 20, 20, 20, 
-	20, 20, 20, 20, 20, 31, 32, 33, 
-	20, 35, 20, 21, 20, 23, 23, 20, 
-	24, 20, 25, 20, 20, 20, 20, 20, 
-	20, 20, 20, 20, 20, 20, 20, 20, 
-	20, 31, 20, 33, 20, 35, 20, 21, 
-	20, 23, 23, 20, 24, 20, 25, 20, 
-	20, 20, 20, 20, 20, 20, 34, 20, 
-	20, 27, 20, 29, 20, 31, 32, 33, 
-	34, 35, 20, 21, 20, 23, 23, 20, 
-	24, 20, 25, 20, 20, 20, 20, 20, 
-	20, 20, 34, 20, 20, 27, 20, 20, 
-	20, 31, 32, 33, 34, 35, 20, 21, 
-	20, 23, 23, 20, 24, 20, 25, 20, 
-	20, 20, 20, 20, 20, 20, 34, 20, 
-	20, 27, 28, 29, 20, 31, 32, 33, 
-	34, 35, 20, 21, 22, 23, 23, 20, 
-	24, 20, 25, 20, 20, 20, 20, 20, 
-	20, 20, 26, 20, 20, 27, 28, 29, 
-	30, 31, 32, 33, 34, 35, 20, 3, 
-	3, 42, 5, 42, 42, 42, 42, 42, 
-	42, 42, 42, 42, 43, 42, 42, 42, 
-	42, 42, 42, 13, 42, 42, 42, 17, 
-	42, 3, 3, 42, 5, 42, 3, 3, 
-	42, 5, 42, 42, 42, 42, 42, 42, 
-	42, 42, 42, 42, 42, 42, 42, 42, 
-	42, 42, 13, 42, 42, 42, 17, 42, 
-	44, 42, 3, 3, 42, 5, 42, 13, 
-	42, 42, 42, 42, 42, 42, 42, 45, 
-	42, 42, 42, 42, 42, 42, 13, 42, 
-	3, 3, 42, 5, 42, 42, 42, 42, 
-	42, 42, 42, 42, 42, 45, 42, 42, 
-	42, 42, 42, 42, 13, 42, 3, 3, 
-	42, 5, 42, 42, 42, 42, 42, 42, 
-	42, 42, 42, 42, 42, 42, 42, 42, 
-	42, 42, 13, 42, 2, 42, 3, 3, 
-	42, 5, 42, 6, 42, 42, 42, 42, 
-	42, 42, 42, 46, 42, 42, 46, 42, 
-	42, 42, 13, 47, 42, 42, 17, 42, 
-	2, 42, 3, 3, 42, 5, 42, 6, 
-	42, 42, 42, 42, 42, 42, 42, 42, 
-	42, 42, 42, 42, 42, 42, 13, 42, 
-	42, 42, 17, 42, 2, 42, 3, 3, 
-	42, 5, 42, 6, 42, 42, 42, 42, 
-	42, 42, 42, 46, 42, 42, 42, 42, 
-	42, 42, 13, 47, 42, 42, 17, 42, 
-	2, 42, 3, 3, 42, 5, 42, 6, 
-	42, 42, 42, 42, 42, 42, 42, 42, 
-	42, 42, 42, 42, 42, 42, 13, 47, 
-	42, 42, 17, 42, 21, 22, 23, 23, 
-	20, 24, 20, 25, 20, 20, 20, 20, 
-	20, 20, 20, 48, 20, 20, 27, 28, 
+	0, 8, 9, 0, 10, 11, 12, 13, 
+	14, 15, 16, 17, 18, 19, 20, 1, 
+	0, 22, 23, 24, 24, 21, 25, 21, 
+	26, 21, 21, 21, 21, 21, 21, 21, 
+	27, 21, 21, 28, 29, 30, 31, 32, 
+	33, 34, 35, 36, 37, 21, 24, 24, 
+	21, 25, 21, 21, 21, 21, 21, 21, 
+	21, 21, 21, 38, 21, 21, 21, 21, 
+	21, 21, 32, 21, 21, 21, 36, 21, 
+	24, 24, 21, 25, 21, 24, 24, 21, 
+	25, 21, 21, 21, 21, 21, 21, 21, 
+	21, 21, 21, 21, 21, 21, 21, 21, 
+	21, 32, 21, 21, 21, 36, 21, 39, 
+	21, 24, 24, 21, 25, 21, 32, 21, 
+	21, 21, 21, 21, 21, 21, 40, 21, 
+	21, 21, 21, 21, 21, 32, 21, 24, 
+	24, 21, 25, 21, 21, 21, 21, 21, 
+	21, 21, 21, 21, 40, 21, 21, 21, 
+	21, 21, 21, 32, 21, 24, 24, 21, 
+	25, 21, 21, 21, 21, 21, 21, 21, 
+	21, 21, 21, 21, 21, 21, 21, 21, 
+	21, 32, 21, 22, 21, 24, 24, 21, 
+	25, 21, 26, 21, 21, 21, 21, 21, 
+	21, 21, 41, 21, 21, 41, 21, 21, 
+	21, 32, 42, 21, 21, 36, 21, 22, 
+	21, 24, 24, 21, 25, 21, 26, 21, 
+	21, 21, 21, 21, 21, 21, 21, 21, 
+	21, 21, 21, 21, 21, 32, 21, 21, 
+	21, 36, 21, 22, 21, 24, 24, 21, 
+	25, 21, 26, 21, 21, 21, 21, 21, 
+	21, 21, 41, 21, 21, 21, 21, 21, 
+	21, 32, 42, 21, 21, 36, 21, 22, 
+	21, 24, 24, 21, 25, 21, 26, 21, 
+	21, 21, 21, 21, 21, 21, 21, 21, 
+	21, 21, 21, 21, 21, 32, 42, 21, 
+	21, 36, 21, 1, 1, 21, 21, 21, 
+	21, 21, 21, 21, 21, 21, 21, 21, 
+	21, 21, 1, 21, 22, 21, 24, 24, 
+	21, 25, 21, 26, 21, 21, 21, 21, 
+	21, 21, 21, 27, 21, 21, 28, 29, 
+	30, 31, 32, 33, 34, 35, 36, 21, 
+	22, 21, 24, 24, 21, 25, 21, 26, 
+	21, 21, 21, 21, 21, 21, 21, 35, 
+	21, 21, 21, 21, 21, 21, 32, 33, 
+	34, 35, 36, 21, 22, 21, 24, 24, 
+	21, 25, 21, 26, 21, 21, 21, 21, 
+	21, 21, 21, 21, 21, 21, 21, 21, 
+	21, 21, 32, 33, 34, 35, 36, 21, 
+	22, 21, 24, 24, 21, 25, 21, 26, 
+	21, 21, 21, 21, 21, 21, 21, 21, 
+	21, 21, 21, 21, 21, 21, 32, 33, 
+	34, 21, 36, 21, 22, 21, 24, 24, 
+	21, 25, 21, 26, 21, 21, 21, 21, 
+	21, 21, 21, 21, 21, 21, 21, 21, 
+	21, 21, 32, 21, 34, 21, 36, 21, 
+	22, 21, 24, 24, 21, 25, 21, 26, 
+	21, 21, 21, 21, 21, 21, 21, 35, 
+	21, 21, 28, 21, 30, 21, 32, 33, 
+	34, 35, 36, 21, 22, 21, 24, 24, 
+	21, 25, 21, 26, 21, 21, 21, 21, 
+	21, 21, 21, 35, 21, 21, 28, 21, 
+	21, 21, 32, 33, 34, 35, 36, 21, 
+	22, 21, 24, 24, 21, 25, 21, 26, 
+	21, 21, 21, 21, 21, 21, 21, 35, 
+	21, 21, 28, 29, 30, 21, 32, 33, 
+	34, 35, 36, 21, 22, 23, 24, 24, 
+	21, 25, 21, 26, 21, 21, 21, 21, 
+	21, 21, 21, 27, 21, 21, 28, 29, 
+	30, 31, 32, 33, 34, 35, 36, 21, 
+	3, 3, 43, 5, 43, 43, 43, 43, 
+	43, 43, 43, 43, 43, 44, 43, 43, 
+	43, 43, 43, 43, 14, 43, 43, 43, 
+	18, 43, 3, 3, 43, 5, 43, 3, 
+	3, 43, 5, 43, 43, 43, 43, 43, 
+	43, 43, 43, 43, 43, 43, 43, 43, 
+	43, 43, 43, 14, 43, 43, 43, 18, 
+	43, 45, 43, 3, 3, 43, 5, 43, 
+	14, 43, 43, 43, 43, 43, 43, 43, 
+	46, 43, 43, 43, 43, 43, 43, 14, 
+	43, 3, 3, 43, 5, 43, 43, 43, 
+	43, 43, 43, 43, 43, 43, 46, 43, 
+	43, 43, 43, 43, 43, 14, 43, 3, 
+	3, 43, 5, 43, 43, 43, 43, 43, 
+	43, 43, 43, 43, 43, 43, 43, 43, 
+	43, 43, 43, 14, 43, 2, 43, 3, 
+	3, 43, 5, 43, 6, 43, 43, 43, 
+	43, 43, 43, 43, 47, 43, 43, 47, 
+	43, 43, 43, 14, 48, 43, 43, 18, 
+	43, 2, 43, 3, 3, 43, 5, 43, 
+	6, 43, 43, 43, 43, 43, 43, 43, 
+	43, 43, 43, 43, 43, 43, 43, 14, 
+	43, 43, 43, 18, 43, 2, 43, 3, 
+	3, 43, 5, 43, 6, 43, 43, 43, 
+	43, 43, 43, 43, 47, 43, 43, 43, 
+	43, 43, 43, 14, 48, 43, 43, 18, 
+	43, 2, 43, 3, 3, 43, 5, 43, 
+	6, 43, 43, 43, 43, 43, 43, 43, 
+	43, 43, 43, 43, 43, 43, 43, 14, 
+	48, 43, 43, 18, 43, 22, 23, 24, 
+	24, 21, 25, 21, 26, 21, 21, 21, 
+	21, 21, 21, 21, 49, 21, 21, 28, 
 	29, 30, 31, 32, 33, 34, 35, 36, 
-	20, 21, 49, 23, 23, 20, 24, 20, 
-	25, 20, 20, 20, 20, 20, 20, 20, 
-	26, 20, 20, 27, 28, 29, 30, 31, 
-	32, 33, 34, 35, 20, 1, 1, 2, 
-	3, 3, 3, 42, 5, 42, 6, 1, 
-	42, 42, 42, 42, 1, 42, 8, 1, 
-	42, 9, 10, 11, 12, 13, 14, 15, 
-	16, 17, 18, 42, 2, 42, 3, 3, 
-	42, 5, 42, 6, 42, 42, 42, 42, 
-	42, 42, 42, 8, 42, 42, 9, 10, 
-	11, 12, 13, 14, 15, 16, 17, 42, 
-	2, 42, 3, 3, 42, 5, 42, 6, 
-	42, 42, 42, 42, 42, 42, 42, 16, 
-	42, 42, 42, 42, 42, 42, 13, 14, 
-	15, 16, 17, 42, 2, 42, 3, 3, 
-	42, 5, 42, 6, 42, 42, 42, 42, 
-	42, 42, 42, 42, 42, 42, 42, 42, 
-	42, 42, 13, 14, 15, 16, 17, 42, 
-	2, 42, 3, 3, 42, 5, 42, 6, 
-	42, 42, 42, 42, 42, 42, 42, 42, 
-	42, 42, 42, 42, 42, 42, 13, 14, 
-	15, 42, 17, 42, 2, 42, 3, 3, 
-	42, 5, 42, 6, 42, 42, 42, 42, 
-	42, 42, 42, 42, 42, 42, 42, 42, 
-	42, 42, 13, 42, 15, 42, 17, 42, 
-	2, 42, 3, 3, 42, 5, 42, 6, 
-	42, 42, 42, 42, 42, 42, 42, 16, 
-	42, 42, 9, 42, 11, 42, 13, 14, 
-	15, 16, 17, 42, 2, 42, 3, 3, 
-	42, 5, 42, 6, 42, 42, 42, 42, 
-	42, 42, 42, 16, 42, 42, 9, 42, 
-	42, 42, 13, 14, 15, 16, 17, 42, 
-	2, 42, 3, 3, 42, 5, 42, 6, 
-	42, 42, 42, 42, 42, 42, 42, 16, 
-	42, 42, 9, 10, 11, 42, 13, 14, 
-	15, 16, 17, 42, 2, 3, 3, 3, 
-	42, 5, 42, 6, 42, 42, 42, 42, 
-	42, 42, 42, 8, 42, 42, 9, 10, 
-	11, 12, 13, 14, 15, 16, 17, 42, 
-	51, 50, 0
+	37, 21, 22, 50, 24, 24, 21, 25, 
+	21, 26, 21, 21, 21, 21, 21, 21, 
+	21, 27, 21, 21, 28, 29, 30, 31, 
+	32, 33, 34, 35, 36, 21, 1, 1, 
+	2, 3, 3, 3, 43, 5, 43, 6, 
+	1, 43, 43, 43, 43, 1, 43, 8, 
+	43, 43, 10, 11, 12, 13, 14, 15, 
+	16, 17, 18, 19, 43, 1, 43, 2, 
+	43, 3, 3, 43, 5, 43, 6, 43, 
+	43, 43, 43, 43, 43, 43, 8, 43, 
+	43, 10, 11, 12, 13, 14, 15, 16, 
+	17, 18, 43, 2, 43, 3, 3, 43, 
+	5, 43, 6, 43, 43, 43, 43, 43, 
+	43, 43, 17, 43, 43, 43, 43, 43, 
+	43, 14, 15, 16, 17, 18, 43, 2, 
+	43, 3, 3, 43, 5, 43, 6, 43, 
+	43, 43, 43, 43, 43, 43, 43, 43, 
+	43, 43, 43, 43, 43, 14, 15, 16, 
+	17, 18, 43, 2, 43, 3, 3, 43, 
+	5, 43, 6, 43, 43, 43, 43, 43, 
+	43, 43, 43, 43, 43, 43, 43, 43, 
+	43, 14, 15, 16, 43, 18, 43, 2, 
+	43, 3, 3, 43, 5, 43, 6, 43, 
+	43, 43, 43, 43, 43, 43, 43, 43, 
+	43, 43, 43, 43, 43, 14, 43, 16, 
+	43, 18, 43, 2, 43, 3, 3, 43, 
+	5, 43, 6, 43, 43, 43, 43, 43, 
+	43, 43, 17, 43, 43, 10, 43, 12, 
+	43, 14, 15, 16, 17, 18, 43, 2, 
+	43, 3, 3, 43, 5, 43, 6, 43, 
+	43, 43, 43, 43, 43, 43, 17, 43, 
+	43, 10, 43, 43, 43, 14, 15, 16, 
+	17, 18, 43, 2, 43, 3, 3, 43, 
+	5, 43, 6, 43, 43, 43, 43, 43, 
+	43, 43, 17, 43, 43, 10, 11, 12, 
+	43, 14, 15, 16, 17, 18, 43, 2, 
+	3, 3, 3, 43, 5, 43, 6, 43, 
+	43, 43, 43, 43, 43, 43, 8, 43, 
+	43, 10, 11, 12, 13, 14, 15, 16, 
+	17, 18, 43, 1, 1, 51, 51, 51, 
+	51, 51, 51, 51, 51, 1, 51, 51, 
+	51, 51, 1, 51, 51, 51, 51, 51, 
+	51, 51, 51, 51, 51, 51, 51, 51, 
+	51, 51, 1, 51, 52, 51, 0
 };
 
 static const char _myanmar_syllable_machine_trans_targs[] = {
 	0, 1, 22, 0, 0, 23, 29, 32, 
-	35, 36, 40, 41, 42, 25, 38, 39, 
-	37, 28, 43, 44, 0, 2, 12, 0, 
-	3, 9, 13, 14, 18, 19, 20, 5, 
-	16, 17, 15, 8, 21, 4, 6, 7, 
-	10, 11, 0, 24, 26, 27, 30, 31, 
-	33, 34, 0, 0
+	35, 44, 36, 40, 41, 42, 25, 38, 
+	39, 37, 28, 43, 45, 0, 2, 12, 
+	0, 3, 9, 13, 14, 18, 19, 20, 
+	5, 16, 17, 15, 8, 21, 4, 6, 
+	7, 10, 11, 0, 24, 26, 27, 30, 
+	31, 33, 34, 0, 0
 };
 
 static const char _myanmar_syllable_machine_trans_actions[] = {
 	3, 0, 0, 4, 5, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 6, 0, 0, 7, 
+	0, 0, 0, 0, 0, 6, 0, 0, 
+	7, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 8, 0, 0, 0, 0, 0, 
-	0, 0, 9, 10
+	0, 0, 0, 8, 0, 0, 0, 0, 
+	0, 0, 0, 9, 10
 };
 
 static const char _myanmar_syllable_machine_to_state_actions[] = {
@@ -233,7 +237,7 @@
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 0
+	0, 0, 0, 0, 0, 0
 };
 
 static const char _myanmar_syllable_machine_from_state_actions[] = {
@@ -242,16 +246,16 @@
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0, 0, 0
+	0, 0, 0, 0, 0, 0
 };
 
 static const short _myanmar_syllable_machine_eof_trans[] = {
-	0, 21, 21, 21, 21, 21, 21, 21, 
-	21, 21, 21, 21, 21, 21, 21, 21, 
-	21, 21, 21, 21, 21, 21, 43, 43, 
-	43, 43, 43, 43, 43, 43, 43, 43, 
-	21, 21, 43, 43, 43, 43, 43, 43, 
-	43, 43, 43, 43, 51
+	0, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 22, 22, 
+	22, 22, 22, 22, 22, 22, 44, 44, 
+	44, 44, 44, 44, 44, 44, 44, 44, 
+	22, 22, 44, 44, 44, 44, 44, 44, 
+	44, 44, 44, 44, 52, 52
 };
 
 static const int myanmar_syllable_machine_start = 0;
@@ -261,11 +265,11 @@
 static const int myanmar_syllable_machine_en_main = 0;
 
 
-#line 36 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+#line 36 "hb-ot-shape-complex-myanmar-machine.rl"
 
 
 
-#line 93 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+#line 94 "hb-ot-shape-complex-myanmar-machine.rl"
 
 
 #define found_syllable(syllable_type) \
@@ -285,7 +289,7 @@
   int cs;
   hb_glyph_info_t *info = buffer->info;
   
-#line 289 "../../src/hb-ot-shape-complex-myanmar-machine.hh.tmp"
+#line 293 "hb-ot-shape-complex-myanmar-machine.hh"
 	{
 	cs = myanmar_syllable_machine_start;
 	ts = 0;
@@ -293,7 +297,7 @@
 	act = 0;
 	}
 
-#line 114 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+#line 115 "hb-ot-shape-complex-myanmar-machine.rl"
 
 
   p = 0;
@@ -302,7 +306,7 @@
   unsigned int last = 0;
   unsigned int syllable_serial = 1;
   
-#line 306 "../../src/hb-ot-shape-complex-myanmar-machine.hh.tmp"
+#line 310 "hb-ot-shape-complex-myanmar-machine.hh"
 	{
 	int _slen;
 	int _trans;
@@ -316,7 +320,7 @@
 #line 1 "NONE"
 	{ts = p;}
 	break;
-#line 320 "../../src/hb-ot-shape-complex-myanmar-machine.hh.tmp"
+#line 324 "hb-ot-shape-complex-myanmar-machine.hh"
 	}
 
 	_keys = _myanmar_syllable_machine_trans_keys + (cs<<1);
@@ -335,38 +339,38 @@
 
 	switch ( _myanmar_syllable_machine_trans_actions[_trans] ) {
 	case 7:
-#line 85 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+#line 86 "hb-ot-shape-complex-myanmar-machine.rl"
 	{te = p+1;{ found_syllable (consonant_syllable); }}
 	break;
 	case 5:
-#line 86 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+#line 87 "hb-ot-shape-complex-myanmar-machine.rl"
 	{te = p+1;{ found_syllable (non_myanmar_cluster); }}
 	break;
 	case 10:
-#line 87 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+#line 88 "hb-ot-shape-complex-myanmar-machine.rl"
 	{te = p+1;{ found_syllable (punctuation_cluster); }}
 	break;
 	case 4:
-#line 88 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+#line 89 "hb-ot-shape-complex-myanmar-machine.rl"
 	{te = p+1;{ found_syllable (broken_cluster); }}
 	break;
 	case 3:
-#line 89 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+#line 90 "hb-ot-shape-complex-myanmar-machine.rl"
 	{te = p+1;{ found_syllable (non_myanmar_cluster); }}
 	break;
 	case 6:
-#line 85 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+#line 86 "hb-ot-shape-complex-myanmar-machine.rl"
 	{te = p;p--;{ found_syllable (consonant_syllable); }}
 	break;
 	case 8:
-#line 88 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+#line 89 "hb-ot-shape-complex-myanmar-machine.rl"
 	{te = p;p--;{ found_syllable (broken_cluster); }}
 	break;
 	case 9:
-#line 89 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+#line 90 "hb-ot-shape-complex-myanmar-machine.rl"
 	{te = p;p--;{ found_syllable (non_myanmar_cluster); }}
 	break;
-#line 370 "../../src/hb-ot-shape-complex-myanmar-machine.hh.tmp"
+#line 374 "hb-ot-shape-complex-myanmar-machine.hh"
 	}
 
 _again:
@@ -375,7 +379,7 @@
 #line 1 "NONE"
 	{ts = 0;}
 	break;
-#line 379 "../../src/hb-ot-shape-complex-myanmar-machine.hh.tmp"
+#line 383 "hb-ot-shape-complex-myanmar-machine.hh"
 	}
 
 	if ( ++p != pe )
@@ -391,7 +395,7 @@
 
 	}
 
-#line 123 "../../src/hb-ot-shape-complex-myanmar-machine.rl"
+#line 124 "hb-ot-shape-complex-myanmar-machine.rl"
 
 }
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.rl
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.rl	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.rl	2017-10-13 22:53:19 UTC (rev 45535)
@@ -41,7 +41,7 @@
 A    = 10;
 As   = 18;
 C    = 1;
-D    = 19;
+D    = 32;
 D0   = 20;
 DB   = 3;
 GB   = 11;
@@ -62,6 +62,7 @@
 ZWNJ = 5;
 Ra   = 16;
 P    = 31;
+CS   = 19;
 
 j = ZWJ|ZWNJ;			# Joiners
 k = (Ra As H);			# Kinzi
@@ -76,7 +77,7 @@
 complex_syllable_tail = As* medial_group main_vowel_group post_vowel_group* pwo_tone_group* V* j?;
 syllable_tail = (H | complex_syllable_tail);
 
-consonant_syllable =	k? (c|IV|D|GB).VS? (H (c|IV).VS?)* syllable_tail;
+consonant_syllable =	(k|CS)? (c|IV|D|GB).VS? (H (c|IV).VS?)* syllable_tail;
 punctuation_cluster = 	P V;
 broken_cluster =	k? VS? syllable_tail;
 other =			any;

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar.cc	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar.cc	2017-10-13 22:53:19 UTC (rev 45535)
@@ -130,8 +130,7 @@
 /* Note: This enum is duplicated in the -machine.rl source file.
  * Not sure how to avoid duplication. */
 enum myanmar_category_t {
-  OT_As  = 18, /* Asat */
-  OT_D   = 19, /* Digits except zero */
+  OT_As  = 18,  /* Asat */
   OT_D0  = 20, /* Digit zero */
   OT_DB  = OT_N, /* Dot below */
   OT_GB  = OT_PLACEHOLDER,
@@ -145,7 +144,8 @@
   OT_VPre = 28,
   OT_VPst = 29,
   OT_VS   = 30, /* Variation selectors */
-  OT_P    = 31  /* Punctuation */
+  OT_P    = 31, /* Punctuation */
+  OT_D    = 32, /* Digits except zero */
 };
 
 
@@ -524,6 +524,7 @@
   NULL, /* compose */
   NULL, /* setup_masks */
   NULL, /* disable_otl */
+  NULL, /* reorder_marks */
   HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE,
   true, /* fallback_position */
 };
@@ -542,6 +543,7 @@
   NULL, /* compose */
   setup_masks_myanmar,
   NULL, /* disable_otl */
+  NULL, /* reorder_marks */
   HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY,
   false, /* fallback_position */
 };

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-private.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-private.hh	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-private.hh	2017-10-13 22:53:19 UTC (rev 45535)
@@ -39,6 +39,8 @@
 #define complex_var_u8_1()	var2.u8[3]
 
 
+#define HB_OT_SHAPE_COMPLEX_MAX_COMBINING_MARKS 32
+
 enum hb_ot_shape_zero_width_marks_type_t {
   HB_OT_SHAPE_ZERO_WIDTH_MARKS_NONE,
   HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY,
@@ -154,6 +156,16 @@
    */
   bool (*disable_otl) (const hb_ot_shape_plan_t *plan);
 
+  /* reorder_marks()
+   * Called during shape().
+   * Shapers can use to modify ordering of combining marks.
+   * May be NULL.
+   */
+  void (*reorder_marks) (const hb_ot_shape_plan_t *plan,
+			 hb_buffer_t              *buffer,
+			 unsigned int              start,
+			 unsigned int              end);
+
   hb_ot_shape_zero_width_marks_type_t zero_width_marks;
 
   bool fallback_position;
@@ -253,10 +265,12 @@
     case HB_SCRIPT_SINHALA:
 
       /* If the designer designed the font for the 'DFLT' script,
-       * use the default shaper.  Otherwise, use the specific shaper.
+       * (or we ended up arbitrarily pick 'latn'), use the default shaper.
+       * Otherwise, use the specific shaper.
        * Note that for some simple scripts, there may not be *any*
        * GSUB/GPOS needed, so there may be no scripts found! */
-      if (planner->map.chosen_script[0] == HB_TAG ('D','F','L','T'))
+      if (planner->map.chosen_script[0] == HB_TAG ('D','F','L','T') ||
+	  planner->map.chosen_script[0] == HB_TAG ('l','a','t','n'))
 	return &_hb_ot_complex_shaper_default;
       else
 	return &_hb_ot_complex_shaper_indic;
@@ -362,11 +376,18 @@
     case HB_SCRIPT_MARCHEN:
     case HB_SCRIPT_NEWA:
 
+    /* Unicode-10.0 additions */
+    case HB_SCRIPT_MASARAM_GONDI:
+    case HB_SCRIPT_SOYOMBO:
+    case HB_SCRIPT_ZANABAZAR_SQUARE:
+
       /* If the designer designed the font for the 'DFLT' script,
-       * use the default shaper.  Otherwise, use the specific shaper.
+       * (or we ended up arbitrarily pick 'latn'), use the default shaper.
+       * Otherwise, use the specific shaper.
        * Note that for some simple scripts, there may not be *any*
        * GSUB/GPOS needed, so there may be no scripts found! */
-      if (planner->map.chosen_script[0] == HB_TAG ('D','F','L','T'))
+      if (planner->map.chosen_script[0] == HB_TAG ('D','F','L','T') ||
+	  planner->map.chosen_script[0] == HB_TAG ('l','a','t','n'))
 	return &_hb_ot_complex_shaper_default;
       else
 	return &_hb_ot_complex_shaper_use;

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-thai.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-thai.cc	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-thai.cc	2017-10-13 22:53:19 UTC (rev 45535)
@@ -378,6 +378,7 @@
   NULL, /* compose */
   NULL, /* setup_masks */
   NULL, /* disable_otl */
+  NULL, /* reorder_marks */
   HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE,
   false,/* fallback_position */
 };

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-tibetan.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-tibetan.cc	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-tibetan.cc	2017-10-13 22:53:19 UTC (rev 45535)
@@ -58,6 +58,7 @@
   NULL, /* compose */
   NULL, /* setup_masks */
   NULL, /* disable_otl */
+  NULL, /* reorder_marks */
   HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE,
   true, /* fallback_position */
 };

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.hh	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.hh	2017-10-13 22:53:19 UTC (rev 45535)
@@ -36,33 +36,33 @@
 
 #line 38 "hb-ot-shape-complex-use-machine.hh"
 static const unsigned char _use_syllable_machine_trans_keys[] = {
-	1u, 1u, 0u, 39u, 21u, 21u, 8u, 39u, 8u, 39u, 1u, 1u, 8u, 39u, 8u, 39u, 
+	1u, 1u, 0u, 43u, 21u, 21u, 8u, 39u, 8u, 39u, 1u, 1u, 8u, 39u, 8u, 39u, 
 	8u, 39u, 8u, 26u, 8u, 26u, 8u, 26u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 
 	8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 
 	13u, 21u, 4u, 4u, 13u, 13u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 26u, 
 	8u, 26u, 8u, 26u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 
 	8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 8u, 39u, 1u, 1u, 1u, 39u, 8u, 39u, 
-	21u, 42u, 41u, 42u, 42u, 42u, 0
+	21u, 42u, 41u, 42u, 42u, 42u, 1u, 5u, 0
 };
 
 static const char _use_syllable_machine_key_spans[] = {
-	1, 40, 1, 32, 32, 1, 32, 32, 
+	1, 44, 1, 32, 32, 1, 32, 32, 
 	32, 19, 19, 19, 32, 32, 32, 32, 
 	32, 32, 32, 32, 32, 32, 32, 32, 
 	9, 1, 1, 32, 32, 32, 32, 19, 
 	19, 19, 32, 32, 32, 32, 32, 32, 
 	32, 32, 32, 32, 32, 1, 39, 32, 
-	22, 2, 1
+	22, 2, 1, 5
 };
 
 static const short _use_syllable_machine_index_offsets[] = {
-	0, 2, 43, 45, 78, 111, 113, 146, 
-	179, 212, 232, 252, 272, 305, 338, 371, 
-	404, 437, 470, 503, 536, 569, 602, 635, 
-	668, 678, 680, 682, 715, 748, 781, 814, 
-	834, 854, 874, 907, 940, 973, 1006, 1039, 
-	1072, 1105, 1138, 1171, 1204, 1237, 1239, 1279, 
-	1312, 1335, 1338
+	0, 2, 47, 49, 82, 115, 117, 150, 
+	183, 216, 236, 256, 276, 309, 342, 375, 
+	408, 441, 474, 507, 540, 573, 606, 639, 
+	672, 682, 684, 686, 719, 752, 785, 818, 
+	838, 858, 878, 911, 944, 977, 1010, 1043, 
+	1076, 1109, 1142, 1175, 1208, 1241, 1243, 1283, 
+	1316, 1339, 1342, 1344
 };
 
 static const char _use_syllable_machine_indicies[] = {
@@ -71,169 +71,170 @@
 	4, 4, 2, 2, 8, 9, 4, 4, 
 	10, 11, 12, 13, 14, 15, 16, 10, 
 	17, 18, 19, 20, 21, 22, 4, 23, 
-	24, 25, 4, 27, 26, 29, 28, 28, 
-	30, 31, 28, 28, 28, 28, 28, 28, 
-	28, 28, 32, 33, 34, 35, 36, 37, 
-	38, 39, 33, 40, 32, 41, 42, 43, 
-	44, 28, 45, 46, 47, 28, 29, 28, 
-	28, 30, 31, 28, 28, 28, 28, 28, 
-	28, 28, 28, 48, 33, 34, 35, 36, 
-	37, 38, 39, 33, 40, 41, 41, 42, 
-	43, 44, 28, 45, 46, 47, 28, 30, 
-	49, 29, 28, 28, 30, 31, 28, 28, 
-	28, 28, 28, 28, 28, 28, 28, 33, 
-	34, 35, 36, 37, 38, 39, 33, 40, 
-	41, 41, 42, 43, 44, 28, 45, 46, 
-	47, 28, 29, 28, 28, 28, 28, 28, 
-	28, 28, 28, 28, 28, 28, 28, 28, 
-	33, 34, 35, 36, 37, 28, 28, 28, 
-	28, 28, 28, 42, 43, 44, 28, 45, 
-	46, 47, 28, 29, 28, 28, 28, 28, 
-	28, 28, 28, 28, 28, 28, 28, 28, 
-	28, 28, 34, 35, 36, 37, 28, 28, 
-	28, 28, 28, 28, 28, 28, 28, 28, 
-	45, 46, 47, 28, 29, 28, 28, 28, 
-	28, 28, 28, 28, 28, 28, 28, 28, 
-	28, 28, 28, 28, 35, 36, 37, 28, 
-	29, 28, 28, 28, 28, 28, 28, 28, 
-	28, 28, 28, 28, 28, 28, 28, 28, 
-	28, 36, 37, 28, 29, 28, 28, 28, 
-	28, 28, 28, 28, 28, 28, 28, 28, 
-	28, 28, 28, 28, 28, 28, 37, 28, 
-	29, 28, 28, 28, 28, 28, 28, 28, 
-	28, 28, 28, 28, 28, 28, 28, 28, 
-	35, 36, 37, 28, 28, 28, 28, 28, 
-	28, 28, 28, 28, 28, 45, 46, 47, 
-	28, 29, 28, 28, 28, 28, 28, 28, 
-	28, 28, 28, 28, 28, 28, 28, 28, 
-	28, 35, 36, 37, 28, 28, 28, 28, 
-	28, 28, 28, 28, 28, 28, 28, 46, 
-	47, 28, 29, 28, 28, 28, 28, 28, 
-	28, 28, 28, 28, 28, 28, 28, 28, 
-	28, 28, 35, 36, 37, 28, 28, 28, 
-	28, 28, 28, 28, 28, 28, 28, 28, 
-	28, 47, 28, 29, 28, 28, 28, 28, 
-	28, 28, 28, 28, 28, 28, 28, 28, 
-	28, 28, 34, 35, 36, 37, 28, 28, 
-	28, 28, 28, 28, 42, 43, 44, 28, 
-	45, 46, 47, 28, 29, 28, 28, 28, 
-	28, 28, 28, 28, 28, 28, 28, 28, 
-	28, 28, 28, 34, 35, 36, 37, 28, 
-	28, 28, 28, 28, 28, 28, 43, 44, 
-	28, 45, 46, 47, 28, 29, 28, 28, 
-	28, 28, 28, 28, 28, 28, 28, 28, 
-	28, 28, 28, 28, 34, 35, 36, 37, 
-	28, 28, 28, 28, 28, 28, 28, 28, 
-	44, 28, 45, 46, 47, 28, 29, 28, 
-	28, 28, 28, 28, 28, 28, 28, 28, 
-	28, 28, 28, 28, 33, 34, 35, 36, 
-	37, 28, 39, 33, 28, 28, 28, 42, 
-	43, 44, 28, 45, 46, 47, 28, 29, 
-	28, 28, 28, 28, 28, 28, 28, 28, 
-	28, 28, 28, 28, 28, 33, 34, 35, 
-	36, 37, 28, 50, 33, 28, 28, 28, 
-	42, 43, 44, 28, 45, 46, 47, 28, 
-	29, 28, 28, 28, 28, 28, 28, 28, 
-	28, 28, 28, 28, 28, 28, 33, 34, 
-	35, 36, 37, 28, 28, 33, 28, 28, 
-	28, 42, 43, 44, 28, 45, 46, 47, 
-	28, 29, 28, 28, 28, 28, 28, 28, 
-	28, 28, 28, 28, 28, 28, 28, 33, 
-	34, 35, 36, 37, 38, 39, 33, 28, 
-	28, 28, 42, 43, 44, 28, 45, 46, 
-	47, 28, 29, 28, 28, 30, 31, 28, 
-	28, 28, 28, 28, 28, 28, 28, 28, 
-	33, 34, 35, 36, 37, 38, 39, 33, 
-	40, 28, 41, 42, 43, 44, 28, 45, 
-	46, 47, 28, 29, 28, 28, 30, 31, 
-	28, 28, 28, 28, 28, 28, 28, 28, 
-	28, 33, 34, 35, 36, 37, 38, 39, 
-	33, 40, 32, 41, 42, 43, 44, 28, 
-	45, 46, 47, 28, 52, 51, 51, 51, 
-	51, 51, 51, 51, 53, 51, 5, 54, 
-	52, 51, 6, 55, 55, 1, 56, 55, 
-	55, 55, 55, 55, 55, 55, 55, 57, 
+	24, 25, 4, 4, 4, 26, 4, 28, 
+	27, 30, 29, 29, 31, 32, 29, 29, 
+	29, 29, 29, 29, 29, 29, 33, 34, 
+	35, 36, 37, 38, 39, 40, 34, 41, 
+	33, 42, 43, 44, 45, 29, 46, 47, 
+	48, 29, 30, 29, 29, 31, 32, 29, 
+	29, 29, 29, 29, 29, 29, 29, 49, 
+	34, 35, 36, 37, 38, 39, 40, 34, 
+	41, 42, 42, 43, 44, 45, 29, 46, 
+	47, 48, 29, 31, 50, 30, 29, 29, 
+	31, 32, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 34, 35, 36, 37, 38, 
+	39, 40, 34, 41, 42, 42, 43, 44, 
+	45, 29, 46, 47, 48, 29, 30, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 34, 35, 36, 37, 
+	38, 29, 29, 29, 29, 29, 29, 43, 
+	44, 45, 29, 46, 47, 48, 29, 30, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 35, 36, 
+	37, 38, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 46, 47, 48, 29, 
+	30, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	36, 37, 38, 29, 30, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 37, 38, 29, 
+	30, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 38, 29, 30, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 36, 37, 38, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 46, 47, 48, 29, 30, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 36, 37, 38, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 47, 48, 29, 30, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 36, 37, 
+	38, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 48, 29, 30, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 35, 36, 
+	37, 38, 29, 29, 29, 29, 29, 29, 
+	43, 44, 45, 29, 46, 47, 48, 29, 
+	30, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 35, 
+	36, 37, 38, 29, 29, 29, 29, 29, 
+	29, 29, 44, 45, 29, 46, 47, 48, 
+	29, 30, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	35, 36, 37, 38, 29, 29, 29, 29, 
+	29, 29, 29, 29, 45, 29, 46, 47, 
+	48, 29, 30, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	34, 35, 36, 37, 38, 29, 40, 34, 
+	29, 29, 29, 43, 44, 45, 29, 46, 
+	47, 48, 29, 30, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 34, 35, 36, 37, 38, 29, 51, 
+	34, 29, 29, 29, 43, 44, 45, 29, 
+	46, 47, 48, 29, 30, 29, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 34, 35, 36, 37, 38, 29, 
+	29, 34, 29, 29, 29, 43, 44, 45, 
+	29, 46, 47, 48, 29, 30, 29, 29, 
+	29, 29, 29, 29, 29, 29, 29, 29, 
+	29, 29, 29, 34, 35, 36, 37, 38, 
+	39, 40, 34, 29, 29, 29, 43, 44, 
+	45, 29, 46, 47, 48, 29, 30, 29, 
+	29, 31, 32, 29, 29, 29, 29, 29, 
+	29, 29, 29, 29, 34, 35, 36, 37, 
+	38, 39, 40, 34, 41, 29, 42, 43, 
+	44, 45, 29, 46, 47, 48, 29, 30, 
+	29, 29, 31, 32, 29, 29, 29, 29, 
+	29, 29, 29, 29, 29, 34, 35, 36, 
+	37, 38, 39, 40, 34, 41, 33, 42, 
+	43, 44, 45, 29, 46, 47, 48, 29, 
+	53, 52, 52, 52, 52, 52, 52, 52, 
+	54, 52, 5, 55, 53, 52, 6, 56, 
+	56, 1, 57, 56, 56, 56, 56, 56, 
+	56, 56, 56, 58, 10, 11, 12, 13, 
+	14, 15, 16, 10, 17, 19, 19, 20, 
+	21, 22, 56, 23, 24, 25, 56, 6, 
+	56, 56, 1, 57, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 10, 11, 12, 
+	13, 14, 15, 16, 10, 17, 19, 19, 
+	20, 21, 22, 56, 23, 24, 25, 56, 
+	6, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 10, 11, 
+	12, 13, 14, 56, 56, 56, 56, 56, 
+	56, 20, 21, 22, 56, 23, 24, 25, 
+	56, 6, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	11, 12, 13, 14, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 23, 24, 
+	25, 56, 6, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 12, 13, 14, 56, 6, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 13, 
+	14, 56, 6, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 14, 56, 6, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 12, 13, 
+	14, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 23, 24, 25, 56, 6, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 12, 
+	13, 14, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 24, 25, 56, 
+	6, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	12, 13, 14, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 25, 
+	56, 6, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	11, 12, 13, 14, 56, 56, 56, 56, 
+	56, 56, 20, 21, 22, 56, 23, 24, 
+	25, 56, 6, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 11, 12, 13, 14, 56, 56, 56, 
+	56, 56, 56, 56, 21, 22, 56, 23, 
+	24, 25, 56, 6, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 11, 12, 13, 14, 56, 56, 
+	56, 56, 56, 56, 56, 56, 22, 56, 
+	23, 24, 25, 56, 6, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 10, 11, 12, 13, 14, 56, 
+	16, 10, 56, 56, 56, 20, 21, 22, 
+	56, 23, 24, 25, 56, 6, 56, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 10, 11, 12, 13, 14, 
+	56, 59, 10, 56, 56, 56, 20, 21, 
+	22, 56, 23, 24, 25, 56, 6, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 10, 11, 12, 13, 
+	14, 56, 56, 10, 56, 56, 56, 20, 
+	21, 22, 56, 23, 24, 25, 56, 6, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 56, 56, 56, 56, 10, 11, 12, 
+	13, 14, 15, 16, 10, 56, 56, 56, 
+	20, 21, 22, 56, 23, 24, 25, 56, 
+	6, 56, 56, 1, 57, 56, 56, 56, 
+	56, 56, 56, 56, 56, 56, 10, 11, 
+	12, 13, 14, 15, 16, 10, 17, 56, 
+	19, 20, 21, 22, 56, 23, 24, 25, 
+	56, 1, 60, 3, 56, 56, 56, 3, 
+	56, 56, 6, 56, 56, 1, 57, 56, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
 	10, 11, 12, 13, 14, 15, 16, 10, 
-	17, 19, 19, 20, 21, 22, 55, 23, 
-	24, 25, 55, 6, 55, 55, 1, 56, 
-	55, 55, 55, 55, 55, 55, 55, 55, 
-	55, 10, 11, 12, 13, 14, 15, 16, 
-	10, 17, 19, 19, 20, 21, 22, 55, 
-	23, 24, 25, 55, 6, 55, 55, 55, 
-	55, 55, 55, 55, 55, 55, 55, 55, 
-	55, 55, 10, 11, 12, 13, 14, 55, 
-	55, 55, 55, 55, 55, 20, 21, 22, 
-	55, 23, 24, 25, 55, 6, 55, 55, 
-	55, 55, 55, 55, 55, 55, 55, 55, 
-	55, 55, 55, 55, 11, 12, 13, 14, 
-	55, 55, 55, 55, 55, 55, 55, 55, 
-	55, 55, 23, 24, 25, 55, 6, 55, 
-	55, 55, 55, 55, 55, 55, 55, 55, 
-	55, 55, 55, 55, 55, 55, 12, 13, 
-	14, 55, 6, 55, 55, 55, 55, 55, 
-	55, 55, 55, 55, 55, 55, 55, 55, 
-	55, 55, 55, 13, 14, 55, 6, 55, 
-	55, 55, 55, 55, 55, 55, 55, 55, 
-	55, 55, 55, 55, 55, 55, 55, 55, 
-	14, 55, 6, 55, 55, 55, 55, 55, 
-	55, 55, 55, 55, 55, 55, 55, 55, 
-	55, 55, 12, 13, 14, 55, 55, 55, 
-	55, 55, 55, 55, 55, 55, 55, 23, 
-	24, 25, 55, 6, 55, 55, 55, 55, 
-	55, 55, 55, 55, 55, 55, 55, 55, 
-	55, 55, 55, 12, 13, 14, 55, 55, 
-	55, 55, 55, 55, 55, 55, 55, 55, 
-	55, 24, 25, 55, 6, 55, 55, 55, 
-	55, 55, 55, 55, 55, 55, 55, 55, 
-	55, 55, 55, 55, 12, 13, 14, 55, 
-	55, 55, 55, 55, 55, 55, 55, 55, 
-	55, 55, 55, 25, 55, 6, 55, 55, 
-	55, 55, 55, 55, 55, 55, 55, 55, 
-	55, 55, 55, 55, 11, 12, 13, 14, 
-	55, 55, 55, 55, 55, 55, 20, 21, 
-	22, 55, 23, 24, 25, 55, 6, 55, 
-	55, 55, 55, 55, 55, 55, 55, 55, 
-	55, 55, 55, 55, 55, 11, 12, 13, 
-	14, 55, 55, 55, 55, 55, 55, 55, 
-	21, 22, 55, 23, 24, 25, 55, 6, 
-	55, 55, 55, 55, 55, 55, 55, 55, 
-	55, 55, 55, 55, 55, 55, 11, 12, 
-	13, 14, 55, 55, 55, 55, 55, 55, 
-	55, 55, 22, 55, 23, 24, 25, 55, 
-	6, 55, 55, 55, 55, 55, 55, 55, 
-	55, 55, 55, 55, 55, 55, 10, 11, 
-	12, 13, 14, 55, 16, 10, 55, 55, 
-	55, 20, 21, 22, 55, 23, 24, 25, 
-	55, 6, 55, 55, 55, 55, 55, 55, 
-	55, 55, 55, 55, 55, 55, 55, 10, 
-	11, 12, 13, 14, 55, 58, 10, 55, 
-	55, 55, 20, 21, 22, 55, 23, 24, 
-	25, 55, 6, 55, 55, 55, 55, 55, 
-	55, 55, 55, 55, 55, 55, 55, 55, 
-	10, 11, 12, 13, 14, 55, 55, 10, 
-	55, 55, 55, 20, 21, 22, 55, 23, 
-	24, 25, 55, 6, 55, 55, 55, 55, 
-	55, 55, 55, 55, 55, 55, 55, 55, 
-	55, 10, 11, 12, 13, 14, 15, 16, 
-	10, 55, 55, 55, 20, 21, 22, 55, 
-	23, 24, 25, 55, 6, 55, 55, 1, 
-	56, 55, 55, 55, 55, 55, 55, 55, 
-	55, 55, 10, 11, 12, 13, 14, 15, 
-	16, 10, 17, 55, 19, 20, 21, 22, 
-	55, 23, 24, 25, 55, 1, 59, 3, 
-	55, 55, 55, 3, 55, 55, 6, 55, 
-	55, 1, 56, 55, 55, 55, 55, 55, 
-	55, 55, 55, 55, 10, 11, 12, 13, 
-	14, 15, 16, 10, 17, 18, 19, 20, 
-	21, 22, 55, 23, 24, 25, 55, 6, 
-	55, 55, 1, 56, 55, 55, 55, 55, 
-	55, 55, 55, 55, 55, 10, 11, 12, 
-	13, 14, 15, 16, 10, 17, 18, 19, 
-	20, 21, 22, 55, 23, 24, 25, 55, 
-	61, 60, 60, 60, 60, 60, 60, 60, 
-	60, 60, 60, 60, 60, 60, 60, 60, 
-	60, 60, 60, 60, 61, 62, 60, 61, 
-	62, 60, 62, 60, 0
+	17, 18, 19, 20, 21, 22, 56, 23, 
+	24, 25, 56, 6, 56, 56, 1, 57, 
+	56, 56, 56, 56, 56, 56, 56, 56, 
+	56, 10, 11, 12, 13, 14, 15, 16, 
+	10, 17, 18, 19, 20, 21, 22, 56, 
+	23, 24, 25, 56, 62, 61, 61, 61, 
+	61, 61, 61, 61, 61, 61, 61, 61, 
+	61, 61, 61, 61, 61, 61, 61, 61, 
+	62, 63, 61, 62, 63, 61, 63, 61, 
+	3, 60, 60, 60, 3, 60, 0
 };
 
 static const char _use_syllable_machine_trans_targs[] = {
@@ -240,11 +241,11 @@
 	1, 27, 2, 3, 1, 24, 1, 45, 
 	46, 48, 29, 30, 31, 32, 33, 40, 
 	41, 43, 47, 44, 37, 38, 39, 34, 
-	35, 36, 1, 1, 1, 1, 4, 5, 
-	23, 7, 8, 9, 10, 11, 18, 19, 
-	21, 22, 15, 16, 17, 12, 13, 14, 
-	6, 1, 20, 1, 25, 26, 1, 1, 
-	0, 28, 42, 1, 1, 49, 50
+	35, 36, 51, 1, 1, 1, 1, 4, 
+	5, 23, 7, 8, 9, 10, 11, 18, 
+	19, 21, 22, 15, 16, 17, 12, 13, 
+	14, 6, 1, 20, 1, 25, 26, 1, 
+	1, 0, 28, 42, 1, 1, 49, 50
 };
 
 static const char _use_syllable_machine_trans_actions[] = {
@@ -251,11 +252,11 @@
 	1, 2, 0, 0, 5, 0, 6, 0, 
 	2, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 2, 2, 0, 0, 0, 0, 
-	0, 0, 7, 8, 9, 10, 0, 0, 
+	0, 0, 0, 7, 8, 9, 10, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 11, 0, 12, 0, 0, 13, 14, 
-	0, 2, 0, 15, 16, 0, 0
+	0, 0, 11, 0, 12, 0, 0, 13, 
+	14, 0, 2, 0, 15, 16, 0, 0
 };
 
 static const char _use_syllable_machine_to_state_actions[] = {
@@ -265,7 +266,7 @@
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0
+	0, 0, 0, 0
 };
 
 static const char _use_syllable_machine_from_state_actions[] = {
@@ -275,17 +276,17 @@
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
 	0, 0, 0, 0, 0, 0, 0, 0, 
-	0, 0, 0
+	0, 0, 0, 0
 };
 
 static const short _use_syllable_machine_eof_trans[] = {
-	1, 0, 27, 29, 29, 50, 29, 29, 
-	29, 29, 29, 29, 29, 29, 29, 29, 
-	29, 29, 29, 29, 29, 29, 29, 29, 
-	52, 55, 52, 56, 56, 56, 56, 56, 
-	56, 56, 56, 56, 56, 56, 56, 56, 
-	56, 56, 56, 56, 56, 60, 56, 56, 
-	61, 61, 61
+	1, 0, 28, 30, 30, 51, 30, 30, 
+	30, 30, 30, 30, 30, 30, 30, 30, 
+	30, 30, 30, 30, 30, 30, 30, 30, 
+	53, 56, 53, 57, 57, 57, 57, 57, 
+	57, 57, 57, 57, 57, 57, 57, 57, 
+	57, 57, 57, 57, 57, 61, 57, 57, 
+	62, 62, 62, 61
 };
 
 static const int use_syllable_machine_start = 1;
@@ -299,7 +300,7 @@
 
 
 
-#line 139 "hb-ot-shape-complex-use-machine.rl"
+#line 140 "hb-ot-shape-complex-use-machine.rl"
 
 
 #define found_syllable(syllable_type) \
@@ -319,7 +320,7 @@
   int cs;
   hb_glyph_info_t *info = buffer->info;
   
-#line 323 "hb-ot-shape-complex-use-machine.hh"
+#line 324 "hb-ot-shape-complex-use-machine.hh"
 	{
 	cs = use_syllable_machine_start;
 	ts = 0;
@@ -327,7 +328,7 @@
 	act = 0;
 	}
 
-#line 160 "hb-ot-shape-complex-use-machine.rl"
+#line 161 "hb-ot-shape-complex-use-machine.rl"
 
 
   p = 0;
@@ -336,7 +337,7 @@
   unsigned int last = 0;
   unsigned int syllable_serial = 1;
   
-#line 340 "hb-ot-shape-complex-use-machine.hh"
+#line 341 "hb-ot-shape-complex-use-machine.hh"
 	{
 	int _slen;
 	int _trans;
@@ -350,7 +351,7 @@
 #line 1 "NONE"
 	{ts = p;}
 	break;
-#line 354 "hb-ot-shape-complex-use-machine.hh"
+#line 355 "hb-ot-shape-complex-use-machine.hh"
 	}
 
 	_keys = _use_syllable_machine_trans_keys + (cs<<1);
@@ -373,58 +374,58 @@
 	{te = p+1;}
 	break;
 	case 8:
-#line 128 "hb-ot-shape-complex-use-machine.rl"
+#line 129 "hb-ot-shape-complex-use-machine.rl"
 	{te = p+1;{ found_syllable (independent_cluster); }}
 	break;
 	case 10:
-#line 130 "hb-ot-shape-complex-use-machine.rl"
+#line 131 "hb-ot-shape-complex-use-machine.rl"
 	{te = p+1;{ found_syllable (standard_cluster); }}
 	break;
 	case 6:
-#line 134 "hb-ot-shape-complex-use-machine.rl"
+#line 135 "hb-ot-shape-complex-use-machine.rl"
 	{te = p+1;{ found_syllable (broken_cluster); }}
 	break;
 	case 5:
-#line 135 "hb-ot-shape-complex-use-machine.rl"
+#line 136 "hb-ot-shape-complex-use-machine.rl"
 	{te = p+1;{ found_syllable (non_cluster); }}
 	break;
 	case 7:
-#line 128 "hb-ot-shape-complex-use-machine.rl"
+#line 129 "hb-ot-shape-complex-use-machine.rl"
 	{te = p;p--;{ found_syllable (independent_cluster); }}
 	break;
 	case 11:
-#line 129 "hb-ot-shape-complex-use-machine.rl"
+#line 130 "hb-ot-shape-complex-use-machine.rl"
 	{te = p;p--;{ found_syllable (virama_terminated_cluster); }}
 	break;
 	case 9:
-#line 130 "hb-ot-shape-complex-use-machine.rl"
+#line 131 "hb-ot-shape-complex-use-machine.rl"
 	{te = p;p--;{ found_syllable (standard_cluster); }}
 	break;
 	case 13:
-#line 131 "hb-ot-shape-complex-use-machine.rl"
+#line 132 "hb-ot-shape-complex-use-machine.rl"
 	{te = p;p--;{ found_syllable (number_joiner_terminated_cluster); }}
 	break;
 	case 12:
-#line 132 "hb-ot-shape-complex-use-machine.rl"
+#line 133 "hb-ot-shape-complex-use-machine.rl"
 	{te = p;p--;{ found_syllable (numeral_cluster); }}
 	break;
 	case 16:
-#line 133 "hb-ot-shape-complex-use-machine.rl"
+#line 134 "hb-ot-shape-complex-use-machine.rl"
 	{te = p;p--;{ found_syllable (symbol_cluster); }}
 	break;
 	case 14:
-#line 134 "hb-ot-shape-complex-use-machine.rl"
+#line 135 "hb-ot-shape-complex-use-machine.rl"
 	{te = p;p--;{ found_syllable (broken_cluster); }}
 	break;
 	case 15:
-#line 135 "hb-ot-shape-complex-use-machine.rl"
+#line 136 "hb-ot-shape-complex-use-machine.rl"
 	{te = p;p--;{ found_syllable (non_cluster); }}
 	break;
 	case 1:
-#line 134 "hb-ot-shape-complex-use-machine.rl"
+#line 135 "hb-ot-shape-complex-use-machine.rl"
 	{{p = ((te))-1;}{ found_syllable (broken_cluster); }}
 	break;
-#line 428 "hb-ot-shape-complex-use-machine.hh"
+#line 429 "hb-ot-shape-complex-use-machine.hh"
 	}
 
 _again:
@@ -433,7 +434,7 @@
 #line 1 "NONE"
 	{ts = 0;}
 	break;
-#line 437 "hb-ot-shape-complex-use-machine.hh"
+#line 438 "hb-ot-shape-complex-use-machine.hh"
 	}
 
 	if ( ++p != pe )
@@ -449,7 +450,7 @@
 
 	}
 
-#line 169 "hb-ot-shape-complex-use-machine.rl"
+#line 170 "hb-ot-shape-complex-use-machine.rl"
 
 }
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.rl
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.rl	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.rl	2017-10-13 22:53:19 UTC (rev 45535)
@@ -86,6 +86,7 @@
 VMPre	= 23; # VOWEL_MOD_PRE
 SMAbv	= 41; # SYM_MOD_ABOVE
 SMBlw	= 42; # SYM_MOD_BELOW
+CS	= 43; # CONS_WITH_STACKER
 
 
 consonant_modifiers = CMAbv* CMBlw* ((H B | SUB) VS? CMAbv? CMBlw*)*;
@@ -96,12 +97,12 @@
 final_consonants = FAbv* FBlw* FPst* FM?;
 
 virama_terminated_cluster =
-	R? (B | GB) VS?
+	(R|CS)? (B | GB) VS?
 	consonant_modifiers
 	H
 ;
 standard_cluster =
-	R? (B | GB) VS?
+	(R|CS)? (B | GB) VS?
 	consonant_modifiers
 	medial_consonants
 	dependent_vowels

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-private.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-private.hh	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-private.hh	2017-10-13 22:53:19 UTC (rev 45535)
@@ -87,7 +87,8 @@
   USE_VMPst	= 39,	/* VOWEL_MOD_POST */
   USE_VMPre	= 23,	/* VOWEL_MOD_PRE */
   USE_SMAbv	= 41,	/* SYM_MOD_ABOVE */
-  USE_SMBlw	= 42	/* SYM_MOD_BELOW */
+  USE_SMBlw	= 42,	/* SYM_MOD_BELOW */
+  USE_CS	= 43	/* CONS_WITH_STACKER */
 };
 
 HB_INTERNAL USE_TABLE_ELEMENT_TYPE

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-table.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-table.cc	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-table.cc	2017-10-13 22:53:19 UTC (rev 45535)
@@ -6,12 +6,12 @@
  *
  * on files with these headers:
  *
- * # IndicSyllabicCategory-9.0.0.txt
- * # Date: 2016-05-21, 02:46:00 GMT [RP]
- * # IndicPositionalCategory-9.0.0.txt
- * # Date: 2016-06-09, 19:33:00 GMT [RP]
- * # Blocks-9.0.0.txt
- * # Date: 2016-02-05, 23:48:00 GMT [KW]
+ * # IndicSyllabicCategory-10.0.0.txt
+ * # Date: 2017-05-31, 01:07:00 GMT [KW, RP]
+ * # IndicPositionalCategory-10.0.0.txt
+ * # Date: 2017-05-31, 01:07:00 GMT [RP]
+ * # Blocks-10.0.0.txt
+ * # Date: 2017-04-12, 17:30:00 GMT [KW]
  * UnicodeData.txt does not have a header.
  */
 
@@ -19,6 +19,7 @@
 
 #define B	USE_B	/* BASE */
 #define CGJ	USE_CGJ	/* CGJ */
+#define CS	USE_CS	/* CONS_WITH_STACKER */
 #define FM	USE_FM	/* CONS_FINAL_MOD */
 #define GB	USE_GB	/* BASE_OTHER */
 #define H	USE_H	/* HALANT */
@@ -97,7 +98,7 @@
   /* 09C0 */  VPst,  VBlw,  VBlw,  VBlw,  VBlw,     O,     O,  VPre,  VPre,     O,     O,  VPre,  VPre,     H,   IND,     O,
   /* 09D0 */     O,     O,     O,     O,     O,     O,     O,  VPst,     O,     O,     O,     O,     B,     B,     O,     B,
   /* 09E0 */     B,     B,  VBlw,  VBlw,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 09F0 */     B,     B,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
+  /* 09F0 */     B,     B,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     B,     O,     O,     O,
 
   /* Gurmukhi */
 
@@ -119,7 +120,7 @@
   /* 0AC0 */  VPst,  VBlw,  VBlw,  VBlw,  VBlw,  VAbv,     O,  VAbv,  VAbv,  VAbv,     O,  VPst,  VPst,     H,     O,     O,
   /* 0AD0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
   /* 0AE0 */     B,     B,  VBlw,  VBlw,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 0AF0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     B,     O,     O,     O,     O,     O,     O,
+  /* 0AF0 */     O,     O,     O,     O,     O,     O,     O,     O,     O,     B, VMAbv, VMAbv, VMAbv, CMAbv, CMAbv, CMAbv,
 
   /* Oriya */
 
@@ -163,14 +164,14 @@
   /* 0CC0 */  VAbv,  VPst,  VPst,  VPst,  VPst,     O,  VAbv,  VAbv,  VAbv,     O,  VAbv,  VAbv,  VAbv,     H,     O,     O,
   /* 0CD0 */     O,     O,     O,     O,     O,  VPst,  VPst,     O,     O,     O,     O,     O,     O,     O,     B,     O,
   /* 0CE0 */     B,     B,  VBlw,  VBlw,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 0CF0 */     O,     R,     R,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
+  /* 0CF0 */     O,    CS,    CS,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
 
   /* Malayalam */
 
-  /* 0D00 */     O, VMAbv, VMPst, VMPst,     O,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,
+  /* 0D00 */ VMAbv, VMAbv, VMPst, VMPst,     O,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,
   /* 0D10 */     B,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 0D20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 0D30 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     B,  VPst,  VPst,
+  /* 0D30 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,  VAbv,  VAbv,     B,  VPst,  VPst,
   /* 0D40 */  VPst,  VPst,  VPst,  VBlw,  VBlw,     O,  VPre,  VPre,  VPre,     O,  VPre,  VPre,  VPre,     H,     R,     O,
   /* 0D50 */     O,     O,     O,     O,   IND,   IND,   IND,  VPst,     O,     O,     O,     O,     O,     O,     O,     B,
   /* 0D60 */     B,     B,  VBlw,  VBlw,     O,     O,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
@@ -274,9 +275,9 @@
   /* 1A20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 1A30 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 1A40 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* 1A50 */     B,     B,     B,     B,     B,  MPre,  MBlw,  FPst,  FAbv,  FAbv,  FAbv,  FBlw,  FBlw,  FBlw,  FBlw,     O,
+  /* 1A50 */     B,     B,     B,     B,     B,  MPre,  MBlw,   SUB,  FAbv,  FAbv,  FAbv,   SUB,   SUB,   SUB,   SUB,     O,
   /* 1A60 */     H,  VPst,  VAbv,  VPst,  VPst,  VAbv,  VAbv,  VAbv,  VAbv,  VBlw,  VBlw,  VAbv,  VBlw,  VPst,  VPre,  VPre,
-  /* 1A70 */  VPre,  VPre,  VPre,  VAbv,  VAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv,    FM,    FM,    FM,     O,     O,    FM,
+  /* 1A70 */  VPre,  VPre,  VPre,  VAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv,  VAbv,    FM,    FM,     O,     O,  FBlw,
   /* 1A80 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
   /* 1A90 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
 
@@ -323,7 +324,7 @@
 
   /* 1CD0 */ VMAbv, VMAbv, VMAbv,     O, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMAbv, VMAbv, VMBlw, VMBlw, VMBlw, VMBlw,
   /* 1CE0 */ VMAbv, VMPst, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw, VMBlw,     O,     O,     O,     O, VMBlw,     O,     O,
-  /* 1CF0 */     O,     O, VMPst, VMPst, VMAbv,     O,     O,     O, VMAbv, VMAbv,     O,     O,     O,     O,     O,     O,
+  /* 1CF0 */     O,     O, VMPst, VMPst, VMAbv,     O,     O, VMPst, VMAbv, VMAbv,     O,     O,     O,     O,     O,     O,
 
 #define use_offset_0x1df8u 2552
 
@@ -376,7 +377,7 @@
   /* Devanagari Extended */
 
   /* A8E0 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv,
-  /* A8F0 */ VMAbv, VMAbv,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
+  /* A8F0 */ VMAbv, VMAbv,     B,     B,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
 
   /* Kayah Li */
 
@@ -397,7 +398,7 @@
   /* A980 */ VMAbv, VMAbv,  FAbv, VMPst,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* A990 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* A9A0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
-  /* A9B0 */     B,     B,     B, CMAbv,  VPst,  VPst,  VAbv,  VAbv,  VBlw,  VBlw,  VPre,  VPre,  VAbv,   SUB,  MPst,  MPst,
+  /* A9B0 */     B,     B,     B, CMAbv,  VPst,  VPst,  VAbv,  VAbv,  VBlw,  VBlw,  VPre,  VPre,  VAbv,   SUB,  MPst,  MBlw,
   /* A9C0 */     H,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,     O,
   /* A9D0 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
 
@@ -467,7 +468,7 @@
 
   /* Brahmi */
 
-  /* 11000 */ VMPst, VMAbv, VMPst,     R,     R,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 11000 */ VMPst, VMAbv, VMPst,    CS,    CS,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 11010 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 11020 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
   /* 11030 */     B,     B,     B,     B,     B,     B,     B,     B,  VAbv,  VAbv,  VAbv,  VAbv,  VBlw,  VBlw,  VBlw,  VBlw,
@@ -545,7 +546,7 @@
   /* 11320 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,
   /* 11330 */     B,     O,     B,     B,     O,     B,     B,     B,     B,     B,     O,     O, CMBlw,     B,  VPst,  VPst,
   /* 11340 */  VAbv,  VPst,  VPst,  VPst,  VPst,     O,     O,  VPre,  VPre,     O,     O,  VPre,  VPre,     H,     O,     O,
-  /* 11350 */     O,     O,     O,     O,     O,     O,     O,  VPst,     O,     O,     O,     O,     O,     O,     O,     O,
+  /* 11350 */     O,     O,     O,     O,     O,     O,     O,  VPst,     O,     O,     O,     O,     O,     O,     B,     B,
   /* 11360 */     B,     B,  VPst,  VPst,     O,     O, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv, VMAbv,     O,     O,     O,
   /* 11370 */ VMAbv, VMAbv, VMAbv, VMAbv, VMAbv,     O,     O,     O,
 
@@ -615,9 +616,28 @@
   /* 11720 */  VPst,  VPst,  VAbv,  VAbv,  VBlw,  VBlw,  VPre,  VAbv,  VBlw,  VAbv,  VAbv,  VAbv,     O,     O,     O,     O,
   /* 11730 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,
 
-#define use_offset_0x11c00u 4960
+#define use_offset_0x11a00u 4960
 
 
+  /* Zanabazar Square */
+
+  /* 11A00 */     B,  VAbv,  VBlw,  VBlw,  VAbv,  VAbv,  VAbv,  VAbv,  VAbv,  VAbv,  VBlw,     B,     B,     B,     B,     B,
+  /* 11A10 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 11A20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 11A30 */     B,     B,     B,    FM,  VBlw, VMAbv, VMAbv, VMAbv, VMAbv, VMPst,     R,  MBlw,  MBlw,  MBlw,  MBlw,    GB,
+  /* 11A40 */     O,     O,     O,     O,     O,    GB,     O,     H,     O,     O,     O,     O,     O,     O,     O,     O,
+
+  /* Soyombo */
+
+  /* 11A50 */     B,  VAbv,  VBlw,  VBlw,  VAbv,  VAbv,  VAbv,  VPst,  VPst,  VBlw,  VBlw,  VBlw,     B,     B,     B,     B,
+  /* 11A60 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 11A70 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 11A80 */     B,     B,     B,     B,     O,     O,     R,     R,     R,     R,  FBlw,  FBlw,  FBlw,  FBlw,  FBlw,  FBlw,
+  /* 11A90 */  FBlw,  FBlw,  FBlw,  FBlw,  FBlw,  FBlw, VMAbv, VMPst, CMAbv,     H,     O,     O,     O,     O,     O,     O,
+
+#define use_offset_0x11c00u 5120
+
+
   /* Bhaiksuki */
 
   /* 11C00 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     B,     B,     B,     B,
@@ -636,8 +656,20 @@
   /* 11CA0 */   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,     O,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,   SUB,
   /* 11CB0 */  VBlw,  VPre,  VBlw,  VAbv,  VPst, VMAbv, VMAbv,     O,
 
-}; /* Table items: 5144; occupancy: 72% */
+#define use_offset_0x11d00u 5304
 
+
+  /* Masaram Gondi */
+
+  /* 11D00 */     B,     B,     B,     B,     B,     B,     B,     O,     B,     B,     O,     B,     B,     B,     B,     B,
+  /* 11D10 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 11D20 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,
+  /* 11D30 */     B,  VAbv,  VAbv,  VAbv,  VAbv,  VAbv,  VBlw,     O,     O,     O,  VAbv,     O,  VAbv,  VAbv,     O,  VAbv,
+  /* 11D40 */ VMAbv, VMAbv, CMBlw,  VAbv,  VBlw,     H,     R,  MBlw,     O,     O,     O,     O,     O,     O,     O,     O,
+  /* 11D50 */     B,     B,     B,     B,     B,     B,     B,     B,     B,     B,     O,     O,     O,     O,     O,     O,
+
+}; /* Table items: 5400; occupancy: 73% */
+
 USE_TABLE_ELEMENT_TYPE
 hb_use_get_categories (hb_codepoint_t u)
 {
@@ -684,7 +716,9 @@
       if (hb_in_range<hb_codepoint_t> (u, 0x11280u, 0x11377u)) return use_table[u - 0x11280u + use_offset_0x11280u];
       if (hb_in_range<hb_codepoint_t> (u, 0x11400u, 0x114DFu)) return use_table[u - 0x11400u + use_offset_0x11400u];
       if (hb_in_range<hb_codepoint_t> (u, 0x11580u, 0x1173Fu)) return use_table[u - 0x11580u + use_offset_0x11580u];
+      if (hb_in_range<hb_codepoint_t> (u, 0x11A00u, 0x11A9Fu)) return use_table[u - 0x11A00u + use_offset_0x11a00u];
       if (hb_in_range<hb_codepoint_t> (u, 0x11C00u, 0x11CB7u)) return use_table[u - 0x11C00u + use_offset_0x11c00u];
+      if (hb_in_range<hb_codepoint_t> (u, 0x11D00u, 0x11D5Fu)) return use_table[u - 0x11D00u + use_offset_0x11d00u];
       if (unlikely (u == 0x1107Fu)) return HN;
       break;
 
@@ -696,6 +730,7 @@
 
 #undef B
 #undef CGJ
+#undef CS
 #undef FM
 #undef GB
 #undef H

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use.cc	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use.cc	2017-10-13 22:53:19 UTC (rev 45535)
@@ -607,6 +607,7 @@
   compose_use,
   setup_masks_use,
   NULL, /* disable_otl */
+  NULL, /* reorder_marks */
   HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY,
   false, /* fallback_position */
 };

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-normalize.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-normalize.cc	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-normalize.cc	2017-10-13 22:53:19 UTC (rev 45535)
@@ -345,8 +345,9 @@
       if (_hb_glyph_info_get_modified_combining_class (&buffer->info[end]) == 0)
         break;
 
-    /* We are going to do a O(n^2).  Only do this if the sequence is short. */
-    if (end - i > 10) {
+    /* We are going to do a O(n^2).  Only do this if the sequence is short,
+     * but not too short ;). */
+    if (end - i < 2 || end - i > HB_OT_SHAPE_COMPLEX_MAX_COMBINING_MARKS) {
       i = end;
       continue;
     }
@@ -353,6 +354,9 @@
 
     buffer->sort (i, end, compare_combining_class);
 
+    if (plan->shaper->reorder_marks)
+      plan->shaper->reorder_marks (plan, buffer, i, end);
+
     i = end;
   }
 
@@ -369,46 +373,58 @@
   buffer->clear_output ();
   count = buffer->len;
   unsigned int starter = 0;
+  bool combine = true;
   buffer->next_glyph ();
   while (buffer->idx < count && !buffer->in_error)
   {
     hb_codepoint_t composed, glyph;
-    if (/* We don't try to compose a non-mark character with it's preceding starter.
+    if (combine &&
+	/* We don't try to compose a non-mark character with it's preceding starter.
 	 * This is both an optimization to avoid trying to compose every two neighboring
 	 * glyphs in most scripts AND a desired feature for Hangul.  Apparently Hangul
 	 * fonts are not designed to mix-and-match pre-composed syllables and Jamo. */
-	HB_UNICODE_GENERAL_CATEGORY_IS_MARK (_hb_glyph_info_get_general_category (&buffer->cur())) &&
-	/* If there's anything between the starter and this char, they should have CCC
-	 * smaller than this character's. */
-	(starter == buffer->out_len - 1 ||
-	 _hb_glyph_info_get_modified_combining_class (&buffer->prev()) < _hb_glyph_info_get_modified_combining_class (&buffer->cur())) &&
-	/* And compose. */
-	c.compose (&c,
-		   buffer->out_info[starter].codepoint,
-		   buffer->cur().codepoint,
-		   &composed) &&
-	/* And the font has glyph for the composite. */
-	font->get_nominal_glyph (composed, &glyph))
+	HB_UNICODE_GENERAL_CATEGORY_IS_MARK (_hb_glyph_info_get_general_category (&buffer->cur())))
     {
-      /* Composes. */
-      buffer->next_glyph (); /* Copy to out-buffer. */
-      if (unlikely (buffer->in_error))
-        return;
-      buffer->merge_out_clusters (starter, buffer->out_len);
-      buffer->out_len--; /* Remove the second composable. */
-      /* Modify starter and carry on. */
-      buffer->out_info[starter].codepoint = composed;
-      buffer->out_info[starter].glyph_index() = glyph;
-      _hb_glyph_info_set_unicode_props (&buffer->out_info[starter], buffer);
+      if (/* If there's anything between the starter and this char, they should have CCC
+	   * smaller than this character's. */
+	  (starter == buffer->out_len - 1 ||
+	   info_cc (buffer->prev()) < info_cc (buffer->cur())) &&
+	  /* And compose. */
+	  c.compose (&c,
+		     buffer->out_info[starter].codepoint,
+		     buffer->cur().codepoint,
+		     &composed) &&
+	  /* And the font has glyph for the composite. */
+	  font->get_nominal_glyph (composed, &glyph))
+      {
+	/* Composes. */
+	buffer->next_glyph (); /* Copy to out-buffer. */
+	if (unlikely (buffer->in_error))
+	  return;
+	buffer->merge_out_clusters (starter, buffer->out_len);
+	buffer->out_len--; /* Remove the second composable. */
+	/* Modify starter and carry on. */
+	buffer->out_info[starter].codepoint = composed;
+	buffer->out_info[starter].glyph_index() = glyph;
+	_hb_glyph_info_set_unicode_props (&buffer->out_info[starter], buffer);
 
-      continue;
+	continue;
+      }
+      else if (/* We sometimes custom-tailor the sorted order of marks. In that case, stop
+		* trying to combine as soon as combining-class drops. */
+	       starter < buffer->out_len - 1 &&
+	       info_cc (buffer->prev()) > info_cc (buffer->cur()))
+        combine = false;
     }
 
     /* Blocked, or doesn't compose. */
     buffer->next_glyph ();
 
-    if (_hb_glyph_info_get_modified_combining_class (&buffer->prev()) == 0)
+    if (info_cc (buffer->prev()) == 0)
+    {
       starter = buffer->out_len - 1;
+      combine = true;
+    }
   }
   buffer->swap_buffers ();
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.cc	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.cc	2017-10-13 22:53:19 UTC (rev 45535)
@@ -693,9 +693,9 @@
 static inline void
 hb_ot_position_complex (hb_ot_shape_context_t *c)
 {
-  hb_ot_layout_position_start (c->font, c->buffer);
-
   unsigned int count = c->buffer->len;
+  hb_glyph_info_t *info = c->buffer->info;
+  hb_glyph_position_t *pos = c->buffer->pos;
 
   /* If the font has no GPOS, AND, no fallback positioning will
    * happen, AND, direction is forward, then when zeroing mark
@@ -710,6 +710,17 @@
 				     !c->plan->shaper->fallback_position &&
 				     HB_DIRECTION_IS_FORWARD (c->buffer->props.direction);
 
+  /* We change glyph origin to what GPOS expects (horizontal), apply GPOS, change it back. */
+
+  /* The nil glyph_h_origin() func returns 0, so no need to apply it. */
+  if (c->font->has_glyph_h_origin_func ())
+    for (unsigned int i = 0; i < count; i++)
+      c->font->add_glyph_h_origin (info[i].codepoint,
+				   &pos[i].x_offset,
+				   &pos[i].y_offset);
+
+  hb_ot_layout_position_start (c->font, c->buffer);
+
   switch (c->plan->shaper->zero_width_marks)
   {
     case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_EARLY:
@@ -723,30 +734,8 @@
   }
 
   if (likely (!c->fallback_positioning))
-  {
-    hb_glyph_info_t *info = c->buffer->info;
-    hb_glyph_position_t *pos = c->buffer->pos;
-
-    /* Change glyph origin to what GPOS expects (horizontal), apply GPOS, change it back. */
-
-    /* The nil glyph_h_origin() func returns 0, so no need to apply it. */
-    if (c->font->has_glyph_h_origin_func ())
-      for (unsigned int i = 0; i < count; i++)
-	c->font->add_glyph_h_origin (info[i].codepoint,
-				     &pos[i].x_offset,
-				     &pos[i].y_offset);
-
     c->plan->position (c->font, c->buffer);
 
-    /* The nil glyph_h_origin() func returns 0, so no need to apply it. */
-    if (c->font->has_glyph_h_origin_func ())
-      for (unsigned int i = 0; i < count; i++)
-	c->font->subtract_glyph_h_origin (info[i].codepoint,
-					  &pos[i].x_offset,
-					  &pos[i].y_offset);
-
-  }
-
   switch (c->plan->shaper->zero_width_marks)
   {
     case HB_OT_SHAPE_ZERO_WIDTH_MARKS_BY_GDEF_LATE:
@@ -763,6 +752,13 @@
   hb_ot_layout_position_finish_advances (c->font, c->buffer);
   hb_ot_zero_width_default_ignorables (c);
   hb_ot_layout_position_finish_offsets (c->font, c->buffer);
+
+  /* The nil glyph_h_origin() func returns 0, so no need to apply it. */
+  if (c->font->has_glyph_h_origin_func ())
+    for (unsigned int i = 0; i < count; i++)
+      c->font->subtract_glyph_h_origin (info[i].codepoint,
+					&pos[i].x_offset,
+					&pos[i].y_offset);
 }
 
 static inline void

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-tag.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-tag.cc	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-tag.cc	2017-10-13 22:53:19 UTC (rev 45535)
@@ -270,16 +270,20 @@
   {"cak",	HB_TAG('C','A','K',' ')},	/* Kaqchikel */
   {"cbk",	HB_TAG('C','B','K',' ')},	/* Chavacano */
   {"cbl",	HB_TAG('Q','I','N',' ')},	/* Bualkhaw Chin */
+  {"cco",	HB_TAG('C','C','H','N')},	/* Chinantec */
   {"ce",	HB_TAG('C','H','E',' ')},	/* Chechen */
   {"ceb",	HB_TAG('C','E','B',' ')},	/* Cebuano */
   {"cfm",	HB_TAG('H','A','L',' ')},	/* Halam/Falam Chin */
   {"cgg",	HB_TAG('C','G','G',' ')},	/* Chiga */
   {"ch",	HB_TAG('C','H','A',' ')},	/* Chamorro */
+  {"chj",	HB_TAG('C','C','H','N')},	/* Chinantec */
   {"chk",	HB_TAG('C','H','K','0')},	/* Chuukese */
   {"cho",	HB_TAG('C','H','O',' ')},	/* Choctaw */
   {"chp",	HB_TAG('C','H','P',' ')},	/* Chipewyan */
+  {"chq",	HB_TAG('C','C','H','N')},	/* Chinantec */
   {"chr",	HB_TAG('C','H','R',' ')},	/* Cherokee */
   {"chy",	HB_TAG('C','H','Y',' ')},	/* Cheyenne */
+  {"chz",	HB_TAG('C','C','H','N')},	/* Chinantec */
   {"cja",	HB_TAG('C','J','A',' ')},	/* Western Cham */
   {"cjm",	HB_TAG('C','J','M',' ')},	/* Eastern Cham */
   {"cka",	HB_TAG('Q','I','N',' ')},	/* Khumi Awa Chin */
@@ -286,12 +290,16 @@
   {"ckb",	HB_TAG('K','U','R',' ')},	/* Central Kurdish (Sorani) */
   {"ckt",	HB_TAG('C','H','K',' ')},	/* Chukchi */
   {"cld",	HB_TAG('S','Y','R',' ')},	/* Chaldean Neo-Aramaic */
+  {"cle",	HB_TAG('C','C','H','N')},	/* Chinantec */
   {"cmr",	HB_TAG('Q','I','N',' ')},	/* Mro-Khimi Chin */
   {"cnb",	HB_TAG('Q','I','N',' ')},	/* Chinbon Chin */
   {"cnh",	HB_TAG('Q','I','N',' ')},	/* Hakha Chin */
   {"cnk",	HB_TAG('Q','I','N',' ')},	/* Khumi Chin */
+  {"cnl",	HB_TAG('C','C','H','N')},	/* Chinantec */
+  {"cnt",	HB_TAG('C','C','H','N')},	/* Chinantec */
   {"cnw",	HB_TAG('Q','I','N',' ')},	/* Ngawn Chin */
   {"cop",	HB_TAG('C','O','P',' ')},	/* Coptic */
+  {"cpa",	HB_TAG('C','C','H','N')},	/* Chinantec */
   {"cpp",	HB_TAG('C','P','P',' ')},	/* Creoles */
   {"cr",	HB_TAG('C','R','E',' ')},	/* Cree */
   {"cre",	HB_TAG('Y','C','R',' ')},	/* Y-Cree */
@@ -302,15 +310,21 @@
   {"crm",	HB_TAG('M','C','R',' ')},	/* Moose Cree */
   {"crx",	HB_TAG('C','R','R',' ')},	/* Carrier */
   {"cs",	HB_TAG('C','S','Y',' ')},	/* Czech */
+  {"csa",	HB_TAG('C','C','H','N')},	/* Chinantec */
   {"csb",	HB_TAG('C','S','B',' ')},	/* Kashubian */
   {"csh",	HB_TAG('Q','I','N',' ')},	/* Asho Chin */
+  {"cso",	HB_TAG('C','C','H','N')},	/* Chinantec */
   {"csy",	HB_TAG('Q','I','N',' ')},	/* Siyin Chin */
   {"ctd",	HB_TAG('Q','I','N',' ')},	/* Tedim Chin */
+  {"cte",	HB_TAG('C','C','H','N')},	/* Chinantec */
   {"ctg",	HB_TAG('C','T','G',' ')},	/* Chittagonian */
+  {"ctl",	HB_TAG('C','C','H','N')},	/* Chinantec */
   {"cts",	HB_TAG('B','I','K',' ')},	/* Northern Catanduanes Bikol */
   {"cu",	HB_TAG('C','S','L',' ')},	/* Church Slavic */
+  {"cuc",	HB_TAG('C','C','H','N')},	/* Chinantec */
   {"cuk",	HB_TAG('C','U','K',' ')},	/* San Blas Kuna */
   {"cv",	HB_TAG('C','H','U',' ')},	/* Chuvash */
+  {"cvn",	HB_TAG('C','C','H','N')},	/* Chinantec */
   {"cwd",	HB_TAG('D','C','R',' ')},	/* Woods Cree */
   {"cy",	HB_TAG('W','E','L',' ')},	/* Welsh */
   {"czt",	HB_TAG('Q','I','N',' ')},	/* Zotung Chin */
@@ -380,7 +394,6 @@
   {"gkp",	HB_TAG('G','K','P',' ')},	/* Kpelle (Guinea) */
   {"gl",	HB_TAG('G','A','L',' ')},	/* Galician */
   {"gld",	HB_TAG('N','A','N',' ')},	/* Nanai */
-  {"gle",	HB_TAG('I','R','T',' ')},	/* Irish Traditional */
   {"glk",	HB_TAG('G','L','K',' ')},	/* Gilaki */
   {"gn",	HB_TAG('G','U','A',' ')},	/* Guarani [macrolanguage] */
   {"gnn",	HB_TAG('G','N','N',' ')},	/* Gumatj */
@@ -538,7 +551,6 @@
   {"mag",	HB_TAG('M','A','G',' ')},	/* Magahi */
   {"mai",	HB_TAG('M','T','H',' ')},	/* Maithili */
   {"mak",	HB_TAG('M','K','R',' ')},	/* Makasar */
-  {"mal",	HB_TAG('M','A','L',' ')},	/* Malayalam */
   {"mam",	HB_TAG('M','A','M',' ')},	/* Mam */
   {"man",	HB_TAG('M','N','K',' ')},	/* Manding/Mandingo [macrolanguage] */
   {"mdc",	HB_TAG('M','L','E',' ')},	/* Male (Papua New Guinea) */

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape-plan.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape-plan.cc	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shape-plan.cc	2017-10-13 22:53:19 UTC (rev 45535)
@@ -520,15 +520,17 @@
 
 retry:
   hb_face_t::plan_node_t *cached_plan_nodes = (hb_face_t::plan_node_t *) hb_atomic_ptr_get (&face->shape_plans);
-  for (hb_face_t::plan_node_t *node = cached_plan_nodes; node; node = node->next)
-    if (hb_shape_plan_matches (node->shape_plan, &proposal))
-    {
-      DEBUG_MSG_FUNC (SHAPE_PLAN, node->shape_plan, "fulfilled from cache");
-      return hb_shape_plan_reference (node->shape_plan);
-    }
 
+  /* Don't look for plan in the cache if there were variation coordinates XXX Fix me. */
+  if (!hb_coords_present (coords, num_coords))
+    for (hb_face_t::plan_node_t *node = cached_plan_nodes; node; node = node->next)
+      if (hb_shape_plan_matches (node->shape_plan, &proposal))
+      {
+        DEBUG_MSG_FUNC (SHAPE_PLAN, node->shape_plan, "fulfilled from cache");
+        return hb_shape_plan_reference (node->shape_plan);
+      }
+
   /* Not found. */
-
   hb_shape_plan_t *shape_plan = hb_shape_plan_create2 (face, props,
 						       user_features, num_user_features,
 						       coords, num_coords,

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shaper-private.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shaper-private.hh	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-shaper-private.hh	2017-10-13 22:53:19 UTC (rev 45535)
@@ -88,11 +88,23 @@
         HB_SHAPER_DATA_DESTROY_FUNC (shaper, object) (data);
 
 #define HB_SHAPER_DATA_ENSURE_DEFINE(shaper, object) \
+	HB_SHAPER_DATA_ENSURE_DEFINE_WITH_CONDITION(shaper, object, true)
+
+#define HB_SHAPER_DATA_ENSURE_DEFINE_WITH_CONDITION(shaper, object, condition) \
 bool \
 HB_SHAPER_DATA_ENSURE_FUNC(shaper, object) (hb_##object##_t *object) \
 {\
   retry: \
   HB_SHAPER_DATA_TYPE (shaper, object) *data = (HB_SHAPER_DATA_TYPE (shaper, object) *) hb_atomic_ptr_get (&HB_SHAPER_DATA (shaper, object)); \
+  if (likely (data) && !(condition)) { \
+    /* Drop and recreate. */ \
+    /* If someone dropped it in the mean time, throw it away and don't touch it. \
+     * Otherwise, destruct it. */ \
+    if (hb_atomic_ptr_cmpexch (&HB_SHAPER_DATA (shaper, object), data, NULL)) { \
+      HB_SHAPER_DATA_DESTROY_FUNC (shaper, object) (data); \
+    } \
+    goto retry; \
+  } \
   if (unlikely (!data)) { \
     data = HB_SHAPER_DATA_CREATE_FUNC (shaper, object) (object); \
     if (unlikely (!data)) \

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ucdn.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ucdn.cc	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ucdn.cc	2017-10-13 22:53:19 UTC (rev 45535)
@@ -160,10 +160,15 @@
     HB_SCRIPT_NEWA,
     HB_SCRIPT_OSAGE,
     HB_SCRIPT_TANGUT,
+    HB_SCRIPT_MASARAM_GONDI,
+    HB_SCRIPT_NUSHU,
+    HB_SCRIPT_SOYOMBO,
+    HB_SCRIPT_ZANABAZAR_SQUARE,
 };
 
 static hb_unicode_combining_class_t
-hb_ucdn_combining_class(hb_unicode_funcs_t *ufuncs, hb_codepoint_t unicode,
+hb_ucdn_combining_class(hb_unicode_funcs_t *ufuncs HB_UNUSED,
+			hb_codepoint_t unicode,
 			void *user_data HB_UNUSED)
 {
     return (hb_unicode_combining_class_t) ucdn_get_combining_class(unicode);
@@ -170,7 +175,8 @@
 }
 
 static unsigned int
-hb_ucdn_eastasian_width(hb_unicode_funcs_t *ufuncs, hb_codepoint_t unicode,
+hb_ucdn_eastasian_width(hb_unicode_funcs_t *ufuncs HB_UNUSED,
+			hb_codepoint_t unicode,
 			void *user_data HB_UNUSED)
 {
     int w = ucdn_get_east_asian_width(unicode);
@@ -178,7 +184,8 @@
 }
 
 static hb_unicode_general_category_t
-hb_ucdn_general_category(hb_unicode_funcs_t *ufuncs, hb_codepoint_t unicode,
+hb_ucdn_general_category(hb_unicode_funcs_t *ufuncs HB_UNUSED,
+			 hb_codepoint_t unicode,
 			 void *user_data HB_UNUSED)
 {
     return (hb_unicode_general_category_t)ucdn_get_general_category(unicode);
@@ -185,7 +192,8 @@
 }
 
 static hb_codepoint_t
-hb_ucdn_mirroring(hb_unicode_funcs_t *ufuncs, hb_codepoint_t unicode,
+hb_ucdn_mirroring(hb_unicode_funcs_t *ufuncs HB_UNUSED,
+		  hb_codepoint_t unicode,
 		  void *user_data HB_UNUSED)
 {
     return ucdn_mirror(unicode);
@@ -192,7 +200,8 @@
 }
 
 static hb_script_t
-hb_ucdn_script(hb_unicode_funcs_t *ufuncs, hb_codepoint_t unicode,
+hb_ucdn_script(hb_unicode_funcs_t *ufuncs HB_UNUSED,
+	       hb_codepoint_t unicode,
 	       void *user_data HB_UNUSED)
 {
     return ucdn_script_translate[ucdn_get_script(unicode)];
@@ -199,7 +208,7 @@
 }
 
 static hb_bool_t
-hb_ucdn_compose(hb_unicode_funcs_t *ufuncs,
+hb_ucdn_compose(hb_unicode_funcs_t *ufuncs HB_UNUSED,
 		hb_codepoint_t a, hb_codepoint_t b, hb_codepoint_t *ab,
 		void *user_data HB_UNUSED)
 {
@@ -207,7 +216,7 @@
 }
 
 static hb_bool_t
-hb_ucdn_decompose(hb_unicode_funcs_t *ufuncs,
+hb_ucdn_decompose(hb_unicode_funcs_t *ufuncs HB_UNUSED,
 		  hb_codepoint_t ab, hb_codepoint_t *a, hb_codepoint_t *b,
 		  void *user_data HB_UNUSED)
 {
@@ -215,7 +224,7 @@
 }
 
 static unsigned int
-hb_ucdn_decompose_compatibility(hb_unicode_funcs_t *ufuncs,
+hb_ucdn_decompose_compatibility(hb_unicode_funcs_t *ufuncs HB_UNUSED,
 				hb_codepoint_t u, hb_codepoint_t *decomposed,
 				void *user_data HB_UNUSED)
 {

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-unicode-private.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-unicode-private.hh	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-unicode-private.hh	2017-10-13 22:53:19 UTC (rev 45535)
@@ -105,14 +105,10 @@
   inline unsigned int
   modified_combining_class (hb_codepoint_t unicode)
   {
-    /* XXX This hack belongs to the Arabic shaper:
-     * Put HAMZA ABOVE in the same class as SHADDA. */
-    if (unlikely (unicode == 0x0654u)) unicode = 0x0651u;
-
     /* XXX This hack belongs to the Myanmar shaper. */
     if (unlikely (unicode == 0x1037u)) unicode = 0x103Au;
 
-    /* XXX This hack belongs to the SEA shaper (for Tai Tham):
+    /* XXX This hack belongs to the USE shaper (for Tai Tham):
      * Reorder SAKOT to ensure it comes after any tone marks. */
     if (unlikely (unicode == 0x1A60u)) return 254;
 
@@ -141,6 +137,7 @@
    * we do NOT want to hide them, as the way Uniscribe has implemented them
    * is with regular spacing glyphs, and that's the way fonts are made to work.
    * As such, we make exceptions for those four.
+   * Also ignoring U+1BCA0..1BCA3. https://github.com/behdad/harfbuzz/issues/503
    *
    * Unicode 7.0:
    * $ grep '; Default_Ignorable_Code_Point ' DerivedCoreProperties.txt | sed 's/;.*#/#/'
@@ -197,8 +194,7 @@
     {
       /* Other planes */
       switch (plane) {
-	case 0x01: return hb_in_ranges<hb_codepoint_t> (ch, 0x1BCA0u, 0x1BCA3u,
-					    0x1D173u, 0x1D17Au);
+	case 0x01: return hb_in_range<hb_codepoint_t> (ch, 0x1D173u, 0x1D17Au);
 	case 0x0E: return hb_in_range<hb_codepoint_t> (ch, 0xE0000u, 0xE0FFFu);
 	default: return false;
       }

Modified: trunk/Build/source/libs/harfbuzz/version.ac
===================================================================
--- trunk/Build/source/libs/harfbuzz/version.ac	2017-10-13 21:40:42 UTC (rev 45534)
+++ trunk/Build/source/libs/harfbuzz/version.ac	2017-10-13 22:53:19 UTC (rev 45535)
@@ -8,4 +8,4 @@
 dnl --------------------------------------------------------
 dnl
 dnl  m4-include this file to define the current harfbuzz version
-m4_define([harfbuzz_version], [1.5.1])
+m4_define([harfbuzz_version], [1.6.0])



More information about the tex-live-commits mailing list