texlive[48132] Build/source/libs: harfbuzz 1.8.2

commits+kakuto at tug.org commits+kakuto at tug.org
Wed Jul 4 09:14:37 CEST 2018


Revision: 48132
          http://tug.org/svn/texlive?view=revision&revision=48132
Author:   kakuto
Date:     2018-07-04 09:14:37 +0200 (Wed, 04 Jul 2018)
Log Message:
-----------
harfbuzz 1.8.2

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/ChangeLog
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/NEWS
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-use-table.py
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-trak-table.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file-private.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-type-private.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-common-private.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gpos-table.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-khmer.cc
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-private.hh
    trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/main.cc
    trunk/Build/source/libs/harfbuzz/version.ac

Modified: trunk/Build/source/libs/README
===================================================================
--- trunk/Build/source/libs/README	2018-07-04 00:18:20 UTC (rev 48131)
+++ trunk/Build/source/libs/README	2018-07-04 07:14:37 UTC (rev 48132)
@@ -24,7 +24,7 @@
 graphite2 1.3.11 - checked 05mar18
   http://sourceforge.net/projects/silgraphite/files/graphite2/
 
-harfbuzz 1.8.1 - checked 15jun18
+harfbuzz 1.8.2 - checked 05jul18
   http://www.freedesktop.org/software/harfbuzz/release/
 
 icu 61.1 - checked 29mar18

Modified: trunk/Build/source/libs/harfbuzz/ChangeLog
===================================================================
--- trunk/Build/source/libs/harfbuzz/ChangeLog	2018-07-04 00:18:20 UTC (rev 48131)
+++ trunk/Build/source/libs/harfbuzz/ChangeLog	2018-07-04 07:14:37 UTC (rev 48132)
@@ -1,3 +1,7 @@
+2018-07-04  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
+
+	Import harfbuzz-1.8.2.
+
 2018-06-15  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
 
 	Import harfbuzz-1.8.1.

Modified: trunk/Build/source/libs/harfbuzz/TLpatches/ChangeLog
===================================================================
--- trunk/Build/source/libs/harfbuzz/TLpatches/ChangeLog	2018-07-04 00:18:20 UTC (rev 48131)
+++ trunk/Build/source/libs/harfbuzz/TLpatches/ChangeLog	2018-07-04 07:14:37 UTC (rev 48132)
@@ -1,3 +1,8 @@
+2018-07-04  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
+
+	Imported harfbuzz-1.8.2 source tree from:
+	  http://www.freedesktop.org/software/harfbuzz/release/
+
 2018-06-15  Akira Kakuto  <kakuto at fuk.kindai.ac.jp>
 
 	Imported harfbuzz-1.8.1 source tree from:

Modified: trunk/Build/source/libs/harfbuzz/TLpatches/TL-Changes
===================================================================
--- trunk/Build/source/libs/harfbuzz/TLpatches/TL-Changes	2018-07-04 00:18:20 UTC (rev 48131)
+++ trunk/Build/source/libs/harfbuzz/TLpatches/TL-Changes	2018-07-04 07:14:37 UTC (rev 48132)
@@ -1,4 +1,4 @@
-Changes applied to the harfbuzz-1.8.1/ tree as obtained from:
+Changes applied to the harfbuzz-1.8.2/ tree as obtained from:
 	http://www.freedesktop.org/software/harfbuzz/release/
 
 Removed:

Modified: trunk/Build/source/libs/harfbuzz/configure
===================================================================
--- trunk/Build/source/libs/harfbuzz/configure	2018-07-04 00:18:20 UTC (rev 48131)
+++ trunk/Build/source/libs/harfbuzz/configure	2018-07-04 07:14:37 UTC (rev 48132)
@@ -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.8.1.
+# Generated by GNU Autoconf 2.69 for harfbuzz (TeX Live) 1.8.2.
 #
 # 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.8.1'
-PACKAGE_STRING='harfbuzz (TeX Live) 1.8.1'
+PACKAGE_VERSION='1.8.2'
+PACKAGE_STRING='harfbuzz (TeX Live) 1.8.2'
 PACKAGE_BUGREPORT='tex-k at tug.org'
 PACKAGE_URL=''
 
@@ -1317,7 +1317,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.8.1 to adapt to many kinds of systems.
+\`configure' configures harfbuzz (TeX Live) 1.8.2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1388,7 +1388,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of harfbuzz (TeX Live) 1.8.1:";;
+     short | recursive ) echo "Configuration of harfbuzz (TeX Live) 1.8.2:";;
    esac
   cat <<\_ACEOF
 
@@ -1495,7 +1495,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-harfbuzz (TeX Live) configure 1.8.1
+harfbuzz (TeX Live) configure 1.8.2
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2131,7 +2131,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.8.1, which was
+It was created by harfbuzz (TeX Live) $as_me 1.8.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -4054,7 +4054,7 @@
 
 # Define the identity of the package.
  PACKAGE='harfbuzz--tex-live-'
- VERSION='1.8.1'
+ VERSION='1.8.2'
 
 
 # Some tools Automake needs.
@@ -4248,8 +4248,8 @@
 
 HB_VERSION_MAJOR=1
 HB_VERSION_MINOR=8
-HB_VERSION_MICRO=1
-HB_VERSION=1.8.1
+HB_VERSION_MICRO=2
+HB_VERSION=1.8.2
 
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
@@ -8140,7 +8140,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.8.1, which was
+This file was extended by harfbuzz (TeX Live) $as_me 1.8.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -8206,7 +8206,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.8.1
+harfbuzz (TeX Live) config.status 1.8.2
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog	2018-07-04 00:18:20 UTC (rev 48131)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog	2018-07-04 07:14:37 UTC (rev 48132)
@@ -1,3 +1,341 @@
+commit 29e7879bcf3fe955a0be3bb41e929e68f39ad01e
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Tue Jul 3 12:38:21 2018 +0430
+
+    Disable .dfont code for now
+
+    The get_table imple was wrong, as table offsets in a dfont are
+    relative to the resource.  We were treating them as relative to
+    the big blob itself.  To be fixed.
+
+    Part of https://github.com/harfbuzz/harfbuzz/pull/1085
+
+ src/hb-open-file-private.hh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 32348a43c154eac6bfb21b9e8044b38ed763601e
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Sun Jul 1 15:32:43 2018 +0430
+
+    Fix trak table apply logic
+
+    In collaboration with Behdad
+
+ src/hb-aat-layout-trak-table.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 225b92b7d4437360f8779850ee0aae85966679b5
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Sun Jul 1 14:32:00 2018 +0430
+
+    Support dfont font files (#949)
+
+ src/hb-open-file-private.hh | 196
+ ++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-open-type-private.hh |   1 +
+ src/main.cc                 |   3 +
+ 3 files changed, 200 insertions(+)
+
+commit 5d8cafcf6a47ce73afff06499f6be23c72ab6797
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Sun Jul 1 01:54:14 2018 +0430
+
+    Improve nommap naming and use C style comments on create_from_file
+    (#1084)
+
+ .circleci/config.yml |  2 +-
+ src/hb-blob.cc       | 16 ++++++++--------
+ 2 files changed, 9 insertions(+), 9 deletions(-)
+
+commit d3c0980ac234698627cb281e5526cc99139eed30
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Sat Jun 30 15:59:25 2018 +0430
+
+    Adjust MarkBasePos heuristic in presence of MultipleSubst
+
+    From the issue:
+    "In this font, the virama,ya first forms a ligature, then decomposes
+    back to
+    virama,ya. This causes those two to be marked parts of a MultipleSubst
+    sequence. When attaching the matra, we look for the first of the
+    MultipleSubst
+    sequence because that's where we attach to (because of eg #740). In
+    this case,
+    the first glyph in the MultipleSubst sequence is a mark, so we skip
+    it and
+    attach to the base char before it."
+
+    Font in question is Nirmala UI from Windows 10. Test sequence:
+
+      U+0926,U+094D,U+092F,U+0941
+
+    Fixes https://github.com/harfbuzz/harfbuzz/issues/1020
+
+ src/hb-ot-layout-gpos-table.hh | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit 8b9cbe3b24be2ae0166e682103e22ec916316ecf
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Sat Jun 30 12:28:03 2018 +0430
+
+    [indic] Tweak for old-spec Bengali and halant-ya-halant
+
+    Fixes https://github.com/harfbuzz/harfbuzz/issues/1073
+
+ src/hb-ot-shape-complex-indic.cc | 13 ++++++++++---
+ 1 file changed, 10 insertions(+), 3 deletions(-)
+
+commit 9541c9dae10156fb61e4786545d1976cdcfb6bda
+Author: punchcutter <zarijoscha at gmail.com>
+Date:   Sun Jun 24 22:54:57 2018 -0700
+
+    Rebase and update USE overrides for Bhaiksuki Gap Fillers and
+    Grantha Anusvara
+
+ src/gen-use-table.py | 8 +++++++-
+ 1 file changed, 7 insertions(+), 1 deletion(-)
+
+commit 7b8dfac560abe89d48cfc2f6efb4a61820bd28bf
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Sat Jun 30 09:16:54 2018 +0430
+
+    [khmer] Fix infinite-loop in cluster merging
+
+    Indic shaper already had this check.  We removed it when forking
+    Khmer shaper by mistake.
+
+    Fixes https://bugzilla.mozilla.org/show_bug.cgi?id=1464623
+
+ src/hb-ot-shape-complex-khmer.cc | 31 +++++++++++++++++--------------
+ 1 file changed, 17 insertions(+), 14 deletions(-)
+
+commit 25970a93aa6596d50ae538c6274625f95153572c
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Thu Jun 28 14:32:36 2018 +0430
+
+    armcc compatibility, don't use EINTR if doesn't exist
+
+    Fixes #1081
+
+ src/hb-blob.cc | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 8a51f91b7035bbfaf39af1b962faf1613d2ea3b7
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Thu Jun 28 13:22:21 2018 +0430
+
+    Minor on hb_blob_create_from_file, reuse ferror result
+
+    Oops
+
+ src/hb-blob.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 71971800ed1c0501a58e6ff7730e3cebec2ef2f8
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Wed Jun 27 18:14:52 2018 +0430
+
+    [ci] Don't fail on apt update and revive clang-O3-O0
+
+ .circleci/config.yml | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 7b4099f35f766d33d483a4b9d0805ef16020ea23
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Wed Jun 27 16:54:44 2018 +0430
+
+    Minor, rename blob to data on blob_from_file
+
+ src/hb-blob.cc | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
+
+commit fa090ed4d47df12b2e611c9a667c398742f7e4ba
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Wed Jun 27 14:13:26 2018 +0430
+
+    Minor touches on hb_blob_create_from_file (#1079)
+
+    * Handle EINTR on fallback reader
+    * Increase fallback reader limitation size limitation to 2 << 28
+    * Ensure _O_BINARY does exist if MMAP is used on Windows
+      (maybe superfluous but makes me more confident)
+
+ src/hb-blob.cc | 22 +++++++++++++---------
+ 1 file changed, 13 insertions(+), 9 deletions(-)
+
+commit 01dff1ea1aa871fa19a92c2afd63c8cb5dd6e455
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Tue Jun 26 18:00:58 2018 -0400
+
+    Make round() fallback portable to systems that do have round()
+
+    Makes compiling without HAVE_ROUND on systems that do have it work.
+
+ src/hb-private.hh | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 7db2e9ea38329b9393c9e8cc905b180735c9b0f4
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Tue Jun 26 10:46:10 2018 +0430
+
+    Minor on hb_blob_create_from_file
+
+    Add one more "unlikely" annotation and use explicit nullptr check
+    for more consistency.
+
+ src/hb-blob.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 4f8753464ae44dfb60bee81ede10448175db7b90
+Author: Garret Rieger <grieger at google.com>
+Date:   Fri Jun 22 15:29:34 2018 -0700
+
+    [subset] Add fuzzer test case that caused a timeout to the corpus.
+
+ ...testcase-minimized-hb-subset-fuzzer-5750092395970560 | Bin 0 ->
+ 72435 bytes
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+commit 35ce8f31d37cf7c2a1f8265d36ba4c2c9a3efb2c
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Mon Jun 25 22:23:43 2018 +0430
+
+    Unify our pipe reader with the fallback reader (#1068)
+
+    And assign one bot to use the path always using NOMMAPFILEREADER
+    token.
+
+    It's limited to 200mb so no more fun with using /dev/zero on hb-view!
+
+ .circleci/config.yml |   6 +-
+ src/hb-blob.cc       | 152
+ ++++++++++++++++++++++-----------------------------
+ 2 files changed, 68 insertions(+), 90 deletions(-)
+
+commit f57804a8a596e88843ddc8b88afac7526349b89b
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Mon Jun 25 18:45:49 2018 +0430
+
+    Resolve ttx absolute path before use (#1075)
+
+ test/subset/run-tests.py | 101
+ ++++++++++++++++++++++++++---------------------
+ 1 file changed, 57 insertions(+), 44 deletions(-)
+
+commit 159ddb872986f121818e816d2ea75d271075ba1f
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Sun Jun 24 23:09:16 2018 +0430
+
+    Treat - just as /dev/stdin and remove one extra file reader (#1065)
+
+ util/options.cc | 27 +++++++++------------------
+ 1 file changed, 9 insertions(+), 18 deletions(-)
+
+commit b2a187918757a0faaf0f564ec2b0766c09fa364c
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Sat Jun 23 10:32:28 2018 -0400
+
+    In Coverage iterator, bail out if table smells
+
+    In particular, if CoverageFormat2 has unsorted ranges, bail out.
+    Otherwise, 64k ranges of each 64k glyphs can DoS closure() method.
+
+    We can do the same for CoverageFormat1, but that one does not expose
+    the quadratic behavior, so, fine.
+
+ src/hb-ot-layout-common-private.hh | 17 +++++++++++++++--
+ 1 file changed, 15 insertions(+), 2 deletions(-)
+
+commit 941f2b85489b344698bf036922c589483034a7f2
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Mon Jun 18 20:35:40 2018 +0430
+
+    Support pipe and friends on hb_blob_create_from_file (#1061)
+
+    With this hb-view/hb-shape support pipes and possibly socket and
+    named pipe
+    also, anything fails just on mmap.
+
+    We can later do the same for Windows also.
+
+    This however reveals two issues, the fact most of our bots don't
+    have HAVE_MMAP and using
+    this instead the other fread/fopen reader can make failure on CI. I
+    should look at them separately
+    this change however is very low risk I believe.
+
+ src/hb-blob.cc | 44 +++++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 43 insertions(+), 1 deletion(-)
+
+commit d0c2889dfc43da92c76d6eab5482b1298744dc9c
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Mon Jun 18 19:59:33 2018 +0430
+
+    Revert file blob sanitization and index checking (#1062)
+
+    As
+    https://github.com/harfbuzz/harfbuzz/pull/1059#issuecomment-397912812
+    we
+    like to still work with blobs that harfbuzz itself can't handle
+    directly that are failing sanitization
+    currently apparently.
+
+ util/options.cc | 12 ++----------
+ util/options.hh |  2 +-
+ 2 files changed, 3 insertions(+), 11 deletions(-)
+
+commit c53697d3f2a3fae8b68ec4c5146c7000a07e0963
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Sun Jun 17 17:04:55 2018 +0430
+
+    Verbose fail when something is wrong with hb-shape/hb-view input
+    font file (#1059)
+
+    This checks if the blob isn't empty and uses `hb_face_count`
+    to see if the font file passes the simple font file sanitization
+    so can detect if the input is actually a font and checks also
+    whether input font-index is out of range.
+
+ util/options.cc | 11 +++++++++++
+ 1 file changed, 11 insertions(+)
+
+commit aa0c5df4199ef4e96df2b856c8f629e49fdd5120
+Author: Ebrahim Byagowi <ebrahim at gnu.org>
+Date:   Sun Jun 17 16:49:34 2018 +0430
+
+    Fix reading fonts from stdin (#1060)
+
+    We were passing the font path directly to freetype so rendering
+    was broken when we are getting the font from stdin.
+
+    This fixes it by using FT_New_Memory_Face instead.
+
+    This fixes:
+    * build/util/hb-view /dev/stdin text < font.ttf
+    * build/util/hb-view - text < font.ttf
+    * cat font.ttf | build/util/hb-view - text
+
+    but doesn't work on
+    * cat font.ttf | build/util/hb-view /dev/stdin text
+
+    which I will try to fix separately.
+
+ util/helper-cairo.cc | 14 ++++++++++----
+ util/options.cc      |  5 ++---
+ util/options.hh      |  4 +++-
+ 3 files changed, 15 insertions(+), 8 deletions(-)
+
+commit 3654d9be6b017e66307fe0ffe635266938b14702
+Author: Behdad Esfahbod <behdad at behdad.org>
+Date:   Tue Jun 12 19:38:04 2018 -0400
+
+    1.8.1
+
+ NEWS             | 8 ++++++++
+ configure.ac     | 2 +-
+ src/hb-version.h | 4 ++--
+ 3 files changed, 11 insertions(+), 3 deletions(-)
+
 commit f3e58ab8a957cdf36bddef793c473664744885a7
 Author: Behdad Esfahbod <behdad at behdad.org>
 Date:   Tue Jun 12 19:32:04 2018 -0400

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/NEWS
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/NEWS	2018-07-04 00:18:20 UTC (rev 48131)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/NEWS	2018-07-04 07:14:37 UTC (rev 48132)
@@ -1,3 +1,10 @@
+Overview of changes leading to 1.8.2
+Tuesday, July 3, 2018
+====================================
+- Fix infinite loop in Khmer shaper.
+- Improve hb_blob_create_from_file() for streams.
+
+
 Overview of changes leading to 1.8.1
 Tuesday, June 12, 2018
 ====================================
@@ -5,6 +12,7 @@
 - Add correctness bug in hb_set_t operations, introduced in 1.7.7.
 - Remove HB_SUBSET_BUILTIN build option.  Not necessary.
 
+
 Overview of changes leading to 1.8.0
 Tuesday, June 5, 2018
 ====================================

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac	2018-07-04 00:18:20 UTC (rev 48131)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac	2018-07-04 07:14:37 UTC (rev 48132)
@@ -1,6 +1,6 @@
 AC_PREREQ([2.64])
 AC_INIT([HarfBuzz],
-        [1.8.1],
+        [1.8.2],
         [https://github.com/harfbuzz/harfbuzz/issues/new],
         [harfbuzz],
         [http://harfbuzz.org/])

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	2018-07-04 00:18:20 UTC (rev 48131)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-use-table.py	2018-07-04 07:14:37 UTC (rev 48132)
@@ -47,6 +47,9 @@
 data[0][0x034F] = defaults[0]
 data[0][0x2060] = defaults[0]
 data[0][0x20F0] = defaults[0]
+# TODO https://github.com/roozbehp/unicode-data/issues/9
+data[0][0x11C44] = 'Consonant_Placeholder'
+data[0][0x11C45] = 'Consonant_Placeholder'
 for u in range (0xFE00, 0xFE0F + 1):
 	data[0][u] = defaults[0]
 
@@ -165,7 +168,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 [0x104B, 0x104E, 0x2022, 0x11A3F, 0x11A45]) or
+		(UGC == Po and not U in [0x104B, 0x104E, 0x2022, 0x11A3F, 0x11A45, 0x11C44, 0x11C45]) or
 		False # SPEC-DRAFT-OUTDATED! U == 0x002D
 		)
 def is_BASE_NUM(U, UISC, UGC):
@@ -344,6 +347,9 @@
 		if 0xA926 <= U <= 0xA92A: UIPC = Top
 		if U == 0x111CA: UIPC = Bottom
 		if U == 0x11300: UIPC = Top
+		# TODO: https://github.com/harfbuzz/harfbuzz/pull/1037
+		if U == 0x11302: UIPC = Top
+		if U == 0x1133C: UIPC = Bottom
 		if U == 0x1171E: UIPC = Left # Correct?!
 		if 0x1CF2 <= U <= 0x1CF3: UIPC = Right
 		if 0x1CF8 <= U <= 0x1CF9: UIPC = Top

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-trak-table.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-trak-table.hh	2018-07-04 00:18:20 UTC (rev 48131)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-trak-table.hh	2018-07-04 07:14:37 UTC (rev 48132)
@@ -172,7 +172,7 @@
       hb_position_t advance_to_add = c->font->em_scalef_x (tracking / 2);
       foreach_grapheme (buffer, start, end)
       {
-	/* TODO This is wrong. */
+	buffer->pos[start].x_offset += advance_to_add;
 	buffer->pos[start].x_advance += advance_to_add;
 	buffer->pos[end].x_advance += advance_to_add;
       }
@@ -184,7 +184,7 @@
       hb_position_t advance_to_add = c->font->em_scalef_y (tracking / 2);
       foreach_grapheme (buffer, start, end)
       {
-	/* TODO This is wrong. */
+	buffer->pos[start].y_offset += advance_to_add;
 	buffer->pos[start].y_advance += advance_to_add;
 	buffer->pos[end].y_advance += advance_to_add;
       }

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.cc	2018-07-04 00:18:20 UTC (rev 48131)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.cc	2018-07-04 07:14:37 UTC (rev 48132)
@@ -489,12 +489,12 @@
 
 #if defined(_WIN32) || defined(__CYGWIN__)
 # include <windows.h>
+#else
+# ifndef _O_BINARY
+#  define _O_BINARY 0
+# endif
 #endif
 
-#ifndef _O_BINARY
-# define _O_BINARY 0
-#endif
-
 #ifndef MAP_NORESERVE
 # define MAP_NORESERVE 0
 #endif
@@ -517,7 +517,7 @@
   UnmapViewOfFile (file->contents);
   CloseHandle (file->mapping);
 #else
-  free (file->contents);
+  assert (0); // If we don't have mmap we shouldn't reach here
 #endif
 
   free (file);
@@ -534,77 +534,103 @@
 hb_blob_t *
 hb_blob_create_from_file (const char *file_name)
 {
-  // Adopted from glib's gmappedfile.c with Matthias Clasen and
-  // Allison Lortie permission but changed a lot to suit our need.
-  bool writable = false;
-  hb_memory_mode_t mm = HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE;
+  /* Adopted from glib's gmappedfile.c with Matthias Clasen and
+     Allison Lortie permission but changed a lot to suit our need. */
+#if defined(HAVE_MMAP) && !defined(HB_NO_MMAP)
   hb_mapped_file_t *file = (hb_mapped_file_t *) calloc (1, sizeof (hb_mapped_file_t));
   if (unlikely (!file)) return hb_blob_get_empty ();
 
-#ifdef HAVE_MMAP
-  int fd = open (file_name, (writable ? O_RDWR : O_RDONLY) | _O_BINARY, 0);
-# define CLOSE close
+  int fd = open (file_name, O_RDONLY | _O_BINARY, 0);
   if (unlikely (fd == -1)) goto fail_without_close;
 
   struct stat st;
   if (unlikely (fstat (fd, &st) == -1)) goto fail;
 
-  // See https://github.com/GNOME/glib/blob/f9faac7/glib/gmappedfile.c#L139-L142
-  if (unlikely (st.st_size == 0 && S_ISREG (st.st_mode))) goto fail;
-
   file->length = (unsigned long) st.st_size;
-  file->contents = (char *) mmap (nullptr, file->length,
-				  writable ? PROT_READ|PROT_WRITE : PROT_READ,
+  file->contents = (char *) mmap (nullptr, file->length, PROT_READ,
 				  MAP_PRIVATE | MAP_NORESERVE, fd, 0);
 
   if (unlikely (file->contents == MAP_FAILED)) goto fail;
 
-#elif defined(_WIN32) || defined(__CYGWIN__)
-  HANDLE fd = CreateFile (file_name,
-			  writable ? GENERIC_READ|GENERIC_WRITE : GENERIC_READ,
-			  FILE_SHARE_READ, nullptr, OPEN_EXISTING,
-			  FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, nullptr);
-# define CLOSE CloseHandle
+  close (fd);
 
+  return hb_blob_create (file->contents, file->length,
+			 HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE, (void *) file,
+			 (hb_destroy_func_t) _hb_mapped_file_destroy);
+
+fail:
+  close (fd);
+fail_without_close:
+  free (file);
+
+#elif (defined(_WIN32) || defined(__CYGWIN__)) && !defined(HB_NO_MMAP)
+  hb_mapped_file_t *file = (hb_mapped_file_t *) calloc (1, sizeof (hb_mapped_file_t));
+  if (unlikely (!file)) return hb_blob_get_empty ();
+
+  HANDLE fd = CreateFile (file_name, GENERIC_READ, FILE_SHARE_READ, nullptr,
+			  OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,
+			  nullptr);
+
   if (unlikely (fd == INVALID_HANDLE_VALUE)) goto fail_without_close;
 
   file->length = (unsigned long) GetFileSize (fd, nullptr);
-  file->mapping = CreateFileMapping (fd, nullptr,
-				     writable ? PAGE_WRITECOPY : PAGE_READONLY,
-				     0, 0, nullptr);
+  file->mapping = CreateFileMapping (fd, nullptr, PAGE_READONLY, 0, 0, nullptr);
   if (unlikely (file->mapping == nullptr)) goto fail;
 
-  file->contents = (char *) MapViewOfFile (file->mapping,
-					   writable ? FILE_MAP_COPY : FILE_MAP_READ,
-					   0, 0, 0);
+  file->contents = (char *) MapViewOfFile (file->mapping, FILE_MAP_READ, 0, 0, 0);
   if (unlikely (file->contents == nullptr)) goto fail;
 
-#else
-  mm = HB_MEMORY_MODE_WRITABLE;
+  CloseHandle (fd);
+  return hb_blob_create (file->contents, file->length,
+			 HB_MEMORY_MODE_READONLY_MAY_MAKE_WRITABLE, (void *) file,
+			 (hb_destroy_func_t) _hb_mapped_file_destroy);
 
-  FILE *fd = fopen (file_name, "rb");
-# define CLOSE fclose
-  if (unlikely (!fd)) goto fail_without_close;
+fail:
+  CloseHandle (fd);
+fail_without_close:
+  free (file);
 
-  fseek (fd, 0, SEEK_END);
-  file->length = ftell (fd);
-  rewind (fd);
-  file->contents = (char *) malloc (file->length);
-  if (unlikely (!file->contents)) goto fail;
+#endif
 
-  if (unlikely (fread (file->contents, 1, file->length, fd) != file->length))
-    goto fail;
+  /* The following tries to read a file without knowing its size beforehand
+     It's used as a fallback for systems without mmap or to read from pipes */
+  unsigned long len = 0, allocated = BUFSIZ * 16;
+  char *data = (char *) malloc (allocated);
+  if (unlikely (data == nullptr)) return hb_blob_get_empty ();
 
+  FILE *fp = fopen (file_name, "rb");
+  if (unlikely (fp == nullptr)) goto fread_fail_without_close;
+
+  while (!feof (fp))
+  {
+    if (allocated - len < BUFSIZ)
+    {
+      allocated *= 2;
+      /* Don't allocate and go more than ~536MB, our mmap reader still
+	 can cover files like that but lets limit our fallback reader */
+      if (unlikely (allocated > (2 << 28))) goto fread_fail;
+      char *new_data = (char *) realloc (data, allocated);
+      if (unlikely (new_data == nullptr)) goto fread_fail;
+      data = new_data;
+    }
+
+    unsigned long addition = fread (data + len, 1, allocated - len, fp);
+
+    int err = ferror (fp);
+#ifdef EINTR // armcc doesn't have it
+    if (unlikely (err == EINTR)) continue;
 #endif
+    if (unlikely (err)) goto fread_fail;
 
-  CLOSE (fd);
-  return hb_blob_create (file->contents, file->length, mm, (void *) file,
-			 (hb_destroy_func_t) _hb_mapped_file_destroy);
+    len += addition;
+  }
 
-fail:
-  CLOSE (fd);
-#undef CLOSE
-fail_without_close:
-  free (file);
+  return hb_blob_create (data, len, HB_MEMORY_MODE_WRITABLE, data,
+                         (hb_destroy_func_t) free);
+
+fread_fail:
+  fclose (fp);
+fread_fail_without_close:
+  free (data);
   return hb_blob_get_empty ();
 }

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	2018-07-04 00:18:20 UTC (rev 48131)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file-private.hh	2018-07-04 07:14:37 UTC (rev 48132)
@@ -286,7 +286,198 @@
   } u;
 };
 
+/*
+ * Mac Resource Fork
+ */
 
+struct ResourceRefItem
+{
+  inline bool sanitize (hb_sanitize_context_t *c) const
+  {
+    TRACE_SANITIZE (this);
+    // actual data sanitization is done on ResourceForkHeader sanitizer
+    return_trace (likely (c->check_struct (this)));
+  }
+
+  HBINT16	id;		/* Resource ID, is really should be signed? */
+  HBINT16	nameOffset;	/* Offset from beginning of resource name list
+				 * to resource name, minus means there is no */
+  HBUINT8	attr;		/* Resource attributes */
+  HBUINT24	dataOffset;	/* Offset from beginning of resource data to
+				 * data for this resource */
+  HBUINT32	reserved;	/* Reserved for handle to resource */
+  public:
+  DEFINE_SIZE_STATIC (12);
+};
+
+struct ResourceTypeItem
+{
+  inline bool sanitize (hb_sanitize_context_t *c) const
+  {
+    TRACE_SANITIZE (this);
+    // RefList sanitization is done on ResourceMap sanitizer
+    return_trace (likely (c->check_struct (this)));
+  }
+
+  inline unsigned int get_resource_count () const
+  {
+    return numRes + 1;
+  }
+
+  inline bool is_sfnt () const
+  {
+    return type == HB_TAG ('s','f','n','t');
+  }
+
+  inline const ResourceRefItem& get_ref_item (const void *base,
+					      unsigned int i) const
+  {
+    return (base+refList)[i];
+  }
+
+  protected:
+  Tag		type;		/* Resource type */
+  HBUINT16	numRes;		/* Number of resource this type in map minus 1 */
+  OffsetTo<UnsizedArrayOf<ResourceRefItem> >
+		refList;	/* Offset from beginning of resource type list
+				 * to reference list for this type */
+  public:
+  DEFINE_SIZE_STATIC (8);
+};
+
+struct ResourceMap
+{
+  inline bool sanitize (hb_sanitize_context_t *c) const
+  {
+    TRACE_SANITIZE (this);
+    if (unlikely (!c->check_struct (this)))
+      return_trace (false);
+    for (unsigned int i = 0; i < get_types_count (); ++i)
+    {
+      const ResourceTypeItem& type = get_type (i);
+      if (unlikely (!type.sanitize (c)))
+        return_trace (false);
+      for (unsigned int j = 0; j < type.get_resource_count (); ++j)
+	if (unlikely (!get_ref_item (type, j).sanitize (c)))
+	  return_trace (false);
+    }
+    return_trace (true);
+  }
+
+  inline const ResourceTypeItem& get_type (unsigned int i) const
+  {
+    // Why offset from the second byte of the object? I'm not sure
+    return ((&reserved[2])+typeList)[i];
+  }
+
+  inline unsigned int get_types_count () const
+  {
+    return nTypes + 1;
+  }
+
+  inline const ResourceRefItem &get_ref_item (const ResourceTypeItem &type,
+					      unsigned int i) const
+  {
+    return type.get_ref_item (&(this+typeList), i);
+  }
+
+  inline const PString& get_name (const ResourceRefItem &item,
+				  unsigned int i) const
+  {
+    if (item.nameOffset == -1)
+      return Null (PString);
+
+    return StructAtOffset<PString> (this, nameList + item.nameOffset);
+  }
+
+  protected:
+  HBUINT8	reserved[16];	/* Reserved for copy of resource header */
+  LOffsetTo<ResourceMap>
+		reserved1;	/* Reserved for handle to next resource map */
+  HBUINT16	reserved2;	/* Reserved for file reference number */
+  HBUINT16	attr;		/* Resource fork attribute */
+  OffsetTo<UnsizedArrayOf<ResourceTypeItem> >
+		typeList;	/* Offset from beginning of map to
+				 * resource type list */
+  HBUINT16	nameList;	/* Offset from beginning of map to
+				 * resource name list */
+  HBUINT16	nTypes;		/* Number of types in the map minus 1 */
+  public:
+  DEFINE_SIZE_STATIC (30);
+};
+
+struct ResourceForkHeader
+{
+  inline unsigned int get_face_count () const
+  {
+    const ResourceMap &resource_map = this+map;
+    for (unsigned int i = 0; i < resource_map.get_types_count (); ++i)
+    {
+      const ResourceTypeItem& type = resource_map.get_type (i);
+      if (type.is_sfnt ())
+	return type.get_resource_count ();
+    }
+    return 0;
+  }
+
+  inline const LArrayOf<HBUINT8>& get_data (const ResourceTypeItem& type,
+					    unsigned int idx) const
+  {
+    const ResourceMap &resource_map = this+map;
+    unsigned int offset = dataOffset;
+    offset += resource_map.get_ref_item (type, idx).dataOffset;
+    return StructAtOffset<LArrayOf<HBUINT8> > (this, offset);
+  }
+
+  inline const OpenTypeFontFace& get_face (unsigned int idx) const
+  {
+    const ResourceMap &resource_map = this+map;
+    for (unsigned int i = 0; i < resource_map.get_types_count (); ++i)
+    {
+      const ResourceTypeItem& type = resource_map.get_type (i);
+      if (type.is_sfnt () && idx < type.get_resource_count ())
+	return (OpenTypeFontFace&) get_data (type, idx).arrayZ;
+    }
+    return Null (OpenTypeFontFace);
+  }
+
+  inline bool sanitize (hb_sanitize_context_t *c) const
+  {
+    TRACE_SANITIZE (this);
+    if (unlikely (!c->check_struct (this)))
+      return_trace (false);
+
+    const ResourceMap &resource_map = this+map;
+    if (unlikely (!resource_map.sanitize (c)))
+      return_trace (false);
+
+    for (unsigned int i = 0; i < resource_map.get_types_count (); ++i)
+    {
+      const ResourceTypeItem& type = resource_map.get_type (i);
+      for (unsigned int j = 0; j < type.get_resource_count (); ++j)
+      {
+        const LArrayOf<HBUINT8>& data = get_data (type, j);
+	if (unlikely (!(data.sanitize (c) &&
+			((OpenTypeFontFace&) data.arrayZ).sanitize (c))))
+	  return_trace (false);
+      }
+    }
+
+    return_trace (true);
+  }
+
+  protected:
+  HBUINT32	dataOffset;	/* Offset from beginning of resource fork
+				 * to resource data */
+  LOffsetTo<ResourceMap>
+		map;		/* Offset from beginning of resource fork
+				 * to resource map */
+  HBUINT32	dataLen;	/* Length of resource data */
+  HBUINT32	mapLen;		/* Length of resource map */
+  public:
+  DEFINE_SIZE_STATIC (16);
+};
+
 /*
  * OpenType Font File
  */
@@ -299,6 +490,7 @@
     CFFTag		= HB_TAG ('O','T','T','O'), /* OpenType with Postscript outlines */
     TrueTypeTag	= HB_TAG ( 0 , 1 , 0 , 0 ), /* OpenType with TrueType outlines */
     TTCTag		= HB_TAG ('t','t','c','f'), /* TrueType Collection */
+    DFontTag		= HB_TAG ( 0 , 0 , 1 , 0 ), /* DFont Mac Resource Fork */
     TrueTag		= HB_TAG ('t','r','u','e'), /* Obsolete Apple TrueType */
     Typ1Tag		= HB_TAG ('t','y','p','1')  /* Obsolete Apple Type1 font in SFNT container */
   };
@@ -313,6 +505,7 @@
     case Typ1Tag:
     case TrueTypeTag:	return 1;
     case TTCTag:	return u.ttcHeader.get_face_count ();
+//    case DFontTag:	return u.rfHeader.get_face_count ();
     default:		return 0;
     }
   }
@@ -327,6 +520,7 @@
     case Typ1Tag:
     case TrueTypeTag:	return u.fontFace;
     case TTCTag:	return u.ttcHeader.get_face (i);
+//    case DFontTag:	return u.rfHeader.get_face (i);
     default:		return Null(OpenTypeFontFace);
     }
   }
@@ -353,6 +547,7 @@
     case Typ1Tag:
     case TrueTypeTag:	return_trace (u.fontFace.sanitize (c));
     case TTCTag:	return_trace (u.ttcHeader.sanitize (c));
+//    case DFontTag:	return_trace (u.rfHeader.sanitize (c));
     default:		return_trace (true);
     }
   }
@@ -362,6 +557,7 @@
   Tag			tag;		/* 4-byte identifier. */
   OpenTypeFontFace	fontFace;
   TTCHeader		ttcHeader;
+  ResourceForkHeader	rfHeader;
   } u;
   public:
   DEFINE_SIZE_UNION (4, tag);

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-type-private.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-type-private.hh	2018-07-04 00:18:20 UTC (rev 48131)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-type-private.hh	2018-07-04 07:14:37 UTC (rev 48132)
@@ -1033,6 +1033,7 @@
   DEFINE_SIZE_ARRAY (sizeof (LenType), arrayZ);
 };
 template <typename Type> struct LArrayOf : ArrayOf<Type, HBUINT32> {};
+typedef ArrayOf<HBUINT8, HBUINT8> PString;
 
 /* Array of Offset's */
 template <typename Type, typename OffsetType=HBUINT16>

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-common-private.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-common-private.hh	2018-07-04 00:18:20 UTC (rev 48131)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-common-private.hh	2018-07-04 07:14:37 UTC (rev 48132)
@@ -832,7 +832,12 @@
       c = &c_;
       coverage = 0;
       i = 0;
-      j = c->rangeRecord.len ? c_.rangeRecord[0].start : 0;
+      j = c->rangeRecord.len ? c->rangeRecord[0].start : 0;
+      if (unlikely (c->rangeRecord[0].start > c->rangeRecord[0].end))
+      {
+        /* Broken table. Skip. */
+        i = c->rangeRecord.len;
+      }
     }
     inline bool more (void) { return i < c->rangeRecord.len; }
     inline void next (void)
@@ -842,7 +847,14 @@
         i++;
 	if (more ())
 	{
+	  hb_codepoint_t old = j;
 	  j = c->rangeRecord[i].start;
+	  if (unlikely (j <= old))
+	  {
+	    /* Broken table. Skip. Important to avoid DoS. */
+	   i = c->rangeRecord.len;
+	   return;
+	  }
 	  coverage = c->rangeRecord[i].value;
 	}
 	return;
@@ -855,7 +867,8 @@
 
     private:
     const struct CoverageFormat2 *c;
-    unsigned int i, j, coverage;
+    unsigned int i, coverage;
+    hb_codepoint_t j;
   };
   private:
 

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	2018-07-04 00:18:20 UTC (rev 48131)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gpos-table.hh	2018-07-04 07:14:37 UTC (rev 48132)
@@ -1074,10 +1074,13 @@
       if (!skippy_iter.prev ()) return_trace (false);
       /* We only want to attach to the first of a MultipleSubst sequence.
        * https://github.com/harfbuzz/harfbuzz/issues/740
-       * Reject others. */
+       * Reject others...
+       * ...but stop if we find a mark in the MultipleSubst sequence:
+       * https://github.com/harfbuzz/harfbuzz/issues/1020 */
       if (!_hb_glyph_info_multiplied (&buffer->info[skippy_iter.idx]) ||
 	  0 == _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx]) ||
 	  (skippy_iter.idx == 0 ||
+	   _hb_glyph_info_is_mark (&buffer->info[skippy_iter.idx - 1]) ||
 	   _hb_glyph_info_get_lig_id (&buffer->info[skippy_iter.idx]) !=
 	   _hb_glyph_info_get_lig_id (&buffer->info[skippy_iter.idx - 1]) ||
 	   _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx]) !=

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	2018-07-04 00:18:20 UTC (rev 48131)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic.cc	2018-07-04 07:14:37 UTC (rev 48132)
@@ -668,8 +668,9 @@
    *
    * Reports suggest that in some scripts Uniscribe does this only if there
    * is *not* a Halant after last consonant already (eg. Kannada), while it
-   * does it unconditionally in other scripts (eg. Malayalam).  We don't
-   * currently know about other scripts, so we single out Malayalam for now.
+   * does it unconditionally in other scripts (eg. Malayalam, Bengali).  We
+   * don't currently know about other scripts, so we whitelist Malayalam and
+   * Bengali for now.
    *
    * Kannada test case:
    * U+0C9A,U+0CCD,U+0C9A,U+0CCD
@@ -679,10 +680,16 @@
    * Malayalam test case:
    * U+0D38,U+0D4D,U+0D31,U+0D4D,U+0D31,U+0D4D
    * With lohit-ttf-20121122/Lohit-Malayalam.ttf
+   *
+   * Bengali test case
+   * U+0998,U+09CD,U+09AF,U+09CD
+   * With Windows XP vrinda.ttf
+   * https://github.com/harfbuzz/harfbuzz/issues/1073
    */
   if (indic_plan->is_old_spec)
   {
-    bool disallow_double_halants = buffer->props.script != HB_SCRIPT_MALAYALAM;
+    bool disallow_double_halants = buffer->props.script != HB_SCRIPT_MALAYALAM &&
+				   buffer->props.script != HB_SCRIPT_BENGALI;
     for (unsigned int i = base + 1; i < end; i++)
       if (info[i].indic_category() == OT_H)
       {

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-khmer.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-khmer.cc	2018-07-04 00:18:20 UTC (rev 48131)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-khmer.cc	2018-07-04 07:14:37 UTC (rev 48132)
@@ -372,22 +372,25 @@
 	break;
       }
 
-    /* Note!  syllable() is a one-byte field. */
-    for (unsigned int i = base; i < end; i++)
-      if (info[i].syllable() != 255)
-      {
-	unsigned int max = i;
-	unsigned int j = start + info[i].syllable();
-	while (j != i)
+    if (unlikely (end - start >= 127))
+      buffer->merge_clusters (start, end);
+    else
+      /* Note!  syllable() is a one-byte field. */
+      for (unsigned int i = base; i < end; i++)
+	if (info[i].syllable() != 255)
 	{
-	  max = MAX (max, j);
-	  unsigned int next = start + info[j].syllable();
-	  info[j].syllable() = 255; /* So we don't process j later again. */
-	  j = next;
+	  unsigned int max = i;
+	  unsigned int j = start + info[i].syllable();
+	  while (j != i)
+	  {
+	    max = MAX (max, j);
+	    unsigned int next = start + info[j].syllable();
+	    info[j].syllable() = 255; /* So we don't process j later again. */
+	    j = next;
+	  }
+	  if (i != max)
+	    buffer->merge_clusters (i, max + 1);
 	}
-	if (i != max)
-	  buffer->merge_clusters (i, max + 1);
-      }
 
     /* Put syllable back in. */
     for (unsigned int i = start; i < end; i++)

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-private.hh
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-private.hh	2018-07-04 00:18:20 UTC (rev 48131)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-private.hh	2018-07-04 07:14:37 UTC (rev 48132)
@@ -1228,7 +1228,7 @@
 /* fallback for round() */
 #if !defined (HAVE_ROUND) && !defined (HAVE_DECL_ROUND)
 static inline double
-round (double x)
+_hb_round (double x)
 {
   if (x >= 0)
     return floor (x + 0.5);
@@ -1235,6 +1235,7 @@
   else
     return ceil (x - 0.5);
 }
+#define round(x) _hb_round(x)
 #endif
 
 

Modified: trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/main.cc
===================================================================
--- trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/main.cc	2018-07-04 00:18:20 UTC (rev 48131)
+++ trunk/Build/source/libs/harfbuzz/harfbuzz-src/src/main.cc	2018-07-04 07:14:37 UTC (rev 48132)
@@ -78,6 +78,9 @@
   case OpenTypeFontFile::Typ1Tag:
     printf ("Obsolete Apple Type1 font in SFNT container\n");
     break;
+  case OpenTypeFontFile::DFontTag:
+    printf ("DFont Mac Resource Fork\n");
+    break;
   default:
     printf ("Unknown font format\n");
     break;

Modified: trunk/Build/source/libs/harfbuzz/version.ac
===================================================================
--- trunk/Build/source/libs/harfbuzz/version.ac	2018-07-04 00:18:20 UTC (rev 48131)
+++ trunk/Build/source/libs/harfbuzz/version.ac	2018-07-04 07:14:37 UTC (rev 48132)
@@ -8,4 +8,4 @@
 dnl --------------------------------------------------------
 dnl
 dnl  m4-include this file to define the current harfbuzz version
-m4_define([harfbuzz_version], [1.8.1])
+m4_define([harfbuzz_version], [1.8.2])



More information about the tex-live-commits mailing list