summaryrefslogtreecommitdiff
path: root/Build/source/libs
diff options
context:
space:
mode:
authorAkira Kakuto <kakuto@fuk.kindai.ac.jp>2018-03-07 22:32:14 +0000
committerAkira Kakuto <kakuto@fuk.kindai.ac.jp>2018-03-07 22:32:14 +0000
commitef9282421b00185a4962b7d22b96e979687258e2 (patch)
treeb6d0d8c700086d3141e228187693a26b102c971f /Build/source/libs
parent55fbdeae2498166ec7c7301fd48d990fc9010058 (diff)
harfbuzz-1.7.6
git-svn-id: svn://tug.org/texlive/trunk@46877 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Build/source/libs')
-rw-r--r--Build/source/libs/README2
-rw-r--r--Build/source/libs/harfbuzz/ChangeLog5
-rw-r--r--Build/source/libs/harfbuzz/Makefile.am22
-rw-r--r--Build/source/libs/harfbuzz/Makefile.in72
-rw-r--r--Build/source/libs/harfbuzz/TLpatches/ChangeLog5
-rw-r--r--Build/source/libs/harfbuzz/TLpatches/TL-Changes2
-rwxr-xr-xBuild/source/libs/harfbuzz/configure24
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/CMakeLists.txt142
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog5524
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/NEWS15
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/RELEASING.md28
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/TODO29
-rwxr-xr-xBuild/source/libs/harfbuzz/harfbuzz-src/autogen.sh10
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/config.h.in3
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/configure.ac35
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.am146
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.sources40
-rwxr-xr-xBuild/source/libs/harfbuzz/harfbuzz-src/src/check-defs.sh54
-rwxr-xr-xBuild/source/libs/harfbuzz/harfbuzz-src/src/check-libstdc++.sh22
-rwxr-xr-xBuild/source/libs/harfbuzz/harfbuzz-src/src/check-symbols.sh58
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/dump-indic-data.cc43
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/dump-khmer-data.cc43
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/dump-myanmar-data.cc43
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/dump-use-data.cc38
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/gen-def.py9
-rwxr-xr-xBuild/source/libs/harfbuzz/harfbuzz-src/src/gen-use-table.py2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz-config.cmake.in82
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz-subset.pc.in12
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-ankr-table.hh80
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-common-private.hh48
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-kerx-table.hh339
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-morx-table.hh90
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-private.hh3
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-trak-table.hh201
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout.cc85
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.cc27
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.h3
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-deserialize-json.hh744
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-deserialize-json.rl4
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-deserialize-text.hh490
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-deserialize-text.rl4
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-private.hh5
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.cc2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.h18
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.cc2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.cc19
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-debug.hh13
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-directwrite.cc4
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.h1
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.cc2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-gobject-enums.h.tmpl3
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-gobject-structs.h47
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-graphite2.cc3
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file-private.hh100
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-type-private.hh78
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cmap-table.hh137
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-cbdt-table.hh (renamed from Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cbdt-table.hh)8
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-colr-table.hh142
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-cpal-table.hh208
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color.cc183
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-font.cc3
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-glyf-table.hh317
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-hdmx-table.hh198
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-head-table.hh2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-hhea-table.hh6
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-hmtx-table.hh171
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-base-table.hh655
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-common-private.hh12
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gdef-table.hh4
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gpos-table.hh26
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsub-table.hh12
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos-private.hh10
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-private.hh34
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.cc61
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.h17
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-map-private.hh10
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-map.cc2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-maxp-table.hh88
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-os2-table.hh130
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-os2-unicode-ranges.hh247
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-private.hh244
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic.cc214
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-khmer-private.hh124
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-khmer.cc118
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.hh251
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.rl2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-private.hh171
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar.cc158
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.hh516
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.rl2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-private.hh2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-table.cc2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use.cc4
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-fallback.cc13
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.cc6
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-private.hh314
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set-private.hh164
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set.cc63
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set.h19
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-glyf.cc307
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-glyf.hh40
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-input.cc119
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-plan.cc227
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-plan.hh85
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-private.hh62
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.cc339
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.h83
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/hb-uniscribe.cc2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/main.cc2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/test-buffer-serialize.cc2
-rw-r--r--Build/source/libs/harfbuzz/harfbuzz-src/src/test-unicode-ranges.cc67
-rw-r--r--Build/source/libs/harfbuzz/include/Makefile.am1
-rw-r--r--Build/source/libs/harfbuzz/include/Makefile.in12
-rw-r--r--Build/source/libs/harfbuzz/version.ac2
114 files changed, 13175 insertions, 2170 deletions
diff --git a/Build/source/libs/README b/Build/source/libs/README
index 37b028e7cb1..3bcce12c104 100644
--- a/Build/source/libs/README
+++ b/Build/source/libs/README
@@ -24,7 +24,7 @@ gmp 6.1.2 - checked 16dec16
graphite2 1.3.11 - checked 05mar18
http://sourceforge.net/projects/silgraphite/files/graphite2/
-harfbuzz 1.7.5 - checked 31jan18
+harfbuzz 1.7.6 - checked 07mar18
http://www.freedesktop.org/software/harfbuzz/release/
icu 60.2 - checked 11jan18
diff --git a/Build/source/libs/harfbuzz/ChangeLog b/Build/source/libs/harfbuzz/ChangeLog
index 0b079e98408..cb2556c0715 100644
--- a/Build/source/libs/harfbuzz/ChangeLog
+++ b/Build/source/libs/harfbuzz/ChangeLog
@@ -1,3 +1,8 @@
+2018-03-07 Akira Kakuto <kakuto@fuk.kindai.ac.jp>
+
+ Import harfbuzz-1.7.6.
+ * Makefile.am, version.ac, include/Makefile.am: Adjusted.
+
2018-01-31 Akira Kakuto <kakuto@fuk.kindai.ac.jp>
Import harfbuzz-1.7.5.
diff --git a/Build/source/libs/harfbuzz/Makefile.am b/Build/source/libs/harfbuzz/Makefile.am
index fa7143c29fd..fcd01b7cf73 100644
--- a/Build/source/libs/harfbuzz/Makefile.am
+++ b/Build/source/libs/harfbuzz/Makefile.am
@@ -31,6 +31,10 @@ AM_CPPFLAGS = -DHB_NO_MT -DHB_NO_UNICODE_FUNCS -DHAVE_FALLBACK=1 \
-I$(top_srcdir)/$(HARFBUZZ_SRC)
libharfbuzz_dependencies =
libharfbuzz_a_SOURCES = \
+ @HARFBUZZ_TREE@/src/dump-indic-data.cc \
+ @HARFBUZZ_TREE@/src/dump-khmer-data.cc \
+ @HARFBUZZ_TREE@/src/dump-myanmar-data.cc \
+ @HARFBUZZ_TREE@/src/dump-use-data.cc \
@HARFBUZZ_TREE@/src/hb-atomic-private.hh \
@HARFBUZZ_TREE@/src/hb-blob.cc \
@HARFBUZZ_TREE@/src/hb-buffer-deserialize-json.hh \
@@ -50,16 +54,24 @@ libharfbuzz_a_SOURCES = \
@HARFBUZZ_TREE@/src/hb-object-private.hh \
@HARFBUZZ_TREE@/src/hb-open-file-private.hh \
@HARFBUZZ_TREE@/src/hb-open-type-private.hh \
- @HARFBUZZ_TREE@/src/hb-ot-cbdt-table.hh \
+ @HARFBUZZ_TREE@/src/hb-ot-color-cbdt-table.hh \
+ @HARFBUZZ_TREE@/src/hb-ot-color-colr-table.hh \
+ @HARFBUZZ_TREE@/src/hb-ot-color-cpal-table.hh \
+ @HARFBUZZ_TREE@/src/hb-ot-color.cc \
+ @HARFBUZZ_TREE@/src/hb-ot-hdmx-table.hh \
@HARFBUZZ_TREE@/src/hb-ot-head-table.hh \
@HARFBUZZ_TREE@/src/hb-ot-hhea-table.hh \
@HARFBUZZ_TREE@/src/hb-ot-hmtx-table.hh \
@HARFBUZZ_TREE@/src/hb-ot-kern-table.hh \
+ @HARFBUZZ_TREE@/src/hb-ot-layout-base-table.hh \
@HARFBUZZ_TREE@/src/hb-ot-maxp-table.hh \
@HARFBUZZ_TREE@/src/hb-ot-name-table.hh \
@HARFBUZZ_TREE@/src/hb-ot-os2-table.hh \
+ @HARFBUZZ_TREE@/src/hb-ot-os2-unicode-ranges.hh \
@HARFBUZZ_TREE@/src/hb-ot-post-macroman.hh \
@HARFBUZZ_TREE@/src/hb-ot-post-table.hh \
+ @HARFBUZZ_TREE@/src/hb-ot-shape-complex-khmer-private.hh \
+ @HARFBUZZ_TREE@/src/hb-ot-shape-complex-myanmar-private.hh \
@HARFBUZZ_TREE@/src/hb-ot-var-mvar-table.hh \
@HARFBUZZ_TREE@/src/hb-ot-tag.cc \
@HARFBUZZ_TREE@/src/hb-private.hh \
@@ -74,6 +86,14 @@ libharfbuzz_a_SOURCES = \
@HARFBUZZ_TREE@/src/hb-shaper-private.hh \
@HARFBUZZ_TREE@/src/hb-shaper.cc \
@HARFBUZZ_TREE@/src/hb-string-array.hh \
+ @HARFBUZZ_TREE@/src/hb-subset-glyf.cc \
+ @HARFBUZZ_TREE@/src/hb-subset-glyf.hh \
+ @HARFBUZZ_TREE@/src/hb-subset-input.cc \
+ @HARFBUZZ_TREE@/src/hb-subset-plan.cc \
+ @HARFBUZZ_TREE@/src/hb-subset-plan.hh \
+ @HARFBUZZ_TREE@/src/hb-subset-private.hh \
+ @HARFBUZZ_TREE@/src/hb-subset.cc \
+ @HARFBUZZ_TREE@/src/hb-subset.h \
@HARFBUZZ_TREE@/src/hb-unicode-private.hh \
@HARFBUZZ_TREE@/src/hb-unicode.cc \
@HARFBUZZ_TREE@/src/hb-utf-private.hh \
diff --git a/Build/source/libs/harfbuzz/Makefile.in b/Build/source/libs/harfbuzz/Makefile.in
index c0229775103..b03404134df 100644
--- a/Build/source/libs/harfbuzz/Makefile.in
+++ b/Build/source/libs/harfbuzz/Makefile.in
@@ -120,18 +120,28 @@ am__v_AR_1 =
libharfbuzz_a_AR = $(AR) $(ARFLAGS)
libharfbuzz_a_LIBADD =
am__dirstamp = $(am__leading_dot)dirstamp
-am_libharfbuzz_a_OBJECTS = @HARFBUZZ_TREE@/src/hb-blob.$(OBJEXT) \
+am_libharfbuzz_a_OBJECTS = \
+ @HARFBUZZ_TREE@/src/dump-indic-data.$(OBJEXT) \
+ @HARFBUZZ_TREE@/src/dump-khmer-data.$(OBJEXT) \
+ @HARFBUZZ_TREE@/src/dump-myanmar-data.$(OBJEXT) \
+ @HARFBUZZ_TREE@/src/dump-use-data.$(OBJEXT) \
+ @HARFBUZZ_TREE@/src/hb-blob.$(OBJEXT) \
@HARFBUZZ_TREE@/src/hb-buffer-serialize.$(OBJEXT) \
@HARFBUZZ_TREE@/src/hb-buffer.$(OBJEXT) \
@HARFBUZZ_TREE@/src/hb-common.$(OBJEXT) \
@HARFBUZZ_TREE@/src/hb-face.$(OBJEXT) \
@HARFBUZZ_TREE@/src/hb-fallback-shape.$(OBJEXT) \
@HARFBUZZ_TREE@/src/hb-font.$(OBJEXT) \
+ @HARFBUZZ_TREE@/src/hb-ot-color.$(OBJEXT) \
@HARFBUZZ_TREE@/src/hb-ot-tag.$(OBJEXT) \
@HARFBUZZ_TREE@/src/hb-set.$(OBJEXT) \
@HARFBUZZ_TREE@/src/hb-shape.$(OBJEXT) \
@HARFBUZZ_TREE@/src/hb-shape-plan.$(OBJEXT) \
@HARFBUZZ_TREE@/src/hb-shaper.$(OBJEXT) \
+ @HARFBUZZ_TREE@/src/hb-subset-glyf.$(OBJEXT) \
+ @HARFBUZZ_TREE@/src/hb-subset-input.$(OBJEXT) \
+ @HARFBUZZ_TREE@/src/hb-subset-plan.$(OBJEXT) \
+ @HARFBUZZ_TREE@/src/hb-subset.$(OBJEXT) \
@HARFBUZZ_TREE@/src/hb-unicode.$(OBJEXT) \
@HARFBUZZ_TREE@/src/hb-warning.$(OBJEXT) \
@HARFBUZZ_TREE@/src/hb-ot-font.$(OBJEXT) \
@@ -649,7 +659,11 @@ AM_CPPFLAGS = -DHB_NO_MT -DHB_NO_UNICODE_FUNCS -DHAVE_FALLBACK=1 \
-I$(top_srcdir)/$(HARFBUZZ_SRC) $(ICU_INCLUDES) \
$(GRAPHITE2_INCLUDES)
libharfbuzz_dependencies = $(ICU_DEPEND) $(GRAPHITE2_DEPEND)
-libharfbuzz_a_SOURCES = @HARFBUZZ_TREE@/src/hb-atomic-private.hh \
+libharfbuzz_a_SOURCES = @HARFBUZZ_TREE@/src/dump-indic-data.cc \
+ @HARFBUZZ_TREE@/src/dump-khmer-data.cc \
+ @HARFBUZZ_TREE@/src/dump-myanmar-data.cc \
+ @HARFBUZZ_TREE@/src/dump-use-data.cc \
+ @HARFBUZZ_TREE@/src/hb-atomic-private.hh \
@HARFBUZZ_TREE@/src/hb-blob.cc \
@HARFBUZZ_TREE@/src/hb-buffer-deserialize-json.hh \
@HARFBUZZ_TREE@/src/hb-buffer-deserialize-text.hh \
@@ -668,16 +682,24 @@ libharfbuzz_a_SOURCES = @HARFBUZZ_TREE@/src/hb-atomic-private.hh \
@HARFBUZZ_TREE@/src/hb-object-private.hh \
@HARFBUZZ_TREE@/src/hb-open-file-private.hh \
@HARFBUZZ_TREE@/src/hb-open-type-private.hh \
- @HARFBUZZ_TREE@/src/hb-ot-cbdt-table.hh \
+ @HARFBUZZ_TREE@/src/hb-ot-color-cbdt-table.hh \
+ @HARFBUZZ_TREE@/src/hb-ot-color-colr-table.hh \
+ @HARFBUZZ_TREE@/src/hb-ot-color-cpal-table.hh \
+ @HARFBUZZ_TREE@/src/hb-ot-color.cc \
+ @HARFBUZZ_TREE@/src/hb-ot-hdmx-table.hh \
@HARFBUZZ_TREE@/src/hb-ot-head-table.hh \
@HARFBUZZ_TREE@/src/hb-ot-hhea-table.hh \
@HARFBUZZ_TREE@/src/hb-ot-hmtx-table.hh \
@HARFBUZZ_TREE@/src/hb-ot-kern-table.hh \
+ @HARFBUZZ_TREE@/src/hb-ot-layout-base-table.hh \
@HARFBUZZ_TREE@/src/hb-ot-maxp-table.hh \
@HARFBUZZ_TREE@/src/hb-ot-name-table.hh \
@HARFBUZZ_TREE@/src/hb-ot-os2-table.hh \
+ @HARFBUZZ_TREE@/src/hb-ot-os2-unicode-ranges.hh \
@HARFBUZZ_TREE@/src/hb-ot-post-macroman.hh \
@HARFBUZZ_TREE@/src/hb-ot-post-table.hh \
+ @HARFBUZZ_TREE@/src/hb-ot-shape-complex-khmer-private.hh \
+ @HARFBUZZ_TREE@/src/hb-ot-shape-complex-myanmar-private.hh \
@HARFBUZZ_TREE@/src/hb-ot-var-mvar-table.hh \
@HARFBUZZ_TREE@/src/hb-ot-tag.cc \
@HARFBUZZ_TREE@/src/hb-private.hh \
@@ -691,6 +713,14 @@ libharfbuzz_a_SOURCES = @HARFBUZZ_TREE@/src/hb-atomic-private.hh \
@HARFBUZZ_TREE@/src/hb-shaper-private.hh \
@HARFBUZZ_TREE@/src/hb-shaper.cc \
@HARFBUZZ_TREE@/src/hb-string-array.hh \
+ @HARFBUZZ_TREE@/src/hb-subset-glyf.cc \
+ @HARFBUZZ_TREE@/src/hb-subset-glyf.hh \
+ @HARFBUZZ_TREE@/src/hb-subset-input.cc \
+ @HARFBUZZ_TREE@/src/hb-subset-plan.cc \
+ @HARFBUZZ_TREE@/src/hb-subset-plan.hh \
+ @HARFBUZZ_TREE@/src/hb-subset-private.hh \
+ @HARFBUZZ_TREE@/src/hb-subset.cc \
+ @HARFBUZZ_TREE@/src/hb-subset.h \
@HARFBUZZ_TREE@/src/hb-unicode-private.hh \
@HARFBUZZ_TREE@/src/hb-unicode.cc \
@HARFBUZZ_TREE@/src/hb-utf-private.hh \
@@ -826,6 +856,18 @@ clean-noinstLIBRARIES:
@HARFBUZZ_TREE@/src/$(DEPDIR)/$(am__dirstamp):
@$(MKDIR_P) @HARFBUZZ_TREE@/src/$(DEPDIR)
@: > @HARFBUZZ_TREE@/src/$(DEPDIR)/$(am__dirstamp)
+@HARFBUZZ_TREE@/src/dump-indic-data.$(OBJEXT): \
+ @HARFBUZZ_TREE@/src/$(am__dirstamp) \
+ @HARFBUZZ_TREE@/src/$(DEPDIR)/$(am__dirstamp)
+@HARFBUZZ_TREE@/src/dump-khmer-data.$(OBJEXT): \
+ @HARFBUZZ_TREE@/src/$(am__dirstamp) \
+ @HARFBUZZ_TREE@/src/$(DEPDIR)/$(am__dirstamp)
+@HARFBUZZ_TREE@/src/dump-myanmar-data.$(OBJEXT): \
+ @HARFBUZZ_TREE@/src/$(am__dirstamp) \
+ @HARFBUZZ_TREE@/src/$(DEPDIR)/$(am__dirstamp)
+@HARFBUZZ_TREE@/src/dump-use-data.$(OBJEXT): \
+ @HARFBUZZ_TREE@/src/$(am__dirstamp) \
+ @HARFBUZZ_TREE@/src/$(DEPDIR)/$(am__dirstamp)
@HARFBUZZ_TREE@/src/hb-blob.$(OBJEXT): \
@HARFBUZZ_TREE@/src/$(am__dirstamp) \
@HARFBUZZ_TREE@/src/$(DEPDIR)/$(am__dirstamp)
@@ -847,6 +889,9 @@ clean-noinstLIBRARIES:
@HARFBUZZ_TREE@/src/hb-font.$(OBJEXT): \
@HARFBUZZ_TREE@/src/$(am__dirstamp) \
@HARFBUZZ_TREE@/src/$(DEPDIR)/$(am__dirstamp)
+@HARFBUZZ_TREE@/src/hb-ot-color.$(OBJEXT): \
+ @HARFBUZZ_TREE@/src/$(am__dirstamp) \
+ @HARFBUZZ_TREE@/src/$(DEPDIR)/$(am__dirstamp)
@HARFBUZZ_TREE@/src/hb-ot-tag.$(OBJEXT): \
@HARFBUZZ_TREE@/src/$(am__dirstamp) \
@HARFBUZZ_TREE@/src/$(DEPDIR)/$(am__dirstamp)
@@ -862,6 +907,18 @@ clean-noinstLIBRARIES:
@HARFBUZZ_TREE@/src/hb-shaper.$(OBJEXT): \
@HARFBUZZ_TREE@/src/$(am__dirstamp) \
@HARFBUZZ_TREE@/src/$(DEPDIR)/$(am__dirstamp)
+@HARFBUZZ_TREE@/src/hb-subset-glyf.$(OBJEXT): \
+ @HARFBUZZ_TREE@/src/$(am__dirstamp) \
+ @HARFBUZZ_TREE@/src/$(DEPDIR)/$(am__dirstamp)
+@HARFBUZZ_TREE@/src/hb-subset-input.$(OBJEXT): \
+ @HARFBUZZ_TREE@/src/$(am__dirstamp) \
+ @HARFBUZZ_TREE@/src/$(DEPDIR)/$(am__dirstamp)
+@HARFBUZZ_TREE@/src/hb-subset-plan.$(OBJEXT): \
+ @HARFBUZZ_TREE@/src/$(am__dirstamp) \
+ @HARFBUZZ_TREE@/src/$(DEPDIR)/$(am__dirstamp)
+@HARFBUZZ_TREE@/src/hb-subset.$(OBJEXT): \
+ @HARFBUZZ_TREE@/src/$(am__dirstamp) \
+ @HARFBUZZ_TREE@/src/$(DEPDIR)/$(am__dirstamp)
@HARFBUZZ_TREE@/src/hb-unicode.$(OBJEXT): \
@HARFBUZZ_TREE@/src/$(am__dirstamp) \
@HARFBUZZ_TREE@/src/$(DEPDIR)/$(am__dirstamp)
@@ -956,6 +1013,10 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hbtest-dummy.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hbtest-hbtest.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/dump-indic-data.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/dump-khmer-data.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/dump-myanmar-data.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/dump-use-data.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-blob.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-buffer-serialize.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-buffer.Po@am__quote@
@@ -965,6 +1026,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-font.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-graphite2.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-icu.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-ot-color.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-ot-font.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-ot-layout.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-ot-map.Po@am__quote@
@@ -990,6 +1052,10 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-shape-plan.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-shape.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-shaper.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset-glyf.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset-input.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset-plan.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-subset.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-unicode.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@@HARFBUZZ_TREE@/src/$(DEPDIR)/hb-warning.Po@am__quote@
diff --git a/Build/source/libs/harfbuzz/TLpatches/ChangeLog b/Build/source/libs/harfbuzz/TLpatches/ChangeLog
index 2b5461a8cde..e2f853fe62f 100644
--- a/Build/source/libs/harfbuzz/TLpatches/ChangeLog
+++ b/Build/source/libs/harfbuzz/TLpatches/ChangeLog
@@ -1,3 +1,8 @@
+2018-03-07 Akira Kakuto <kakuto@fuk.kindai.ac.jp>
+
+ Imported harfbuzz-1.7.6 source tree from:
+ http://www.freedesktop.org/software/harfbuzz/release/
+
2018-01-31 Akira Kakuto <kakuto@fuk.kindai.ac.jp>
Imported harfbuzz-1.7.5 source tree from:
diff --git a/Build/source/libs/harfbuzz/TLpatches/TL-Changes b/Build/source/libs/harfbuzz/TLpatches/TL-Changes
index 9dc1503638e..200ff39b9ea 100644
--- a/Build/source/libs/harfbuzz/TLpatches/TL-Changes
+++ b/Build/source/libs/harfbuzz/TLpatches/TL-Changes
@@ -1,4 +1,4 @@
-Changes applied to the harfbuzz-1.7.5/ tree as obtained from:
+Changes applied to the harfbuzz-1.7.6/ tree as obtained from:
http://www.freedesktop.org/software/harfbuzz/release/
Removed:
diff --git a/Build/source/libs/harfbuzz/configure b/Build/source/libs/harfbuzz/configure
index c07afa0794c..4b0d461b912 100755
--- a/Build/source/libs/harfbuzz/configure
+++ b/Build/source/libs/harfbuzz/configure
@@ -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.7.5.
+# Generated by GNU Autoconf 2.69 for harfbuzz (TeX Live) 1.7.6.
#
# Report bugs to <tex-k@tug.org>.
#
@@ -580,8 +580,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='harfbuzz (TeX Live)'
PACKAGE_TARNAME='harfbuzz--tex-live-'
-PACKAGE_VERSION='1.7.5'
-PACKAGE_STRING='harfbuzz (TeX Live) 1.7.5'
+PACKAGE_VERSION='1.7.6'
+PACKAGE_STRING='harfbuzz (TeX Live) 1.7.6'
PACKAGE_BUGREPORT='tex-k@tug.org'
PACKAGE_URL=''
@@ -1317,7 +1317,7 @@ if test "$ac_init_help" = "long"; then
# 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.7.5 to adapt to many kinds of systems.
+\`configure' configures harfbuzz (TeX Live) 1.7.6 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1388,7 +1388,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of harfbuzz (TeX Live) 1.7.5:";;
+ short | recursive ) echo "Configuration of harfbuzz (TeX Live) 1.7.6:";;
esac
cat <<\_ACEOF
@@ -1495,7 +1495,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-harfbuzz (TeX Live) configure 1.7.5
+harfbuzz (TeX Live) configure 1.7.6
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2085,7 +2085,7 @@ cat >config.log <<_ACEOF
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.7.5, which was
+It was created by harfbuzz (TeX Live) $as_me 1.7.6, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -4008,7 +4008,7 @@ fi
# Define the identity of the package.
PACKAGE='harfbuzz--tex-live-'
- VERSION='1.7.5'
+ VERSION='1.7.6'
# Some tools Automake needs.
@@ -4202,8 +4202,8 @@ WARNING_CFLAGS=$kpse_cv_warning_cflags
HB_VERSION_MAJOR=1
HB_VERSION_MINOR=7
-HB_VERSION_MICRO=5
-HB_VERSION=1.7.5
+HB_VERSION_MICRO=6
+HB_VERSION=1.7.6
ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
@@ -8065,7 +8065,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# 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.7.5, which was
+This file was extended by harfbuzz (TeX Live) $as_me 1.7.6, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -8131,7 +8131,7 @@ _ACEOF
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.7.5
+harfbuzz (TeX Live) config.status 1.7.6
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/CMakeLists.txt b/Build/source/libs/harfbuzz/harfbuzz-src/CMakeLists.txt
index 3a59366691c..defd5d6c62b 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/CMakeLists.txt
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/CMakeLists.txt
@@ -91,6 +91,7 @@ add_definitions(-DHAVE_OT)
add_definitions(-DHAVE_FALLBACK)
+## Functions and headers
include (CheckFunctionExists)
include (CheckIncludeFile)
macro (check_funcs) # Similar to AC_CHECK_FUNCS of autotools
@@ -102,16 +103,15 @@ macro (check_funcs) # Similar to AC_CHECK_FUNCS of autotools
endif ()
endforeach ()
endmacro ()
-check_funcs(atexit mprotect sysconf mmap strtod_l) #TODO: getpagesize newlocale isatty
-
-check_include_file(unistd.h HAVE_UNIST_H)
-if (${HAVE_UNIST_H})
- add_definitions(-DHAVE_UNIST_H)
+check_funcs(atexit mprotect sysconf getpagesize mmap isatty newlocale strtod_l)
+check_include_file(unistd.h HAVE_UNISTD_H)
+if (${HAVE_UNISTD_H})
+ add_definitions(-DHAVE_UNISTD_H)
+endif ()
+check_include_file(sys/mman.h HAVE_SYS_MMAN_H)
+if (${HAVE_SYS_MMAN_H})
+ add_definitions(-DHAVE_SYS_MMAN_H)
endif ()
-#check_include_file(sys/mman.h HAVE_SYS_MMAN_H)
-#if (${HAVE_SYS_MMAN_H})
-# add_definitions(-DHAVE_SYS_MMAN_H)
-#endif ()
check_include_file(xlocale.h HAVE_XLOCALE_H)
if (${HAVE_XLOCALE_H})
add_definitions(-DHAVE_XLOCALE_H)
@@ -132,12 +132,11 @@ endif ()
## Detect if we are running inside a distribution or regular repository folder
-set (IN_HB_DIST FALSE)
-if (EXISTS "${PROJECT_SOURCE_DIR}/ChangeLog")
- # perhaps we are on dist directory
- set (IN_HB_DIST TRUE)
- set (HB_VERSION_H "${PROJECT_SOURCE_DIR}/src/hb-version.h")
-endif ()
+# if (EXISTS "${PROJECT_SOURCE_DIR}/ChangeLog")
+# # perhaps we are on dist directory
+# set (IN_HB_DIST TRUE)
+# #set (HB_VERSION_H "${PROJECT_SOURCE_DIR}/src/hb-version.h")
+# endif ()
## Extract variables from Makefile files
@@ -171,20 +170,28 @@ add_prefix_to_list(HB_OT_sources "${PROJECT_SOURCE_DIR}/src/")
extract_make_variable(HB_OT_headers ${SRCSOURCES})
add_prefix_to_list(HB_OT_headers "${PROJECT_SOURCE_DIR}/src/")
+extract_make_variable(HB_SUBSET_sources ${SRCSOURCES})
+add_prefix_to_list(HB_SUBSET_sources "${PROJECT_SOURCE_DIR}/src/")
+
+extract_make_variable(HB_SUBSET_headers ${SRCSOURCES})
+add_prefix_to_list(HB_SUBSET_headers "${PROJECT_SOURCE_DIR}/src/")
+
extract_make_variable(HB_BASE_RAGEL_GENERATED_sources ${SRCSOURCES})
extract_make_variable(HB_OT_RAGEL_GENERATED_sources ${SRCSOURCES})
-if (IN_HB_DIST)
+#if (IN_HB_DIST)
add_prefix_to_list(HB_BASE_RAGEL_GENERATED_sources "${PROJECT_SOURCE_DIR}/src/")
add_prefix_to_list(HB_OT_RAGEL_GENERATED_sources "${PROJECT_SOURCE_DIR}/src/")
-else ()
- add_prefix_to_list(HB_BASE_RAGEL_GENERATED_sources "${PROJECT_BINARY_DIR}/src/")
- add_prefix_to_list(HB_OT_RAGEL_GENERATED_sources "${PROJECT_BINARY_DIR}/src/")
-endif ()
+#else ()
+# add_prefix_to_list(HB_BASE_RAGEL_GENERATED_sources "${PROJECT_BINARY_DIR}/src/")
+# add_prefix_to_list(HB_OT_RAGEL_GENERATED_sources "${PROJECT_BINARY_DIR}/src/")
+#endif ()
extract_make_variable(HB_VIEW_sources ${UTILSOURCES})
add_prefix_to_list(HB_VIEW_sources "${PROJECT_SOURCE_DIR}/util/")
extract_make_variable(HB_SHAPE_sources ${UTILSOURCES})
add_prefix_to_list(HB_SHAPE_sources "${PROJECT_SOURCE_DIR}/util/")
+extract_make_variable(HB_SUBSET_CLI_sources ${UTILSOURCES})
+add_prefix_to_list(HB_SUBSET_CLI_sources "${PROJECT_SOURCE_DIR}/util/")
extract_make_variable(HB_OT_SHAPE_CLOSURE_sources ${UTILSOURCES})
add_prefix_to_list(HB_OT_SHAPE_CLOSURE_sources "${PROJECT_SOURCE_DIR}/util/")
@@ -201,41 +208,33 @@ set (HB_VERSION_MICRO ${CMAKE_MATCH_4})
## Define ragel tasks
-if (NOT IN_HB_DIST)
- find_program(RAGEL "ragel" CMAKE_FIND_ROOT_PATH_BOTH)
+# if (NOT IN_HB_DIST)
+# foreach (ragel_output IN ITEMS ${HB_BASE_RAGEL_GENERATED_sources} ${HB_OT_RAGEL_GENERATED_sources})
+# string(REGEX MATCH "([^/]+)\\.hh" temp ${ragel_output})
+# set (target_name ${CMAKE_MATCH_1})
+# add_custom_command(OUTPUT ${ragel_output}
+# COMMAND ${RAGEL} -G2 -o ${ragel_output} ${PROJECT_SOURCE_DIR}/src/${target_name}.rl -I ${PROJECT_SOURCE_DIR} ${ARGN}
+# DEPENDS ${PROJECT_SOURCE_DIR}/src/${target_name}.rl
+# )
+# add_custom_target(harfbuzz_${target_name} DEPENDS ${PROJECT_BINARY_DIR}/src/${target_name})
+# endforeach ()
- if (RAGEL)
- message(STATUS "ragel found at: ${RAGEL}")
- else ()
- message(FATAL_ERROR "ragel not found, get it here -- http://www.complang.org/ragel/ or, use harfbuzz releases https://github.com/harfbuzz/harfbuzz/releases")
- endif ()
-
- foreach (ragel_output IN ITEMS ${HB_BASE_RAGEL_GENERATED_sources} ${HB_OT_RAGEL_GENERATED_sources})
- string(REGEX MATCH "([^/]+)\\.hh" temp ${ragel_output})
- set (target_name ${CMAKE_MATCH_1})
- add_custom_command(OUTPUT ${ragel_output}
- COMMAND ${RAGEL} -G2 -o ${ragel_output} ${PROJECT_SOURCE_DIR}/src/${target_name}.rl -I ${PROJECT_SOURCE_DIR} ${ARGN}
- DEPENDS ${PROJECT_SOURCE_DIR}/src/${target_name}.rl
- )
- add_custom_target(harfbuzz_${target_name} DEPENDS ${PROJECT_BINARY_DIR}/src/${target_name})
- endforeach ()
-
- mark_as_advanced(RAGEL)
-endif ()
+# mark_as_advanced(RAGEL)
+# endif ()
## Generate hb-version.h
-if (NOT IN_HB_DIST)
- set (HB_VERSION_H_IN "${PROJECT_SOURCE_DIR}/src/hb-version.h.in")
- set (HB_VERSION_H "${PROJECT_BINARY_DIR}/src/hb-version.h")
- set_source_files_properties("${HB_VERSION_H}" PROPERTIES GENERATED true)
- configure_file("${HB_VERSION_H_IN}" "${HB_VERSION_H}.tmp" @ONLY)
- execute_process(COMMAND "${CMAKE_COMMAND}" -E copy_if_different
- "${HB_VERSION_H}.tmp"
- "${HB_VERSION_H}"
- )
- file(REMOVE "${HB_VERSION_H}.tmp")
-endif ()
+# if (NOT IN_HB_DIST)
+# set (HB_VERSION_H_IN "${PROJECT_SOURCE_DIR}/src/hb-version.h.in")
+# set (HB_VERSION_H "${PROJECT_BINARY_DIR}/src/hb-version.h")
+# set_source_files_properties("${HB_VERSION_H}" PROPERTIES GENERATED true)
+# configure_file("${HB_VERSION_H_IN}" "${HB_VERSION_H}.tmp" @ONLY)
+# execute_process(COMMAND "${CMAKE_COMMAND}" -E copy_if_different
+# "${HB_VERSION_H}.tmp"
+# "${HB_VERSION_H}"
+# )
+# file(REMOVE "${HB_VERSION_H}.tmp")
+# endif ()
## Define sources and headers of the project
@@ -248,15 +247,23 @@ set (project_sources
${HB_OT_RAGEL_GENERATED_sources}
)
+set (subset_project_sources
+ ${HB_SUBSET_sources}
+)
+
set (project_extra_sources)
set (project_headers
- ${HB_VERSION_H}
+ #${HB_VERSION_H}
${HB_BASE_headers}
${HB_OT_headers}
)
+set (subset_project_headers
+ ${HB_SUBSET_headers}
+)
+
## Find and include needed header folders and libraries
if (HB_HAVE_FREETYPE)
@@ -519,25 +526,28 @@ endif ()
add_library(harfbuzz ${project_sources} ${project_extra_sources} ${project_headers})
target_link_libraries(harfbuzz ${THIRD_PARTY_LIBS})
+## Define harfbuzz-subset library
+add_library(harfbuzz-subset ${subset_project_sources} ${subset_project_headers})
+add_dependencies(harfbuzz-subset harfbuzz)
+target_link_libraries(harfbuzz-subset harfbuzz ${THIRD_PARTY_LIBS})
+
if (UNIX OR MINGW)
# Make symbols link locally
link_libraries(-Bsymbolic-functions)
- # Make sure we don't link to libstdc++
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" OR CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
+ # Make sure we don't link to libstdc++
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti -fno-exceptions")
set (CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "m") # libm
set (CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "")
set_target_properties(harfbuzz PROPERTIES LINKER_LANGUAGE C)
- endif ()
+ set_target_properties(harfbuzz-subset PROPERTIES LINKER_LANGUAGE C)
- # No threadsafe statics as we do it ourselves
- if (BUILD_SHARED_LIBS)
+ # No threadsafe statics as we do it ourselves
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-threadsafe-statics")
endif ()
endif ()
-
## Define harfbuzz-gobject library
if (HB_HAVE_GOBJECT)
add_library(harfbuzz-gobject
@@ -708,6 +718,9 @@ if (HB_BUILD_UTILS)
add_executable(hb-shape ${HB_SHAPE_sources})
target_link_libraries(hb-shape harfbuzz)
+ add_executable(hb-subset ${HB_SUBSET_CLI_sources})
+ target_link_libraries(hb-subset harfbuzz harfbuzz-subset)
+
add_executable(hb-ot-shape-closure ${HB_OT_SHAPE_CLOSURE_sources})
target_link_libraries(hb-ot-shape-closure harfbuzz)
@@ -785,7 +798,7 @@ endif ()
## src/ executables
-foreach (prog main test test-would-substitute test-size-params test-buffer-serialize hb-ot-tag)
+foreach (prog main test test-would-substitute test-size-params test-buffer-serialize hb-ot-tag test-unicode-ranges)
set (prog_name ${prog})
if (${prog_name} STREQUAL "test")
# test can not be used as a valid executable name on cmake, lets special case it
@@ -796,7 +809,6 @@ foreach (prog main test test-would-substitute test-size-params test-buffer-seria
endforeach ()
set_target_properties(hb-ot-tag PROPERTIES COMPILE_FLAGS "-DMAIN")
-
## Tests
if (UNIX OR MINGW)
if (BUILD_SHARED_LIBS)
@@ -812,10 +824,12 @@ if (UNIX OR MINGW)
)
add_test(NAME check-libstdc++.sh COMMAND ${PROJECT_SOURCE_DIR}/src/check-libstdc++.sh)
add_test(NAME check-symbols.sh COMMAND ${PROJECT_SOURCE_DIR}/src/check-symbols.sh)
- add_test(NAME check-defs.sh COMMAND ${PROJECT_SOURCE_DIR}/src/check-defs.sh)
- set_tests_properties(check-static-inits.sh check-libstdc++.sh check-symbols.sh check-defs.sh
- PROPERTIES ENVIRONMENT "libs=.;srcdir=${PROJECT_SOURCE_DIR}/src")
+ set_tests_properties(
+ check-static-inits.sh check-libstdc++.sh check-symbols.sh
+ PROPERTIES
+ ENVIRONMENT "libs=.;srcdir=${PROJECT_SOURCE_DIR}/src"
+ SKIP_RETURN_CODE 77)
endif ()
add_test(NAME check-c-linkage-decls.sh COMMAND ./check-c-linkage-decls.sh)
@@ -824,7 +838,9 @@ if (UNIX OR MINGW)
add_test(NAME check-includes.sh COMMAND ./check-includes.sh)
set_tests_properties(
check-c-linkage-decls.sh check-header-guards.sh check-externs.sh check-includes.sh
- PROPERTIES WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/src)
+ PROPERTIES
+ WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/src
+ SKIP_RETURN_CODE 77)
endif ()
# Needs to come last so that variables defined above are passed to
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog b/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog
index f984c138bf4..02300c32d03 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/ChangeLog
@@ -1,3 +1,5356 @@
+commit ac2ece3e153167224c85cc384e2826ea9711a8b5
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Mar 7 15:52:42 2018 +0100
+
+ [ot] Comment out AAT include
+
+ src/hb-ot-shape.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 23a9ac993862b4a9032d38e80491a769b7ee86da
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Mar 7 15:51:42 2018 +0100
+
+ Remove hb-ot-color.h
+
+ So I can make a release.
+
+ src/Makefile.sources | 1 -
+ src/hb-ot-color-cpal-table.hh | 48 +++++++++++++++++++++++++
+ src/hb-ot-color.h | 81
+ -------------------------------------------
+ src/hb-ot.h | 1 -
+ 4 files changed, 48 insertions(+), 83 deletions(-)
+
+commit 790a11700773dd664e4d5edac63c404c5ebce080
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Mar 7 15:31:15 2018 +0100
+
+ [ot] Remove hb-ot-base.h
+
+ BASE table API will go into hb-ot-layout.h.
+
+ src/Makefile.sources | 1 -
+ src/hb-ot-base.h | 56
+ ------------------------------------------
+ src/hb-ot-layout-base-table.hh | 1 -
+ src/hb-ot-layout.h | 16 ++++++++++++
+ src/hb-ot.h | 1 -
+ 5 files changed, 16 insertions(+), 59 deletions(-)
+
+commit f014a124f582215fa96afc28b534a1ca0bf17167
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Mar 7 10:49:26 2018 +0100
+
+ [set] Fix algebra
+
+ Was totally b0rked. Ouch!
+
+ Fixes https://github.com/harfbuzz/harfbuzz/issues/863
+
+ src/hb-set-private.hh | 20 +++++++++++++++++---
+ 1 file changed, 17 insertions(+), 3 deletions(-)
+
+commit 7587683cdce8ee9b7f07bae82aa1bb163e79ab92
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Mar 7 09:55:22 2018 +0100
+
+ [set] Minor
+
+ In preparation to fix https://github.com/harfbuzz/harfbuzz/issues/863
+
+ Binary operations are sets are completely broken. Ouch.
+
+ src/hb-set-private.hh | 21 ++++++++++++++-------
+ 1 file changed, 14 insertions(+), 7 deletions(-)
+
+commit e4cbb87bd3512c3a6e97ea3923ecd1b26b0a1251
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Mar 7 09:37:22 2018 +0100
+
+ Minor
+
+ src/hb-ot-color-colr-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit c6150333c29b458ed34858f24e94acc0f771aa0b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Mar 7 09:27:16 2018 +0100
+
+ Sign
+
+ src/test-unicode-ranges.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 9a6f9b4d4284f0378a71a181fe216d97c913669e
+Author: Garret Rieger <grieger@google.com>
+Date: Tue Mar 6 13:46:51 2018 -0800
+
+ [set] add a test demonstrating a bug in hb_set_union.
+
+ test/api/test-set.c | 10 ++++++++++
+ 1 file changed, 10 insertions(+)
+
+commit 9b4a5d7ef1ec068042e3c793845a4dbc3308d4b7
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Wed Mar 7 00:23:40 2018 +0330
+
+ [ci] Enable -Werror=unused (#862)
+
+ .travis.yml | 4 ++--
+ src/hb-ot-glyf-table.hh | 1 -
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+commit 54cbe6702c1e4c934c60512367abaf801294c1bb
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Tue Mar 6 16:41:08 2018 +0330
+
+ [ot-color] Further improvements on COLR/CPAL implementation (#859)
+
+ * Implemented a bsearch on get_base_glyph_record
+ * Made get_color_record_argb actually work
+
+ src/hb-ot-color-colr-table.hh | 35 ++++++++++++++-----------
+ src/hb-ot-color-cpal-table.hh | 59
+ +++++++++++++++----------------------------
+ src/hb-ot-color.h | 12 ++-------
+ 3 files changed, 42 insertions(+), 64 deletions(-)
+
+commit 18d14b8e0d5d28106800ebf835ff3155a4f4de7c
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Mon Mar 5 14:25:11 2018 +0330
+
+ [dev-run] an option to open using a GUI app
+
+ src/dev-run.sh | 22 ++++++++++++++++++----
+ 1 file changed, 18 insertions(+), 4 deletions(-)
+
+commit 1db83954948dfae3f75f61c535c5de1b3a843a69
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Mon Mar 5 13:02:50 2018 +0330
+
+ [ci] minor, bring back the removed assertion
+
+ .ci/run-coveralls.sh | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 5895fe3d4d0441dacf8989740cf4150193397796
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Mon Mar 5 12:58:34 2018 +0330
+
+ [ci] minor
+
+ .ci/trigger-coverity.sh | 6 ++----
+ 1 file changed, 2 insertions(+), 4 deletions(-)
+
+commit a3e29fd38f01b26b6306f9f7142a54cc7d6c6080
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sun Mar 4 02:56:27 2018 +0330
+
+ [aat/kerx] Add a TODO
+
+ src/hb-aat-layout-kerx-table.hh | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 0ef6ab25ab4456e387711ae246900486ad738d26
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sun Mar 4 02:47:26 2018 +0330
+
+ [ot-color] Move cbdt to the namespace (#860)
+
+ src/Makefile.sources | 2 +-
+ src/{hb-ot-cbdt-table.hh => hb-ot-color-cbdt-table.hh} | 6 +++---
+ src/hb-ot-font.cc | 3 ++-
+ 3 files changed, 6 insertions(+), 5 deletions(-)
+
+commit 6659cb56fae0c900ae88e95bedcb3b76234c8838
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sun Mar 4 02:31:53 2018 +0330
+
+ [ci] Remove --coverage as use of --enable-code-coverage
+
+ .travis.yml | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+commit 00dd321ace75ff0d1824cf75cd41490c5dd6ad76
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sat Mar 3 23:26:11 2018 +0330
+
+ [ci] Don't run coveralls on freetype folder
+
+ .travis.yml | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit f50aedd371f1a6894d1bf7732f017b51cbdd59bd
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sat Mar 3 23:17:36 2018 +0330
+
+ [ci] Remove failing check on run-coveralls
+
+ .ci/run-coveralls.sh | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit a0031c120e3ac5c059b81a004b9386fab3d662fc
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sat Mar 3 23:09:25 2018 +0330
+
+ Add lcov tool for coverage tests
+
+ .travis.yml | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit ecef95b21264347f9505e3ed4fb25ec7e4ccca5d
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sat Mar 3 23:03:13 2018 +0330
+
+ [ci] Enable code coverage on Travis Linux builds
+
+ .travis.yml | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit f7399796a1ed36cfc4f1ef7631584569baa80981
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sat Mar 3 22:55:09 2018 +0330
+
+ Enable coverage test on autotools (#857)
+
+ configure.ac | 1 +
+ m4/ax_code_coverage.m4 | 264
+ +++++++++++++++++++++++++++++++++++++++++++++++++
+ src/Makefile.am | 6 +-
+ 3 files changed, 269 insertions(+), 2 deletions(-)
+
+commit c446c23f0f09e541891b49184febdfc75cb3505f
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sat Mar 3 22:43:23 2018 +0330
+
+ [ot-color] Move the related tables to hb-ot-color-* (#858)
+
+ src/Makefile.sources | 4 ++--
+ src/{hb-ot-colr-table.hh => hb-ot-color-colr-table.hh} | 6 +++---
+ src/{hb-ot-cpal-table.hh => hb-ot-color-cpal-table.hh} | 6 +++---
+ src/hb-ot-color.cc | 4 ++--
+ src/hb-ot-layout.cc | 4 ++--
+ 5 files changed, 12 insertions(+), 12 deletions(-)
+
+commit 48ed15a2bcdc1999e2d39fdcb2644ba4c3beccfe
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sat Mar 3 22:00:29 2018 +0330
+
+ [COLR/CPAL] Provide enough helper for rasterization (#855)
+
+ src/hb-ot-colr-table.hh | 47
+ ++++++++++++++++++++++++++++++++++++++++++++---
+ src/hb-ot-cpal-table.hh | 18 +++++++++++++++---
+ 2 files changed, 59 insertions(+), 6 deletions(-)
+
+commit 432758a7ac3c1a857e67069f157efbf4ebf5521b
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sat Mar 3 01:05:59 2018 +0330
+
+ [COLR] Revert previous sanitization on the table
+
+ That sanitization wasn't right, firstLayerIndex is an index from
+ beginning of the Layer Records
+ not the table itself.
+
+ src/hb-ot-colr-table.hh | 23 ++++++-----------------
+ 1 file changed, 6 insertions(+), 17 deletions(-)
+
+commit 71b4598ea37b316571bae22ced2f1b38185c9f44
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Fri Mar 2 11:04:09 2018 +0330
+
+ [aat/kerx] Improve format 6 subtable
+
+ src/hb-aat-layout-kerx-table.hh | 14 +++++++++-----
+ 1 file changed, 9 insertions(+), 5 deletions(-)
+
+commit b73a5a1c240478616827529c94f0133018f9f790
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Fri Mar 2 00:07:26 2018 +0330
+
+ [aat/kerx] Make parsing of the table actually work (#850)
+
+ src/hb-aat-layout-kerx-table.hh | 298
+ +++++++++++++++++-----------------------
+ 1 file changed, 124 insertions(+), 174 deletions(-)
+
+commit a570edcde2f89e59b5ccd4867a8c0eed084bf35d
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Fri Mar 2 00:06:03 2018 +0330
+
+ [COLR] Sanitize BaseGlyphRecord (#854)
+
+ src/hb-ot-colr-table.hh | 27 ++++++++++++++++++---------
+ 1 file changed, 18 insertions(+), 9 deletions(-)
+
+commit 7e958646a4a825bfe3aac56ddb96100d68c5592c
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Thu Mar 1 10:27:18 2018 +0330
+
+ [CPAL] Fix version checking logic on sanitizer (#851)
+
+ src/hb-ot-cpal-table.hh | 14 ++++++--------
+ 1 file changed, 6 insertions(+), 8 deletions(-)
+
+commit bcf578fefe6d7af0a962329ceb9989ce61ec467d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 28 16:31:46 2018 -0800
+
+ [test] Add test suite for Brahmi Number Joiners
+
+ https://github.com/harfbuzz/harfbuzz/pull/660
+
+ .../fonts/1ed7e9064f008f62de6ff0207bb4dd29409597a5.ttf | Bin 0 ->
+ 2768 bytes
+ test/shaping/data/in-house/tests/use-syllable.tests | 1 +
+ test/shaping/record-test.sh | 2 +-
+ 3 files changed, 2 insertions(+), 1 deletion(-)
+
+commit b4ba71ea7ccce70e24138373774741c7f03dd24e
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Feb 28 15:44:00 2018 -0800
+
+ [subset] In subset integration test pass output through ots-sanitize
+ if present.
+
+ test/subset/run-tests.py | 25 +++++++++++++++++++++++--
+ 1 file changed, 23 insertions(+), 2 deletions(-)
+
+commit 588a4e0f9b2d71362503a274de7200f3eb4367f7
+Merge: 55a4dfa3 b3f1a045
+Author: rsheeter <rsheeter@google.com>
+Date: Wed Feb 28 13:52:29 2018 -0800
+
+ Merge pull request #845 from googlefonts/drophints
+
+ [subset] drop hints from composites
+
+commit b3f1a045a8b86747afce6bc154f2a166ea678efb
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 28 11:41:24 2018 -0800
+
+ [subset] kick the build
+
+ src/hb-subset-glyf.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 20d57399235b410d2bdc98103c8bb3dfd1c34176
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 28 11:15:08 2018 -0800
+
+ [subset] extract a method to flip off composite instruction flag
+
+ src/hb-subset-glyf.cc | 24 +++++++++++++++---------
+ 1 file changed, 15 insertions(+), 9 deletions(-)
+
+commit 55a4dfa374bae1db846c3b848b7e59fb0014b627
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Wed Feb 28 15:43:23 2018 +0330
+
+ Use old project location of coverity
+
+ https://github.com/harfbuzz/harfbuzz/commit/8089711a61687d565f207c56d3d2b658f514d7ab#commitcomment-27835452
+
+ .travis.yml | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 3821978bcd92cbdb607111452796e051c456f391
+Merge: 77227462 f671f7f0
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Wed Feb 28 13:30:17 2018 +0330
+
+ Merge pull request #847 from ebraminio/colr
+
+ [colr] Implement
+
+commit f671f7f0a8caa7b5763e00146e1ec4b9a7258227
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Wed Feb 28 13:19:40 2018 +0330
+
+ [colr] Implement
+
+ src/Makefile.sources | 1 +
+ src/hb-ot-color.cc | 9 +++++
+ src/hb-ot-color.h | 9 -----
+ src/hb-ot-colr-table.hh | 98
+ +++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-cpal-table.hh | 6 +--
+ src/hb-ot-layout-private.hh | 6 ++-
+ src/hb-ot-layout.cc | 11 +++--
+ 7 files changed, 122 insertions(+), 18 deletions(-)
+
+commit 772274625e9f17d726f2a1da8192ec3ec24793a3
+Merge: 0eec3315 5b9c2340
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Wed Feb 28 12:05:49 2018 +0330
+
+ Merge pull request #841 from ebraminio/color
+
+ Support CPAL table
+
+commit 0eec33154a418fba97a08be7169b59e748b7e785
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Wed Feb 28 11:53:39 2018 +0330
+
+ [cmake] cleanup (#846)
+
+ CMakeLists.txt | 70
+ ++++++++++++++++++++-----------------------------
+ test/api/CMakeLists.txt | 2 +-
+ 2 files changed, 30 insertions(+), 42 deletions(-)
+
+commit 5b9c234043d0483e53e9da5fe4afd7743190b538
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Tue Feb 27 22:56:17 2018 +0330
+
+ [CPAL] Refactor and address the reviews
+
+ NEWS | 3 +-
+ src/Makefile.am | 1 -
+ src/hb-ot-color.cc | 70 +++----------
+ src/hb-ot-color.h | 31 +++---
+ src/hb-ot-cpal-table.hh | 116
+ +++++++++++++++------
+ src/hb-ot-layout-private.hh | 3 +-
+ src/hb-ot-layout.cc | 5 +-
+ test/api/hb-test.h | 2 +
+ test/api/test-ot-color.c | 39 +++----
+ .../319f5d7ebffbefc5c5e6569f8cea73444d7a7268.ttf | Bin
+ .../e90374e5e439e00725b4fe7a8d73db57c5a97f82.ttf | Bin
+ 11 files changed, 141 insertions(+), 129 deletions(-)
+
+commit 6836a821428b714b9f2e95d5c4ebbd73867d9a53
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Tue Feb 27 20:51:12 2018 -0800
+
+ [subset] remove WE_HAVE_INSTRUCTIONS from composites when dropping
+ hints
+
+ src/hb-subset-glyf.cc | 12 +++++++++++-
+ 1 file changed, 11 insertions(+), 1 deletion(-)
+
+commit ffcb5cbf71b312cdd4606a3285e10e201ff5bccd
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Tue Feb 27 20:17:04 2018 -0800
+
+ [subset] update the test file for composite, fix an offset calculation
+
+ src/hb-ot-glyf-table.hh | 2 +-
+ test/api/fonts/Roboto-Regular.components.1fc.nohints.ttf | Bin 0 ->
+ 932 bytes
+ test/api/test-subset-glyf.c | 5 ++---
+ 3 files changed, 3 insertions(+), 4 deletions(-)
+
+commit c8b230e4377bc8e80d37835a229511ce0e30cc47
+Merge: b3790a65 904dd7be
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Tue Feb 27 17:25:32 2018 -0800
+
+ Merge branch 'expand-tests' of github.com:googlefonts/harfbuzz
+ into drophints
+
+commit 904dd7beea756fd7429fad36f5c37321aedb4e81
+Author: Garret Rieger <grieger@google.com>
+Date: Tue Feb 27 14:33:36 2018 -0800
+
+ [subset] Add drop hinting profile to full-font.tests
+
+ .../Roboto-Regular.drop-hints.1FC,21,41,20,62,63.ttf | Bin 0 ->
+ 2152 bytes
+ .../full-font/Roboto-Regular.drop-hints.61,62,63.ttf | Bin 0 ->
+ 1968 bytes
+ test/subset/data/tests/full-font.tests | 1 +
+ 3 files changed, 1 insertion(+)
+
+commit 70a1049b3f8dc241fcb9b524bd010f0c1606f6ad
+Author: Garret Rieger <grieger@google.com>
+Date: Tue Feb 27 14:28:50 2018 -0800
+
+ [subset] Add a drop hints profile to basics.tests
+
+ .../basics/Roboto-Regular.abc.drop-hints.61,62,63.ttf | Bin 0 ->
+ 876 bytes
+ .../basics/Roboto-Regular.abc.drop-hints.61,63.ttf | Bin 0 ->
+ 792 bytes
+ .../expected/basics/Roboto-Regular.abc.drop-hints.61.ttf | Bin 0 ->
+ 684 bytes
+ .../expected/basics/Roboto-Regular.abc.drop-hints.62.ttf | Bin 0 ->
+ 652 bytes
+ .../expected/basics/Roboto-Regular.abc.drop-hints.63.ttf | Bin 0 ->
+ 656 bytes
+ test/subset/data/profiles/drop-hints.txt | 1 +
+ test/subset/data/tests/basics.tests | 1 +
+ 7 files changed, 2 insertions(+)
+
+commit 5241d7f4b999d5457de564bd950b60d70f9d0e19
+Author: Garret Rieger <grieger@google.com>
+Date: Tue Feb 27 13:15:40 2018 -0800
+
+ [subset] apply subset profiles (flags) to the subset integration
+ tests.
+
+ test/subset/generate-expected-outputs.py | 27 ++++++++++++++-------------
+ test/subset/run-tests.py | 3 ++-
+ test/subset/subset_test_suite.py | 11 ++++++++---
+ 3 files changed, 24 insertions(+), 17 deletions(-)
+
+commit a4aca190a93f94c25c906ec0269183d8b2d0b5e8
+Author: Garret Rieger <grieger@google.com>
+Date: Tue Feb 27 11:36:16 2018 -0800
+
+ [subset] add expected/full-font to dist files.
+
+ test/subset/data/Makefile.am | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit d31ace32740b1777ebb023ffdb10cd0cfec3997e
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 26 18:51:56 2018 -0800
+
+ [subset] Add subset integration tests using the full roboto font.
+
+ test/subset/data/Makefile.sources | 1 +
+ .../Roboto-Regular.default.1FC,21,41,20,62,63.ttf | Bin 0 ->
+ 3700 bytes
+ .../full-font/Roboto-Regular.default.61,62,63.ttf | Bin 0 ->
+ 3320 bytes
+ test/subset/data/fonts/Roboto-Regular.ttf | Bin 0 ->
+ 171676 bytes
+ test/subset/data/tests/full-font.tests | 10 ++++++++++
+ test/subset/generate-expected-outputs.py | 12 ++++++++----
+ 6 files changed, 19 insertions(+), 4 deletions(-)
+
+commit 33f4381314c5248b8b112e344af7548806f93a82
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 26 18:39:09 2018 -0800
+
+ [subset] Add some more variations of the basic test.
+
+ .../basics/Roboto-Regular.abc.default.61,62,63.ttf | Bin 0 ->
+ 2120 bytes
+ .../expected/basics/Roboto-Regular.abc.default.61,63.ttf | Bin 0 ->
+ 1932 bytes
+ .../expected/basics/Roboto-Regular.abc.default.61.ttf | Bin 0 ->
+ 1744 bytes
+ .../expected/basics/Roboto-Regular.abc.default.63.ttf | Bin 0 ->
+ 1668 bytes
+ test/subset/data/tests/basics.tests | 4 ++++
+ 5 files changed, 4 insertions(+)
+
+commit b3790a65a18e8402b2b09dfc24aaea40a51de569
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Tue Feb 27 17:23:30 2018 -0800
+
+ [subset] add a (failing for now) test for composite glyf hint dropping
+
+ src/hb-ot-glyf-table.hh | 8 ++++----
+ test/api/test-subset-glyf.c | 27 +++++++++++++++++++++++++--
+ 2 files changed, 29 insertions(+), 6 deletions(-)
+
+commit 4c6023f861a4b87782c17ac626ffee7e93f15fc8
+Merge: d7633d0a 921b65cb
+Author: Garret Rieger <grieger@google.com>
+Date: Tue Feb 27 17:06:27 2018 -0700
+
+ Merge pull request #842 from googlefonts/maxp
+
+ [subset] when dropping hints, clear hint related fields in maxp.
+
+commit 921b65cbc29f0c2c9c13e9fb272dafe4c8a14591
+Author: Garret Rieger <grieger@google.com>
+Date: Tue Feb 27 14:37:18 2018 -0800
+
+ [subset] minor fixes in hb-ot-maxp-table.hh
+
+ src/hb-ot-maxp-table.hh | 15 +++++++--------
+ 1 file changed, 7 insertions(+), 8 deletions(-)
+
+commit b26db48bfff804e139331817a86ecc811547afcd
+Author: Garret Rieger <grieger@google.com>
+Date: Tue Feb 27 14:14:05 2018 -0800
+
+ [subset] whitespace for hb-ot-maxp-table.hh
+
+ src/hb-ot-maxp-table.hh | 30 +++++++++++++++---------------
+ 1 file changed, 15 insertions(+), 15 deletions(-)
+
+commit a76344da796670f33b2fa48a9b1676545dac93c2
+Author: Garret Rieger <grieger@google.com>
+Date: Tue Feb 27 14:11:36 2018 -0800
+
+ [subset] Add maxpV1Tail instead of defining a struct inside maxp
+ for v1 data.
+
+ src/hb-ot-maxp-table.hh | 81
+ ++++++++++++++++++++++++++++++-------------------
+ 1 file changed, 49 insertions(+), 32 deletions(-)
+
+commit f14d1b64c2d148ffdec95c17adbee3f185d5d436
+Author: Garret Rieger <grieger@google.com>
+Date: Tue Feb 27 13:49:00 2018 -0800
+
+ [subset] when dropping hints, clear hint related fields in maxp.
+
+ src/hb-ot-maxp-table.hh | 43
+ ++++++++++++++++++++++++++++++++++++++++---
+ test/api/test-subset-glyf.c | 30 +++++++++++++++++++++++-------
+ 2 files changed, 63 insertions(+), 10 deletions(-)
+
+commit d7633d0a4091c025638ba3fc8fb0d8e9a0e9ff8c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 27 12:50:57 2018 -0800
+
+ [BASE] More
+
+ src/hb-ot-layout-base-table.hh | 153
+ ++++-------------------------------------
+ 1 file changed, 12 insertions(+), 141 deletions(-)
+
+commit 7a70c20fec6ece9e729dc2634e2896a8d8eb9962
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 27 12:45:26 2018 -0800
+
+ [BASE] Clean up first 29%
+
+ src/hb-ot-layout-base-table.hh | 262
+ +++++++++++++++++++----------------------
+ src/hb-ot-layout-gsub-table.hh | 2 +-
+ 2 files changed, 125 insertions(+), 139 deletions(-)
+
+commit 101850f9e6b9e0932fe1dd4169f88d6764c669c1
+Merge: 5967eaba f110c0c8
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Tue Feb 27 20:15:54 2018 +0330
+
+ Merge with master
+
+commit f110c0c8866c853c0d5a930564a2b69231a33322
+Merge: 4a1d51ef 0ad8c663
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Tue Feb 27 11:41:12 2018 +0330
+
+ Merge pull request #838 from harfbuzz/BASE
+
+ BASE table
+
+commit 0ad8c663e0b4602e2a413e77a8158bf8a46755d5
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Mon Feb 26 12:45:08 2018 +0330
+
+ Remove public API of the branch
+
+ src/hb-ot-base.h | 4 ++--
+ src/hb-ot-layout-base-table.hh | 20 +++++++++---------
+ src/hb-ot-layout.cc | 48
+ ++++++++++++++++++++----------------------
+ 3 files changed, 35 insertions(+), 37 deletions(-)
+
+commit 4a1d51ef15a423706406f784a146078073147885
+Merge: d0caf7e5 903771b6
+Author: rsheeter <rsheeter@google.com>
+Date: Mon Feb 26 20:23:41 2018 -0800
+
+ Merge pull request #818 from googlefonts/drophints
+
+ [subset] Drop hints
+
+commit 903771b6c7689b9eee9a11bac128c42f39833b2e
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Mon Feb 26 19:50:06 2018 -0800
+
+ [subset] clearer name for trim() and better comment about composite
+ handling, per review feedback
+
+ src/hb-ot-glyf-table.hh | 8 +++++---
+ src/hb-subset-glyf.cc | 17 ++++++++---------
+ 2 files changed, 13 insertions(+), 12 deletions(-)
+
+commit d0caf7e5e3294c25230ed0e5580c647fa0f1a2c8
+Merge: 6c844ae8 44dc36dd
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 26 19:24:18 2018 -0700
+
+ Merge pull request #840 from googlefonts/os2
+
+ [subset] During os2 subsetting update ulUnicodeRange[]c
+
+commit 44dc36dd82fc948a15e2ad0d605eb4a466b3553d
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 26 17:56:23 2018 -0800
+
+ [subset] update to comment in hb-ot-os2-unicode-ranges.hh
+
+ src/hb-ot-os2-unicode-ranges.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit ad3f2f77dafdee524e836e732077ee9670602369
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 26 17:51:27 2018 -0800
+
+ [subset] small cleanups in hb-ot-os2-table.
+
+ src/hb-ot-os2-table.hh | 5 +++--
+ src/hb-ot-os2-unicode-ranges.hh | 2 +-
+ 2 files changed, 4 insertions(+), 3 deletions(-)
+
+commit f1c8fc3487d5c5efb8ee1804acb07e6e282d3bc5
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 26 17:48:51 2018 -0800
+
+ [subset] small updates to gen-unicode-ranges.py
+
+ src/gen-unicode-ranges.py | 6 ++++--
+ src/hb-ot-os2-unicode-ranges.hh | 3 ++-
+ 2 files changed, 6 insertions(+), 3 deletions(-)
+
+commit 0c0fe2ff8209228f2ddfce464b7b6f1b1ee1654a
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 26 17:47:10 2018 -0800
+
+ [subset] Move util/generated-unicode-ranges.py to
+ src/gen-unicode-ranges.py
+
+ util/generate-unicode-ranges.py => src/gen-unicode-ranges.py | 0
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+commit f630ae5161bfc8420f9ae0127fd8c7f447874fdd
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 26 17:46:17 2018 -0800
+
+ [subset] unsigned int -> hb_codepoint_t.
+
+ src/hb-ot-os2-unicode-ranges.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 6368ce4c927b1457cf19945d5957e91d4621dc8b
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 26 17:44:39 2018 -0800
+
+ [subset] const in _compare_range.
+
+ src/hb-ot-os2-unicode-ranges.hh | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit 0be9fea0a96701b159a9db190e55b1c3efc38a28
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 26 16:15:09 2018 -0800
+
+ [subset] Add comment to os2UnicodeRangesSorted.
+
+ src/hb-ot-os2-unicode-ranges.hh | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit e20ab71d12b032371b830b76462e5e979d963b58
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 26 16:13:10 2018 -0800
+
+ [subset] Fix incorrect index.
+
+ src/hb-ot-os2-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 074b5a29a166d1812abc7229a71af4a3bb311536
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 26 16:11:24 2018 -0800
+
+ [subset] Add special case handling of bit 57 in os2 ulUnicodeRange.
+
+ src/hb-ot-os2-table.hh | 7 +++++++
+ src/test-unicode-ranges.cc | 3 ---
+ 2 files changed, 7 insertions(+), 3 deletions(-)
+
+commit ddc4f2b9fc5566e70558a57133289f84d467cc98
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 26 15:59:32 2018 -0800
+
+ [subset] Add python util that was used to generated
+ hb-ot-os2-unicode-ranges.hh
+
+ util/generate-unicode-ranges.py | 50
+ +++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 50 insertions(+)
+
+commit f757757eda5f00a89a156e3427bdf8c4313611ef
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 26 15:56:36 2018 -0800
+
+ [subset] Add cmake build def for test-unicode-ranges.
+
+ CMakeLists.txt | 2 +-
+ src/Makefile.am | 1 -
+ 2 files changed, 1 insertion(+), 2 deletions(-)
+
+commit f82f2a3e50805503d93aa1aa1ccb27da4967a14a
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 26 15:52:01 2018 -0800
+
+ [subset] Rename hb-os2-unicode-ranges.cc to test-unicode-ranges.cc.
+
+ src/Makefile.am | 2 +-
+ src/{hb-ot-os2-unicode-ranges.cc => test-unicode-ranges.cc} | 0
+ 2 files changed, 1 insertion(+), 1 deletion(-)
+
+commit 4014555ca083dea3e4f42120aeaf52a2186b8a09
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 26 15:50:13 2018 -0800
+
+ [subset] set ulUnicodeRange[] in os2.
+
+ src/Makefile.sources | 1 -
+ src/hb-ot-os2-table.hh | 23 ++++-
+ src/hb-ot-os2-unicode-ranges.cc | 221
+ ++--------------------------------------
+ src/hb-ot-os2-unicode-ranges.hh | 210
+ +++++++++++++++++++++++++++++++++++++-
+ 4 files changed, 236 insertions(+), 219 deletions(-)
+
+commit a570142d0c6d819feeeeb9e209fc90a33c1c2b48
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 26 15:20:23 2018 -0800
+
+ [subset] Move hb-ot-os2-unicode-ranges into a cc file with a helper
+ methods and tests.
+
+ src/Makefile.am | 9 +-
+ src/Makefile.sources | 2 +
+ src/hb-ot-os2-unicode-ranges.cc | 279
+ ++++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-os2-unicode-ranges.hh | 189 +--------------------------
+ 4 files changed, 292 insertions(+), 187 deletions(-)
+
+commit 8e81799b32f3dfaca000fa5d42943ceed9af8d17
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Feb 23 18:35:41 2018 -0800
+
+ [subset] Add hb-ot-os2-unicode-ranges.hh, a map of os2 unicode ranges.
+
+ src/hb-ot-os2-unicode-ranges.hh | 220
+ ++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 220 insertions(+)
+
+commit 6c844ae8e89f52f5f40eace66bb987544fc316e3
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Mon Feb 26 23:04:27 2018 +0330
+
+ [dev-run] show images using iTerm2 images feature
+
+ src/dev-run.sh | 32 ++++++++++++++++++++++++++++----
+ 1 file changed, 28 insertions(+), 4 deletions(-)
+
+commit 28c4245e9f76c6c53a4589e7745a60ed0e97414a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Feb 26 01:10:42 2018 -0800
+
+ [aat/ankr] Define Anchor struct
+
+ src/hb-aat-layout-ankr-table.hh | 16 +++++++++++++++-
+ 1 file changed, 15 insertions(+), 1 deletion(-)
+
+commit e347fb908b188f71df13215c8939b0f3a12c716f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Feb 26 01:08:00 2018 -0800
+
+ Minor
+
+ src/hb-ot-layout-gdef-table.hh | 4 ++--
+ src/hb-ot-layout-gpos-table.hh | 12 ++++++------
+ 2 files changed, 8 insertions(+), 8 deletions(-)
+
+commit 05fbd14e715ed5d0f0f86388b1538ad8e8c7c506
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Feb 26 01:04:16 2018 -0800
+
+ [aat/ankr] Minor
+
+ DEFINE_SIZE_MIN is to be used only in rare cases. For fixed-size
+ structs
+ we want DEFINE_SIZE_STATIC.
+
+ src/hb-aat-layout-ankr-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit f90cd9b1f5ade8ad5e3b7caf0272936ad7a0f419
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Feb 26 01:03:23 2018 -0800
+
+ [aat/ankr] Hook up Lookup table
+
+ src/hb-aat-layout-ankr-table.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit c36598450e9698168851c0ae7d0b4c9e562c4924
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Feb 26 00:57:07 2018 -0800
+
+ [aat/ankr] Simplify
+
+ src/hb-aat-layout-ankr-table.hh | 36 ++++++++----------------------------
+ 1 file changed, 8 insertions(+), 28 deletions(-)
+
+commit fa3a69e2334ec4122d672670614a8e5a95611d75
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Feb 26 00:32:11 2018 -0800
+
+ [aat/trak] Simplify sanitize()
+
+ src/hb-aat-layout-trak-table.hh | 67
+ ++++++++++-------------------------------
+ 1 file changed, 16 insertions(+), 51 deletions(-)
+
+commit f0bc6c0992c4302ae1a20f155ad256bfa331087c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Feb 26 00:18:17 2018 -0800
+
+ [aat/trak] Clean up
+
+ We always just used "unsigned int" for counter values. There's
+ no use for uint16_t outside of a struct.
+
+ Also, no need for explict casting where implicit does.
+
+ src/hb-aat-layout-trak-table.hh | 12 ++++++------
+ 1 file changed, 6 insertions(+), 6 deletions(-)
+
+commit bb82f01383db7cf05040fbd5881e17e263ef6369
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sun Feb 25 12:30:33 2018 +0330
+
+ [aat] trak sanitization
+
+ src/dev-run.sh | 4 +-
+ src/hb-aat-layout-trak-table.hh | 95
+ ++++++++++++++++++++++++++++++++---------
+ src/hb-aat-layout.cc | 2 +-
+ util/options.hh | 2 +-
+ 4 files changed, 78 insertions(+), 25 deletions(-)
+
+commit becb1d9eea15c07f9ea4e229be56f9aca0f768af
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Mon Feb 26 11:29:48 2018 +0330
+
+ [aat] minor
+
+ Ops, this was done for testing
+
+ src/hb-aat-layout-ankr-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit df1c7d5b60520d2b3c756b700d5ac41668fc0983
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 25 19:06:25 2018 -0800
+
+ Minor
+
+ src/hb-open-type-private.hh | 5 +++--
+ src/hb-subset.cc | 2 +-
+ 2 files changed, 4 insertions(+), 3 deletions(-)
+
+commit 6dd46fa598cacdd046ba4548bc6ddf7f37c46dee
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 25 18:54:52 2018 -0800
+
+ [aat/trak] Minor
+
+ Maybe we should make DEFINE_* make structs uncopyable.
+
+ src/hb-aat-layout-trak-table.hh | 56
+ +++++++++++++++++++++++------------------
+ 1 file changed, 32 insertions(+), 24 deletions(-)
+
+commit ae14dd0fb0a176f6f0143690907b51626999d248
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Mon Feb 26 00:31:09 2018 +0330
+
+ [aat] Implement ankr
+
+ src/Makefile.sources | 3 +-
+ src/hb-aat-layout-ankr-table.hh | 86
+ +++++++++++++++++++++++++++++++++++++++++
+ src/hb-aat-layout-kerx-table.hh | 2 +-
+ src/hb-aat-layout.cc | 37 +++++++++++++-----
+ src/hb-ot-layout-private.hh | 6 ++-
+ src/hb-ot-layout.cc | 6 ++-
+ 6 files changed, 124 insertions(+), 16 deletions(-)
+
+commit 551fa2d200a06d00d054f2c8e7aad1cb4d25249b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 25 16:32:17 2018 -0800
+
+ [BASE] Minor
+
+ src/Makefile.sources | 1 -
+ src/hb-ot-base.cc | 58 -----------------------
+ src/hb-ot-layout-base-table.hh | 103
+ ++++++++++++++++++++++++++++-------------
+ src/hb-ot-layout.cc | 34 ++++++++++++++
+ src/hb-ot-layout.h | 1 +
+ 5 files changed, 105 insertions(+), 92 deletions(-)
+
+commit 05699fd996ed9c0e5dde8918388ac188e58df1a7
+Merge: 83af6c23 3ebcd5a3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Feb 24 12:01:54 2018 -0800
+
+ Merge remote-tracking branch 'eroux/add-base'
+
+commit a8d3c2c030d2c21c70e0b8bd43f7d05ff4818b75
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sat Feb 24 16:42:12 2018 +0330
+
+ [ci] Add clang O3/O0 testers (#834)
+
+ .circleci/config.yml | 16 ++++++++++++++++
+ 1 file changed, 16 insertions(+)
+
+commit c73255f3eb2f060ec72d18790b374f6b6e4032aa
+Author: Khaled Hosny <khaledhosny@eglug.org>
+Date: Sat Feb 24 00:44:07 2018 +0200
+
+ Workaround for old automake on Travis Linux images
+
+ https://github.com/harfbuzz/harfbuzz/pull/821#issuecomment-368116538
+
+ .ci/fail.sh | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+commit cd28eb9f5dc237325c64380d9d87e673b8e94985
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sat Feb 24 14:17:54 2018 +0330
+
+ Add -Werror=unused-function check to Travis (#832)
+
+ .travis.yml | 4 ++--
+ src/hb-aat-layout.cc | 24 ++++++++++++------------
+ test/api/test-set.c | 19 ++++++++++---------
+ 3 files changed, 24 insertions(+), 23 deletions(-)
+
+commit 1ab16f4556ef3e54a40b63cf4570c0ae986894e7
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sat Feb 24 12:49:42 2018 +0330
+
+ [aat] Implement trak logic (#816)
+
+ src/hb-aat-layout-kerx-table.hh | 7 ++++
+ src/hb-aat-layout-private.hh | 3 ++
+ src/hb-aat-layout-trak-table.hh | 78
+ +++++++++++++++++++++++++++++++++++++++--
+ src/hb-aat-layout.cc | 46 ++++++++++++++++++++++++
+ src/hb-open-type-private.hh | 4 +--
+ src/hb-ot-layout-private.hh | 22 ++++++++++++
+ src/hb-ot-layout.cc | 4 +++
+ src/hb-ot-shape.cc | 2 ++
+ 8 files changed, 161 insertions(+), 5 deletions(-)
+
+commit b91e8da36e164168cd532fd6e6950c5d743a14dd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 23 22:51:17 2018 -0800
+
+ Include hb-version.h in git (#825)
+
+ CMakeLists.txt | 36 ++++++++++++++--------------
+ src/Makefile.am | 8 +++----
+ src/Makefile.sources | 3 ---
+ src/hb-version.h | 66
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 4 files changed, 87 insertions(+), 26 deletions(-)
+
+commit 5267520e078ed413df78f3a6781fd5370b6da63a
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Fri Feb 23 18:36:22 2018 -0800
+
+ [subset] update hdmx test to create input explicitly
+
+ test/api/test-subset-hdmx.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 2e3ee489f8374227fa94a8d8684e839e643888ea
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Fri Feb 23 18:18:54 2018 -0800
+
+ [subset] format tweak, doc string
+
+ src/hb-subset-input.cc | 12 +++++++++---
+ src/hb-subset.h | 2 +-
+ 2 files changed, 10 insertions(+), 4 deletions(-)
+
+commit d78393b5547135b8db0356b0ec14d5ed0d334768
+Merge: 1454d82a 83af6c23
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Fri Feb 23 17:53:26 2018 -0800
+
+ Merge branch 'master' of https://github.com/harfbuzz/harfbuzz into
+ drophints
+
+commit 1454d82a9d3d9a47901b3d92ff7f2c05c596c0d5
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Fri Feb 23 17:49:23 2018 -0800
+
+ [subset] keep glyph trim separate of more general get_offset
+
+ src/hb-ot-glyf-table.hh | 12 ++++--------
+ src/hb-subset-glyf.cc | 6 ++++--
+ 2 files changed, 8 insertions(+), 10 deletions(-)
+
+commit 0ac8c0c1e6a6c076ce33b16baa173ff8763ac04e
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Fri Feb 23 17:43:00 2018 -0800
+
+ [subset] zero glyf and loca memory before writing so pads are
+ clean. Test just the part of maxp we care about
+
+ src/hb-ot-glyf-table.hh | 6 +++---
+ src/hb-subset-glyf.cc | 4 ++--
+ test/api/test-subset-glyf.c | 19 ++++++++++++++++---
+ 3 files changed, 21 insertions(+), 8 deletions(-)
+
+commit 83af6c237f2bfd66af76a8647a62b3d1ab996744
+Merge: 7e5e1feb dc5c7927
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Feb 23 18:33:25 2018 -0700
+
+ Merge pull request #829 from googlefonts/test-checksum
+
+ [subset] Caclculate head table checksum adjustment
+
+commit dc5c7927e75ea09461e46fe6e56897091b4b4f00
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 23 16:42:06 2018 -0800
+
+ [subset] Caclculate head table checksum adjustment
+
+ Test still fails, because we do not serialize tables in the same
+ order that fonttools subsetter does.
+
+ src/hb-open-file-private.hh | 51
+ ++++++++++++++++++++++++++++++++++-----------
+ src/hb-ot-head-table.hh | 2 ++
+ src/hb-subset.cc | 2 ++
+ 3 files changed, 43 insertions(+), 12 deletions(-)
+
+commit 7e5e1feb666d6a861b5cd64bf29a16e3854fb812
+Merge: ec2538c8 99967e21
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Feb 23 17:59:08 2018 -0700
+
+ Merge pull request #828 from googlefonts/mem-fixes
+
+ [subset] Fix several memory leaks in subsetting.
+
+commit ec2538c8803be254b6e09ca0ea724b07c35126da
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 23 15:51:26 2018 -0800
+
+ [subset] Fix checksum calc out-of-bounds access
+
+ src/hb-open-file-private.hh | 18 ++++++++++--------
+ src/hb-open-type-private.hh | 3 ++-
+ 2 files changed, 12 insertions(+), 9 deletions(-)
+
+commit 99967e21c6e3f6882d6eadf5c22f4120684b1fc5
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Feb 23 15:45:45 2018 -0800
+
+ [subset] Fix memory leak in hb-subset-glyf.
+
+ src/hb-subset-glyf.cc | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit e61f360dc828bfd46477b7ddff56874da9f03538
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Feb 23 15:44:21 2018 -0800
+
+ [subset] Fix memory leak in hb-subset-plan.
+
+ src/hb-subset-plan.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 66b0a390793ab06692dd49e67baef52a6a7d82aa
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Feb 23 15:41:52 2018 -0800
+
+ [subset] Fix memory leak in hb-subset.
+
+ src/hb-subset.cc | 7 ++-----
+ 1 file changed, 2 insertions(+), 5 deletions(-)
+
+commit 0fb8a5ce192025ffd83ae714db932e4b86594ae1
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Feb 23 15:37:43 2018 -0800
+
+ [subset] Fix memory leak in cmap subsetting.
+
+ src/hb-ot-cmap-table.hh | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+commit 4665aaa19304bdf0362bdfcebcae65feb19a8964
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Feb 23 15:36:14 2018 -0800
+
+ [subset] Fix memory leak in hmtx subsetting.
+
+ src/hb-ot-hmtx-table.hh | 8 +++++---
+ 1 file changed, 5 insertions(+), 3 deletions(-)
+
+commit 5a36b55fba03cd07c9b101f0222b8d189bcd3bbf
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Feb 23 15:30:14 2018 -0800
+
+ [subset] Fix memory leak in subset face destroy.
+
+ src/hb-subset.cc | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit d38f37b2e37942a3fd13cd753c8b8587a06c0f3a
+Author: Ben Boeckel <mathstuf@users.noreply.github.com>
+Date: Fri Feb 23 16:55:53 2018 -0500
+
+ autoconf: provide a harfbuzz-config for use from CMake (#822)
+
+ configure.ac | 2 ++
+ src/Makefile.am | 4 ++-
+ src/harfbuzz-config.cmake.in | 82
+ ++++++++++++++++++++++++++++++++++++++++++++
+ 3 files changed, 87 insertions(+), 1 deletion(-)
+
+commit e0939d811f1fdeda9c5763e7e53887b3d3cb21eb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 23 13:19:34 2018 -0800
+
+ Clean up check-defs and check-symbols (#821)
+
+ Also, call c++filt on their results.
+
+ Also build and fix and check harfbuzz-gobject.def
+
+ Also changes harfbuzz-gobject to distribute generated enum sources.
+
+ CMakeLists.txt | 3 +--
+ src/Makefile.am | 33 ++++++++++++++++------------
+ src/Makefile.sources | 9 +++++---
+ src/check-defs.sh | 52
+ ---------------------------------------------
+ src/check-symbols.sh | 30 ++++++++++++++++++++------
+ src/hb-gobject-enums.h.tmpl | 3 ++-
+ src/hb-gobject-structs.h | 45 ++++++++++++++++++++++++++-------------
+ 7 files changed, 81 insertions(+), 94 deletions(-)
+
+commit 9bd6d25254d9bfc612004982dba286a3751d1d29
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Fri Feb 23 13:05:58 2018 -0800
+
+ [subset] clone trim logic from fonttools glyf handling
+
+ src/hb-ot-glyf-table.hh | 92
+ ++++++++++++++++++++++++++-
+ src/hb-subset-glyf.cc | 26 ++++----
+ src/hb-subset-plan.cc | 3 +
+ src/hb-subset.cc | 13 ++--
+ test/api/fonts/Roboto-Regular.ac.nohints.ttf | Bin 1128 -> 848 bytes
+ test/api/hb-subset-test.h | 1 +
+ test/api/test-subset-glyf.c | 6 +-
+ 7 files changed, 117 insertions(+), 24 deletions(-)
+
+commit b1ec82105189053d648a798cf5b3ab2887046298
+Merge: e15e41ef c2e4713b
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Feb 23 12:32:18 2018 -0700
+
+ Merge pull request #823 from googlefonts/hdmx
+
+ [subset] Add hdmx subsetting.
+
+commit e15e41ef12e146333e355defef8db210378b5be0
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Feb 22 18:41:50 2018 -0800
+
+ [subset] Remove commented code from run-tests.py.
+
+ test/subset/run-tests.py | 3 ---
+ 1 file changed, 3 deletions(-)
+
+commit 2b844803433bd1557a7fd0c93a91c66ef5319b21
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Feb 22 18:38:44 2018 -0800
+
+ [subset] Update expected files for subsetting integration test to
+ not include cmap 4.
+
+ .../expected/basics/Roboto-Regular.abc.default.62.ttf | Bin 1740 ->
+ 1692 bytes
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+commit a88504c601ac95601730bd602861c13e5ac4fdd8
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Feb 22 14:28:18 2018 -0800
+
+ [subset] Fix checksum clearning in subset test diff. Add an updated
+ expected file (has cmap4 restored).
+
+ .../expected/basics/Roboto-Regular.abc.default.62.ttf | Bin 1692 ->
+ 1740 bytes
+ test/subset/run-tests.py | 7 +++++--
+ 2 files changed, 5 insertions(+), 2 deletions(-)
+
+commit 537698b60131bd3d7999919a04596c41dda6b2e4
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Feb 22 14:07:52 2018 -0800
+
+ [subset] Don't compare actual to itself in Fix
+ test/subset/run-tests. Print a diff on failure.
+
+ test/subset/run-tests.py | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+commit c2e4713b5b561675b0f7b358ccf83d64ef0b6c41
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 23 10:45:03 2018 -0800
+
+ [hdmx] Fix sanitize()
+
+ src/hb-ot-hdmx-table.hh | 23 +++++++----------------
+ 1 file changed, 7 insertions(+), 16 deletions(-)
+
+commit 84d4bb91ceca22484abb597c19eb18311e2514f1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 23 10:38:35 2018 -0800
+
+ [hdmx] Minor
+
+ src/hb-ot-hdmx-table.hh | 21 +++++++++++----------
+ 1 file changed, 11 insertions(+), 10 deletions(-)
+
+commit cf7a6e520e9601da9d27bc8f6bbe5d2eff23998d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 23 10:34:26 2018 -0800
+
+ [hdmx] Move DeviceRecord to toplevel again
+
+ More readable.
+
+ src/hb-ot-hdmx-table.hh | 112
+ ++++++++++++++++++++++++------------------------
+ 1 file changed, 57 insertions(+), 55 deletions(-)
+
+commit 96d7805a9235443972c6b6c5cd9502283c8836e9
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Feb 22 16:48:28 2018 -0800
+
+ [subset] More complete sanitization implementation for hdmx.
+
+ src/hb-ot-hdmx-table.hh | 18 ++++++++++++++----
+ 1 file changed, 14 insertions(+), 4 deletions(-)
+
+commit c02532a3d2325c8fb9332f63f687cbaec77b2239
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Feb 22 16:40:50 2018 -0800
+
+ [subset] Formatting and comments in hdmx.
+
+ src/hb-ot-hdmx-table.hh | 31 +++++++++++++++++++------------
+ 1 file changed, 19 insertions(+), 12 deletions(-)
+
+commit 6b372f439b257808b048d02ebf5a867dabcd1231
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Feb 22 12:00:00 2018 -0800
+
+ [subset] In hb-ot-hdmx-table, s/glyf/hdmx.
+
+ src/hb-ot-hdmx-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit ec302ad5bda6bea870f6d33f9698a1782472a213
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Feb 22 11:57:35 2018 -0800
+
+ [subset] Fail subset if a table fails to sanitize.
+
+ src/hb-subset.cc | 19 +++++++++++--------
+ 1 file changed, 11 insertions(+), 8 deletions(-)
+
+commit 15fc45bfedef433025145289fe916739907b573b
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Feb 21 17:59:57 2018 -0800
+
+ [subset] Add a unit test for hdmx subsetting.
+
+ test/api/Makefile.am | 2 ++
+ test/api/test-subset-hdmx.c | 81
+ +++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 83 insertions(+)
+
+commit aa4aa2353c52f86fd56446de6b7ff86a9e990b9c
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Feb 21 17:43:32 2018 -0800
+
+ [subset] Enable hdmx subsetting.
+
+ src/hb-subset.cc | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit bd18b6adf8697c1ce3f4e3831b9f2a99d930e97d
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Feb 21 17:42:58 2018 -0800
+
+ [subset] Move DeviceRecord inside of hdmx.
+
+ src/hb-ot-hdmx-table.hh | 98
+ +++++++++++++++++++++++++------------------------
+ 1 file changed, 50 insertions(+), 48 deletions(-)
+
+commit 6704cded65985b2de262bdd3bb0887929e5a3b0b
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Feb 21 16:00:10 2018 -0800
+
+ [subset] Add hdmx subsetting implementation.
+
+ src/hb-ot-hdmx-table.hh | 29 ++++++++++++++++++++++++++---
+ 1 file changed, 26 insertions(+), 3 deletions(-)
+
+commit 84b68e58862647b4ede414b2e608c47d390fd60a
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Feb 21 15:43:47 2018 -0800
+
+ [subset] In hdmx serialize set the correct value of sizeDeviceRecord.
+
+ src/hb-ot-hdmx-table.hh | 29 ++++++++++++++++-------------
+ 1 file changed, 16 insertions(+), 13 deletions(-)
+
+commit dddf44279f610e77e8b9a0819fd91f48802158b6
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Feb 21 15:36:09 2018 -0800
+
+ [subset] When serializing a DeviceRecord in hdmx pad to make 32
+ bit aligned.
+
+ src/hb-ot-hdmx-table.hh | 19 +++++++++++++------
+ 1 file changed, 13 insertions(+), 6 deletions(-)
+
+commit ab7a8f3b7419b604816e12cb93e77c0ba45a57af
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Feb 21 15:15:22 2018 -0800
+
+ [subset] Begin implementing serialize for hdmx.
+
+ src/hb-ot-hdmx-table.hh | 79
+ +++++++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 77 insertions(+), 2 deletions(-)
+
+commit fe42862ab30d17483a1d0c2e2b1d859d01bbaff1
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Feb 21 14:18:49 2018 -0800
+
+ [subset] Sketch out a basic hb-ot-hdmx.hh.
+
+ src/Makefile.sources | 1 +
+ src/hb-ot-hdmx-table.hh | 77
+ +++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-subset.cc | 1 +
+ 3 files changed, 79 insertions(+)
+
+commit 4f6f7c3b22ec788f609bdffc7e0893816657b3a0
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Fri Feb 23 02:54:12 2018 +0330
+
+ [util] Implement ppem/ptem on hb-{shape,view} (#811)
+
+ util/options.cc | 33 ++++++++++++++++++++++++++++-----
+ util/options.hh | 6 ++++++
+ 2 files changed, 34 insertions(+), 5 deletions(-)
+
+commit a6bd6bcee08c9522f9269b5c63f784688abddcff
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Thu Feb 22 16:52:56 2018 +0330
+
+ [dev-run] minor
+
+ src/dev-run.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit fa13a04cf3345311a2434f0d7f6346f967491c45
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Thu Feb 22 16:48:03 2018 +0330
+
+ [dev-run] Add gdb/lldb shortcuts
+
+ src/dev-run.sh | 40 +++++++++++++++++++++++++++++++---------
+ 1 file changed, 31 insertions(+), 9 deletions(-)
+
+commit 4f07437dfebd3dc5923f40154c6f1b7e1dce1bd4
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 21 22:23:05 2018 -0800
+
+ [subset] sketch out dropping in-glyf instructions. Sometimes yields
+ differnet size glyphs than fonttools, possibly due to padding not
+ being corrected
+
+ src/hb-ot-glyf-table.hh | 45 ++++++++++++++++
+ src/hb-subset-glyf.cc | 78
+ +++++++++++++++++++++------
+ src/hb-subset-input.cc | 6 +++
+ src/hb-subset.h | 2 +
+ test/api/fonts/Roboto-Regular.ac.nohints.ttf | Bin 0 -> 1128 bytes
+ test/api/hb-subset-test.h | 15 +++---
+ test/api/test-subset-cmap.c | 4 +-
+ test/api/test-subset-glyf.c | 32 +++++++++--
+ test/api/test-subset-hmtx.c | 10 ++--
+ test/api/test-subset-os2.c | 2 +-
+ 10 files changed, 160 insertions(+), 34 deletions(-)
+
+commit 2d0265242bb9a080886d6e0aa653c62e5770a15a
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 21 09:42:46 2018 -0800
+
+ [subset] keep the result of _subset
+
+ src/hb-subset.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 4fb97be78d9287e489c9f67d1bfe7682235bdf38
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 21 14:38:02 2018 -0800
+
+ Add two more ragel-generated headers
+
+ Fixes https://github.com/harfbuzz/harfbuzz/issues/817
+
+ src/hb-buffer-deserialize-json.hh | 643
+ ++++++++++++++++++++++++++++++++++++++
+ src/hb-buffer-deserialize-text.hh | 571 +++++++++++++++++++++++++++++++++
+ 2 files changed, 1214 insertions(+)
+
+commit 74e0c13a4a55848e797242c02c8f067e587ea603
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 21 11:19:18 2018 -0800
+
+ [subset] drop hint tables if so flagged. Still need to dump glyf
+ instructions.
+
+ src/hb-subset-plan.cc | 1 +
+ src/hb-subset-plan.hh | 2 ++
+ src/hb-subset-private.hh | 2 +-
+ src/hb-subset.cc | 11 +++++++++--
+ util/hb-subset.cc | 2 +-
+ util/options.cc | 2 +-
+ util/options.hh | 4 ++--
+ 7 files changed, 17 insertions(+), 7 deletions(-)
+
+commit edee28801e4dbb5b734b4038d93fe1594e267ab1
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Wed Feb 21 22:13:58 2018 +0330
+
+ Add .editorconfig (#810)
+
+ More information: http://editorconfig.org/
+
+ .editorconfig | 18 ++++++++++++++++++
+ 1 file changed, 18 insertions(+)
+
+commit 0bd100e144885ed8144cf23e7e106014858a1724
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 21 10:34:00 2018 -0800
+
+ [subset] add --hinting flag
+
+ src/hb-subset-private.hh | 1 +
+ util/hb-subset.cc | 6 +++++-
+ util/options.cc | 15 +++++++++++++++
+ util/options.hh | 14 ++++++++++++++
+ 4 files changed, 35 insertions(+), 1 deletion(-)
+
+commit 7ecca8c0a83a6c71154fcc80887a4f895c0c5a23
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 21 09:42:46 2018 -0800
+
+ [subset] keep the result of _subset
+
+ src/hb-subset.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit eada749e4642ea90300c9c68c226fa76a3e35a75
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 21 00:35:23 2018 -0800
+
+ Use HB_SET_VALUE_INVALID consistently
+
+ src/hb-ot-layout-common-private.hh | 6 +++---
+ src/hb-ot-shape.cc | 2 +-
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+commit 2cc845f311b6dc4f0feda8b8fc5609fbd51b5923
+Author: Garret Rieger <grieger@google.com>
+Date: Tue Feb 20 18:13:41 2018 -0800
+
+ [subset] fix calculation of range shiftz. Should be 16 * len -
+ searchRange not 16 * (len - searchRange).
+
+ src/hb-open-type-private.hh | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit 8e614ade5aef102baed56f91c2fcb1f3d1788ea9
+Author: Garret Rieger <grieger@google.com>
+Date: Tue Feb 20 17:36:54 2018 -0800
+
+ [subset] Reverse table order for font serialization to match what
+ OTS expects.
+
+ src/hb-open-file-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit a998eeee4ad7bba4a1574c9735618891b6bd0948
+Author: Garret Rieger <grieger@google.com>
+Date: Tue Feb 20 16:48:52 2018 -0800
+
+ [subset] sanity check glyph data writes during glyph subsetting to
+ ensure they are inbounds.
+
+ src/hb-subset-glyf.cc | 11 +++++++++--
+ 1 file changed, 9 insertions(+), 2 deletions(-)
+
+commit 0ab73e594275cf064e09b9df2e1df337a589745d
+Author: Garret Rieger <grieger@google.com>
+Date: Tue Feb 20 15:33:03 2018 -0800
+
+ [subset] Sanity check that loca writes are inbounds.
+
+ src/hb-subset-glyf.cc | 55
+ ++++++++++++++++++++++++++++++++++++++-------------
+ 1 file changed, 41 insertions(+), 14 deletions(-)
+
+commit 73e20ec6e9ad86bea023fc8b6fc10287889ed048
+Merge: 6ae4013f 69e443b2
+Author: Garret Rieger <grieger@google.com>
+Date: Tue Feb 20 17:34:59 2018 -0700
+
+ Merge pull request #812 from googlefonts/cleanup
+
+ Clean up of glyf subsetting.
+
+commit 6ae4013f2e53d6496507a58b715298fee4eadcee
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 20 15:02:25 2018 -0800
+
+ [aat] Cosmetic touch-ups to trak table
+
+ src/hb-aat-layout-trak-table.hh | 31 +++++++++++++++++--------------
+ 1 file changed, 17 insertions(+), 14 deletions(-)
+
+commit abc82b493e301e5588d689baa1434b3ce6577fcd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 20 14:34:16 2018 -0800
+
+ Add Ragel-generated files to git
+
+ I know it's bad form; I know I've said no to this multiple times...
+ But this is part of an experiment to see if we can make rolling
+ HarfBuzz
+ into Chrome much faster. That will give us a lot more testing exposure
+ that currently Chrome does.
+
+ Doing this while those files are still considered ignored by our
+ gitignore rules; will see how that flies.
+
+ autogen.sh | 10 +-
+ src/Makefile.am | 3 +-
+ src/hb-ot-shape-complex-indic-machine.hh | 1319
+ ++++++++++++++++++++++++++++
+ src/hb-ot-shape-complex-khmer-machine.hh | 294 +++++++
+ src/hb-ot-shape-complex-myanmar-machine.hh | 413 +++++++++
+ src/hb-ot-shape-complex-use-machine.hh | 502 +++++++++++
+ 6 files changed, 2535 insertions(+), 6 deletions(-)
+
+commit 69e443b254fceb29f26f6a0c0129fe3c93c19cfb
+Author: Garret Rieger <grieger@google.com>
+Date: Tue Feb 20 14:29:21 2018 -0800
+
+ [subset] Switch to hb_blob_copy_writable_or_fail in glyf subsetting.
+
+ src/hb-ot-glyf-table.hh | 29 +++++++++++------------------
+ src/hb-ot-maxp-table.hh | 3 +--
+ 2 files changed, 12 insertions(+), 20 deletions(-)
+
+commit e3e0ac98238b78530a625a6b7e7647dbabbe1c4d
+Author: Garret Rieger <grieger@google.com>
+Date: Tue Feb 20 14:07:40 2018 -0800
+
+ [subset] Move glyf subsetting code into hb-ot-glyf-table.hh
+
+ src/hb-ot-glyf-table.hh | 49
+ +++++++++++++++++++++++++++++++++++++++++++++++-
+ src/hb-subset.cc | 50
+ +------------------------------------------------
+ 2 files changed, 49 insertions(+), 50 deletions(-)
+
+commit d1f16fce963092404bf0b59e449a3215ca031b54
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 20 10:32:09 2018 -0800
+
+ Don't use %zu
+
+ Some of our bots / compilers don't like it. Wasn't caught by bots
+ because this
+ is only in debug code.
+
+ https://github.com/harfbuzz/harfbuzz/pull/809/commits/825ad378e0f0e6e6bb690894a0d5d25f198be21b
+
+ src/hb-ot-cmap-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit c7e834a2fc5f8fb81f5316447e4075902d58d8a3
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Tue Feb 20 17:59:04 2018 +0330
+
+ [dev-run] minor
+
+ src/dev-run.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 975c35214f8c8f0d90a8b114e1a8c06d5ecdecfd
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Tue Feb 20 17:49:29 2018 +0330
+
+ [dev-run] Support autotools builds
+
+ src/dev-run.sh | 46 +++++++++++++++++++++++++++++++---------------
+ 1 file changed, 31 insertions(+), 15 deletions(-)
+
+commit 25136d9b7265d8920a78f3f832f1c69da4ef1f5b
+Author: Dominik Röttsches <drott@chromium.org>
+Date: Tue Feb 20 10:26:07 2018 +0200
+
+ Use %zu format specifier for size_t to fix cross platform build
+
+ Fixes Chromium Android builds, compare
+ https://ci.chromium.org/buildbot/tryserver.chromium.android/linux_android_rel_ng/491787
+
+ src/hb-ot-cmap-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 53cf61b0299775f94c625de1bb0a7979b3b0c379
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Tue Feb 20 10:53:10 2018 +0330
+
+ Change Alpine and ArchLinux bot to test O3 and O0 on gcc, #801
+
+ .circleci/config.yml | 14 ++++++++------
+ 1 file changed, 8 insertions(+), 6 deletions(-)
+
+commit a64eacd8a6cb9811bcaadf20b8b8ae56306cbd75
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Mon Feb 19 23:27:08 2018 +0330
+
+ [aat] First dig on 'trak'
+
+ src/Makefile.sources | 3 +-
+ src/hb-aat-layout-trak-table.hh | 100
+ ++++++++++++++++++++++++++++++++++++++++
+ src/hb-aat-layout.cc | 3 +-
+ src/hb-ot-layout-private.hh | 6 ++-
+ 4 files changed, 108 insertions(+), 4 deletions(-)
+
+commit 0bff6991de308044b077ce74bd45d57d8c4afe5f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Feb 19 11:51:25 2018 -0800
+
+ Ugh. Really fix build.
+
+ src/hb-subset-private.hh | 2 +-
+ src/hb-subset.cc | 3 +--
+ test/api/hb-subset-test.h | 1 +
+ 3 files changed, 3 insertions(+), 3 deletions(-)
+
+commit 4fcbd22b18040cbfd7410e6a090c5f9624eb9a0f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Feb 19 11:49:25 2018 -0800
+
+ Fix build after previous commit
+
+ src/hb-subset-plan.hh | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 0bbf90ded00dd00ee3f79c1bd16c775d7c893278
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Feb 19 11:38:53 2018 -0800
+
+ [subset] Don't include hb-subset.h from hb.h
+
+ src/hb.h | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit fde04777d1d429fd0981002194f5c19599fda350
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Mon Feb 19 20:00:07 2018 +0330
+
+ Check availability of entr instead now that this works with it
+
+ src/dev-run.sh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit b095ce59ebc5723a1b9c049eebb8f204455c9a72
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Mon Feb 19 11:58:20 2018 +0330
+
+ Simplify hb-fuzzer output printing and fix ArchLinux bot
+
+ test/fuzzing/run-fuzzer-tests.py | 6 +-----
+ 1 file changed, 1 insertion(+), 5 deletions(-)
+
+commit be51f763a752bed1c395bff19afe3291a6063d00
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Mon Feb 19 11:06:13 2018 +0330
+
+ Test debug builds on ArchLinux bot
+
+ Fixes #805
+
+ .circleci/config.yml | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit e2d2d819848ed0ff1c60b9bde1f9c8f9495ec5b4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 18 17:28:53 2018 -0800
+
+ Limit how much work sanitize() can do
+
+ Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=6022
+
+ src/Makefile.am | 2 ++
+ src/hb-open-type-private.hh | 16
+ ++++++++++++++--
+ .../233c1e252e737ca79e03a9fd56b71aaa4a230f2b.ttf | Bin 0 ->
+ 1048576 bytes
+ test/shaping/data/in-house/tests/fuzzed.tests | 1 +
+ 4 files changed, 17 insertions(+), 2 deletions(-)
+
+commit 7033fe5877c6f9500575f20f17135f74dc9c0547
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 18 17:12:04 2018 -0800
+
+ [aat] Minor
+
+ src/hb-aat-layout-common-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 6fa690c75a572a1076124b428b76929b2674e532
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 18 16:27:59 2018 -0800
+
+ Fix debug build
+
+ Context needs to be called 'c'. The TRACE_* rely on that.
+
+ src/hb-ot-cmap-table.hh | 22 +++++++++++-----------
+ 1 file changed, 11 insertions(+), 11 deletions(-)
+
+commit 05d1e77db8f3e5280e93b6885ff4f7df113b612b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 18 16:26:04 2018 -0800
+
+ [aat] Silence warning
+
+ src/hb-aat-layout-kerx-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit a21fceb05311f61ef179b2f3aa6497562555f241
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 18 16:10:15 2018 -0800
+
+ [ci] Make AppVeyor less noisy
+
+ appveyor.yml | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 1c50a88623a881a9e2b2b0f1f6a783962626f03a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 18 15:57:09 2018 -0800
+
+ Readjust mark attachment heuristic a bit more
+
+ Previously adjusted logic could fail if nothing around was ligated,
+ and something moved. This should take care of that.
+
+ CC https://github.com/harfbuzz/harfbuzz/issues/740
+
+ src/hb-ot-layout-gpos-table.hh | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit 246e280d88b6b26757297a349f01e52c15eaec53
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 18 15:42:25 2018 -0800
+
+ [test] Add test for https://github.com/harfbuzz/harfbuzz/issues/740
+
+ .../fonts/573d3a3177c9a8646e94c8a0d7b224334340946a.ttf | Bin 0 ->
+ 5680 bytes
+ test/shaping/data/in-house/tests/use.tests | 1 +
+ 2 files changed, 1 insertion(+)
+
+commit 79756c9039a628b0df441228ca1ea20b8a91e3e8
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Mon Feb 19 03:17:44 2018 +0330
+
+ [aat] First dig on 'kerx' (#704)
+
+ src/Makefile.sources | 1 +
+ src/hb-aat-layout-kerx-table.hh | 377
+ ++++++++++++++++++++++++++++++++++++++++
+ src/hb-aat-layout.cc | 1 +
+ src/hb-ot-layout-private.hh | 2 +
+ 4 files changed, 381 insertions(+)
+
+commit 279c70a5b36446f444e5d2f4ac1db7614c8a3db8
+Merge: e9164478 89b82814
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 18 14:04:33 2018 -0800
+
+ Merge pull request #796 from ebraminio/dev-run
+
+ Add a continuous builder using fswatch
+
+commit e91644786bf7c278e75962b851d5d47011ff175c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 18 12:41:24 2018 -0800
+
+ Remove unused check
+
+ configure.ac | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+commit 89b82814b605d2bfcc481a47607e642a928dff15
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Fri Feb 16 12:53:33 2018 +0330
+
+ Add a continuous builder using fswatch
+
+ CMakeLists.txt | 24 +++++++++++++-----------
+ src/dev-run.sh | 22 ++++++++++++++++++++++
+ test/api/CMakeLists.txt | 2 +-
+ 3 files changed, 36 insertions(+), 12 deletions(-)
+
+commit 0bd2d76bdd83569366762416bf7c8fd8e90021aa
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 18 11:55:26 2018 -0800
+
+ [test] Fix a couple of coverity_scan issues
+
+ test/api/hb-subset-test.h | 17 +++++++++++------
+ 1 file changed, 11 insertions(+), 6 deletions(-)
+
+commit 8089711a61687d565f207c56d3d2b658f514d7ab
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sun Feb 18 23:25:15 2018 +0330
+
+ Another attempt on fixing coverity
+
+ I hope I am in a correct direction at least
+
+ .travis.yml | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+commit 79d0d791b9ee920e1f687a93de5adf5d113cc829
+Merge: 21646cc4 97a71102
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 18 11:35:51 2018 -0800
+
+ Merge pull request #800 from harfbuzz/bitops
+
+ Optimize set through optimized bit operations
+
+commit 97a71102153d28982297a190739c7d82e76b109e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 18 10:50:24 2018 -0800
+
+ Fix BitScanForward() usage
+
+ Should fix Win64 bot.
+
+ src/hb-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit fe8f40a4180e7b02831a264c0b3c66763156abb6
+Merge: cd11107b 21646cc4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 18 10:45:33 2018 -0800
+
+ Merge branch 'master' into bitops
+
+commit 21646cc4a6160088933774e179df9be4865a9f4b
+Author: David Corbett <corbett.dav@husky.neu.edu>
+Date: Fri Feb 16 12:08:55 2018 -0500
+
+ Do not mark the first glyph as unsafe to break
+
+ Fixes #791.
+
+ src/hb-buffer-private.hh | 3 +--
+ src/hb-coretext.cc | 4 ----
+ src/hb-directwrite.cc | 2 --
+ src/hb-graphite2.cc | 1 -
+ src/hb-uniscribe.cc | 2 --
+ 5 files changed, 1 insertion(+), 11 deletions(-)
+
+commit 04dedec96b76600eecdb739b72814a4a56b270ae
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 16 18:32:57 2018 -0800
+
+ [test] Remove unused var
+
+ test/api/test-subset-hmtx.c | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 181b7471074cc814e0f498fc05fd6850c3f5e403
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 16 17:08:44 2018 -0800
+
+ Update outdated TODO file
+
+ TODO | 29 +----------------------------
+ 1 file changed, 1 insertion(+), 28 deletions(-)
+
+commit 6d56db8983e03fbebbeb61282bef8cb1f9abb8e2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 16 17:02:57 2018 -0800
+
+ [test/api] Distribute all fonts
+
+ test/api/Makefile.am | 21 ++-------------------
+ 1 file changed, 2 insertions(+), 19 deletions(-)
+
+commit e5ab34fd3a104f7ff2f0b36c66770c88b2ea1051
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 16 16:58:17 2018 -0800
+
+ Misc fixes
+
+ Should bring bag djgpp bot.
+
+ src/hb-ot-os2-table.hh | 54
+ +++++++++++++++++++++++++-------------------------
+ src/hb-subset-plan.cc | 16 +++++++--------
+ 2 files changed, 34 insertions(+), 36 deletions(-)
+
+commit df9e22656de746bde65dee775a66f1a80f1c2e32
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Feb 16 17:02:51 2018 -0700
+
+ [subset] add a glyf subsetting test for a font with composite glyphs.
+
+ .../api/fonts/Roboto-Regular.components.subset.ttf | Bin 0 -> 2052 bytes
+ test/api/fonts/Roboto-Regular.components.ttf | Bin 0 -> 2572 bytes
+ test/api/test-subset-glyf.c | 21
+ +++++++++++++++++++++
+ 3 files changed, 21 insertions(+)
+
+commit c36d015b0e9c363431cd9d228b776ad419fde474
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Feb 16 17:02:15 2018 -0700
+
+ [subset] missing return.
+
+ test/api/hb-subset-test.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 2130392dcc30784ee34c487ab16316006c91f16d
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Feb 16 17:01:00 2018 -0700
+
+ [subset] Add support for updating reference gids in components to
+ their new values.
+
+ src/hb-subset-glyf.cc | 38 +++++++++++++++++++++++++++++++++-----
+ 1 file changed, 33 insertions(+), 5 deletions(-)
+
+commit 49544eb860e523838892d6ce88eeca72ffd19da4
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Feb 16 16:56:15 2018 -0700
+
+ [subset] Refactor composite glyf iteration code into an Iterator
+ outside of the accelerator.
+
+ src/hb-ot-glyf-table.hh | 110
+ +++++++++++++++++++++++++-----------------------
+ src/hb-subset-plan.cc | 6 +--
+ 2 files changed, 60 insertions(+), 56 deletions(-)
+
+commit dc6d67df1395faf38d7587b1dd3c6661ee7cd6f0
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Feb 16 15:20:14 2018 -0700
+
+ [subset] Use gids_to_retain_sorted to produce old gid -> new gid
+ mapping since it now has the more complete set.
+
+ src/hb-subset-plan.cc | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+commit dcac9fe96429d4e272a3fbd60a6162f988f58f71
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Feb 16 11:27:03 2018 -0700
+
+ [subset] Use complex glyph closure to populate gids_to_retain_sorted.
+
+ src/hb-subset-plan.cc | 43 ++++++++++++++++++++++++-------------------
+ src/hb-subset-plan.hh | 6 ++++++
+ 2 files changed, 30 insertions(+), 19 deletions(-)
+
+commit 58a54c9d4f72e228c012451c4469da730742d3d8
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Feb 16 11:20:38 2018 -0700
+
+ [subset] add constant to get_composite and in_table methods in
+ hb-ot-glyf-table
+
+ src/hb-ot-glyf-table.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 73e1434814eb37005b4159babf972a2743b25700
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Feb 15 14:41:56 2018 -0800
+
+ [subset] Add a DFS search to produce a closure of composite glyphs.
+
+ src/hb-subset-plan.cc | 21 +++++++++++++++++++++
+ 1 file changed, 21 insertions(+)
+
+commit d3684141437fad6ebf5f9945f92125c9a42ea853
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Feb 15 14:03:34 2018 -0800
+
+ [subset] add helper methods to glyf accelerator for reading composite
+ glyph information.
+
+ src/hb-ot-glyf-table.hh | 115
+ ++++++++++++++++++++++++++++++++++++++++++++++--
+ 1 file changed, 112 insertions(+), 3 deletions(-)
+
+commit cd11107bb44ac719709e10264e9e6ba6a1cfae0c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 16 18:28:58 2018 -0800
+
+ Another bitops fallback fix
+
+ I'm confident that all bugs are hashed out now.
+
+ src/hb-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 4e517ecb6b7c27d4053a6476bb9262858e2567ed
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 16 18:20:12 2018 -0800
+
+ Another bitops fallback impl fix
+
+ src/hb-private.hh | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit f18b9fbf6583dff72675be7859fc147ec24a0dd2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 16 18:14:41 2018 -0800
+
+ [set] Implement iteration using bitop intrinsics
+
+ src/hb-set-private.hh | 55
+ ++++++++++++++++++---------------------------------
+ 1 file changed, 19 insertions(+), 36 deletions(-)
+
+commit 6a91a2eb04951f6e33706c2b8e9cd987b429fce9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 16 17:49:41 2018 -0800
+
+ Fix wide bitops implemenetation
+
+ src/hb-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit d25c3e69e9b0cb9d947e98845b9e3a14ce58e350
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 16 17:45:09 2018 -0800
+
+ [set] Readjust parameters
+
+ src/hb-set-private.hh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 6d5c0bf8b18ed53e8d40dcbae83ec66ed2116843
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 16 17:33:26 2018 -0800
+
+ Fix bitops fallback impl
+
+ src/hb-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 82eb1dac163cb4aef8a2e4ebad542378f4e28dca
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 16 16:52:09 2018 -0800
+
+ Flesh out other bit ops some more for 128bit as well
+
+ src/hb-private.hh | 165
+ +++++++++++++++++++++++++++++++++++++++++-------------
+ 1 file changed, 126 insertions(+), 39 deletions(-)
+
+commit 864a2dddae9eb1303c59d0d3717fce307a72a524
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 16 14:21:40 2018 -0800
+
+ Clean up bit functions
+
+ Compile all code-paths possible, to better catch errors.
+ Also enable MSVC ones on mingw which seems to support them.
+
+ src/hb-private.hh | 43 +++++++++++++++++++++++++++----------------
+ 1 file changed, 27 insertions(+), 16 deletions(-)
+
+commit 978ace6fbbc828adc20f21591d138f41d8508ebc
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 16 16:06:17 2018 -0800
+
+ Improve _hb_popcount()
+
+ Support 128bit type.
+
+ configure.ac | 3 ++-
+ src/hb-ot-layout-gpos-table.hh | 2 +-
+ src/hb-ot-map.cc | 2 +-
+ src/hb-private.hh | 61
+ +++++++++++++++++++++++++++---------------
+ 4 files changed, 44 insertions(+), 24 deletions(-)
+
+commit 7b5ce7404716a17f91ff86d374c7b76ee7ce3247
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 16 15:37:22 2018 -0800
+
+ Fix warnings
+
+ src/hb-ot-os2-table.hh | 2 +-
+ test/api/hb-subset-test.h | 3 ++-
+ test/api/hb-test.h | 9 +++++++--
+ 3 files changed, 10 insertions(+), 4 deletions(-)
+
+commit 94d32d1b83892ed4f124463cf4322bf74b3e850d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 16 15:36:20 2018 -0800
+
+ Enable C99 if available
+
+ Hopefully we can now mix-and-match code and declaration in the C
+ test files.
+
+ configure.ac | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 926db874552519734fab6c04258887ea634f5324
+Merge: 882a3bf4 c7a633f9
+Author: rsheeter <rsheeter@google.com>
+Date: Fri Feb 16 15:27:29 2018 -0800
+
+ Merge pull request #792 from googlefonts/master
+
+ Support more tables in subsetter
+
+commit 882a3bf4abcdac60414db41d54dbbb7d2368c908
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 16 14:17:20 2018 -0800
+
+ That didn't work...
+
+ RELEASING.md | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit b1f186df78ed14cbc8be919e7f552df2bd7561e0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 16 14:13:38 2018 -0800
+
+ Add mingw32.sh and mingw64.sh
+
+ RELEASING.md | 28 +---------------------------
+ mingw32.sh | 22 ++++++++++++++++++++++
+ mingw64.sh | 22 ++++++++++++++++++++++
+ 3 files changed, 45 insertions(+), 27 deletions(-)
+
+commit d37310ac5d5f8a3fd1ce1e535647e7c6bb0d7926
+Author: Arkady Shapkin <arkady.shapkin@gmail.com>
+Date: Fri Feb 16 21:45:08 2018 +0300
+
+ Remove checking macros __OPTIMIZE__ for MSVC
+
+ Visual C++ compiler doesn't define macros __OPTIMIZE__ when
+ optimizations enabled
+
+ src/hb-private.hh | 9 ++++-----
+ 1 file changed, 4 insertions(+), 5 deletions(-)
+
+commit 4eff0fc5b87084765ac2e36ba9f09d7d257f32fb
+Author: Khaled Hosny <khaledhosny@eglug.org>
+Date: Fri Feb 16 20:22:52 2018 +0200
+
+ Make this work for old versions of automake
+
+ .ci/fail.sh | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit f8077c97909778c117d37773c9da570d831dacd2
+Author: Khaled Hosny <khaledhosny@eglug.org>
+Date: Thu Feb 15 11:47:08 2018 +0200
+
+ Print only the failed log
+
+ .ci/fail.sh | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+commit 8e3b4c0e11642470069b866a73768a866ac3fdb3
+Author: Khaled Hosny <khaledhosny@eglug.org>
+Date: Thu Feb 15 11:25:24 2018 +0200
+
+ Simplify calls to collect-logs.sh
+
+ .ci/{collect-logs.sh => fail.sh} | 3 +++
+ .circleci/config.yml | 13 +++++++++----
+ .travis.yml | 6 +++---
+ appveyor.yml | 2 +-
+ 4 files changed, 16 insertions(+), 8 deletions(-)
+
+commit c7a633f95710fcf2fe9151b41feba7db4b1bab0e
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Fri Feb 16 11:11:20 2018 -0800
+
+ [subset] try to get more info from bot where g_assert_cmpmem fails
+
+ test/api/hb-subset-test.h | 12 +++++-------
+ test/api/hb-test.h | 11 ++++++++---
+ 2 files changed, 13 insertions(+), 10 deletions(-)
+
+commit 0bb2d7ac12b7cf482580b6d2e8534eef8a233f96
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Fri Feb 16 06:26:02 2018 -0800
+
+ [subset] fix int type for blob length in hb-subset-test.h
+
+ test/api/hb-subset-test.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit be0a01a67613f45db7f7e9be84cb883f0344c817
+Merge: 7acaa3b7 139c9928
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Fri Feb 16 06:01:41 2018 -0800
+
+ Merge branch 'master' of https://github.com/harfbuzz/harfbuzz
+
+commit 139c9928f6152088fa6eee0279e33cb821aeb541
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Fri Feb 16 13:27:26 2018 +0330
+
+ Fix hb-private.hh compile issue
+
+ src/hb-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 6c10328eb88b0641586f31a782b63f45eada5609
+Author: Arkady Shapkin <arkady.shapkin@gmail.com>
+Date: Thu Feb 15 23:17:46 2018 +0300
+
+ Use _BitScanForward and _BitScanReverse on MSVC
+
+ src/hb-private.hh | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+commit 7acaa3b781da835cdb11dbe523c819feb4eef996
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Thu Feb 15 14:28:29 2018 -0800
+
+ [subset] apparently C99 is too much to ask in 2018
+
+ src/hb-ot-hmtx-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit b1740106a9c825874faf3f1315770d1e3c790cf9
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Thu Feb 15 13:55:21 2018 -0800
+
+ [subset] fix format specifier for size_t
+
+ src/hb-ot-hmtx-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit e00c37aaae3922b425c0528bfdd36d59cf9c5796
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Thu Feb 15 12:53:52 2018 -0800
+
+ [subset] fix no matching function MIN in djgpp
+
+ src/hb-ot-hmtx-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 6122ad2442666d89ef39bdf5a2bb9d3f6d8e2b03
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Thu Feb 15 11:40:28 2018 -0800
+
+ [subset] add files to EXTRA_DIST
+
+ test/api/Makefile.am | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit 0758cbc4c2f52c629d05515b8d2816e8d6a2a2c1
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Thu Feb 15 11:29:01 2018 -0800
+
+ [subset] correct bug introduced to get_advance
+
+ src/hb-ot-hmtx-table.hh | 8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+commit 3fd11f4397aec9cda3a7d29246ab3ae56115ad36
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Thu Feb 15 11:15:12 2018 -0800
+
+ [subset] remove unused decl
+
+ src/hb-subset-private.hh | 3 ---
+ 1 file changed, 3 deletions(-)
+
+commit 23d21a74b55eaf6d6d367097099e6b3bb78bae37
+Author: Khaled Hosny <khaledhosny@eglug.org>
+Date: Thu Feb 15 02:52:15 2018 +0200
+
+ Move collect_logs to .ci dir
+
+ Next to other CI scripts.
+
+ .collect_logs => .ci/collect-logs.sh | 0
+ .circleci/config.yml | 8 ++++----
+ .travis.yml | 6 +++---
+ appveyor.yml | 2 +-
+ 4 files changed, 8 insertions(+), 8 deletions(-)
+
+commit 0e088a63d10dd09e025515bfa8ae68aa2922eaf6
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 14 21:11:45 2018 -0800
+
+ [subset] hmtx space bracket. authors++
+
+ src/hb-ot-hmtx-table.hh | 40 ++++++++++++++++++++--------------------
+ 1 file changed, 20 insertions(+), 20 deletions(-)
+
+commit 1725c35da0ea2f829b6d6b6c1963607fd6dfb577
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 14 19:36:33 2018 -0800
+
+ [subset] cmap space bracket
+
+ src/hb-ot-cmap-table.hh | 72
+ ++++++++++++++++++++++++-------------------------
+ 1 file changed, 36 insertions(+), 36 deletions(-)
+
+commit e158739bfb9e5d60989e179fcc8744f3125e2067
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 14 19:22:37 2018 -0800
+
+ [subset] space bracket
+
+ src/hb-ot-hmtx-table.hh | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+commit 2d6b1e2af74abea645a943d264e148d56d018101
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 14 19:14:01 2018 -0800
+
+ [subset] maxp copy writeable fn
+
+ src/hb-ot-maxp-table.hh | 9 ++++-----
+ 1 file changed, 4 insertions(+), 5 deletions(-)
+
+commit 1efecd965fe81d65e2763be4f43df2d8c4d8be44
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 14 18:42:29 2018 -0800
+
+ [subset] hmtx use copy writeable fn instead of direct memory
+
+ src/hb-ot-hmtx-table.hh | 23 ++++-------------------
+ 1 file changed, 4 insertions(+), 19 deletions(-)
+
+commit 27012526f9b3848676bc2a4fb8e68c630af18620
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 14 19:01:00 2018 -0800
+
+ [subset] whitespace
+
+ test/api/test-subset-hmtx.c | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+commit b1bd0b5f506dad9d04fd3a6abcb92122f231e0f7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 14 18:50:19 2018 -0800
+
+ [subset] Minor
+
+ src/hb-ot-cmap-table.hh | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+commit 83f57e24bfc2000373192ec44b067fdd7dee8a65
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 14 18:43:53 2018 -0800
+
+ [test] Reinstate
+ test/shaping/data/in-house/tests/myanmar-syllable.tests
+
+ test/shaping/data/in-house/tests/myanmar-syllable.tests | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 5ae6526ef4aa9b3c943cad984dc2fff09cdf597b
+Merge: 2903b2f3 04c1ec2b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 14 18:42:32 2018 -0800
+
+ [subset] Merge remote-tracking branch 'googlefonts/master'
+
+commit 04c1ec2b7396c05f6e8afc9d87679422782aa1e8
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Feb 14 17:00:18 2018 -0800
+
+ [subset] Don't fail on different checksum adjustment in subsetting
+ tests.
+
+ .../expected/basics/Roboto-Regular.abc.default.62.ttf | Bin 1740 ->
+ 1692 bytes
+ test/subset/run-tests.py | 8 ++++++++
+ 2 files changed, 8 insertions(+)
+
+commit 0775bc0f7a59241456142b48abced75fd3db5a42
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Feb 14 16:37:35 2018 -0800
+
+ [subset] Fix hhea subsetting and clean up some memory leaks.
+
+ src/hb-ot-hmtx-table.hh | 25 ++++++++++++++-----------
+ 1 file changed, 14 insertions(+), 11 deletions(-)
+
+commit b56c9384bcc177236debd26fdbbf14319e4c62b9
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Feb 14 16:05:39 2018 -0800
+
+ [subset] Add missing face reference in hb-subset-plan plus ensure
+ all struct members are cleaned up on destroy.
+
+ src/hb-subset-plan.cc | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit e0ffebead6230b8e1ee8dd97425505706321793e
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Feb 14 16:01:08 2018 -0800
+
+ [subset] In hb-subset-test use hb_set_union instead of manually
+ copying set.
+
+ test/api/hb-subset-test.h | 8 +++-----
+ 1 file changed, 3 insertions(+), 5 deletions(-)
+
+commit e330ef3711c543372f9f8550a967c512bbf87d83
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Feb 14 15:57:11 2018 -0800
+
+ [subset] Restore hb_face_data_destroy to be internal.
+
+ src/hb-subset.cc | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+commit 3ab7d2649bf5c92d3837b3132d65d4659d0fa003
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Feb 14 15:48:57 2018 -0800
+
+ [subset] Fix memory leak in hb-ot-{maxp,os2}. Plus some formatting.
+
+ src/hb-ot-maxp-table.hh | 6 ++++--
+ src/hb-ot-os2-table.hh | 24 +++++++++++++-----------
+ 2 files changed, 17 insertions(+), 13 deletions(-)
+
+commit 2903b2f357eb495c9badac1b2f74e65e1d1075bd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 14 15:46:27 2018 -0800
+
+ Another linker tweaking
+
+ Trying to fix this warning:
+ cc1: warning: command line option ‘-fno-threadsafe-statics’ is
+ valid for C++/ObjC++ but not for C
+
+ Let's see what the clang bots think of it.
+
+ src/Makefile.am | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit e1f1f96577a80846749782b6e199a661f4189ec0
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 14 15:44:48 2018 -0800
+
+ [set] Tune size again
+
+ Switch from a 128+64 hierarchy, to 32+32. New page size is 1024.
+ This should make set iteration faster, without affecting other op
+ performances much.
+
+ src/hb-set-private.hh | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+commit 66e282df32410831f1c4e157e9dcf8c76f2bc3d8
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 14 15:31:13 2018 -0800
+
+ [subset] remove TODO that was already done
+
+ src/hb-subset-plan.hh | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 4696624ad9987b0eebcf5c84dafdb204b886f28e
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 14 15:30:49 2018 -0800
+
+ [subset] maxp wrong int type, note to use copy_writable_or_fail
+
+ src/hb-ot-maxp-table.hh | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 3ed70e5e64910e1c22225f542a525807b000cb2a
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 14 15:24:49 2018 -0800
+
+ [subset] return bool not hb_bool_t from table::subset
+
+ src/hb-ot-cmap-table.hh | 2 +-
+ src/hb-ot-maxp-table.hh | 2 +-
+ src/hb-ot-os2-table.hh | 2 +-
+ src/hb-subset.cc | 2 +-
+ 4 files changed, 4 insertions(+), 4 deletions(-)
+
+commit 88d56e241bd6bb768656d77cf8f99ccc97fb2446
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 14 15:20:43 2018 -0800
+
+ [subset] Use a supplier instead of memcpy and fix a few unnecessary
+ {}s for cmap
+
+ src/hb-ot-cmap-table.hh | 24 ++++++------------------
+ 1 file changed, 6 insertions(+), 18 deletions(-)
+
+commit 42a80f00d51317207c49611b76d6bba06230371b
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 14 15:04:35 2018 -0800
+
+ [subset] add free
+
+ src/hb-ot-hmtx-table.hh | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit d463e9f6b57bebb3aa4875fe11c927c26c3e3974
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 14 15:04:15 2018 -0800
+
+ [subset] Give Behdad credit again
+
+ src/hb-subset.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit fa87770372a3156658412ff0d70e32083c6b0484
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 14 14:16:25 2018 -0800
+
+ [subset] First pass at hmtx
+
+ src/hb-ot-cmap-table.hh | 19 +--
+ src/hb-ot-hhea-table.hh | 6 +-
+ src/hb-ot-hmtx-table.hh | 163
+ ++++++++++++++++++---
+ src/hb-ot-maxp-table.hh | 8 +-
+ src/hb-ot-os2-table.hh | 8 +-
+ src/hb-subset-glyf.cc | 5 +-
+ src/hb-subset-glyf.hh | 1 -
+ src/hb-subset-plan.cc | 12 ++
+ src/hb-subset-plan.hh | 10 ++
+ src/hb-subset-private.hh | 11 ++
+ src/hb-subset.cc | 85 ++++++-----
+ test/api/Makefile.am | 7 +
+ test/api/fonts/Inconsolata-Regular.ab.ttf | Bin 0 -> 5048 bytes
+ test/api/fonts/Inconsolata-Regular.abc.ttf | Bin 0 -> 5224 bytes
+ test/api/fonts/Inconsolata-Regular.abc.widerc.ttf | Bin 0 -> 5228 bytes
+ test/api/fonts/Inconsolata-Regular.ac.ttf | Bin 0 -> 4940 bytes
+ test/api/fonts/Inconsolata-Regular.ac.widerc.ttf | Bin 0 -> 4944 bytes
+ test/api/fonts/README | 2 +
+ test/api/test-subset-hmtx.c | 164
+ ++++++++++++++++++++++
+ 19 files changed, 422 insertions(+), 79 deletions(-)
+
+commit 20022575c658b29796db80c387641309d0c49586
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Thu Feb 15 01:15:39 2018 +0330
+
+ Redirect email notifications to another mailing list dedicated for
+ this (#790)
+
+ .travis.yml | 4 ++--
+ appveyor.yml | 5 +++++
+ 2 files changed, 7 insertions(+), 2 deletions(-)
+
+commit 581996ea7976847b6356c9cc81b564f0c278f0f3
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Thu Feb 15 00:43:46 2018 +0330
+
+ Add .collect_logs and use it on CI bots, fixes #786 (#789)
+
+ .circleci/config.yml | 8 ++++----
+ .collect_logs | 6 ++++++
+ .travis.yml | 6 +++---
+ appveyor.yml | 2 +-
+ 4 files changed, 14 insertions(+), 8 deletions(-)
+
+commit e5edcc81bf14311c56bd2f50808552076c3c4d77
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Feb 14 11:17:53 2018 -0800
+
+ [subset] Fix codepoint iteration in hb-subset-test.
+
+ test/api/hb-subset-test.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit ccae99fdadcf86aeda15dc230a3ddcd6ff176533
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 14 11:12:09 2018 -0800
+
+ Another try
+
+ src/Makefile.am | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 8b1dbbef1aec3b6880186070e7386a5553d67b15
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Feb 14 11:04:12 2018 -0800
+
+ Fix compile error in hb-subset-test.
+
+ test/api/hb-subset-test.h | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+commit f53627e19100df6eb7f32d58e7c4ce47a783f1a6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 14 10:59:22 2018 -0800
+
+ [test] Fix warning
+
+ test/api/test-subset.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 8c3612af650e4c8e01a9fdc127342b07b5c77962
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 14 10:57:34 2018 -0800
+
+ Tweak Makefile some more
+
+ src/Makefile.am | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+commit d594f947b68ad36d32ce107847f5f02ec3528076
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 14 10:55:25 2018 -0800
+
+ [subset] Allow linking to libstdc++
+
+ We want to use it.
+
+ src/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit a0fe3011bafbe36e7d5810acc7df21bea08c802a
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 14 10:52:41 2018 -0800
+
+ copy all cmap groups at once
+
+ src/hb-ot-cmap-table.hh | 14 ++++----------
+ 1 file changed, 4 insertions(+), 10 deletions(-)
+
+commit d008b62887afe631f50009f40e605c8456ddd011
+Merge: b0eefacf 109314cb
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Feb 14 10:38:52 2018 -0800
+
+ Merge remote-tracking branch 'upstream/master' into fixed
+
+commit b0eefacf4cb885f510f9551bf2e9216808ca61e8
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 12 18:15:58 2018 -0800
+
+ [subset] Drop GSUB, GDEF, GPOS, and DSIG from subsetter expected
+ test outputs.
+
+ .../expected/basics/Roboto-Regular.abc.default.62.ttf | Bin 2460 ->
+ 1740 bytes
+ test/subset/generate-expected-outputs.py | 1 +
+ 2 files changed, 1 insertion(+)
+
+commit 89f17e3965ba776565f2de2bf56a4b135f336e53
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 12 18:14:50 2018 -0800
+
+ [subset] capitalize dsig.
+
+ src/hb-subset.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit df6d780355d7da805a9b9033452f8814c5360bba
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 12 17:56:17 2018 -0800
+
+ [subset] Extract maxp subsetting into hb-ot-maxp-table.
+
+ src/hb-ot-maxp-table.hh | 19 ++++++++++++++++++-
+ src/hb-subset.cc | 28 ++--------------------------
+ test/api/test-subset-glyf.c | 5 +++--
+ 3 files changed, 23 insertions(+), 29 deletions(-)
+
+commit 865b6971ad5c2ec4bc33c36a78a36b90da5f5543
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 12 17:42:20 2018 -0800
+
+ [subset] Add a test for OS/2 fixes during subsetting.
+
+ test/api/Makefile.am | 2 ++
+ test/api/fonts/Roboto-Regular.b.ttf | Bin 0 -> 1996 bytes
+ test/api/test-subset-os2.c | 59
+ ++++++++++++++++++++++++++++++++++++
+ 3 files changed, 61 insertions(+)
+
+commit 343dfe89655683966836e44afb4fd32c47377844
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 12 17:33:48 2018 -0800
+
+ [subset] white and add inline in hb-ot-cmap-table.
+
+ src/hb-ot-cmap-table.hh | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
+
+commit 24904383df03c472c865bd97bfe844f5e86a7172
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 12 17:31:01 2018 -0800
+
+ [subset] Correct usFirstCharIndex and usLastCharIndex in OS2 table
+ when subsetting.
+
+ src/hb-ot-os2-table.hh | 45 +++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-subset.cc | 16 ++++++++++------
+ 2 files changed, 55 insertions(+), 6 deletions(-)
+
+commit 109314cb55e6d95d5c3a87b9ed1ba4e74a880078
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Wed Feb 14 21:05:11 2018 +0330
+
+ Another attempt on fixing the tests on Travis (#788)
+
+ src/Makefile.am | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 694eaf636713b8d0bbe13f38c2553b1a2f3d2d3a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 14 01:00:10 2018 -0800
+
+ [set] Add backwards iterator
+
+ New API:
+ - hb_set_previous()
+ - hb_set_previous_range()
+
+ docs/harfbuzz-sections.txt | 2 ++
+ src/hb-set-private.hh | 79
+ +++++++++++++++++++++++++++++++++++++++++++++-
+ src/hb-set.cc | 49 +++++++++++++++++++++++++++-
+ src/hb-set.h | 19 ++++++++---
+ test/api/test-set.c | 53 +++++++++++++++++++++++++++++--
+ 5 files changed, 194 insertions(+), 8 deletions(-)
+
+commit fe3bc524bd4f93bd67c13ed402720a13dd3484d3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 13 23:51:45 2018 -0800
+
+ [set] Allow starting iteration from a non-member of the set
+
+ src/hb-set-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit a989f3edec5864d5de8b217aa595c962d8fc4b0a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 13 22:12:36 2018 -0800
+
+ Add hb_blob_copy_writable_or_fail()
+
+ New API:
+ - hb_blob_copy_writable_or_fail()
+
+ docs/harfbuzz-sections.txt | 1 +
+ src/hb-blob.cc | 25 +++++++++++++++++++++++++
+ src/hb-blob.h | 3 +++
+ 3 files changed, 29 insertions(+)
+
+commit 9046e924421869bf167b52cd394e868796091f62
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 13 22:07:12 2018 -0800
+
+ [subset] Rename constructor to hb_subset_input_create_or_fail()
+
+ To signify that unlike rest of library, returns nullptr on failure.
+
+ src/hb-subset-input.cc | 6 ++----
+ src/hb-subset.h | 2 +-
+ test/api/test-subset-glyf.c | 3 ++-
+ test/api/test-subset.c | 7 +++++--
+ util/hb-subset.cc | 2 +-
+ 5 files changed, 11 insertions(+), 9 deletions(-)
+
+commit 507804479a81672ec0c089313adad9fa308d78fd
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 13 21:46:28 2018 -0800
+
+ [use] Add dump-use-data
+
+ src/Makefile.am | 4 ++++
+ src/dump-use-data.cc | 38
+ ++++++++++++++++++++++++++++++++++
+ src/gen-use-table.py | 2 +-
+ src/hb-ot-shape-complex-use-private.hh | 2 +-
+ src/hb-ot-shape-complex-use-table.cc | 2 +-
+ src/hb-ot-shape-complex-use.cc | 4 ++--
+ 6 files changed, 47 insertions(+), 5 deletions(-)
+
+commit 15ba4fbe01433c8627f9e6a60106ca77d3e1ad4c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 13 21:41:51 2018 -0800
+
+ [khmer] Add dump-khmer-data
+
+ src/Makefile.am | 4 +
+ src/Makefile.sources | 1 +
+ src/dump-khmer-data.cc | 43 +++++++++++
+ src/hb-ot-shape-complex-khmer-private.hh | 124
+ +++++++++++++++++++++++++++++++
+ src/hb-ot-shape-complex-khmer.cc | 98 +-----------------------
+ 5 files changed, 173 insertions(+), 97 deletions(-)
+
+commit effddd03bd6fb0aac14b46a16b281f3749e44780
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 13 21:38:15 2018 -0800
+
+ [myanmar] Add dump-myanmar-data
+
+ src/Makefile.am | 4 +
+ src/Makefile.sources | 1 +
+ src/dump-myanmar-data.cc | 43 ++++++++
+ src/hb-ot-shape-complex-indic-private.hh | 8 +-
+ src/hb-ot-shape-complex-myanmar-private.hh | 171
+ +++++++++++++++++++++++++++++
+ src/hb-ot-shape-complex-myanmar.cc | 138 +----------------------
+ 6 files changed, 225 insertions(+), 140 deletions(-)
+
+commit c0e45b60a001a45c8ed1f12af8f2f222161eca6a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 13 21:23:38 2018 -0800
+
+ [indic] Rename print-indic-table to dump-indic-data
+
+ Makes more sense given what this prints, err, dumps.
+
+ src/Makefile.am | 8 ++++----
+ src/{print-indic-table.cc => dump-indic-data.cc} | 0
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+commit 9b878bd2165236b067d59410673cf5cc54968fa7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 13 21:22:47 2018 -0800
+
+ [indic] Explicitly number indic_position_t
+
+ So it's easier to cross-reference from output of print-indic-table.
+
+ src/hb-ot-shape-complex-indic-private.hh | 32
+ ++++++++++++++++----------------
+ 1 file changed, 16 insertions(+), 16 deletions(-)
+
+commit 8634846a0a1049c42ea84ca34402957c981b4c73
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 13 21:18:00 2018 -0800
+
+ More tweaking linker and linker flags
+
+ src/Makefile.am | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit d830d3d2448b2248dff642c701b442e1260e2d85
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 13 19:01:03 2018 -0800
+
+ [indic] Share some copy/pasta code
+
+ src/hb-ot-shape-complex-indic-private.hh | 29
+ +++++++++++++++++++++++++++--
+ src/hb-ot-shape-complex-indic.cc | 27 ---------------------------
+ src/hb-ot-shape-complex-khmer.cc | 30
+ ++++++++----------------------
+ src/hb-ot-shape-complex-myanmar.cc | 19 ++-----------------
+ 4 files changed, 37 insertions(+), 68 deletions(-)
+
+commit 397ed53e55b9450742867a43d164b498ec735f50
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 13 18:54:26 2018 -0800
+
+ [indic] Add print-indic-table
+
+ src/Makefile.am | 14 ++-
+ src/hb-ot-shape-complex-indic-private.hh | 185
+ ++++++++++++++++++++++++++++++
+ src/hb-ot-shape-complex-indic.cc | 187
+ -------------------------------
+ src/print-indic-table.cc | 43 +++++++
+ 4 files changed, 239 insertions(+), 190 deletions(-)
+
+commit fd0bde6325a7dfe3ba54b683646ca0693c414446
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 13 16:35:30 2018 -0800
+
+ [subset] Fix loca offsets
+
+ Was writing source font's offsets. Ouch.
+
+ src/hb-subset-glyf.cc | 30 +++++++++++-------------------
+ 1 file changed, 11 insertions(+), 19 deletions(-)
+
+commit aeed082e282b97e40c2e8590bdd8818affc7de6c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 13 14:02:59 2018 -0800
+
+ Another tweak at libstdc++ things
+
+ To fix this warning:
+
+ cc1: warning: command line option ‘-fno-threadsafe-statics’ is
+ valid for C++/ObjC++ but not for C
+
+ src/Makefile.am | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit c7d7c9898e22905888dc4304f6d8e79b55654174
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 13 14:00:14 2018 -0800
+
+ [aat] Minor
+
+ src/hb-aat-layout-morx-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 2dbfeecf96c6993d42594f43133d945d67ddbdbc
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 13 13:59:39 2018 -0800
+
+ Minor
+
+ src/hb-aat-layout-morx-table.hh | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+commit d5b33f2fe1603e894e21f45afb4c00c8d670fb5c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 13 13:50:50 2018 -0800
+
+ [subset] hb_subset_input_t changes
+
+ src/Makefile.sources | 1 +
+ src/hb-face.h | 1 -
+ src/hb-set.cc | 14 +++---
+ src/hb-subset-input.cc | 109
+ ++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-subset-plan.cc | 2 +-
+ src/hb-subset-private.hh | 11 ++++-
+ src/hb-subset.cc | 40 ++--------------
+ src/hb-subset.h | 12 ++++-
+ test/api/test-subset-glyf.c | 4 +-
+ test/api/test-subset.c | 2 +-
+ util/hb-subset.cc | 20 ++++----
+ 11 files changed, 153 insertions(+), 63 deletions(-)
+
+commit 28e63a1287fd38a98eed6725c2f4d0820066b0d8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 13 13:39:50 2018 -0800
+
+ Disable threadsafe static's for all libraries
+
+ Even in libharfbuzz-subset, we still will handle our own threadsafety
+ for statics.
+
+ src/Makefile.am | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 7caddb51b1e69a2803f86756e2ce2acff685c7d0
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Tue Feb 13 15:12:43 2018 +0330
+
+ Specify the project name for coverity, trying to fix #785
+
+ .travis.yml | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit b969a82e30f0ff7bf6b2ea2600ef170764774a8c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Feb 12 20:51:26 2018 -0800
+
+ Pass no-libstdc++ flags only to libraries suppressing it
+
+ src/Makefile.am | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+commit 97a2f0320056b591d7a747022869fe9cd8ecc6e1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Feb 12 18:51:10 2018 -0800
+
+ [subset] Allocate bulk memory with malloc(), not calloc()
+
+ We use calloc() to allocate simple structs and set them to zero.
+ For bulk memory, use malloc() that doesn't zero.
+
+ src/hb-subset-glyf.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 96f1f52ea3a42b27f59aecffe65c918295e53b3b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Feb 12 18:48:51 2018 -0800
+
+ Use hb_face_get_upem() instead of face->get_upem()
+
+ Such that hmtx accelerator can be used from libharfbuzz-subset.
+
+ src/hb-ot-cbdt-table.hh | 2 +-
+ src/hb-ot-hmtx-table.hh | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 3d66f441cc4d4feb2fd4b03be9f764c91f4de8b2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Feb 12 18:43:42 2018 -0800
+
+ [subset] Remove unreachable code
+
+ sanitizer.sanitize never return nullptr.
+
+ src/hb-subset.cc | 4 ----
+ 1 file changed, 4 deletions(-)
+
+commit 42040a273facc696d9a54fc4d89857665e87e3d1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Feb 12 18:41:36 2018 -0800
+
+ Allow libharfbuzz-subset to link to libstdc++
+
+ We want to use it instead of reinventing hashmap...
+
+ Also, don't change linker for ICU since libicu also uses libstdc++.
+
+ src/Makefile.am | 2 --
+ src/check-libstdc++.sh | 3 ++-
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+commit 4af3c5e25822cc5a401837da547c75a17b7f7b48
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Mon Feb 12 23:21:24 2018 +0330
+
+ Move linker specifying to a better place
+
+ src/Makefile.am | 15 +++++++--------
+ 1 file changed, 7 insertions(+), 8 deletions(-)
+
+commit 8cf8b78faaf3e7ee261bdc44a1ad5a1973eab1a2
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 12 16:30:21 2018 -0800
+
+ [subset] whitespace
+
+ test/api/test-subset-cmap.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit d1a4d5616f792c6ad84bcc5011040167ddd7cc3f
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Mon Feb 12 16:25:32 2018 -0800
+
+ output format 12 as enc 10 to match how Roboto did it
+
+ src/hb-ot-cmap-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 89ee20f1a39ac78268b57a9aebe8e7428f9944bf
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Mon Feb 12 16:01:15 2018 -0800
+
+ basic wiring for a (failing) cmap test
+
+ test/api/Makefile.am | 2 +
+ test/api/fonts/README | 1 +
+ .../Roboto-Regular.abc.cmap-format12-only.ttf | Bin 0 -> 2412 bytes
+ .../fonts/Roboto-Regular.ac.cmap-format12-only.ttf | Bin 0 -> 2212 bytes
+ test/api/hb-subset-test.h | 3 +-
+ test/api/test-subset-cmap.c | 82
+ +++++++++++++++++++++
+ test/api/test-subset-glyf.c | 5 +-
+ .../data/in-house/tests/myanmar-syllable.tests | 1 -
+ 8 files changed, 87 insertions(+), 7 deletions(-)
+
+commit afb1da3a1891b7c0fdd047bcb7b3bde86e830444
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Mon Feb 12 14:37:47 2018 -0800
+
+ auto-completed the wrong gids_to_retain
+
+ src/hb-subset-plan.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 1330edc4fe3ffbf18313d6432045606865c610c4
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Mon Feb 12 14:29:23 2018 -0800
+
+ Use functions to get new gids. Avoid 0; fonttools drops it from cmap.
+
+ src/hb-ot-cmap-table.hh | 24 ++++++++++++++++++------
+ src/hb-subset-plan.cc | 25 ++++++++++++++++++++-----
+ src/hb-subset-plan.hh | 5 +++++
+ src/hb-subset.cc | 2 +-
+ 4 files changed, 44 insertions(+), 12 deletions(-)
+
+commit 1639bdd33122dc8e5522b95c37660273d1fc609e
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 12 13:40:42 2018 -0800
+
+ [subset] Remove test-subset, testing is planned to be done at the
+ table level here with test/subset covering the complete subsetting
+ operation.
+
+ test/api/Makefile.am | 1 -
+ test/api/test-subset.c | 73
+ --------------------------------------------------
+ 2 files changed, 74 deletions(-)
+
+commit 4cdd1b16c99f2681eb11d626c4408eebcc1672be
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 12 13:36:28 2018 -0800
+
+ [subset] added todo in test-subset-glyf.
+
+ test/api/test-subset-glyf.c | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 1714feef4f7ec9e758e65edcbe5d5591562f46ee
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 12 13:35:17 2018 -0800
+
+ [subset] re-enable test-subset-glyf. Refactor to use common functions
+ in hb-subset-test.h
+
+ test/api/test-subset-glyf.c | 109
+ +++++++++++---------------------------------
+ 1 file changed, 27 insertions(+), 82 deletions(-)
+
+commit d8d8bd8405ec0db781c4c2bbb7ebd6ff520b3c2d
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 12 13:33:55 2018 -0800
+
+ [subset] Add some helper functions for writing tests around
+ subsetting.
+
+ test/api/Makefile.am | 2 +-
+ test/api/hb-subset-test.h | 123
+ ++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 124 insertions(+), 1 deletion(-)
+
+commit e8318188c0e53a267a01c45b0fc8d29ad775738a
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 12 11:38:28 2018 -0800
+
+ [subset] Fix loca generation, was previously writing the original
+ glyph starting offset.
+
+ src/hb-subset-glyf.cc | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+commit 0b94d590d971de0b44b0db941c7a3e095f15fbc9
+Author: Khaled Hosny <khaledhosny@eglug.org>
+Date: Mon Feb 12 16:45:36 2018 +0200
+
+ Rename --with-stdcpp → --with-libstdc++
+
+ Also improve wording a bit and fix make check in --with-libstdc++=yes.
+
+ configure.ac | 11 ++++++-----
+ src/Makefile.am | 11 ++++++++---
+ 2 files changed, 14 insertions(+), 8 deletions(-)
+
+commit a5713bc2cb4a3fd71d3bc94b9f155339b09eb71a
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Mon Feb 12 11:30:45 2018 -0800
+
+ we love all our groups
+
+ src/hb-ot-cmap-table.hh | 7 ++-----
+ 1 file changed, 2 insertions(+), 5 deletions(-)
+
+commit 692f86e569847adb332186cbb08f344ebe41fa6c
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Mon Feb 12 11:29:23 2018 -0800
+
+ drop GDEF, GPOS, GSUB, and dsig
+
+ src/hb-subset.cc | 19 +++++++++++++++++++
+ 1 file changed, 19 insertions(+)
+
+commit 83e1ef92156d8688b96d14957efcdf7601768799
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 12 11:22:32 2018 -0800
+
+ [subset] Set the new number of glyphs in maxp.
+
+ src/hb-ot-maxp-table.hh | 5 +++++
+ src/hb-subset.cc | 37 ++++++++++++++++++++++++++++++++-----
+ 2 files changed, 37 insertions(+), 5 deletions(-)
+
+commit 427f9e4b90bfadb8af13cbd27b7c3ee0153ca8b1
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 12 11:18:28 2018 -0800
+
+ Don't force loca version to long.
+
+ src/hb-subset-glyf.cc | 2 --
+ 1 file changed, 2 deletions(-)
+
+commit 5df080bf155a12f98929b99438da492063ab9218
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 12 10:15:59 2018 -0800
+
+ Destroy the subset plan at the end of subsetting.
+
+ src/hb-subset.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 0301e5be286f5080ec34e9f30c75e73f28d0218b
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Mon Feb 12 10:12:11 2018 -0800
+
+ Build a working cmap format 12
+
+ src/hb-ot-cmap-table.hh | 13 ++++++++++++-
+ 1 file changed, 12 insertions(+), 1 deletion(-)
+
+commit ebd31d376d63c9698c0eae34ed295558f7230918
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Mon Feb 12 10:10:08 2018 -0800
+
+ subset for real
+
+ src/hb-subset.cc | 4 +---
+ 1 file changed, 1 insertion(+), 3 deletions(-)
+
+commit 62c7d677e8699143e55e7bfa0cc3c1db75f32506
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Mon Feb 12 10:09:35 2018 -0800
+
+ C-style comments
+
+ src/hb-open-file-private.hh | 15 ++++++++-------
+ 1 file changed, 8 insertions(+), 7 deletions(-)
+
+commit 91f0d51f0525097fef6173046379a89414cb515f
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Mon Feb 12 17:20:12 2018 +0330
+
+ Fix symbol exporting issue on msys2 and ✅ bringing all the bots
+ (#781)
+
+ src/Makefile.am | 14 ++++++++------
+ 1 file changed, 8 insertions(+), 6 deletions(-)
+
+commit 133e17fe2335abb77f61dbf1cff1955c21334137
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Mon Feb 12 15:24:22 2018 +0330
+
+ Minor
+
+ src/check-defs.sh | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 16f5b53eec4c3238cf92438a17e6dc532e8a61f5
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Mon Feb 12 15:18:13 2018 +0330
+
+ Minor, don't skip the whole test when one .def file not found
+
+ src/check-defs.sh | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+commit a9b650d38407f6f2a26d8386e801600b1004d5d6
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Mon Feb 12 15:10:13 2018 +0330
+
+ Apply check-defs.sh to -icu and -subset, toward mingw fix (#780)
+
+ CMakeLists.txt | 11 ++++++++---
+ src/Makefile.am | 21 ++++++++++++++++-----
+ src/check-defs.sh | 12 +++++-------
+ src/gen-def.py | 9 ++++++---
+ 4 files changed, 35 insertions(+), 18 deletions(-)
+
+commit 2efc8965506d8fd31934be1dba3322f922f3409d
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Mon Feb 12 12:00:07 2018 +0330
+
+ Add --with-stdcpp for ossfuzzer and mupdf use (#770)
+
+ configure.ac | 12 ++++++------
+ src/Makefile.am | 14 +++++++++++++-
+ 2 files changed, 19 insertions(+), 7 deletions(-)
+
+commit 82e04758c895ce2cd6bddde5f72e592c718fcb69
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Mon Feb 12 11:56:32 2018 +0330
+
+ minor
+
+ .travis.yml | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+commit 7daa2822f6320801dfed09782ae46687e7c8cbb3
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Mon Feb 12 11:27:00 2018 +0330
+
+ Add Travis based Coverity trigger (#778)
+
+ .ci/trigger-coverity.sh | 13 +++++++++++++
+ .travis.yml | 14 ++++++++++++++
+ 2 files changed, 27 insertions(+)
+
+commit 7747bdb11b0635738a14c099bfaf58461cadd79a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 11 19:12:52 2018 -0800
+
+ Remove linker selection from hb-ucdn
+
+ Since this is a convenience library, it's not actually linked. Or
+ so I think.
+ Hoping this might fix this Appveyor failure:
+
+ https://ci.appveyor.com/project/harfbuzz/harfbuzz/build/job/9884jyb5vryja9pw
+
+ Making all in hb-ucdn
+ make[4]: Entering directory '/c/projects/harfbuzz/src/hb-ucdn'
+ CC libhb_ucdn_la-ucdn.lo
+ GEN libhb-ucdn.la
+ /bin/sh: libhb_ucdn_la-ucdn.lo: command not found
+ make[4]: *** [Makefile:404: libhb-ucdn.la] Error 127
+ make[4]: Leaving directory '/c/projects/harfbuzz/src/hb-ucdn'
+ make[3]: *** [Makefile:2548: all-recursive] Error 1
+ make[3]: Leaving directory '/c/projects/harfbuzz/src'
+ make[2]: *** [Makefile:1382: all] Error 2
+ make[2]: Leaving directory '/c/projects/harfbuzz/src'
+ make[1]: *** [Makefile:486: all-recursive] Error 1
+ make[1]: Leaving directory '/c/projects/harfbuzz'
+ make: *** [Makefile:418: all] Error 2
+
+ src/hb-ucdn/Makefile.am | 11 -----------
+ 1 file changed, 11 deletions(-)
+
+commit 90d1c740c370b97dfff52420db013ed50075b984
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 11 19:08:59 2018 -0800
+
+ Add MSVC to no-visibility list
+
+ src/hb-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 0db6c6f214a83ffeeefb7c3b77476567e534facb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 11 18:28:10 2018 -0800
+
+ Add Sun compiler to no-visibility as well
+
+ Fixes https://github.com/harfbuzz/harfbuzz/pull/776
+
+ src/hb-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit d33ba163611c42acd0125472191ea40745f905eb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 11 18:26:41 2018 -0800
+
+ Fix more warnings
+
+ test/api/test-buffer.c | 14 +++++++-------
+ 1 file changed, 7 insertions(+), 7 deletions(-)
+
+commit dde6448379c9eeb0fc7cc476688002be661229b8
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 11 18:24:22 2018 -0800
+
+ Another try at fixing multiple-defintion of NullPool
+
+ This one might do it...
+
+ src/hb-open-type-private.hh | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+commit b5f25844fbdd3167051c8d3586b404ae7f077b3b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 11 19:49:18 2018 -0600
+
+ [docs] Minor update
+
+ docs/harfbuzz-sections.txt | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 41906cd5efc2fe17f5fff3fa5fe8488e0cdc6399
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 11 19:46:06 2018 -0600
+
+ [subset] Another fixup
+
+ I broke this in c31fcf4c58d96eb7d9781a986991b1a79ac7be44
+
+ src/hb-ot-cmap-table.hh | 2 +-
+ test/subset/run-tests.py | 1 +
+ 2 files changed, 2 insertions(+), 1 deletion(-)
+
+commit cd32177a322b5fd70c92f67f21b64686bf5d5533
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 11 19:34:05 2018 -0600
+
+ Try at fixing multiple-definition of NullPool
+
+ If we don't have visibility, make NullPool static.
+
+ src/hb-open-type-private.hh | 8 +++++++-
+ src/hb-ot-layout.cc | 2 ++
+ src/hb-private.hh | 4 +---
+ 3 files changed, 10 insertions(+), 4 deletions(-)
+
+commit 3d421ce30713582484471baba76470c84dabc118
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 11 19:01:44 2018 -0600
+
+ [subset] Use auto_array_t where it does make sense
+
+ Better fix for https://github.com/harfbuzz/harfbuzz/pull/775
+
+ src/hb-subset-plan.cc | 3 +--
+ 1 file changed, 1 insertion(+), 2 deletions(-)
+
+commit 9aa2eb61e6cb3e4308140bed8a8531877ffd6adf
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 11 19:00:42 2018 -0600
+
+ Minor
+
+ src/hb-ot-cmap-table.hh | 7 +++----
+ 1 file changed, 3 insertions(+), 4 deletions(-)
+
+commit ae6d0259b4f075885070f833d0f2a96333bf4af3
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sun Feb 11 15:40:55 2018 +0330
+
+ Install fonttools on two bots and enable cmake hb-subset test (#777)
+
+ .circleci/config.yml | 6 ++++--
+ test/subset/CMakeLists.txt | 8 ++++----
+ 2 files changed, 8 insertions(+), 6 deletions(-)
+
+commit c8d4c2e32f1cea610a9c91dc6b0c32e9ffe84f20
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sun Feb 11 13:15:44 2018 +0330
+
+ Initialize bad_indices on hb-subset (#775)
+
+ src/hb-subset-plan.cc | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit 5845e5ca3bac21c0b03e71eab282b02fb7e868a4
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sun Feb 11 12:03:33 2018 +0330
+
+ fix gobject compile issue (#773)
+
+ src/hb-gobject-structs.h | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 9b5af3ec7f80a7793d5d3891e762d83026de0a5b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Feb 10 21:50:26 2018 -0600
+
+ [gpos] Adjust mark attachment heuristic
+
+ Hopefully it...
+ fixes https://github.com/harfbuzz/harfbuzz/issues/740
+
+ src/hb-ot-layout-gpos-table.hh | 9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+commit 70b06cc6e71e15f0d7550f67b113eed5e6f30a5f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Feb 10 16:13:06 2018 -0600
+
+ More fixes
+
+ util/hb-subset.cc | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 6c1848b1e3b8969afc441f094b0d7b64b4b14933
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Feb 10 15:52:35 2018 -0600
+
+ Misc warning fixes
+
+ test/api/test-blob.c | 2 +-
+ test/api/test-buffer.c | 14 +++++++-------
+ test/api/test-ot-tag.c | 2 +-
+ 3 files changed, 9 insertions(+), 9 deletions(-)
+
+commit 7039803b51f23cb15dd7e12b105c379bd2e38d71
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Feb 10 15:47:50 2018 -0600
+
+ Fix djgpp bot
+
+ src/hb-subset-glyf.cc | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit cdab20df1e55da196ffc6bc00d580e5ef74c1975
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Feb 10 15:45:17 2018 -0600
+
+ Minor
+
+ src/hb-ot-layout.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 203b647530b1550388bb3ce2f67e3b17e019d3e4
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sun Feb 11 01:00:03 2018 +0330
+
+ Favor use of static instead HB_INTERNAL
+
+ src/hb-subset-glyf.cc | 8 ++++----
+ src/hb-subset-plan.cc | 4 ++--
+ src/hb-subset.cc | 2 +-
+ 3 files changed, 7 insertions(+), 7 deletions(-)
+
+commit 4c5bdb4b39a723b624346d9b9ff9ace964fff0fe
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Feb 10 15:40:54 2018 -0600
+
+ [test] Disable test-subset-glyf for now
+
+ test/api/test-subset-glyf.c | 5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+commit 43314ff4c05076decbd1eb07ed78f732b6ebcba9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Feb 10 15:40:03 2018 -0600
+
+ More fixes
+
+ test-subset-glyf still failing. No idea why :(
+
+ src/hb-subset.cc | 3 +--
+ test/api/test-subset-glyf.c | 26 ++++++++++++++++----------
+ 2 files changed, 17 insertions(+), 12 deletions(-)
+
+commit a981d798eab41b6a7c6484776f04fe178bd536ba
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Feb 10 15:17:28 2018 -0600
+
+ Fix more build issues
+
+ Hopefully most bots come back with this...
+
+ src/check-libstdc++.sh | 5 +++--
+ src/check-symbols.sh | 2 +-
+ src/hb-buffer.h | 1 -
+ src/hb-gobject-structs.h | 6 ++++++
+ src/hb-subset-plan.cc | 10 +++++++---
+ src/hb-subset.cc | 6 +++---
+ 6 files changed, 20 insertions(+), 10 deletions(-)
+
+commit 6c4ca6135a2ce846431b0ede6a288d3b2f97167e
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sun Feb 11 00:42:06 2018 +0330
+
+ Hide more symbols of hb-subset (#771)
+
+ src/hb-subset-plan.cc | 2 +-
+ src/hb-subset.cc | 6 +++---
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+commit c31fcf4c58d96eb7d9781a986991b1a79ac7be44
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Feb 10 14:20:10 2018 -0600
+
+ [subset] Replace auto_array with prealloced_array
+
+ auto_array has constructor/destructor. Cannot be used in POD object,
+ as the clang
+ bots all noticed...
+
+ src/hb-ot-cmap-table.hh | 8 ++++----
+ src/hb-subset-glyf.cc | 6 +++---
+ src/hb-subset-plan.cc | 23 +++++++++++------------
+ src/hb-subset-plan.hh | 9 +++------
+ 4 files changed, 21 insertions(+), 25 deletions(-)
+
+commit 931d67900ee6d96b5962a475c1b71a58b821bcba
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Feb 10 14:11:16 2018 -0600
+
+ Fix some other bots
+
+ src/hb-subset-glyf.cc | 5 ++---
+ 1 file changed, 2 insertions(+), 3 deletions(-)
+
+commit 4011d885b7fca87c717fdaa4bd0318a42308865a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Feb 10 14:09:06 2018 -0600
+
+ [util] Remove use of ssize_t which was failing on MSVC
+
+ util/hb-subset.cc | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit bfa871634ce9ef9f4ed18348d898686952d6cbe3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Feb 10 13:37:28 2018 -0600
+
+ Minor
+
+ src/hb-subset-glyf.hh | 2 +-
+ src/hb-subset-plan.hh | 2 +-
+ src/hb-subset.cc | 3 +--
+ src/hb-subset.h | 2 +-
+ 4 files changed, 4 insertions(+), 5 deletions(-)
+
+commit 844f48ea9a72d28e2c088497f6c403c54e1751a8
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sat Feb 10 23:13:12 2018 +0330
+
+ Fix symbol exporting and libstdc++ linkage of hb-subset (#769)
+
+ CMakeLists.txt | 6 ++----
+ src/Makefile.am | 3 +++
+ src/check-defs.sh | 2 +-
+ src/check-libstdc++.sh | 20 +++++++++++---------
+ src/check-symbols.sh | 28 +++++++++++++++-------------
+ src/hb-subset-glyf.cc | 8 ++++----
+ src/hb-subset-glyf.hh | 2 +-
+ src/hb-subset-plan.cc | 4 ++--
+ src/hb-subset-plan.hh | 8 ++++----
+ src/hb-subset.cc | 2 +-
+ src/hb-ucdn/Makefile.am | 11 +++++++++++
+ 11 files changed, 55 insertions(+), 39 deletions(-)
+
+commit 91519c6a5b130ced569cedc3710ab395b663240d
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Feb 10 13:35:17 2018 -0600
+
+ [aat] Add buffer messages
+
+ src/hb-aat-layout-morx-table.hh | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit af274507c4f4c5a582543affa71d81a87d6d9151
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Feb 10 13:25:49 2018 -0600
+
+ Minor
+
+ src/hb-private.hh | 15 ++++++---------
+ 1 file changed, 6 insertions(+), 9 deletions(-)
+
+commit 570d523761b23a3c668d9071712d5f10944d21fc
+Merge: 71130a20 d18decd2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Feb 10 13:24:22 2018 -0600
+
+ [subset] Merge remote-tracking branch 'googlefonts/master'
+
+commit 71130a20fae7c256b0ab1aa397cc1ac2d11dd487
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Feb 10 13:15:57 2018 -0600
+
+ Replace Supplier.advance with Supplier::operator+=
+
+ src/hb-open-file-private.hh | 4 ++--
+ src/hb-open-type-private.hh | 7 ++++---
+ src/hb-ot-layout-common-private.hh | 4 ++--
+ src/hb-ot-layout-gsub-table.hh | 10 +++++-----
+ 4 files changed, 13 insertions(+), 12 deletions(-)
+
+commit d0f3e7f59719bdb6a2105ee85a8f3ee799741dab
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sat Feb 10 12:45:28 2018 -0600
+
+ [util] Use setlinebuf() if present
+
+ To work around mysterious bug on OS X.
+
+ Fixes https://github.com/harfbuzz/harfbuzz/issues/727
+
+ configure.ac | 6 ++----
+ util/options.cc | 12 ++++++++++--
+ 2 files changed, 12 insertions(+), 6 deletions(-)
+
+commit ad575a5f47a51ee553710873ac2672479b76ba5e
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sat Feb 10 19:50:11 2018 +0330
+
+ Fix cast warnings on clang (#768)
+
+ src/hb-open-type-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit d18decd2013f24f315dbd3b15cdd80c5a734e7e9
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Feb 9 18:41:21 2018 -0800
+
+ In glyf subsetting add suport for writing out a short loca table
+ when possible.
+
+ src/hb-subset-glyf.cc | 42 +++++++++++++++++++++++++++++++++---------
+ 1 file changed, 33 insertions(+), 9 deletions(-)
+
+commit 9275bd03ea427eb607dde6a8e65f78a350b88323
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Fri Feb 9 17:33:34 2018 -0800
+
+ First pass at building a cmap
+
+ src/hb-ot-cmap-table.hh | 103
+ ++++++++++++++++++++++++++++++++++++++++++++----
+ src/hb-subset.cc | 37 +++++++++--------
+ 2 files changed, 115 insertions(+), 25 deletions(-)
+
+commit d2170d14780ad6f8e0d17a1e011445c3bcc20871
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Feb 9 17:24:16 2018 -0800
+
+ Check for failures from add table.
+
+ src/hb-subset.cc | 9 ++++-----
+ 1 file changed, 4 insertions(+), 5 deletions(-)
+
+commit 4816064c0e5464d032a55001a959a9abcef7f70e
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Fri Feb 9 17:14:37 2018 -0800
+
+ add missing return
+
+ src/hb-private.hh | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit 0089443756cdcef0182e55cf8480b96a64d31cc7
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Feb 9 16:22:09 2018 -0800
+
+ Keep a second set of glyph ids in subset plan which is sorted by
+ glyph id and always has gid 0
+
+ src/hb-subset-glyf.cc | 2 +-
+ src/hb-subset-plan.cc | 34 +++++++++++++++++++++++++---------
+ src/hb-subset-plan.hh | 1 +
+ 3 files changed, 27 insertions(+), 10 deletions(-)
+
+commit 3bc81558d836e27e77bda0d6da9c71f530719579
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Feb 9 16:06:33 2018 -0800
+
+ Formatting for hb-subset-plan.
+
+ src/hb-subset-plan.cc | 51
+ +++++++++++++++++++++++++++------------------------
+ 1 file changed, 27 insertions(+), 24 deletions(-)
+
+commit 8cef3a61995317d3a5724221108647d7e66fe24a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 9 16:04:23 2018 -0600
+
+ Try fixing build with Sun Studio
+
+ Trying to fix:
+ https://circleci.com/gh/harfbuzz/harfbuzz/6635
+
+ Also part of:
+ https://github.com/harfbuzz/harfbuzz/issues/630
+
+ src/hb-private.hh | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+commit 86aa4b3ba7cd075f01614874dae88a771b8c54fd
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Feb 9 13:54:43 2018 -0800
+
+ Return empty face on hb_subset failure instead of null. Plus some
+ minor cleanups for _add_head_and_set_loca_version
+
+ src/hb-subset.cc | 11 +++++------
+ 1 file changed, 5 insertions(+), 6 deletions(-)
+
+commit d45f240e4e330cedad737fdb792b311c37a19e32
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 9 15:51:45 2018 -0600
+
+ Typo
+
+ src/hb-buffer.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 3b7aa651b4714b996816023a4929c0289065493f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 9 15:43:20 2018 -0600
+
+ [docs] Improve UNSAFE_TO_BREAK docs
+
+ src/hb-buffer.h | 17 +++++++++++++++--
+ 1 file changed, 15 insertions(+), 2 deletions(-)
+
+commit 671f0a7733a496eb46b08dc88c3c46b804cdd895
+Author: bungeman <bungeman@chromium.org>
+Date: Thu Feb 1 13:31:25 2018 -0500
+
+ Documentation for HB_GLYPH_FLAG_UNSAFE_TO_BREAK.
+
+ HB_GLYPH_FLAG_UNSAFE_TO_BREAK means that the glyph with this flag is
+ somehow affected by the previous logical glyph (the previous index
+ in the buffer if ltr and the next index if the buffer is rtl). If
+ these two glyphs are separated by a break (line or otherwise) then the
+ underlying text should be re-shaped on both sides up to corresponding
+ position in the text of some glyph not marked with this flag.
+
+ src/hb-buffer.h | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+commit 1582eabee6017839518b821ef93a329a0a86a453
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Feb 9 12:52:08 2018 -0800
+
+ Update head table with loca format selected by glyf+loca subsetting.
+
+ src/hb-subset-glyf.cc | 7 +++----
+ src/hb-subset-glyf.hh | 1 +
+ src/hb-subset.cc | 37 +++++++++++++++++++++++++++++++++++--
+ 3 files changed, 39 insertions(+), 6 deletions(-)
+
+commit 335bbaa66f66e86d417cc123a2bf397e8b834f64
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Feb 9 10:55:15 2018 -0800
+
+ Remove uneeded code in hb-subset.
+
+ src/hb-subset.cc | 19 -------------------
+ 1 file changed, 19 deletions(-)
+
+commit 3346ba9cd5198d27c7416b8c71fecb6c8d3cb335
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 9 11:05:17 2018 -0600
+
+ [test/text-rendering-tests] Update from upstream
+
+ .../text-rendering-tests/fonts/TestMORXTwentysix.ttf | Bin 3260 ->
+ 3252 bytes
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+commit 1cd98d05e07498653ba60a68b6342d1a90429eba
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Thu Feb 8 19:39:57 2018 -0800
+
+ Create the groups for a cmap format12. Does not yet build the
+ actual table.
+
+ src/hb-ot-cmap-table.hh | 25 +++++++++++++++++++++++++
+ 1 file changed, 25 insertions(+)
+
+commit 59c658c8d53481990fe0efa66422353d0687474b
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Thu Feb 8 19:22:47 2018 -0800
+
+ capture codepoints sorted so we can use them for cmap later. one
+ day we will have a map
+
+ src/hb-ot-cmap-table.hh | 14 ---------
+ src/hb-private.hh | 61 +++++++++++++++++++++++++---------------
+ src/hb-subset-glyf.cc | 16 +++++------
+ src/hb-subset-plan.cc | 75
+ ++++++++++++++++++++++++++++++++++---------------
+ src/hb-subset-plan.hh | 8 ++++--
+ src/hb-subset.cc | 29 ++++++++++++-------
+ 6 files changed, 123 insertions(+), 80 deletions(-)
+
+commit 8431c38cdc05ddcddb1aa5fbb72a95446b500fd2
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Thu Feb 8 19:20:58 2018 -0800
+
+ remove output noise
+
+ util/hb-subset.cc | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 5cca0c07afbe9ab4b28d333f6f853063ecd75aff
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Thu Feb 8 19:05:46 2018 -0800
+
+ fix comment
+
+ src/hb-open-file-private.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit a19138e668e77a0c05da2ab065c5366c8359b377
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Thu Feb 8 19:03:41 2018 -0800
+
+ comment the serialization of table
+
+ src/hb-open-file-private.hh | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit 5a34114f9685680d4a8cdf85a8ac90172c5620d7
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Feb 8 18:32:24 2018 -0800
+
+ Add an extra entry to the end of the loca table to identify the end
+ of the last glyph's data.
+
+ src/hb-subset-glyf.cc | 7 ++++++-
+ 1 file changed, 6 insertions(+), 1 deletion(-)
+
+commit aac7d962120aa137385324b33a173df4f19fd80b
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Feb 8 18:18:16 2018 -0800
+
+ Apply per table subsetting while building the new face in hb_subset.
+
+ src/hb-subset-glyf.cc | 1 +
+ src/hb-subset.cc | 105
+ ++++++++++++++++++++++++++++++--------------------
+ 2 files changed, 65 insertions(+), 41 deletions(-)
+
+commit 3e81832432a1cae0dc28242bb6ff279753effd27
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Feb 8 15:55:12 2018 -0800
+
+ Disable subset tests on cmake for now.
+
+ test/subset/CMakeLists.txt | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+commit 2f941053111d60433ab39cc70edd69c962896961
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Feb 8 15:55:12 2018 -0800
+
+ Disable subset tests on cmake for now.
+
+ test/subset/CMakeLists.txt | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+commit e081c9e8fc84843740c8a55b49403acc3fe4f0b7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Feb 8 17:44:24 2018 -0600
+
+ Oops!
+
+ test/subset/run-tests.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 1c49afe179e7e1884ceeae1d93e50fa51f18f894
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Feb 8 17:38:58 2018 -0600
+
+ Whitespace
+
+ test/subset/run-tests.py | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 9682ef135f16cb3368b9c5970fdcec71301b687e
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Feb 8 17:35:57 2018 -0600
+
+ Minor fixups
+
+ CMakeLists.txt | 2 +-
+ src/hb-ot-cmap-table.hh | 6 +++---
+ src/hb-subset.cc | 6 +++---
+ test/api/hb-test.h | 5 +++++
+ test/api/test-subset-glyf.c | 4 ----
+ test/api/test-subset.c | 4 ----
+ 6 files changed, 12 insertions(+), 15 deletions(-)
+
+commit 35eeb893efcdfa2bf6a136cd2911d564334e573c
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Feb 8 15:17:34 2018 -0800
+
+ Don't include subset headers in libharfbuzz.
+
+ CMakeLists.txt | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit 42234424a0fc43d298be082b4c7b1e288e94bbb6
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Feb 8 15:11:15 2018 -0800
+
+ Fix include gaurds and include order in hb-subset-glyf and
+ hb-subset-plan
+
+ src/hb-subset-glyf.hh | 6 ++++--
+ src/hb-subset-plan.cc | 2 +-
+ src/hb-subset-plan.hh | 5 +++--
+ 3 files changed, 8 insertions(+), 5 deletions(-)
+
+commit 0f3c756cbfe8a263ee388481acac7a24d9684c44
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Feb 8 14:59:32 2018 -0800
+
+ Add CMake config for building a separate harfbuzz-subset.
+
+ CMakeLists.txt | 17 ++++++++++++++---
+ test/api/CMakeLists.txt | 2 +-
+ 2 files changed, 15 insertions(+), 4 deletions(-)
+
+commit d4d120ad79ff65c6987ca127da5d9ee30740b0b1
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Feb 8 14:26:18 2018 -0800
+
+ Skip subset to fonttools comparison test if TTX is not present.
+
+ test/subset/run-tests.py | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+commit 29d915284e46fb9be01221a88c9e969080daa1b2
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Feb 8 11:31:27 2018 -0800
+
+ Whitespace
+
+ test/subset/run-tests.py | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+commit f9420d9effcfb3464d4b99e54decb3d90e4a410d
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Feb 8 11:30:36 2018 -0800
+
+ In the hb-subset to fontTools comparison, use ttx to compare the
+ fonts. This allows for some binary differences such as re-ordered
+ tables.
+
+ test/subset/run-tests.py | 21 ++++++++++++++-------
+ 1 file changed, 14 insertions(+), 7 deletions(-)
+
+commit 8e9fd6f1ab491519cf7205467bc5d20056fce99d
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Feb 7 19:01:21 2018 -0800
+
+ Implement basic loca (long version only) subsetting.
+
+ src/hb-subset-glyf.cc | 66
+ +++++++++++++++++++++++++++++++++++----------------
+ 1 file changed, 46 insertions(+), 20 deletions(-)
+
+commit f9c665fed1347f7af6d36ba129f9d174f4ac54dc
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Feb 7 16:53:18 2018 -0800
+
+ Update interface to hb-subset-glyf to subset glyf and loca.
+
+ src/hb-subset-glyf.cc | 10 +++++++---
+ src/hb-subset-glyf.hh | 7 ++++---
+ src/hb-subset.cc | 7 +++++--
+ 3 files changed, 16 insertions(+), 8 deletions(-)
+
+commit f2ceb5ee4d745e0e6e754f0b0ea16b29dbedbf1b
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Feb 7 16:47:31 2018 -0800
+
+ Comment out failing assert in test-subset-glyf for now. Should be
+ re-enabled once hb_subset is writing out a new face.
+
+ test/api/test-subset-glyf.c | 5 +++--
+ 1 file changed, 3 insertions(+), 2 deletions(-)
+
+commit 89dbebd4ad948ddad8e10323315a809c11d7cafa
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Feb 7 16:32:56 2018 -0800
+
+ Add a basic test for glyf subsetting.
+
+ test/api/Makefile.am | 4 +
+ test/api/fonts/Roboto-Regular.abc.ttf | Bin 0 -> 2460 bytes
+ test/api/fonts/Roboto-Regular.ac.ttf | Bin 0 -> 2268 bytes
+ test/api/test-subset-glyf.c | 134
+ ++++++++++++++++++++++++++++++++++
+ 4 files changed, 138 insertions(+)
+
+commit 217ed5e3c885532fa8b332cc0d0f9cb4eef32e2b
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Feb 7 16:30:07 2018 -0800
+
+ Cleanups in hb-subset-glyf and hb-subset-plan.
+
+ src/hb-subset-glyf.cc | 30 +++++++++++++++---------------
+ src/hb-subset-plan.hh | 2 +-
+ 2 files changed, 16 insertions(+), 16 deletions(-)
+
+commit 13193a9b97302480cc11787787fa6826a97be4bb
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 7 16:09:52 2018 -0800
+
+ move to the hb_face_t dest pattern
+
+ src/hb-ot-cmap-table.hh | 7 ++++++-
+ src/hb-subset.cc | 28 +++++++++++++---------------
+ 2 files changed, 19 insertions(+), 16 deletions(-)
+
+commit 0859a006695097c2a66a07284f3cc5b8de8edb05
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 7 15:59:36 2018 -0800
+
+ sketch a subset<T> and call it for cmap. Add subset to cmap, albeit
+ not working even for the msot basic case just yet
+
+ src/hb-ot-cmap-table.hh | 18 ++++++++++++++++--
+ src/hb-subset.cc | 30 ++++++++++++++++++++++++++++++
+ 2 files changed, 46 insertions(+), 2 deletions(-)
+
+commit c1ab95dd907b1c4a2e2de17447683fe803fe4087
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Feb 8 17:22:07 2018 -0600
+
+ Fix overflow in space fallback shaping
+
+ Fixes https://bugs.chromium.org/p/chromium/issues/detail?id=657466
+
+ src/hb-ot-shape-fallback.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit b220b5a44425db387b2149c4904a43ab369a2d6a
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Feb 8 17:14:52 2018 -0600
+
+ Avoid undefined-behavior in fallback mark positioning
+
+ Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=5584
+
+ src/hb-ot-shape-fallback.cc | 11 ++++++-----
+ 1 file changed, 6 insertions(+), 5 deletions(-)
+
+commit 3b68a03a1c5a23adbc73f4508009dd5b72bc9d81
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Feb 8 17:00:37 2018 -0600
+
+ [fuzzer] Minor
+
+ src/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 194140d3f352b53b95757cccb7fff50425747cd6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Feb 8 16:27:57 2018 -0600
+
+ [util] Minor
+
+ util/hb-subset.cc | 2 +-
+ util/options.hh | 10 ++++++++--
+ 2 files changed, 9 insertions(+), 3 deletions(-)
+
+commit 5021ba2a2186a77d7d70be5602b960d14634d8b2
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Feb 8 15:11:28 2018 -0600
+
+ [aat] Minor
+
+ src/hb-aat-layout-common-private.hh | 10 +++++-----
+ src/hb-aat-layout-morx-table.hh | 7 +++----
+ 2 files changed, 8 insertions(+), 9 deletions(-)
+
+commit 1242ad8424f5e8357fe6fd2143430aa8cfaf0954
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Thu Feb 8 14:10:01 2018 -0600
+
+ [test/text-rendering-tests] Update from upstream
+
+ test/shaping/data/text-rendering-tests/DISABLED | 2 ++
+ test/shaping/data/text-rendering-tests/Makefile.sources | 2 ++
+ .../text-rendering-tests/fonts/TestMORXTwentyfive.ttf | Bin 0 ->
+ 3260 bytes
+ .../text-rendering-tests/fonts/TestMORXTwentysix.ttf | Bin 0 ->
+ 3260 bytes
+ .../data/text-rendering-tests/tests/MORX-25.tests | 9 +++++++++
+ .../data/text-rendering-tests/tests/MORX-26.tests | 2 ++
+ 6 files changed, 15 insertions(+)
+
+commit 77ad8b5c8b3a9148cf2944abdd494618e642ee2c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 7 21:54:33 2018 -0600
+
+ TODO
+
+ src/hb-open-file-private.hh | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 941bbd9f257367f838e55d079751c6059974fe2f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 7 21:49:01 2018 -0600
+
+ [subset] Fix thinko
+
+ src/hb-open-file-private.hh | 6 +++++-
+ 1 file changed, 5 insertions(+), 1 deletion(-)
+
+commit 931f8b7eb5e740ce81e5be6bfec60dbe3ac7ebc4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 7 21:42:03 2018 -0600
+
+ Fix another thinko
+
+ src/hb-open-file-private.hh | 2 +-
+ src/hb-private.hh | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+commit 39b86695cf56736170c772424c9a8b75bca0254c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 7 21:37:03 2018 -0600
+
+ [subset] Fix thinko
+
+ src/hb-subset.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit eeffabc87572193a9e95f22647e80ae44e5a0089
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 7 21:34:05 2018 -0600
+
+ Build
+
+ src/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit c479a59988b0cf3e557e22e97e1977962c803fa7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 7 21:13:10 2018 -0600
+
+ [subset] Assemble font
+
+ src/hb-open-file-private.hh | 50
+ +++++++++++++++++++++++++++++++++++++++++++-
+ src/hb-open-type-private.hh | 33 +++++++++++++++++++++++------
+ src/hb-ot-map-private.hh | 10 ++++-----
+ src/hb-private.hh | 20 +++++++++++-------
+ src/hb-set-private.hh | 8 +++----
+ src/hb-subset.cc | 51
+ +++++++++++++++++++++++++++++++++++++++------
+ test/api/test-subset.c | 9 ++++++--
+ 7 files changed, 150 insertions(+), 31 deletions(-)
+
+commit 34ac3548b7c9dbc57f277cf9a7a337cd1a8a04bb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 7 18:07:45 2018 -0600
+
+ [set] Respect stride
+
+ Ouch!
+
+ src/hb-set-private.hh | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 577becaf7b5ccd9de8ba533447f944427b9e4452
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 7 17:38:40 2018 -0600
+
+ [subset] Fixup
+
+ src/hb-subset.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit c9acab3cfbe4a21e86ad309ebb452f103b1c1b04
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 7 17:12:55 2018 -0600
+
+ Whitespace
+
+ src/hb-open-file-private.hh | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 7fd0b61dee18380c302009f8be9cd68dadab7308
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 7 16:44:52 2018 -0600
+
+ [subset] Create new face and copy all tables to it
+
+ test-subset fails now because subset-face does not know how to
+ compile itself.
+
+ src/hb-subset.cc | 37 ++++++++++++++++++++++++++-----------
+ 1 file changed, 26 insertions(+), 11 deletions(-)
+
+commit 4e1abe2ce0b5163cbbbb8f8be0e9f7deba5ab2cb
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Feb 7 13:28:11 2018 -0800
+
+ Refactor subset glyf to remove multiple calls to glyf.fini()
+
+ src/hb-subset-glyf.cc | 52
+ +++++++++++++++++++++++++++++----------------------
+ 1 file changed, 30 insertions(+), 22 deletions(-)
+
+commit 0a5d1440f829f07454592adde9dd3aa93ad74442
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Feb 7 13:09:54 2018 -0800
+
+ Add implementation of glyf subsetting.
+
+ src/hb-subset-glyf.cc | 81
+ +++++++++++++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 76 insertions(+), 5 deletions(-)
+
+commit 05d65baa1bb64664ba838993fd35f3899d52eb8d
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Feb 7 10:55:30 2018 -0800
+
+ Extract glyf offset calculation into it's own method.
+
+ src/hb-ot-glyf-table.hh | 26 ++++++++++++++++++--------
+ 1 file changed, 18 insertions(+), 8 deletions(-)
+
+commit 6d7c6e19dc769cf9997b7c1f8a4598eb44ca0b3c
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 7 14:09:56 2018 -0600
+
+ Fix two undefined-behavior issues
+
+ Fixes https://github.com/harfbuzz/harfbuzz/issues/761
+ Fixes https://github.com/harfbuzz/harfbuzz/issues/762
+
+ src/hb-ot-hmtx-table.hh | 4 ++--
+ src/hb-ot-layout-gsubgpos-private.hh | 10 +++++-----
+ 2 files changed, 7 insertions(+), 7 deletions(-)
+
+commit b87cbe2bec1d589621ba143af59443f63230ffeb
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 7 14:11:26 2018 -0500
+
+ Try fixing build for platforms that have no visibility attributes
+
+ src/hb-private.hh | 1 +
+ src/hb-subset.cc | 2 ++
+ src/main.cc | 2 ++
+ 3 files changed, 5 insertions(+)
+
+commit f70100417c71cff071c119607a7b75dcead05a05
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 7 13:58:23 2018 -0500
+
+ [test] Minor
+
+ test/api/test-ot-tag.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 6804b61d2e49fcf9eac9fa0b86497ba91b220bee
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 7 13:47:35 2018 -0500
+
+ [subset] Add hb_subset_face
+
+ It's a hb_face_t that has add_table() and in the future knows how to
+ compile itself into a font blob.
+
+ src/hb-private.hh | 9 ++++++
+ src/hb-subset.cc | 88
+ +++++++++++++++++++++++++++++++++++++++++++++++++++++++
+ 2 files changed, 97 insertions(+)
+
+commit af02812fc51812a7e2265a1100bbca1a5bf8af45
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 7 13:07:46 2018 -0500
+
+ [subset] Change hb_subset API to remove hb_subset_face_t
+
+ src/hb-subset-plan.cc | 12 ++++++++---
+ src/hb-subset-plan.hh | 2 +-
+ src/hb-subset-private.hh | 10 ----------
+ src/hb-subset.cc | 52
+ ++++++++----------------------------------------
+ src/hb-subset.h | 25 ++++++-----------------
+ test/api/test-subset.c | 9 +++++----
+ util/hb-subset.cc | 12 ++++++-----
+ 7 files changed, 36 insertions(+), 86 deletions(-)
+
+commit 2da0d87e769b2ced71e4281e336bdbca65de2b3f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 7 12:44:35 2018 -0500
+
+ Remove NullPool visibility hack
+
+ We keep a separate private NullPool in libharfbuzz-subset.so
+ This can fire back later since now there are two separate null
+ objects,
+ and comparisons to the null pool can be confused. Something to deal
+ with when it comes up. Ouch!
+
+ src/hb-open-type-private.hh | 4 +---
+ src/hb-subset.cc | 4 ++++
+ 2 files changed, 5 insertions(+), 3 deletions(-)
+
+commit b95aa204ee284c47e63dc1e34b3c5b4bdf9e7ab7
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 7 09:37:06 2018 -0800
+
+ glyph ids to retain should most likely keep the glyph id not the
+ codepoint
+
+ src/hb-subset-plan.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 91428713bd6975b3bbfbdce54701f6aef5457121
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 7 09:35:59 2018 -0800
+
+ Remove \ns leftover from fprintf
+
+ src/hb-subset-plan.cc | 4 ++--
+ src/hb-subset.cc | 4 ++--
+ 2 files changed, 4 insertions(+), 4 deletions(-)
+
+commit eb485bb9e90017abaf7dcdd7e39a82125d6807c3
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 7 09:32:36 2018 -0800
+
+ Horrid hack to assign new gids. Use DEBUG_MSG over fprintf
+
+ src/hb-subset-plan.cc | 27 +++++++++++++++++++++++----
+ src/hb-subset-plan.hh | 5 +++++
+ src/hb-subset.cc | 9 +++++++++
+ 3 files changed, 37 insertions(+), 4 deletions(-)
+
+commit 8b80cbb1dd13e2870a956825f5dafc4419b44200
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 7 09:31:31 2018 -0800
+
+ Add a subset debug category
+
+ src/hb-debug.hh | 13 +++++++++++++
+ 1 file changed, 13 insertions(+)
+
+commit ee433d36fa544c3138718cc3f796b29e6df8a195
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 7 12:30:18 2018 -0500
+
+ [aat] Set debug lookup_index
+
+ src/hb-aat-layout-common-private.hh | 2 ++
+ src/hb-aat-layout-morx-table.hh | 3 +++
+ 2 files changed, 5 insertions(+)
+
+commit 38df1ec8e0b457be9140c67e2c5c19153714d90e
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Feb 7 07:58:58 2018 -0800
+
+ TEMPORARY: remove HB_INTERNAL from null pool so subset builds again
+
+ src/hb-open-type-private.hh | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit 53aa0e95420c5c3bfe8af21cf7956535d35b06e6
+Author: Garret Rieger <grieger@google.com>
+Date: Tue Feb 6 17:05:22 2018 -0800
+
+ Add an instance of glyf::accelerator_t to hb-subset-glyf.
+
+ src/hb-subset-glyf.cc | 13 ++++++++++---
+ src/hb-subset-glyf.hh | 2 +-
+ src/hb-subset.cc | 4 +---
+ 3 files changed, 12 insertions(+), 7 deletions(-)
+
+commit ef62dfed3fc7cfad7f7ce9292cb3bd1616f09384
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Tue Feb 6 17:12:17 2018 -0800
+
+ add back assert_pod
+
+ src/hb-subset-private.hh | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit d0ce3c66e2af2785203f7bbb1d4abca5c226045d
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Tue Feb 6 16:58:35 2018 -0800
+
+ Resolve codepoints:glyph ids. Does not compile; undefined reference
+ to OT::_hb_NullPool
+
+ src/hb-subset-plan.cc | 25 +++++++++++++++++++------
+ src/hb-subset-plan.hh | 2 +-
+ src/hb-subset-private.hh | 17 +++++++++++++++--
+ src/hb-subset.cc | 13 ++++---------
+ 4 files changed, 39 insertions(+), 18 deletions(-)
+
+commit 6a45e5df24ccc59c5a39bf42323c9b550f49e16d
+Author: Garret Rieger <grieger@google.com>
+Date: Tue Feb 6 16:04:09 2018 -0800
+
+ Add skeleton of hb-subset-glyf, call if from hb_subset(...)
+
+ src/Makefile.sources | 2 ++
+ src/hb-subset-glyf.cc | 45 +++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-subset-glyf.hh | 37 +++++++++++++++++++++++++++++++++++++
+ src/hb-subset.cc | 18 ++++++++++++++++--
+ 4 files changed, 100 insertions(+), 2 deletions(-)
+
+commit 31ec3c2ec41161c6ae75bc91d1c237bf2d245e37
+Author: Garret Rieger <grieger@google.com>
+Date: Tue Feb 6 15:37:34 2018 -0800
+
+ Create a subset plan in hb_subset.
+
+ src/hb-subset.cc | 12 ++++++++++++
+ 1 file changed, 12 insertions(+)
+
+commit 6c52d94fd11915b76e858bc45633ee60b8c1d8f4
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Tue Feb 6 15:31:14 2018 -0800
+
+ capture the set of codepoints passed by --unicodes
+
+ util/hb-subset.cc | 17 ++++++++++++++++-
+ 1 file changed, 16 insertions(+), 1 deletion(-)
+
+commit 25e9173fe8446735f7e36ec963c7d3554c85631b
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 5 17:26:25 2018 -0800
+
+ Make hb-subset-plan private.
+
+ src/Makefile.sources | 2 +-
+ src/hb-subset-plan.cc | 27
+ ++++++++++++++++-----------
+ src/{hb-subset-plan.h => hb-subset-plan.hh} | 22 +++++++++++++---------
+ 3 files changed, 30 insertions(+), 21 deletions(-)
+
+commit af46a4da5a47dd6e0dd98e1740f18e93c337e689
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 5 17:14:46 2018 -0800
+
+ Move definition of hb_subset_input into hb-subset-private.hh.
+
+ src/Makefile.sources | 1 +
+ src/hb-subset-plan.cc | 2 +-
+ src/hb-subset-private.hh | 40 ++++++++++++++++++++++++++++++++++++++++
+ src/hb-subset.cc | 12 ++----------
+ 4 files changed, 44 insertions(+), 11 deletions(-)
+
+commit 7481f0ce21489d2b19b2e33d05358736ddee20bf
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 5 16:05:12 2018 -0800
+
+ Add codepoints to subset input.
+
+ src/hb-subset.cc | 24 ++++++++++++++++--------
+ src/hb-subset.h | 2 +-
+ test/api/test-subset.c | 2 +-
+ util/hb-subset.cc | 2 +-
+ 4 files changed, 19 insertions(+), 11 deletions(-)
+
+commit 1cfe650f020cf440bf157daa9907bffd6e35bd7a
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 5 15:22:30 2018 -0800
+
+ Add a basic sketch of hb-subset-plan.
+
+ src/Makefile.sources | 2 ++
+ src/hb-subset-plan.cc | 72
+ +++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-subset-plan.h | 49 +++++++++++++++++++++++++++++++++++
+ 3 files changed, 123 insertions(+)
+
+commit 126ffdbe95020c04dc61413690febd8a56bf264f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Wed Feb 7 12:26:41 2018 -0500
+
+ [aat] Fix debug compile
+
+ src/hb-aat-layout-common-private.hh | 6 +++++-
+ src/hb-aat-layout-morx-table.hh | 2 +-
+ 2 files changed, 6 insertions(+), 2 deletions(-)
+
+commit 8cb8bfd5b5eff75247cd447f3766294fdff2d644
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Tue Feb 6 20:40:42 2018 +0330
+
+ [test] Fix test-subset on old distros (#758)
+
+ https://developer.gnome.org/glib/stable/glib-Testing.html#g-assert-cmpmem
+
+ test/api/test-subset.c | 4 ++++
+ 1 file changed, 4 insertions(+)
+
+commit 2971e9da49d6ac07f8a9a4e9b00e167b800a5c7f
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 6 11:48:04 2018 -0500
+
+ [aat] Adjust unsafe-to-break logic some more
+
+ I believe I'm happy with it now.
+
+ src/hb-aat-layout-common-private.hh | 8 ++++----
+ 1 file changed, 4 insertions(+), 4 deletions(-)
+
+commit f49256d80f19bc265e6a197719345313ba26f9d6
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 6 11:39:36 2018 -0500
+
+ [aat] Simplify unsafe-to-break logic
+
+ src/hb-aat-layout-common-private.hh | 11 +++--------
+ 1 file changed, 3 insertions(+), 8 deletions(-)
+
+commit cc1e0840baed881f2bfd8468a9645bfe94f47303
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Tue Feb 6 10:20:48 2018 -0500
+
+ [buffer] Tweak diff re glyph_flags again
+
+ We expect the buffer to have no flags that the reference doesn't...
+ Meh. Makes MORX tests pass now. Need to better define the behavior.
+
+ src/hb-buffer.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit d49ae5154e0b069ffa2605ea3f66abb583319ec8
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Tue Feb 6 13:48:10 2018 +0330
+
+ Fix hb-buffer logic error
+
+ src/hb-buffer.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 70e13ade81a2a09e17d75bdc7e3fe45d8ec9e2c6
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Tue Feb 6 13:20:38 2018 +0330
+
+ [subset] Fix Windows issue on endlines (#756)
+
+ util/hb-subset.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit f41b92134a276716b7e2d7ef54996b30f36a10a9
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Feb 5 19:51:09 2018 -0500
+
+ Fix fallthrough compiler warning with gcc >= 7
+
+ Fixes https://github.com/harfbuzz/harfbuzz/issues/755
+
+ src/hb-private.hh | 3 +++
+ 1 file changed, 3 insertions(+)
+
+commit b7b7f0ac59ec85b224e13d9e6c3c4063e731ad32
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Mon Feb 5 19:40:31 2018 -0500
+
+ [test] Minor
+
+ test/api/Makefile.am | 4 +++-
+ 1 file changed, 3 insertions(+), 1 deletion(-)
+
+commit 0ff007daaa471d05cc0473beec4ba4d434b084b1
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 4 20:22:07 2018 -0500
+
+ [subset] Minor
+
+ src/hb-subset.h | 7 +------
+ 1 file changed, 1 insertion(+), 6 deletions(-)
+
+commit fc1e82a5aef410138381bc8f5476dcff5679b464
+Merge: ae39fc81 2ea22893
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 5 15:35:13 2018 -0800
+
+ Merge pull request #754 from googlefonts/master
+
+ Fix build for subsetting code.
+
+commit 2ea228935d41b55fed45b7423b69bc15b42e3abc
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 5 15:10:01 2018 -0800
+
+ ssize_t -> size_t
+
+ util/hb-subset.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit c25898eb54217e2a1c681233a6b9adcd7940652e
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 5 14:35:32 2018 -0800
+
+ Switch to fopen() instead of open() in subset test. open wasn't
+ compiling on windows.
+
+ util/hb-subset.cc | 13 ++++++-------
+ 1 file changed, 6 insertions(+), 7 deletions(-)
+
+commit fc04f11ce1999da042a39c5b271351223033292f
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 5 11:12:33 2018 -0800
+
+ Rename HB_SUBSET_sources -> HB_SUBSET_CLI_sources to match what
+ cmake is looking for.
+
+ util/Makefile.am | 3 +--
+ util/Makefile.sources | 2 +-
+ 2 files changed, 2 insertions(+), 3 deletions(-)
+
+commit e428f7b1c21e0a7d6b9af507d98031b8eebcbeb5
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 5 10:24:16 2018 -0800
+
+ Wrap unistd.h include in ifdef.
+
+ util/hb-subset.cc | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 5f6eb1256fb6c251303d3728fc27875fe7a9ffb8
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Feb 5 10:23:38 2018 -0800
+
+ Add libharfbuzz-subset.la to linking when building api tests.
+
+ test/api/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit ae39fc8171b2c26d4ae64954a8055732c9241bcc
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 4 20:18:52 2018 -0500
+
+ [subset] Build hb-subset into separate libharfbuzz-subset.so
+
+ src/Makefile.am | 19 +++++++++++++------
+ src/harfbuzz-subset.pc.in | 12 ++++++++++++
+ util/Makefile.am | 2 ++
+ 3 files changed, 27 insertions(+), 6 deletions(-)
+
+commit eac20e459564134e0087497ed76b1c84195ad7e3
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 4 20:08:50 2018 -0500
+
+ [subset] Minor
+
+ util/Makefile.am | 2 +-
+ util/Makefile.sources | 2 +-
+ util/hb-subset.cc | 10 +++++-----
+ 3 files changed, 7 insertions(+), 7 deletions(-)
+
+commit 257022b1789f928975b04b5d214bbe9192e11997
+Merge: 3615f344 edcd3b80
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 4 20:01:35 2018 -0500
+
+ Merge pull request #745 from googlefonts/master
+
+ Interface for hb_subset, skeleton for the hb-subset cli, and basic
+ testing rigging.
+
+commit 3615f344ec00059972d8ce75522022b5294764a7
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 4 17:19:58 2018 -0500
+
+ [test/text-rendering-tests] Update from upstream
+
+ test/shaping/data/text-rendering-tests/DISABLED | 1 +
+ test/shaping/data/text-rendering-tests/Makefile.sources | 3 ++-
+ .../text-rendering-tests/fonts/TestMORXTwentythree.ttf | Bin 0 ->
+ 1836 bytes
+ .../data/text-rendering-tests/tests/MORX-23.tests | 1 +
+ 4 files changed, 4 insertions(+), 1 deletion(-)
+
+commit 54e6efadd6a30587736858d3fb497ed4e5e5f252
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 4 14:58:02 2018 -0500
+
+ [aat] Fix unsafe-to-break
+
+ At any position, if state is not zero, mark unsafe-to-break before,
+ unless we can reason it safe.
+
+ At any position, if there's an action entry for end-of-text, mark
+ unsafe to break.
+
+ Also changes buffer diff impl to allow for flag differences as long
+ as the buffer glyph flags are superset of reference glyph flags.
+
+ With this, all MORX tests pass.
+
+ src/hb-aat-layout-common-private.hh | 31 +++++++++++++++++++++++++------
+ src/hb-aat-layout-morx-table.hh | 35
+ +++++++++++++++++++++++------------
+ src/hb-buffer.cc | 2 +-
+ 3 files changed, 49 insertions(+), 19 deletions(-)
+
+commit edcd3b80e9617ec8c4c4a55536938fb510b6aeba
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Sun Feb 4 12:31:24 2018 -0800
+
+ Actually call hb_subset
+
+ util/hb-subset.cc | 51
+ ++++++++++++++++++++++++++++++++++-----------------
+ 1 file changed, 34 insertions(+), 17 deletions(-)
+
+commit 7b01761adef6f64f1139b30c985aa5f52314073a
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Feb 2 17:54:11 2018 -0800
+
+ Add CMakeLists.txt to dist files for subset test.
+
+ test/subset/Makefile.am | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit f83a43b56134188c2e1f3496d40ec0cd9109f250
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Feb 2 17:50:45 2018 -0800
+
+ Add CMake configuration for all of the new subsetting code.
+
+ CMakeLists.txt | 14 ++++++++++++++
+ src/Makefile.sources | 9 +++++++--
+ test/CMakeLists.txt | 1 +
+ test/subset/CMakeLists.txt | 9 +++++++++
+ util/Makefile.am | 2 +-
+ util/Makefile.sources | 2 +-
+ 6 files changed, 33 insertions(+), 4 deletions(-)
+
+commit 5bc0cda179bca452145d4523eeba415986edb6e3
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Feb 2 17:49:14 2018 -0800
+
+ Add missing unistd header to hb-subset.
+
+ util/hb-subset.cc | 2 ++
+ 1 file changed, 2 insertions(+)
+
+commit 06fe297f2a9fc6ee98179ddd26ef089b7fdb9e74
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Feb 1 18:36:15 2018 -0800
+
+ Properly include subset test data files.
+
+ test/subset/data/Makefile.am | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+commit 058b1260ad1105d0d8d6bf21f8f65a336e735bd2
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Feb 1 18:22:14 2018 -0800
+
+ Re-write hb-subset utility to use main-font-text driver.
+
+ test/subset/run-tests.py | 15 +++---
+ util/Makefile.sources | 3 ++
+ util/hb-subset.cc | 131
+ +++++++++++++++++++++++++----------------------
+ 3 files changed, 82 insertions(+), 67 deletions(-)
+
+commit ede84ffa426edb950c4ec4f89833c85475a1c64f
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Feb 1 17:17:36 2018 -0800
+
+ Whitespace
+
+ util/hb-subset.cc | 36 ++++++++++++++++++------------------
+ 1 file changed, 18 insertions(+), 18 deletions(-)
+
+commit 2763a2c5982c0db072697abe8ba01342d5977237
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Feb 1 17:14:51 2018 -0800
+
+ Include subset test files in distribution.
+
+ test/subset/Makefile.am | 7 ++++++-
+ test/subset/data/Makefile.am | 7 +++++++
+ 2 files changed, 13 insertions(+), 1 deletion(-)
+
+commit 34fa7b3ad23b544b0914bc6002d60525224c68e1
+Author: Garret Rieger <grieger@google.com>
+Date: Thu Feb 1 16:50:18 2018 -0800
+
+ Whitespace
+
+ src/hb-subset.h | 20 ++++++++++----------
+ 1 file changed, 10 insertions(+), 10 deletions(-)
+
+commit 8c3a6727377895f18e1b5c7076404d8aede17176
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Jan 31 15:43:24 2018 -0800
+
+ Get test-subset to pass.
+
+ src/hb-subset.cc | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 74d39ed2639857d5f1a90d9c0d864227a6482b40
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Jan 31 15:20:52 2018 -0800
+
+ Attach add a hb_face_t to hb_subset_face_t.
+
+ src/hb-subset.cc | 17 +++++++++++++----
+ 1 file changed, 13 insertions(+), 4 deletions(-)
+
+commit 76b84c36b9560e132918adb4c0c5a0d9bdfb0978
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Jan 31 14:53:28 2018 -0800
+
+ Whitespace
+
+ test/api/Makefile.am | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit a2965f2ea5428c19be54f998ef9152c5ff6975ea
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Jan 31 14:53:09 2018 -0800
+
+ Add a basic implementation of hb-subset to enable compilation of
+ test-subset.
+
+ src/hb-subset.cc | 146
+ +++++++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-subset.h | 5 +-
+ test/api/Makefile.am | 1 +
+ test/api/test-subset.c | 12 ++--
+ 4 files changed, 156 insertions(+), 8 deletions(-)
+
+commit 38af23b8df1a84f24d379d27d1a1e20f9ce07f34
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Jan 31 11:32:23 2018 -0800
+
+ Make the expected output for subsetting basics test be equal to the
+ input file for now.
+
+ .../expected/basics/Roboto-Regular.abc.default.62.ttf | Bin 1996 ->
+ 2460 bytes
+ 1 file changed, 0 insertions(+), 0 deletions(-)
+
+commit b59c08eb045db2b6c952de81510b8159a4f72fb1
+Author: Garret Rieger <grieger@google.com>
+Date: Wed Jan 31 11:14:53 2018 -0800
+
+ Add the beginning of a unit test for hb-subset
+
+ test/api/test-subset.c | 67
+ ++++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 67 insertions(+)
+
+commit e9d154ac8ddd2712a34c53c95a17e469f95e5b30
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Tue Jan 30 19:27:11 2018 -0800
+
+ tweak test failure output. write to a temp file not stdout. test
+ still fails because expected is not just an identical copy of input
+
+ test/subset/run-tests.py | 41 +++++++++++++++++++++++++++----------
+ util/hb-subset.cc | 53
+ +++++++++++++++++++++++++++++++++---------------
+ 2 files changed, 67 insertions(+), 27 deletions(-)
+
+commit cf403e1a53381f293aceac5cdbe031bbb2a7af77
+Author: Garret Rieger <grieger@google.com>
+Date: Tue Jan 30 18:40:23 2018 -0800
+
+ Add hb-subset.h to hb.h
+
+ src/hb.h | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit c02573516c05ac97acb243ef5dec26af86086ded
+Author: Garret Rieger <grieger@google.com>
+Date: Tue Jan 30 18:39:41 2018 -0800
+
+ Fix typo in hb-subset.h
+
+ src/hb-subset.h | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 76351518ca9bc88aa6fbc975e1e35bd86432d652
+Author: Garret Rieger <grieger@google.com>
+Date: Tue Jan 30 14:03:16 2018 -0800
+
+ Remove basic subset test from XFAIL
+
+ test/subset/data/Makefile.sources | 1 -
+ 1 file changed, 1 deletion(-)
+
+commit b029b7c19a733a2a39860238ad300e6c4a3f7802
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Jan 29 13:31:49 2018 -0800
+
+ Whitespace
+
+ test/subset/data/Makefile.sources | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit 0853260e997aded264f42bb369d4fcb39cccb7d6
+Author: Garret Rieger <grieger@google.com>
+Date: Mon Jan 29 13:30:02 2018 -0800
+
+ Configure automake to run the new subset tests.
+
+ configure.ac | 2 ++
+ test/Makefile.am | 2 +-
+ test/subset/Makefile.am | 16 ++++++++++++++++
+ test/subset/data/Makefile.am | 16 ++++++++++++++++
+ test/subset/data/Makefile.sources | 10 ++++++++++
+ test/subset/data/tests/{basics.txt => basics.tests} | 0
+ 6 files changed, 45 insertions(+), 1 deletion(-)
+
+commit 5c63c37b2b5aba8bf2f8ff35b7da0d116ebfe8b5
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Jan 26 16:57:42 2018 -0800
+
+ WIP test runner for subset tests.
+
+ test/subset/run-tests.py | 64
+ ++++++++++++++++++++++++++++++++++++++++++++++++
+ 1 file changed, 64 insertions(+)
+
+commit cc46cd88a1b84b02694fa6d88c4286e93336f096
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Jan 26 14:25:39 2018 -0800
+
+ In generate-expected-outputs read the test definition with utf8
+ encoding.
+
+ test/subset/generate-expected-outputs.py | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+commit 4cdae914e2e2fff1ff91e2f42648a8acb82a5494
+Author: Garret Rieger <grieger@google.com>
+Date: Fri Jan 26 13:57:48 2018 -0800
+
+ Add basic directory structure for subsetter integration tests. Plus
+ a utility for generating expected output files.
+
+ .../basics/Roboto-Regular.abc.default.62.ttf | Bin 0 -> 1996 bytes
+ test/subset/data/fonts/Roboto-Regular.abc.ttf | Bin 0 -> 2460 bytes
+ test/subset/data/profiles/default.txt | 0
+ test/subset/data/tests/basics.txt | 8 ++
+ test/subset/generate-expected-outputs.py | 40 ++++++++++
+ test/subset/subset_test_suite.py | 82
+ +++++++++++++++++++++
+ 6 files changed, 130 insertions(+)
+
+commit 9ccb8366f603a9e4a7a3c3f96420a19d4f6fb390
+Author: Rod Sheeter <rsheeter@google.com>
+Date: Wed Jan 17 22:09:07 2018 -0800
+
+ Start to sketch APIs for subsetting
+
+ src/Makefile.am | 2 ++
+ src/Makefile.sources | 4 +++
+ src/hb-subset.cc | 0
+ src/hb-subset.h | 88
+ +++++++++++++++++++++++++++++++++++++++++++++++++++
+ util/Makefile.am | 3 ++
+ util/Makefile.sources | 4 +++
+ util/hb-subset.cc | 61 +++++++++++++++++++++++++++++++++++
+ 7 files changed, 162 insertions(+)
+
+commit 89b1906d990658c763f35113c8978a5e21bffc22
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 4 14:45:02 2018 -0500
+
+ [aat] More adjustment to ContextualSubtable
+
+ See comment.
+
+ With this, MORX-20 passes if I turn --verify off. Our unsafe-to-break
+ logic is currently broken in presence of end-of-text actions. That's,
+ ugh, extra work to fix. Let me try...
+
+ src/hb-aat-layout-morx-table.hh | 8 ++++++++
+ 1 file changed, 8 insertions(+)
+
+commit 8be596f0b76543e19644c0b77c1bcf4d9e783c2b
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 4 14:40:17 2018 -0500
+
+ [aat] In ContextualSubstitute, apply end-of-text action to last glyph
+
+ src/hb-aat-layout-morx-table.hh | 9 +++++----
+ 1 file changed, 5 insertions(+), 4 deletions(-)
+
+commit c0b1c7eb2eed67147adec3d2c9e02d01f279c8f4
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 4 14:19:41 2018 -0500
+
+ [aat] Remove unneeded check
+
+ src/hb-aat-layout-morx-table.hh | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit fcb8be1a385cb4432dc6064fba77939716d27a02
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Sun Feb 4 12:38:18 2018 -0500
+
+ [configure] Fix wording
+
+ Fixes https://github.com/harfbuzz/harfbuzz/issues/741
+
+ configure.ac | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+commit aed32589af6d5fce3e68fe41865e258ea7eb2413
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 2 16:08:50 2018 -0500
+
+ [aat] In ContextualSubtable, mark mark after substituting mark
+
+ Fixes MORX-21.
+
+ src/hb-aat-layout-morx-table.hh | 16 ++++++++--------
+ 1 file changed, 8 insertions(+), 8 deletions(-)
+
+commit fe5f9b1ae318939eaa23d0175a5eb7e1739177ac
+Author: Behdad Esfahbod <behdad@behdad.org>
+Date: Fri Feb 2 15:53:25 2018 -0500
+
+ [aat] Fix ContextualSubtable sanitization
+
+ Fixes MORX-18, MORX-19, and MORX-22.
+
+ src/hb-aat-layout-morx-table.hh | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+commit cf943f682bcdd73e3ad1f6108c1a1870b991d5e4
+Author: Khaled Hosny <khaledhosny@eglug.org>
+Date: Sun Feb 4 12:05:12 2018 +0200
+
+ Correctly show documentation build status
+
+ Correctly show if building documentation is enabled or not in
+ configure
+ summary.
+
+ Fixes https://github.com/harfbuzz/harfbuzz/issues/741
+
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit e8859fca3eafb5aab6d029563b31219ccca0d673
+Author: Bruce Mitchener <bruce.mitchener@gmail.com>
+Date: Sun Feb 4 01:26:57 2018 +0700
+
+ Enable use of atexit() on macOS and related platforms.
+
+ The atexit() man page indicates that this is expected to behave
+ in the expected way on unloading of shared libraries.
+
+ src/hb-private.hh | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+commit a89573770b4c0f9c444ad6499bec5dc022087a97
+Author: Bruce Mitchener <bruce.mitchener@gmail.com>
+Date: Sun Feb 4 01:31:53 2018 +0700
+
+ Use nullptr, not NULL.
+
+ src/hb-aat-layout-common-private.hh | 2 +-
+ src/hb-buffer-deserialize-json.rl | 4 ++--
+ src/hb-buffer-deserialize-text.rl | 4 ++--
+ 3 files changed, 5 insertions(+), 5 deletions(-)
+
+commit 07885e65adf1d3cb324de99501f9867f1a2553f8
+Author: Ebrahim Byagowi <ebrahim@gnu.org>
+Date: Sat Feb 3 12:53:48 2018 +0330
+
+ [cmake] unistd typo fix (#747)
+
+ CMakeLists.txt | 18 +++++++++---------
+ 1 file changed, 9 insertions(+), 9 deletions(-)
+
+commit ccb0367dae4cbb9c8215dbf20ac7f9acfba2fa14
+Author: David Corbett <corbett.dav@husky.neu.edu>
+Date: Fri Feb 2 12:04:04 2018 -0500
+
+ Let VS1 follow U+1031 MYANMAR VOWEL SIGN E
+
+ src/hb-ot-shape-complex-myanmar-machine.rl | 2 +-
+ src/hb-ot-shape-complex-myanmar.cc | 5 +++++
+ test/shaping/README.md | 10 +++++-----
+ test/shaping/data/in-house/Makefile.sources | 1 +
+ .../fonts/af3086380b743099c54a3b11b96766039ea62fcd.ttf | Bin 0 ->
+ 1536 bytes
+ test/shaping/data/in-house/tests/myanmar-syllable.tests | 1 +
+ 6 files changed, 13 insertions(+), 6 deletions(-)
+
+commit c6dbf6e77cae30772ffa110c651cb4287ab3b0dc
+Author: punchcutter <zarijoscha@gmail.com>
+Date: Wed Jan 31 14:09:04 2018 -0800
+
+ Allow optional ZWJ in virama terminated cluster
+
+ src/hb-ot-shape-complex-use-machine.rl | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit dae20fb5a79caad9a4af14137a961b60fe256235
+Author: Bruce Mitchener <bruce.mitchener@gmail.com>
+Date: Wed Jan 31 20:16:08 2018 +0700
+
+ Use nullptr instead of 0.
+
+ src/hb-coretext.cc | 4 ++--
+ src/test-buffer-serialize.cc | 2 +-
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+commit 90218fa93cf8b5d4b192be12d31aed92d271d09e
+Author: Bruce Mitchener <bruce.mitchener@gmail.com>
+Date: Wed Jan 31 20:44:45 2018 +0700
+
+ Fix typos.
+
+ src/hb-blob.cc | 2 +-
+ src/hb-buffer-private.hh | 2 +-
+ src/hb-common.cc | 2 +-
+ src/hb-coretext.cc | 2 +-
+ src/hb-directwrite.cc | 2 +-
+ src/hb-ft.cc | 2 +-
+ src/hb-graphite2.cc | 2 +-
+ src/hb-ot-layout-common-private.hh | 2 +-
+ 8 files changed, 8 insertions(+), 8 deletions(-)
+
+commit 148ca61075d821a09e42e2c75fbc9be47cfc6003
+Author: Bruce Mitchener <bruce.mitchener@gmail.com>
+Date: Wed Jan 31 22:24:51 2018 +0700
+
+ [ot-layout] Fix nullptr dereference.
+
+ If the `calloc` for `gsub_accels` or `gpos_accels` fails, then the
+ unlikely branch afterwards can be taken, which frees up the
+ `hb_ot_layout_t`, but since those fields can now be `nullptr`, then
+ we don't want to dereference them.
+
+ src/hb-ot-layout.cc | 10 ++++++----
+ 1 file changed, 6 insertions(+), 4 deletions(-)
+
+commit 0c66043a924fd114017a862d2cacd70f64b92370
+Author: Bruce Mitchener <bruce.mitchener@gmail.com>
+Date: Wed Jan 31 20:24:27 2018 +0700
+
+ [coretext] Fix memory leaks.
+
+ In `reference_table`, if the data is empty and we return early,
+ we still need to release the data object.
+
+ In `hb_coretext_shape`, there two edge cases where an early
+ return should release the attributed string.
+
+ src/hb-coretext.cc | 9 +++++++++
+ 1 file changed, 9 insertions(+)
+
commit f0b700db394ccdff30ff83961a3e2ea9ff4ea472
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Tue Jan 30 11:16:51 2018 -0800
@@ -8497,6 +13850,30 @@ Date: Sun Mar 5 13:51:01 2017 -0800
src/hb-ot-layout-gsubgpos-private.hh | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
+commit 3ebcd5a381e2de27a0cfb5af3359331f0b7e7108
+Author: Elie Roux <elie.roux@telecom-bretagne.eu>
+Date: Sun Mar 5 16:26:01 2017 +0100
+
+ first working version!
+
+ src/hb-ot-layout.cc | 2 ++
+ src/hb-ot.h | 1 +
+ 2 files changed, 3 insertions(+)
+
+commit e65aaaa00a3b5ac811b5c73b5186cd7d65731f7b
+Author: Elie Roux <elie.roux@telecom-bretagne.eu>
+Date: Sun Mar 5 14:53:39 2017 +0100
+
+ BASE: start api
+
+ src/Makefile.sources | 2 ++
+ src/hb-ot-base.cc | 58
+ ++++++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-base.h | 56
+ ++++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-layout-base-table.hh | 15 ++---------
+ 4 files changed, 118 insertions(+), 13 deletions(-)
+
commit 5aec2fb8d0a4db52ae414d980b66018ca5ce1e9c
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Thu Mar 2 11:46:33 2017 -0800
@@ -8521,6 +13898,25 @@ Date: Wed Mar 1 14:27:23 2017 -0800
test/shaping/tests/context-matching.tests | 1 +
3 files changed, 4 insertions(+), 4 deletions(-)
+commit f72726c52b104a71ebf5b39fa1e3eb9febd446fc
+Author: Elie Roux <elie.roux@telecom-bretagne.eu>
+Date: Sun Feb 26 15:08:43 2017 +0100
+
+ BASE: add function in main BASE object
+
+ src/hb-ot-layout-base-table.hh | 24 ++++++++++++++++++++++++
+ 1 file changed, 24 insertions(+)
+
+commit 3963315f1b2eae2504bc683760245c827cd1ef16
+Author: Elie Roux <elie.roux@telecom-bretagne.eu>
+Date: Sun Feb 26 15:07:53 2017 +0100
+
+ BASE: first complete version
+
+ src/hb-ot-layout-base-table.hh | 444
+ +++++++++++++++++++++++++++++------------
+ 1 file changed, 317 insertions(+), 127 deletions(-)
+
commit a11501444cfc4854bfe2b1d3ce0fc5a957e959d8
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Sat Feb 25 13:37:54 2017 -0800
@@ -8554,6 +13950,16 @@ Date: Sat Feb 25 13:30:38 2017 -0800
src/hb-ot-shape-complex-indic.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
+commit d34e35b47457e757781b1769a1fbaf107ec6e32f
+Author: Elie Roux <elie.roux@telecom-bretagne.eu>
+Date: Sat Feb 25 20:41:05 2017 +0100
+
+ BASE: WIP: more access functions
+
+ src/hb-ot-layout-base-table.hh | 212
+ +++++++++++++++++++++++++++++++++++++----
+ 1 file changed, 191 insertions(+), 21 deletions(-)
+
commit 6685d281d6f50bf046bbfef4a5263e15d15f2f02
Author: Behdad Esfahbod <behdad@behdad.org>
Date: Sat Feb 25 11:35:05 2017 -0800
@@ -8564,6 +13970,45 @@ Date: Sat Feb 25 11:35:05 2017 -0800
configure.ac | 2 +-
2 files changed, 13 insertions(+), 1 deletion(-)
+commit bd15567ed6a3667e6f8332b7374aece6a6f2361b
+Author: Elie Roux <elie.roux@telecom-bretagne.eu>
+Date: Sat Feb 25 17:08:01 2017 +0100
+
+ BASE: align member's names
+
+ src/hb-ot-layout-base-table.hh | 70
+ +++++++++++++++++++++---------------------
+ 1 file changed, 35 insertions(+), 35 deletions(-)
+
+commit 499b4bef2a5b6d49374ab4977509d1fbf7bd6038
+Author: Elie Roux <elie.roux@telecom-bretagne.eu>
+Date: Sat Feb 25 16:48:22 2017 +0100
+
+ BASE: more consistent naming (with spec and Harfbuzz code base)
+
+ src/hb-ot-layout-base-table.hh | 44
+ +++++++++++++++++++++---------------------
+ 1 file changed, 22 insertions(+), 22 deletions(-)
+
+commit a0bdd546c584eb7c7ea3ca7e19a178723e6fe77f
+Author: Elie Roux <elie.roux@telecom-bretagne.eu>
+Date: Sat Feb 25 16:34:58 2017 +0100
+
+ factorize horiz+vertAxis
+
+ src/hb-ot-layout-base-table.hh | 31 +++++--------------------------
+ 1 file changed, 5 insertions(+), 26 deletions(-)
+
+commit 1d30c6d935535743c73b2d18abcc6ae86a1cfc5b
+Author: Elie Roux <elie.roux@telecom-bretagne.eu>
+Date: Sat Feb 25 16:19:35 2017 +0100
+
+ BASE: sanitize
+
+ src/hb-ot-layout-base-table.hh | 151
+ ++++++++++++++++++++++++++++++++++++++++-
+ 1 file changed, 148 insertions(+), 3 deletions(-)
+
commit a657f23ca31237d652b5c101ed24194b6aeadaf8
Author: Dominik Röttsches <d-r@roettsches.de>
Date: Mon Feb 20 21:52:07 2017 +0200
@@ -8578,6 +14023,45 @@ Date: Mon Feb 20 21:52:07 2017 +0200
src/hb-ot-layout.cc | 3 +++
1 file changed, 3 insertions(+)
+commit f131f00b1779b44633223915e17cbce358ad063a
+Author: Elie Roux <elie.roux@telecom-bretagne.eu>
+Date: Sun Feb 19 10:12:22 2017 +0100
+
+ compile, move into hb-ot-layout.cc
+
+ src/hb-ot-font.cc | 1 -
+ src/hb-ot-layout-base-table.hh | 57
+ +++++++++++++++++++++++++++++++-----------
+ src/hb-ot-layout.cc | 1 +
+ 3 files changed, 43 insertions(+), 16 deletions(-)
+
+commit d0b97353e930d9b258f42f1cc1ac1a75306b76a8
+Author: Elie Roux <elie.roux@telecom-bretagne.eu>
+Date: Sun Feb 19 08:48:22 2017 +0100
+
+ hb-ot-base-table.hh -> hb-ot-layout-base-table.hh
+
+ per
+ https://github.com/behdad/harfbuzz/issues/418#issuecomment-280873811
+
+ src/Makefile.sources | 2 +-
+ src/hb-ot-font.cc | 2 +-
+ src/{hb-ot-base-table.hh => hb-ot-layout-base-table.hh} | 0
+ 3 files changed, 2 insertions(+), 2 deletions(-)
+
+commit f748e11645a3361f94d6fb10ce59febbaa5ba8ca
+Author: Elie Roux <elie.roux@telecom-bretagne.eu>
+Date: Sat Feb 18 19:54:33 2017 +0100
+
+ bootstraping structure
+
+ src/Makefile.sources | 1 +
+ src/hb-ot-base-table.hh | 238
+ ++++++++++++++++++++++++++++++++++++++++++++
+ src/hb-ot-font.cc | 1 +
+ src/hb-ot-layout-private.hh | 2 +
+ 4 files changed, 242 insertions(+)
+
commit 70202983f57fe85b2d3b56a9c205effeee66222d
Author: ebraminio <ebrahim@gnu.org>
Date: Sat Feb 18 10:37:36 2017 +0330
@@ -11702,6 +17186,23 @@ Date: Mon Jun 27 03:54:15 2016 +0430
src/hb-directwrite.cc | 15 ++++++---------
1 file changed, 6 insertions(+), 9 deletions(-)
+commit 5967eaba728ca3e4f5026142c25d455fa3a59764
+Author: Sascha Brawer <sascha@brawer.ch>
+Date: Fri Jun 24 16:42:27 2016 +0200
+
+ [CPAL] Return 0xFFFF as name id for unnamed palettes
+
+ The name id 0 is used as Copyright notice. It's quite unlikely that a
+ font supplies a color palette with the exact same name as the font's
+ copyright notice, but the API should not prevent this.
+
+ Also, try to fix a problem with GObject introspection, where the
+ auto-generated Python bindings could not return palette colors.
+
+ src/hb-ot-color.cc | 13 ++++++-------
+ test/api/test-ot-color.c | 14 +++++++-------
+ 2 files changed, 13 insertions(+), 14 deletions(-)
+
commit 07b724f3419a28c479cd8a75ae0eecb841a6d2f3
Author: Ebrahim Byagowi <ebrahim@gnu.org>
Date: Fri Jun 24 12:23:25 2016 +0430
@@ -11759,6 +17260,29 @@ Date: Mon Jun 20 10:25:43 2016 +0300
Merge branch 'master' into conflictingFontFix
+commit d34d3ac985a6c8c848ae49635b648a72e0c8f30d
+Author: Sascha Brawer <sascha@brawer.ch>
+Date: Mon Apr 25 18:20:57 2016 +0200
+
+ Support CPAL table
+
+ NEWS | 6 +-
+ src/Makefile.am | 3 +
+ src/Makefile.sources | 3 +
+ src/hb-ot-color.cc | 213 ++++++++++++++
+ src/hb-ot-color.h | 99 +++++++
+ src/hb-ot-cpal-table.hh | 121 ++++++++
+ src/hb-ot-layout-private.hh | 3 +
+ src/hb-ot-layout.cc | 7 +
+ src/hb-ot.h | 1 +
+ test/api/Makefile.am | 1 +
+ test/api/hb-test.h | 30 ++
+ test/api/test-ot-color.c | 318
+ +++++++++++++++++++++
+ .../319f5d7ebffbefc5c5e6569f8cea73444d7a7268.ttf | Bin 0 -> 2128 bytes
+ .../e90374e5e439e00725b4fe7a8d73db57c5a97f82.ttf | Bin 0 -> 1948 bytes
+ 14 files changed, 804 insertions(+), 1 deletion(-)
+
commit 07461d06d242cd5cfda7ccb891189f074a89b460
Author: Kelvin <kelvinsthirteen@gmail.com>
Date: Sat Jun 18 22:46:38 2016 +0000
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/NEWS b/Build/source/libs/harfbuzz/harfbuzz-src/NEWS
index 9015c4ad2c5..fe09ab160f0 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/NEWS
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/NEWS
@@ -1,3 +1,18 @@
+Overview of changes leading to 1.7.6
+Wednesday, March 7, 2018
+====================================
+
+- Fix to hb_set_t binary operations. Ouch.
+- New experimental harfbuzz-subset library. All of hb-subset.h
+ is experimental right now and API WILL change.
+
+- New API:
+hb_blob_copy_writable_or_fail()
+HB_OT_TAG_BASE
+hb_set_previous()
+hb_set_previous_range()
+
+
Overview of changes leading to 1.7.5
Tuesday, January 30, 2018
====================================
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/RELEASING.md b/Build/source/libs/harfbuzz/harfbuzz-src/RELEASING.md
index 1863c6e3938..dedcca8f9e9 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/RELEASING.md
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/RELEASING.md
@@ -35,7 +35,7 @@ HarfBuzz release walk-through checklist:
a. Put contents of [this](https://drive.google.com/open?id=0B3_fQkxDZZXXbWltRGd5bjVrUDQ) on your `~/.local/i686-w64-mingw32`,
- b. Run `./MING32 --with-uniscribe` script (available below) to configure harfbuzz with mingw in a subdirector (eg. winbuild/),
+ b. Run `../mingw32.sh --with-uniscribe` script (available below) to configure harfbuzz with mingw in a subdirector (eg. winbuild/),
c. make
@@ -63,32 +63,6 @@ HarfBuzz release walk-through checklist:
edit the tag, upload artefacts and NEWS entry and save.
-## 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=`../config.guess` --host=$target --prefix=$HOME/.local/$target "$@"
-```
-
## UPDATE.sh
```bash
#!/bin/bash
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/TODO b/Build/source/libs/harfbuzz/harfbuzz-src/TODO
index 4f37f605b11..53ffbe9d00a 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/TODO
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/TODO
@@ -1,24 +1,14 @@
General fixes:
=============
-- AAT 'morx' implementation.
-
-- Return "safe-to-break" bit from shaping.
-
- Implement 'rand' feature.
-- mask propagation? (when ligation, "or" the masks).
-
API issues:
===========
- API to accept a list of languages?
-- Add init_func to font_funcs. Adjust ft.
-
-- 'const' for getter APIs? (use mutable internally)
-
- Remove hb_ot_shape_glyphs_closure()?
@@ -39,7 +29,7 @@ API additions
- Add query / enumeration API for aalt-like features?
-- SFNT api? get_num_faces? get_table_tags? (there's something in stash)
+- SFNT api? get_num_faces?
- Add segmentation API
@@ -50,20 +40,3 @@ hb-view / hb-shape enhancements:
===============================
- Add --width, --height, --auto-size, --ink-box, --align, etc?
-
-
-Tests to write:
-==============
-
-- ot-layout enumeration API (needs font)
-
-- Finish test-shape.c, grep for TODO
-
-- Finish test-unicode.c, grep for TODO
-
-- GObject, FreeType, etc
-
-- hb_cache_t and relatives
-
-- hb_feature_to/from_string
-- hb_buffer_[sg]et_contents
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/autogen.sh b/Build/source/libs/harfbuzz/harfbuzz-src/autogen.sh
index cbc8627d53e..fd5c1983c73 100755
--- a/Build/source/libs/harfbuzz/harfbuzz-src/autogen.sh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/autogen.sh
@@ -7,11 +7,11 @@ test -n "$srcdir" || srcdir=.
olddir=`pwd`
cd $srcdir
-echo -n "checking for ragel... "
-which ragel || {
- echo "You need to install ragel... See http://www.complang.org/ragel/"
- exit 1
-}
+#echo -n "checking for ragel... "
+#which ragel || {
+# echo "You need to install ragel... See http://www.complang.org/ragel/"
+# exit 1
+#}
echo -n "checking for pkg-config... "
which pkg-config || {
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/config.h.in b/Build/source/libs/harfbuzz/harfbuzz-src/config.h.in
index d44d4c9a728..1515f8143b6 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/config.h.in
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/config.h.in
@@ -96,6 +96,9 @@
/* Have sched_yield */
#undef HAVE_SCHED_YIELD
+/* Define to 1 if you have the `setlinebuf' function. */
+#undef HAVE_SETLINEBUF
+
/* Have Solaris __machine_*_barrier and atomic_* operations */
#undef HAVE_SOLARIS_ATOMIC_OPS
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac b/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac
index d799cab0a20..1fb8a10a3df 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/configure.ac
@@ -1,6 +1,6 @@
AC_PREREQ([2.64])
AC_INIT([HarfBuzz],
- [1.7.5],
+ [1.7.6],
[https://github.com/harfbuzz/harfbuzz/issues/new],
[harfbuzz],
[http://harfbuzz.org/])
@@ -11,6 +11,7 @@ AC_CONFIG_HEADERS([config.h])
AM_INIT_AUTOMAKE([1.13.0 gnits tar-ustar dist-bzip2 no-dist-gzip -Wall no-define color-tests -Wno-portability])
AM_SILENT_RULES([yes])
+AX_CODE_COVERAGE
# Initialize libtool
m4_ifdef([AM_PROG_AR], [AM_PROG_AR])
@@ -20,6 +21,7 @@ LT_INIT([disable-static])
# Check for programs
AC_USE_SYSTEM_EXTENSIONS
AC_PROG_CC
+AC_PROG_CC_C99
AM_PROG_CC_C_O
AC_PROG_CXX
dnl AX_CXX_COMPILE_STDCXX(11, noext, optional)
@@ -57,6 +59,13 @@ m4_define([hb_libtool_current],
HB_LIBTOOL_VERSION_INFO=hb_libtool_current:hb_libtool_revision:hb_libtool_age
AC_SUBST(HB_LIBTOOL_VERSION_INFO)
+AC_ARG_WITH([libstdc++],
+ [AS_HELP_STRING([--with-libstdc++=@<:@yes/no@:>@],
+ [Allow linking with libstdc++ @<:@default=no@:>@])],
+ [with_libstdcxx=$withval],
+ [with_libstdcxx=no])
+AM_CONDITIONAL(WITH_LIBSTDCXX, [test "x$with_libstdcxx" = "xyes"])
+
# Documentation
have_gtk_doc=false
m4_ifdef([GTK_DOC_CHECK], [
@@ -68,8 +77,8 @@ GTK_DOC_CHECK([1.15],[--flavour no-tmpl])
AM_CONDITIONAL([ENABLE_GTK_DOC], false)
])
-# Functions and headers
-AC_CHECK_FUNCS(atexit mprotect sysconf getpagesize mmap isatty newlocale strtod_l)
+# Functions, and headers
+AC_CHECK_FUNCS(atexit mprotect sysconf getpagesize mmap isatty newlocale strtod_l setlinebuf)
AC_CHECK_HEADERS(unistd.h sys/mman.h xlocale.h)
# Compiler flags
@@ -80,12 +89,6 @@ if test "x$GCC" = "xyes"; then
# Make symbols link locally
LDFLAGS="$LDFLAGS -Bsymbolic-functions"
- # Make sure we don't link to libstdc++
- CXXFLAGS="$CXXFLAGS -fno-rtti -fno-exceptions"
-
- # No threadsafe statics and C++ as we do it ourselves
- CXXFLAGS="$CXXFLAGS -fno-threadsafe-statics"
-
# Assorted warnings
CXXFLAGS="$CXXFLAGS -Wcast-align"
@@ -182,6 +185,7 @@ if $have_gobject; then
AC_SUBST(GLIB_MKENUMS)
fi
AM_CONDITIONAL(HAVE_GOBJECT, $have_gobject)
+AC_SUBST(have_gobject)
dnl ===========================================================================
@@ -355,9 +359,7 @@ if $have_freetype; then
AC_DEFINE(HAVE_FREETYPE, 1, [Have FreeType 2 library])
save_libs=$LIBS
LIBS="$LIBS $FREETYPE_LIBS"
- AC_CHECK_FUNCS(FT_Get_Var_Blend_Coordinates)
- AC_CHECK_FUNCS(FT_Set_Var_Blend_Coordinates)
- AC_CHECK_FUNCS(FT_Done_MM_Var)
+ AC_CHECK_FUNCS(FT_Get_Var_Blend_Coordinates FT_Set_Var_Blend_Coordinates FT_Done_MM_Var)
LIBS=$save_libs
fi
AM_CONDITIONAL(HAVE_FREETYPE, $have_freetype)
@@ -491,6 +493,7 @@ AC_CONFIG_FILES([
Makefile
src/Makefile
src/hb-version.h
+src/harfbuzz-config.cmake
src/hb-ucdn/Makefile
util/Makefile
test/Makefile
@@ -500,6 +503,8 @@ test/shaping/Makefile
test/shaping/data/Makefile
test/shaping/data/in-house/Makefile
test/shaping/data/text-rendering-tests/Makefile
+test/subset/Makefile
+test/subset/data/Makefile
docs/Makefile
docs/version.xml
])
@@ -515,14 +520,14 @@ Unicode callbacks (you want at least one):
Glib: ${have_glib}
ICU: ${have_icu}
-Font callbacks (the more the better):
+Font callbacks (the more the merrier):
FreeType: ${have_freetype}
Tools used for command-line utilities:
Cairo: ${have_cairo}
Fontconfig: ${have_fontconfig}
-Additional shapers (the more the better):
+Additional shapers (the more the merrier):
Graphite2: ${have_graphite2}
Platform shapers (not normally needed):
@@ -531,7 +536,7 @@ Platform shapers (not normally needed):
DirectWrite: ${have_directwrite}
Other features:
- Documentation: ${have_gtk_doc}
+ Documentation: ${enable_gtk_doc}
GObject bindings: ${have_gobject}
Introspection: ${have_introspection}
])
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.am b/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.am
index 833d1f9567d..afa104b83e4 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.am
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.am
@@ -9,12 +9,14 @@ CLEANFILES =
DISTCLEANFILES =
MAINTAINERCLEANFILES =
DISTCHECK_CONFIGURE_FLAGS = --enable-introspection
+TESTS =
+check_PROGRAMS =
# The following warning options are useful for debugging: -Wpadded
#AM_CXXFLAGS =
# Convenience targets:
-lib: $(BUILT_SOURCES) libharfbuzz.la
+lib: $(BUILT_SOURCES) libharfbuzz.la libharfbuzz-subset.la
fuzzing: $(BUILT_SOURCES) libharfbuzz-fuzzing.la
lib_LTLIBRARIES = libharfbuzz.la
@@ -28,7 +30,15 @@ HBDEPS =
HBSOURCES = $(HB_BASE_sources)
HBSOURCES += $(HB_BASE_RAGEL_GENERATED_sources)
HBHEADERS = $(HB_BASE_headers)
-HBNODISTHEADERS = $(HB_NODIST_headers)
+
+if WITH_LIBSTDCXX
+HBNOLIBCXXCFLAGS =
+else
+# Make sure we don't link to libstdc++
+# No threadsafe statics in C++ as we do it ourselves
+HBCFLAGS += -fno-exceptions
+HBNOLIBCXXFLAGS = -fno-threadsafe-statics -fno-rtti
+endif
if HAVE_OT
HBSOURCES += $(HB_OT_sources)
@@ -114,31 +124,59 @@ HBLIBS += $(HBNONPCLIBS)
if OS_WIN32
export_symbols = -export-symbols harfbuzz.def
harfbuzz_def_dependency = harfbuzz.def
-libharfbuzz_la_LINK = $(CXXLINK) $(libharfbuzz_la_LDFLAGS)
+export_symbols_subset = -export-symbols harfbuzz-subset.def
+harfbuzz_subset_def_dependency = harfbuzz-subset.def
+export_symbols_icu = -export-symbols harfbuzz-icu.def
+harfbuzz_icu_def_dependency = harfbuzz-icu.def
+export_symbols_gobject = -export-symbols harfbuzz-gobject.def
+harfbuzz_gobject_def_dependency = harfbuzz-gobject.def
+chosen_linker = $(CXXLINK)
+else
+if WITH_LIBSTDCXX
+chosen_linker = $(CXXLINK)
else
-# Use a C linker for GCC, not C++; Don't link to libstdc++
if HAVE_GCC
-libharfbuzz_la_LINK = $(LINK) $(libharfbuzz_la_LDFLAGS)
+# Use a C linker for GCC, not C++; Don't link to libstdc++
+chosen_linker = $(LINK)
else
-libharfbuzz_la_LINK = $(CXXLINK) $(libharfbuzz_la_LDFLAGS)
+chosen_linker = $(CXXLINK)
endif
endif
+endif
+
+@CODE_COVERAGE_RULES@
-libharfbuzz_la_SOURCES = $(HBSOURCES) $(HBHEADERS) $(HBNODISTHEADERS)
-libharfbuzz_la_CPPFLAGS = $(HBCFLAGS)
-libharfbuzz_la_LDFLAGS = $(AM_LDFLAGS) -lm -version-info $(HB_LIBTOOL_VERSION_INFO) $(export_symbols) -no-undefined
+base_link_flags = $(AM_LDFLAGS) -lm -version-info $(HB_LIBTOOL_VERSION_INFO) -no-undefined
+libharfbuzz_la_LINK = $(chosen_linker) $(libharfbuzz_la_LDFLAGS) $(CODE_COVERAGE_LDFLAGS)
+libharfbuzz_la_SOURCES = $(HBSOURCES) $(HBHEADERS)
+libharfbuzz_la_CPPFLAGS = $(HBCFLAGS) $(HBNOLIBCXXFLAGS) $(CODE_COVERAGE_CFLAGS)
+libharfbuzz_la_LDFLAGS = $(base_link_flags) $(export_symbols)
libharfbuzz_la_LIBADD = $(HBLIBS)
EXTRA_libharfbuzz_la_DEPENDENCIES = $(harfbuzz_def_dependency)
pkginclude_HEADERS = $(HBHEADERS)
-nodist_pkginclude_HEADERS = $(HBNODISTHEADERS)
+nodist_pkginclude_HEADERS =
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = harfbuzz.pc
-EXTRA_DIST += harfbuzz.pc.in
+cmakedir = $(libdir)/cmake/harfbuzz
+cmake_DATA = harfbuzz-config.cmake
+EXTRA_DIST += harfbuzz.pc.in harfbuzz-config.cmake.in
+
+lib_LTLIBRARIES += libharfbuzz-subset.la
+libharfbuzz_subset_la_SOURCES = $(HB_SUBSET_sources)
+libharfbuzz_subset_la_CPPFLAGS = $(HBCFLAGS)
+libharfbuzz_subset_la_LDFLAGS = $(base_link_flags) $(export_symbols_subset)
+libharfbuzz_subset_la_LIBADD = libharfbuzz.la
+EXTRA_libharfbuzz_subset_la_DEPENDENCIES = $(harfbuzz_subset_def_dependency)
+pkginclude_HEADERS += $(HB_SUBSET_headers)
+pkgconfig_DATA += harfbuzz-subset.pc
+EXTRA_DIST += harfbuzz-subset.pc.in
FUZZING_CPPFLAGS = \
-DHB_NDEBUG \
-DHB_MAX_NESTING_LEVEL=3 \
-DHB_SANITIZE_MAX_EDITS=3 \
+ -DHB_SANITIZE_MAX_OPS_FACTOR=3 \
+ -DHB_SANITIZE_MAX_OPS_MIN=128 \
-DHB_BUFFER_MAX_LEN_FACTOR=3 \
-DHB_BUFFER_MAX_LEN_MIN=8 \
-DHB_BUFFER_MAX_LEN_DEFAULT=128 \
@@ -147,10 +185,10 @@ FUZZING_CPPFLAGS = \
-DHB_BUFFER_MAX_OPS_DEFAULT=1024 \
$(NULL)
EXTRA_LTLIBRARIES = libharfbuzz-fuzzing.la
-libharfbuzz_fuzzing_la_LINK = $(libharfbuzz_la_LINK)
+libharfbuzz_fuzzing_la_LINK = $(chosen_linker) $(libharfbuzz_fuzzing_la_LDFLAGS)
libharfbuzz_fuzzing_la_SOURCES = $(libharfbuzz_la_SOURCES)
-libharfbuzz_fuzzing_la_CPPFLAGS = $(libharfbuzz_la_CPPFLAGS) $(FUZZING_CPPFLAGS)
-libharfbuzz_fuzzing_la_LDFLAGS = $(libharfbuzz_la_LDFLAGS)
+libharfbuzz_fuzzing_la_CPPFLAGS = $(HBCFLAGS) $(FUZZING_CPPFLAGS)
+libharfbuzz_fuzzing_la_LDFLAGS = $(AM_LDFLAGS)
libharfbuzz_fuzzing_la_LIBADD = $(libharfbuzz_la_LIBADD)
EXTRA_libharfbuzz_fuzzing_la_DEPENDENCIES = $(EXTRA_libharfbuzz_la_DEPENDENCIES)
CLEANFILES += libharfbuzz-fuzzing.la
@@ -164,9 +202,10 @@ HBHEADERS += $(HB_ICU_headers)
else
lib_LTLIBRARIES += libharfbuzz-icu.la
libharfbuzz_icu_la_SOURCES = $(HB_ICU_sources)
-libharfbuzz_icu_la_CPPFLAGS = $(ICU_CFLAGS)
-libharfbuzz_icu_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(HB_LIBTOOL_VERSION_INFO) -no-undefined
+libharfbuzz_icu_la_CPPFLAGS = $(HBCFLAGS) $(ICU_CFLAGS)
+libharfbuzz_icu_la_LDFLAGS = $(base_link_flags) $(export_symbols_icu)
libharfbuzz_icu_la_LIBADD = $(ICU_LIBS) libharfbuzz.la
+EXTRA_libharfbuzz_icu_la_DEPENDENCIES = $(harfbuzz_icu_def_dependency)
pkginclude_HEADERS += $(HB_ICU_headers)
pkgconfig_DATA += harfbuzz-icu.pc
endif
@@ -175,13 +214,15 @@ EXTRA_DIST += harfbuzz-icu.pc.in
if HAVE_GOBJECT
lib_LTLIBRARIES += libharfbuzz-gobject.la
-libharfbuzz_gobject_la_SOURCES = $(HB_GOBJECT_sources)
-nodist_libharfbuzz_gobject_la_SOURCES = $(HB_GOBJECT_ENUM_sources)
-libharfbuzz_gobject_la_CPPFLAGS = $(GOBJECT_CFLAGS)
-libharfbuzz_gobject_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(HB_LIBTOOL_VERSION_INFO) -no-undefined
+libharfbuzz_gobject_la_LINK = $(chosen_linker) $(libharfbuzz_gobject_la_LDFLAGS)
+libharfbuzz_gobject_la_SOURCES = $(HB_GOBJECT_DIST_sources)
+nodist_libharfbuzz_gobject_la_SOURCES = $(HB_GOBJECT_NODIST_sources)
+libharfbuzz_gobject_la_CPPFLAGS = $(HBCFLAGS) $(HBNOLIBCXXFLAGS) $(GOBJECT_CFLAGS)
+libharfbuzz_gobject_la_LDFLAGS = $(base_link_flags)
libharfbuzz_gobject_la_LIBADD = $(GOBJECT_LIBS) libharfbuzz.la
-pkginclude_HEADERS += $(HB_GOBJECT_headers)
-nodist_pkginclude_HEADERS += $(HB_GOBJECT_ENUM_headers)
+EXTRA_libharfbuzz_gobject_la_DEPENDENCIES = $(harfbuzz_gobject_def_dependency)
+pkginclude_HEADERS += $(HB_GOBJECT_DIST_headers)
+nodist_pkginclude_HEADERS += $(HB_GOBJECT_NODIST_headers)
pkgconfig_DATA += harfbuzz-gobject.pc
BUILT_SOURCES += \
@@ -221,9 +262,20 @@ EXTRA_DIST += \
CLEANFILES += $(pkgconfig_DATA)
-CLEANFILES += harfbuzz.def
+DEF_FILES = harfbuzz.def harfbuzz-subset.def harfbuzz-icu.def
+if HAVE_GOBJECT
+DEF_FILES += harfbuzz-gobject.def
+endif
+check: $(DEF_FILES) # For check-symbols.sh
+CLEANFILES += $(DEF_FILES)
harfbuzz.def: $(HBHEADERS) $(HBNODISTHEADERS)
$(AM_V_GEN) headers="$^" $(srcdir)/gen-def.py $@
+harfbuzz-subset.def: $(HB_SUBSET_headers)
+ $(AM_V_GEN) headers="$^" $(srcdir)/gen-def.py $@
+harfbuzz-icu.def: $(HB_ICU_headers)
+ $(AM_V_GEN) headers="$^" $(srcdir)/gen-def.py $@
+harfbuzz-gobject.def: $(HB_GOBJECT_headers)
+ $(AM_V_GEN) headers="$^" $(srcdir)/gen-def.py $@
GENERATORS = \
@@ -261,7 +313,8 @@ EXTRA_DIST += \
$(HB_BASE_RAGEL_sources) \
$(HB_OT_RAGEL_sources) \
$(NULL)
-MAINTAINERCLEANFILES += $(RAGEL_GENERATED)
+# We decided to add ragel-generated files to git...
+#MAINTAINERCLEANFILES += $(RAGEL_GENERATED)
$(srcdir)/%.hh: $(srcdir)/%.rl
$(AM_V_GEN)(cd $(srcdir) && $(RAGEL) -e -F1 -o "$*.hh" "$*.rl") \
|| ($(RM) "$@"; false)
@@ -295,32 +348,56 @@ test_buffer_serialize_SOURCES = test-buffer-serialize.cc
test_buffer_serialize_CPPFLAGS = $(HBCFLAGS)
test_buffer_serialize_LDADD = libharfbuzz.la $(HBLIBS)
-check: harfbuzz.def # For check-defs.sh
-
dist_check_SCRIPTS = \
check-c-linkage-decls.sh \
- check-defs.sh \
check-externs.sh \
check-header-guards.sh \
check-includes.sh \
- check-libstdc++.sh \
check-static-inits.sh \
check-symbols.sh \
$(NULL)
+TESTS += $(dist_check_SCRIPTS)
-check_PROGRAMS = \
- test-ot-tag \
+if !WITH_LIBSTDCXX
+dist_check_SCRIPTS += \
+ check-libstdc++.sh \
$(NULL)
+endif
+
+check_PROGRAMS += \
+ dump-indic-data \
+ dump-khmer-data \
+ dump-myanmar-data \
+ dump-use-data \
+ $(NULL)
+dump_indic_data_SOURCES = dump-indic-data.cc hb-ot-shape-complex-indic-table.cc
+dump_indic_data_CPPFLAGS = $(HBCFLAGS)
+dump_indic_data_LDADD = libharfbuzz.la $(HBLIBS)
+dump_khmer_data_SOURCES = dump-khmer-data.cc hb-ot-shape-complex-indic-table.cc
+dump_khmer_data_CPPFLAGS = $(HBCFLAGS)
+dump_khmer_data_LDADD = libharfbuzz.la $(HBLIBS)
+dump_myanmar_data_SOURCES = dump-myanmar-data.cc hb-ot-shape-complex-indic-table.cc
+dump_myanmar_data_CPPFLAGS = $(HBCFLAGS)
+dump_myanmar_data_LDADD = libharfbuzz.la $(HBLIBS)
+dump_use_data_SOURCES = dump-use-data.cc hb-ot-shape-complex-use-table.cc
+dump_use_data_CPPFLAGS = $(HBCFLAGS)
+dump_use_data_LDADD = libharfbuzz.la $(HBLIBS)
+
+check_PROGRAMS += test-ot-tag test-unicode-ranges
+TESTS += test-ot-tag test-unicode-ranges
+
test_ot_tag_SOURCES = hb-ot-tag.cc
test_ot_tag_CPPFLAGS = $(HBCFLAGS) -DMAIN
test_ot_tag_LDADD = libharfbuzz.la $(HBLIBS)
-TESTS = $(dist_check_SCRIPTS) $(check_PROGRAMS)
+test_unicode_ranges_SOURCES = test-unicode-ranges.cc
+test_unicode_ranges_LDADD = libharfbuzz.la $(HBLIBS)
+
TESTS_ENVIRONMENT = \
srcdir="$(srcdir)" \
MAKE="$(MAKE) $(AM_MAKEFLAGS)" \
HBSOURCES="$(HBSOURCES)" \
- HBHEADERS="$(HBHEADERS) $(HBNODISTHEADERS)" \
+ HBHEADERS="$(HBHEADERS)" \
$(NULL)
if HAVE_INTROSPECTION
@@ -350,12 +427,9 @@ HarfBuzz_0_0_gir_LIBS = \
$(NULL)
HarfBuzz_0_0_gir_FILES = \
$(HBHEADERS) \
- $(HBNODISTHEADERS) \
$(HBSOURCES) \
- $(HB_GOBJECT_ENUM_sources) \
- $(HB_GOBJECT_ENUM_headers) \
$(HB_GOBJECT_sources) \
- $(HB_GOBJECT_STRUCTS_headers) \
+ $(HB_GOBJECT_headers) \
$(NULL)
girdir = $(datadir)/gir-1.0
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.sources b/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.sources
index 213aa22f684..787c3c4bb52 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.sources
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/Makefile.sources
@@ -17,9 +17,10 @@ HB_BASE_sources = \
hb-object-private.hh \
hb-open-file-private.hh \
hb-open-type-private.hh \
- hb-ot-cbdt-table.hh \
+ hb-ot-color-cbdt-table.hh \
hb-ot-cmap-table.hh \
hb-ot-glyf-table.hh \
+ hb-ot-hdmx-table.hh \
hb-ot-head-table.hh \
hb-ot-hhea-table.hh \
hb-ot-hmtx-table.hh \
@@ -27,6 +28,7 @@ HB_BASE_sources = \
hb-ot-maxp-table.hh \
hb-ot-name-table.hh \
hb-ot-os2-table.hh \
+ hb-ot-os2-unicode-ranges.hh \
hb-ot-post-macroman.hh \
hb-ot-post-table.hh \
hb-ot-tag.cc \
@@ -69,9 +71,6 @@ HB_BASE_headers = \
hb-shape.h \
hb-shape-plan.h \
hb-unicode.h \
- $(NULL)
-
-HB_NODIST_headers = \
hb-version.h \
$(NULL)
@@ -82,10 +81,14 @@ HB_FALLBACK_sources = \
HB_OT_sources = \
hb-aat-layout.cc \
hb-aat-layout-common-private.hh \
+ hb-aat-layout-ankr-table.hh \
+ hb-aat-layout-kerx-table.hh \
hb-aat-layout-morx-table.hh \
+ hb-aat-layout-trak-table.hh \
hb-aat-layout-private.hh \
hb-ot-font.cc \
hb-ot-layout.cc \
+ hb-ot-layout-base-table.hh \
hb-ot-layout-common-private.hh \
hb-ot-layout-gdef-table.hh \
hb-ot-layout-gpos-table.hh \
@@ -93,6 +96,9 @@ HB_OT_sources = \
hb-ot-layout-gsub-table.hh \
hb-ot-layout-jstf-table.hh \
hb-ot-layout-private.hh \
+ hb-ot-color.cc \
+ hb-ot-color-colr-table.hh \
+ hb-ot-color-cpal-table.hh \
hb-ot-map.cc \
hb-ot-map-private.hh \
hb-ot-math.cc \
@@ -109,7 +115,9 @@ HB_OT_sources = \
hb-ot-shape-complex-indic.cc \
hb-ot-shape-complex-indic-private.hh \
hb-ot-shape-complex-indic-table.cc \
+ hb-ot-shape-complex-khmer-private.hh \
hb-ot-shape-complex-khmer.cc \
+ hb-ot-shape-complex-myanmar-private.hh \
hb-ot-shape-complex-myanmar.cc \
hb-ot-shape-complex-thai.cc \
hb-ot-shape-complex-tibetan.cc \
@@ -181,8 +189,26 @@ HB_UCDN_sources = hb-ucdn.cc
HB_ICU_sources = hb-icu.cc
HB_ICU_headers = hb-icu.h
-HB_GOBJECT_sources = hb-gobject-structs.cc
-HB_GOBJECT_STRUCTS_headers = hb-gobject-structs.h
-HB_GOBJECT_headers = hb-gobject.h $(HB_GOBJECT_STRUCTS_headers)
+# Sources for libharfbuzz-subset
+HB_SUBSET_sources = \
+ hb-subset.cc \
+ hb-subset-glyf.cc \
+ hb-subset-input.cc \
+ hb-subset-plan.cc \
+ $(NULL)
+
+HB_SUBSET_headers = \
+ hb-subset.h \
+ hb-subset-glyf.hh \
+ hb-subset-plan.hh \
+ hb-subset-private.hh \
+ $(NULL)
+
+HB_GOBJECT_DIST_sources = hb-gobject-structs.cc
+HB_GOBJECT_DIST_headers = hb-gobject.h hb-gobject-structs.h
HB_GOBJECT_ENUM_sources = hb-gobject-enums.cc
HB_GOBJECT_ENUM_headers = hb-gobject-enums.h
+HB_GOBJECT_NODIST_sources = $(HB_GOBJECT_ENUM_sources)
+HB_GOBJECT_NODIST_headers = $(HB_GOBJECT_ENUM_headers)
+HB_GOBJECT_sources = $(HB_GOBJECT_DIST_sources) $(HB_GOBJECT_NODIST_sources)
+HB_GOBJECT_headers = $(HB_GOBJECT_DIST_headers) $(HB_GOBJECT_NODIST_headers)
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/check-defs.sh b/Build/source/libs/harfbuzz/harfbuzz-src/src/check-defs.sh
deleted file mode 100755
index c6697831fe1..00000000000
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/check-defs.sh
+++ /dev/null
@@ -1,54 +0,0 @@
-#!/bin/sh
-
-LC_ALL=C
-export LC_ALL
-
-test -z "$srcdir" && srcdir=.
-test -z "$libs" && libs=.libs
-stat=0
-
-if which nm 2>/dev/null >/dev/null; then
- :
-else
- echo "check-defs.sh: 'nm' not found; skipping test"
- exit 77
-fi
-
-defs="harfbuzz.def"
-if ! test -f "$defs"; then
- echo "check-defs.sh: '$defs' not found; skipping test"
- exit 77
-fi
-
-tested=false
-for def in $defs; do
- lib=`echo "$def" | sed 's/[.]def$//;s@.*/@@'`
- for suffix in so dylib; do
- so=$libs/lib${lib}.$suffix
- if ! test -f "$so"; then continue; fi
-
- # On mac, C symbols are prefixed with _
- if test $suffix = dylib; then prefix="_"; fi
-
- EXPORTED_SYMBOLS="`nm "$so" | grep ' [BCDGINRSTVW] .' | grep -v " $prefix"'\(_fini\>\|_init\>\|_fdata\>\|_ftext\>\|_fbss\>\|__bss_start\>\|__bss_start__\>\|__bss_end__\>\|_edata\>\|_end\>\|_bss_end__\>\|__end__\>\|__gcov_flush\>\|llvm_\)' | cut -d' ' -f3`"
-
- if test -f "$so"; then
-
- echo "Checking that $so has the same symbol list as $def"
- {
- echo EXPORTS
- echo "$EXPORTED_SYMBOLS" | sed -e "s/^${prefix}hb/hb/g"
- # cheat: copy the last line from the def file!
- tail -n1 "$def"
- } | diff "$def" - >&2 || stat=1
-
- tested=true
- fi
- done
-done
-if ! $tested; then
- echo "check-defs.sh: libharfbuzz shared library not found; skipping test"
- exit 77
-fi
-
-exit $stat
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/check-libstdc++.sh b/Build/source/libs/harfbuzz/harfbuzz-src/src/check-libstdc++.sh
index e4aaeb2b4a1..ce0bdab755f 100755
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/check-libstdc++.sh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/check-libstdc++.sh
@@ -21,16 +21,20 @@ else
fi
tested=false
-for suffix in so dylib; do
- so=$libs/libharfbuzz.$suffix
- if ! test -f "$so"; then continue; fi
+# harfbuzz-icu links to libstdc++ because icu does.
+# harfbuzz-subset uses libstdc++.
+for soname in harfbuzz harfbuzz-gobject; do
+ for suffix in so dylib; do
+ so=$libs/lib$soname.$suffix
+ if ! test -f "$so"; then continue; fi
- echo "Checking that we are not linking to libstdc++ or libc++"
- if $LDD $so | grep 'libstdc[+][+]\|libc[+][+]'; then
- echo "Ouch, linked to libstdc++ or libc++"
- stat=1
- fi
- tested=true
+ echo "Checking that we are not linking to libstdc++ or libc++ in $so"
+ if $LDD $so | grep 'libstdc[+][+]\|libc[+][+]'; then
+ echo "Ouch, linked to libstdc++ or libc++"
+ stat=1
+ fi
+ tested=true
+ done
done
if ! $tested; then
echo "check-libstdc++.sh: libharfbuzz shared library not found; skipping test"
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/check-symbols.sh b/Build/source/libs/harfbuzz/harfbuzz-src/src/check-symbols.sh
index 3adf65f8744..bfc93b349ae 100755
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/check-symbols.sh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/check-symbols.sh
@@ -7,6 +7,7 @@ test -z "$srcdir" && srcdir=.
test -z "$libs" && libs=.libs
stat=0
+IGNORED_SYMBOLS='_fini\|_init\|_fdata\|_ftext\|_fbss\|__bss_start\|__bss_start__\|__bss_end__\|_edata\|_end\|_bss_end__\|__end__\|__gcov_flush\|llvm_.*'
if which nm 2>/dev/null >/dev/null; then
:
@@ -15,29 +16,46 @@ else
exit 77
fi
-echo "Checking that we are not exposing internal symbols"
tested=false
-for suffix in so dylib; do
- so=$libs/libharfbuzz.$suffix
- if ! test -f "$so"; then continue; fi
-
- EXPORTED_SYMBOLS="`nm "$so" | grep ' [BCDGINRSTVW] .' | grep -v ' _fini\>\| _init\>\| _fdata\>\| _ftext\>\| _fbss\>\| __bss_start\>\| __bss_start__\>\| __bss_end__\>\| _edata\>\| _end\>\| _bss_end__\>\| __end__\>\| __gcov_flush\>\| ___gcov_flush\>\| llvm_\| _llvm_' | cut -d' ' -f3`"
-
- prefix=`basename "$so" | sed 's/libharfbuzz/hb/; s/-/_/g; s/[.].*//'`
-
- # On mac, C symbols are prefixed with _
- if test $suffix = dylib; then prefix="_$prefix"; fi
-
- echo "Processing $so"
- if echo "$EXPORTED_SYMBOLS" | grep -v "^${prefix}_"; then
- echo "Ouch, internal symbols exposed"
- stat=1
- fi
-
- tested=true
+for soname in harfbuzz harfbuzz-subset harfbuzz-icu harfbuzz-gobject; do
+ for suffix in so dylib; do
+ so=$libs/lib$soname.$suffix
+ if ! test -f "$so"; then continue; fi
+
+ # On macOS, C symbols are prefixed with _
+ symprefix=
+ if test $suffix = dylib; then symprefix=_; fi
+
+ EXPORTED_SYMBOLS="`nm "$so" | grep ' [BCDGINRSTVW] .' | grep -v " $symprefix\\($IGNORED_SYMBOLS\\>\\)" | cut -d' ' -f3 | c++filt`"
+
+ prefix=$symprefix`basename "$so" | sed 's/libharfbuzz/hb/; s/-/_/g; s/[.].*//'`
+
+ echo
+ echo "Checking that $so does not expose internal symbols"
+ if echo "$EXPORTED_SYMBOLS" | grep -v "^${prefix}\(_\|$\)"; then
+ echo "Ouch, internal symbols exposed"
+ stat=1
+ fi
+
+ def=$soname.def
+ if ! test -f "$def"; then
+ echo "'$def' not found; skipping"
+ else
+ echo
+ echo "Checking that $so has the same symbol list as $def"
+ {
+ echo EXPORTS
+ echo "$EXPORTED_SYMBOLS" | sed -e "s/^${symprefix}hb/hb/g"
+ # cheat: copy the last line from the def file!
+ tail -n1 "$def"
+ } | c++filt | diff "$def" - >&2 || stat=1
+ fi
+
+ tested=true
+ done
done
if ! $tested; then
- echo "check-symbols.sh: no shared library found; skipping test"
+ echo "check-symbols.sh: no shared libraries found; skipping test"
exit 77
fi
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/dump-indic-data.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/dump-indic-data.cc
new file mode 100644
index 00000000000..d57413884be
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/dump-indic-data.cc
@@ -0,0 +1,43 @@
+/*
+ * Copyright © 2018 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#include "hb-ot-shape-complex-indic-private.hh"
+
+int
+main (void)
+{
+ for (hb_codepoint_t u = 0; u <= 0x10FFFF; u++)
+ {
+ hb_glyph_info_t info;
+ info.codepoint = u;
+ set_indic_properties (info);
+ if (info.indic_category() != INDIC_SYLLABIC_CATEGORY_OTHER ||
+ info.indic_position() != INDIC_MATRA_CATEGORY_NOT_APPLICABLE)
+ printf("U+%04X %u %u\n", u,
+ info.indic_category(),
+ info.indic_position());
+ }
+}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/dump-khmer-data.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/dump-khmer-data.cc
new file mode 100644
index 00000000000..7dd09b2b5ca
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/dump-khmer-data.cc
@@ -0,0 +1,43 @@
+/*
+ * Copyright © 2018 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#include "hb-ot-shape-complex-khmer-private.hh"
+
+int
+main (void)
+{
+ for (hb_codepoint_t u = 0; u <= 0x10FFFF; u++)
+ {
+ hb_glyph_info_t info;
+ info.codepoint = u;
+ set_khmer_properties (info);
+ if (info.khmer_category() != INDIC_SYLLABIC_CATEGORY_OTHER ||
+ info.khmer_position() != INDIC_MATRA_CATEGORY_NOT_APPLICABLE)
+ printf("U+%04X %u %u\n", u,
+ info.khmer_category(),
+ info.khmer_position());
+ }
+}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/dump-myanmar-data.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/dump-myanmar-data.cc
new file mode 100644
index 00000000000..2df9cd987f3
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/dump-myanmar-data.cc
@@ -0,0 +1,43 @@
+/*
+ * Copyright © 2018 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#include "hb-ot-shape-complex-myanmar-private.hh"
+
+int
+main (void)
+{
+ for (hb_codepoint_t u = 0; u <= 0x10FFFF; u++)
+ {
+ hb_glyph_info_t info;
+ info.codepoint = u;
+ set_myanmar_properties (info);
+ if (info.myanmar_category() != INDIC_SYLLABIC_CATEGORY_OTHER ||
+ info.myanmar_position() != INDIC_MATRA_CATEGORY_NOT_APPLICABLE)
+ printf("U+%04X %u %u\n", u,
+ info.myanmar_category(),
+ info.myanmar_position());
+ }
+}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/dump-use-data.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/dump-use-data.cc
new file mode 100644
index 00000000000..0e64688f1e0
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/dump-use-data.cc
@@ -0,0 +1,38 @@
+/*
+ * Copyright © 2018 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#include "hb-ot-shape-complex-use-private.hh"
+
+int
+main (void)
+{
+ for (hb_codepoint_t u = 0; u <= 0x10FFFF; u++)
+ {
+ unsigned int category = hb_use_get_category (u);
+ if (category != USE_O)
+ printf("U+%04X %u\n", u, category);
+ }
+}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-def.py b/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-def.py
index ad1606ec3ff..1673537c963 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-def.py
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-def.py
@@ -9,8 +9,11 @@ for h in os.environ["headers"].split (' '):
if h.endswith (".h"):
with io.open(h, encoding='utf8') as f: headers_content.append (f.read ())
-result = ("EXPORTS\n" +
- "\n".join (sorted (re.findall (r"^hb_\w+(?= \()", "\n".join (headers_content), re.M))) +
- "\nLIBRARY libharfbuzz-0.dll")
+result = """EXPORTS
+%s
+LIBRARY lib%s-0.dll""" % (
+ "\n".join (sorted (re.findall (r"^hb_\w+(?= \()", "\n".join (headers_content), re.M))),
+ sys.argv[1].replace ('.def', '')
+)
with open (sys.argv[1], "w") as f: f.write (result)
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-use-table.py b/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-use-table.py
index 5391f27eb3e..06817255c92 100755
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-use-table.py
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/gen-use-table.py
@@ -449,7 +449,7 @@ page_bits = 12
print "}; /* Table items: %d; occupancy: %d%% */" % (offset, occupancy)
print
print "USE_TABLE_ELEMENT_TYPE"
-print "hb_use_get_categories (hb_codepoint_t u)"
+print "hb_use_get_category (hb_codepoint_t u)"
print "{"
print " switch (u >> %d)" % page_bits
print " {"
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz-config.cmake.in b/Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz-config.cmake.in
new file mode 100644
index 00000000000..87b15721a3a
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz-config.cmake.in
@@ -0,0 +1,82 @@
+# Set these variables so that the `${prefix}/lib` expands to something we can
+# remove.
+set(_harfbuzz_remove_string "REMOVE_ME")
+set(exec_prefix "${_harfbuzz_remove_string}")
+set(prefix "${_harfbuzz_remove_string}")
+
+# Compute the installation prefix by stripping components from our current
+# location.
+get_filename_component(_harfbuzz_prefix "${CMAKE_CURRENT_LIST_DIR}" DIRECTORY)
+get_filename_component(_harfbuzz_prefix "${_harfbuzz_prefix}" DIRECTORY)
+set(_harfbuzz_libdir "@libdir@")
+string(REPLACE "${_harfbuzz_remove_string}/" "" _harfbuzz_libdir "${_harfbuzz_libdir}")
+set(_harfbuzz_libdir_iter "${_harfbuzz_libdir}")
+while (_harfbuzz_libdir_iter)
+ get_filename_component(_harfbuzz_libdir_iter "${_harfbuzz_libdir_iter}" DIRECTORY)
+ get_filename_component(_harfbuzz_prefix "${_harfbuzz_prefix}" DIRECTORY)
+endwhile ()
+unset(_harfbuzz_libdir_iter)
+
+# Get the include subdir.
+set(_harfbuzz_includedir "@includedir@")
+string(REPLACE "${_harfbuzz_remove_string}/" "" _harfbuzz_includedir "${_harfbuzz_includedir}")
+
+# Extract version information from libtool.
+set(_harfbuzz_version_info "@HB_LIBTOOL_VERSION_INFO@")
+string(REPLACE ":" ";" _harfbuzz_version_info "${_harfbuzz_version_info}")
+list(GET _harfbuzz_version_info 0
+ _harfbuzz_current)
+list(GET _harfbuzz_version_info 1
+ _harfbuzz_revision)
+list(GET _harfbuzz_version_info 2
+ _harfbuzz_age)
+unset(_harfbuzz_version_info)
+
+if (APPLE)
+ set(_harfbuzz_lib_suffix ".0${CMAKE_SHARED_LIBRARY_SUFFIX}")
+elseif (UNIX)
+ set(_harfbuzz_lib_suffix "${CMAKE_SHARED_LIBRARY_SUFFIX}.0.${_harfbuzz_current}.${_harfbuzz_revision}")
+else ()
+ # Unsupported.
+ set(harfbuzz_FOUND 0)
+endif ()
+
+# Add the libraries.
+add_library(harfbuzz::harfbuzz SHARED IMPORTED)
+set_target_properties(harfbuzz::harfbuzz PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${_harfbuzz_prefix}/${_harfbuzz_includedir}/harfbuzz"
+ IMPORTED_LOCATION "${_harfbuzz_prefix}/${_harfbuzz_libdir}/libharfbuzz${_harfbuzz_lib_suffix}")
+
+add_library(harfbuzz::icu SHARED IMPORTED)
+set_target_properties(harfbuzz::icu PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${_harfbuzz_prefix}/${_harfbuzz_includedir}/harfbuzz"
+ INTERFACE_LINK_LIBRARIES "harfbuzz::harfbuzz"
+ IMPORTED_LOCATION "${_harfbuzz_prefix}/${_harfbuzz_libdir}/libharfbuzz-icu${_harfbuzz_lib_suffix}")
+
+add_library(harfbuzz::subset SHARED IMPORTED)
+set_target_properties(harfbuzz::subset PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${_harfbuzz_prefix}/${_harfbuzz_includedir}/harfbuzz"
+ INTERFACE_LINK_LIBRARIES "harfbuzz::harfbuzz"
+ IMPORTED_LOCATION "${_harfbuzz_prefix}/${_harfbuzz_libdir}/libharfbuzz-subset${_harfbuzz_lib_suffix}")
+
+# Only add the gobject library if it was built.
+set(_harfbuzz_have_gobject "@have_gobject@")
+if (_harfbuzz_have_gobject)
+ add_library(harfbuzz::gobject SHARED IMPORTED)
+ set_target_properties(harfbuzz::gobject PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${_harfbuzz_prefix}/${_harfbuzz_includedir}/harfbuzz"
+ INTERFACE_LINK_LIBRARIES "harfbuzz::harfbuzz"
+ IMPORTED_LOCATION "${_harfbuzz_prefix}/${_harfbuzz_libdir}/libharfbuzz-gobject${_harfbuzz_lib_suffix}")
+endif ()
+
+# Clean out variables we used in our scope.
+unset(_harfbuzz_lib_suffix)
+unset(_harfbuzz_current)
+unset(_harfbuzz_revision)
+unset(_harfbuzz_age)
+unset(_harfbuzz_includedir)
+unset(_harfbuzz_libdir)
+unset(_harfbuzz_prefix)
+unset(exec_prefix)
+unset(prefix)
+unset(_harfbuzz_remove_string)
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz-subset.pc.in b/Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz-subset.pc.in
new file mode 100644
index 00000000000..5da64b3f126
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/harfbuzz-subset.pc.in
@@ -0,0 +1,12 @@
+prefix=%prefix%
+exec_prefix=%exec_prefix%
+libdir=%libdir%
+includedir=%includedir%
+
+Name: harfbuzz
+Description: HarfBuzz font subsetter
+Version: %VERSION%
+
+Requires: harfbuzz
+Libs: -L${libdir} -lharfbuzz-subset
+Cflags: -I${includedir}/harfbuzz
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-ankr-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-ankr-table.hh
new file mode 100644
index 00000000000..d0453bd8807
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-ankr-table.hh
@@ -0,0 +1,80 @@
+/*
+ * Copyright © 2018 Ebrahim Byagowi
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ */
+
+#ifndef HB_AAT_LAYOUT_ANKR_TABLE_HH
+#define HB_AAT_LAYOUT_ANKR_TABLE_HH
+
+#include "hb-aat-layout-common-private.hh"
+
+#define HB_AAT_TAG_ankr HB_TAG('a','n','k','r')
+
+
+namespace AAT {
+
+
+/*
+ * ankr -- Anchor point
+ */
+
+struct Anchor
+{
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ FWORD xCoordinate;
+ FWORD yCoordinate;
+ public:
+ DEFINE_SIZE_STATIC (4);
+};
+
+struct ankr
+{
+ static const hb_tag_t tableTag = HB_AAT_TAG_ankr;
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) && version == 0 &&
+ lookupTable.sanitize (c, this) &&
+ anchors.sanitize (c, this));
+ }
+
+ protected:
+ HBUINT16 version; /* Version number (set to zero) */
+ HBUINT16 flags; /* Flags (currently unused; set to zero) */
+ LOffsetTo<Lookup<HBUINT16> > lookupTable; /* Offset to the table's lookup table */
+ LOffsetTo<ArrayOf<Anchor, HBUINT32> >
+ anchors; /* Offset to the glyph data table */
+
+ public:
+ DEFINE_SIZE_STATIC (12);
+};
+
+} /* namespace AAT */
+
+
+#endif /* HB_AAT_LAYOUT_ANKR_TABLE_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-common-private.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-common-private.hh
index b5395bba5bb..7c0dfa8b0cf 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-common-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-common-private.hh
@@ -120,7 +120,7 @@ struct BinSearchArrayOf
else
return p;
}
- return NULL;
+ return nullptr;
}
private:
@@ -563,9 +563,9 @@ struct StateTable
unsigned int entry = 0;
while (state < num_states)
{
- if (unlikely (!c->check_array (states + state * nClasses,
- states[0].static_size,
- nClasses * (num_states - state))))
+ if (unlikely (!c->check_array (states,
+ states[0].static_size * nClasses,
+ num_states)))
return_trace (false);
{ /* Sweep new states. */
const HBUINT16 *stop = &states[num_states * nClasses];
@@ -574,9 +574,9 @@ struct StateTable
state = num_states;
}
- if (unlikely (!c->check_array (entries + entry,
+ if (unlikely (!c->check_array (entries,
entries[0].static_size,
- num_entries - entry)))
+ num_entries)))
return_trace (false);
{ /* Sweep new entries. */
const Entry<Extra> *stop = &entries[num_entries];
@@ -614,8 +614,7 @@ struct StateTableDriver
hb_face_t *face_) :
machine (machine_),
buffer (buffer_),
- num_glyphs (face_->get_num_glyphs ()),
- last_zero (0) {}
+ num_glyphs (face_->get_num_glyphs ()) {}
template <typename context_t>
inline void drive (context_t *c)
@@ -629,9 +628,6 @@ struct StateTableDriver
bool last_was_dont_advance = false;
for (buffer->idx = 0;;)
{
- if (!state)
- last_zero = buffer->idx;
-
unsigned int klass = buffer->idx < buffer->len ?
machine.get_class (info[buffer->idx].codepoint, num_glyphs) :
0 /* End of text */;
@@ -639,10 +635,29 @@ struct StateTableDriver
if (unlikely (!entry))
break;
+ /* Unsafe-to-break before this if not in state 0, as things might
+ * go differently if we start from state 0 here. */
+ if (state && buffer->idx)
+ {
+ /* If there's no action and we're just epsilon-transitioning to state 0,
+ * safe to break. */
+ if (c->is_actionable (this, entry) ||
+ !(entry->newState == 0 && entry->flags == context_t::DontAdvance))
+ buffer->unsafe_to_break (buffer->idx - 1, buffer->idx + 1);
+ }
+
+ /* Unsafe-to-break if end-of-text would kick in here. */
+ if (buffer->idx + 2 <= buffer->len)
+ {
+ const Entry<EntryData> *end_entry = machine.get_entryZ (state, 0);
+ if (c->is_actionable (this, end_entry))
+ buffer->unsafe_to_break (buffer->idx, buffer->idx + 2);
+ }
+
if (unlikely (!c->transition (this, entry)))
break;
- last_was_dont_advance = (entry->flags & context_t::DontAdvance) && buffer->max_ops--;
+ last_was_dont_advance = (entry->flags & context_t::DontAdvance) && buffer->max_ops-- > 0;
state = entry->newState;
@@ -665,7 +680,6 @@ struct StateTableDriver
const StateTable<EntryData> &machine;
hb_buffer_t *buffer;
unsigned int num_glyphs;
- unsigned int last_zero;
};
@@ -684,17 +698,23 @@ struct hb_aat_apply_context_t :
hb_buffer_t *buffer;
hb_sanitize_context_t sanitizer;
+ /* Unused. For debug tracing only. */
+ unsigned int lookup_index;
+ unsigned int debug_depth;
+
inline hb_aat_apply_context_t (hb_font_t *font_,
hb_buffer_t *buffer_,
hb_blob_t *table) :
font (font_), face (font->face), buffer (buffer_),
- sanitizer ()
+ sanitizer (), lookup_index (0), debug_depth (0)
{
sanitizer.init (table);
sanitizer.num_glyphs = face->get_num_glyphs ();
sanitizer.start_processing ();
}
+ inline void set_lookup_index (unsigned int i) { lookup_index = i; }
+
inline ~hb_aat_apply_context_t (void)
{
sanitizer.end_processing ();
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-kerx-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-kerx-table.hh
new file mode 100644
index 00000000000..ce7ca105faa
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-kerx-table.hh
@@ -0,0 +1,339 @@
+/*
+ * Copyright © 2018 Ebrahim Byagowi
+ * Copyright © 2018 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_AAT_LAYOUT_KERX_TABLE_HH
+#define HB_AAT_LAYOUT_KERX_TABLE_HH
+
+#include "hb-open-type-private.hh"
+#include "hb-aat-layout-common-private.hh"
+
+#define HB_AAT_TAG_KERX HB_TAG('k','e','r','x')
+
+
+namespace AAT {
+
+using namespace OT;
+
+
+struct KerxFormat0Records
+{
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ protected:
+ GlyphID left;
+ GlyphID right;
+ FWORD value;
+ public:
+ DEFINE_SIZE_STATIC (6);
+};
+
+struct KerxSubTableFormat0
+{
+ // TODO(ebraminio) Enable when we got suitable BinSearchArrayOf
+ // inline int get_kerning (hb_codepoint_t left, hb_codepoint_t right) const
+ // {
+ // hb_glyph_pair_t pair = {left, right};
+ // int i = pairs.bsearch (pair);
+ // if (i == -1)
+ // return 0;
+ // return pairs[i].get_kerning ();
+ // }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ c->check_array (records, records[0].static_size, nPairs));
+ }
+
+ protected:
+ // TODO(ebraminio): A custom version of "BinSearchArrayOf<KerxPair> pairs;" is
+ // needed here to use HBUINT32 instead
+ HBUINT32 nPairs; /* The number of kerning pairs in this subtable */
+ HBUINT32 searchRange; /* The largest power of two less than or equal to the value of nPairs,
+ * multiplied by the size in bytes of an entry in the subtable. */
+ HBUINT32 entrySelector; /* This is calculated as log2 of the largest power of two less
+ * than or equal to the value of nPairs. */
+ HBUINT32 rangeShift; /* The value of nPairs minus the largest power of two less than or equal to nPairs. */
+ KerxFormat0Records records[VAR]; /* VAR=nPairs */
+ public:
+ DEFINE_SIZE_ARRAY (16, records);
+};
+
+struct KerxSubTableFormat1
+{
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ stateHeader.sanitize (c));
+ }
+
+ protected:
+ StateTable<HBUINT16> stateHeader;
+ LOffsetTo<ArrayOf<HBUINT16> > valueTable;
+ public:
+ DEFINE_SIZE_STATIC (20);
+};
+
+// TODO(ebraminio): Maybe this can be replaced with Lookup<HBUINT16>?
+struct KerxClassTable
+{
+ inline unsigned int get_class (hb_codepoint_t g) const { return classes[g - firstGlyph]; }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (firstGlyph.sanitize (c) && classes.sanitize (c));
+ }
+
+ protected:
+ HBUINT16 firstGlyph; /* First glyph in class range. */
+ ArrayOf<HBUINT16> classes; /* Glyph classes. */
+ public:
+ DEFINE_SIZE_ARRAY (4, classes);
+};
+
+struct KerxSubTableFormat2
+{
+ inline int get_kerning (hb_codepoint_t left, hb_codepoint_t right, const char *end) const
+ {
+ unsigned int l = (this+leftClassTable).get_class (left);
+ unsigned int r = (this+leftClassTable).get_class (left);
+ unsigned int offset = l * rowWidth + r * sizeof (FWORD);
+ const FWORD *arr = &(this+array);
+ if (unlikely ((const void *) arr < (const void *) this || (const void *) arr >= (const void *) end))
+ return 0;
+ const FWORD *v = &StructAtOffset<FWORD> (arr, offset);
+ if (unlikely ((const void *) v < (const void *) arr || (const void *) (v + 1) > (const void *) end))
+ return 0;
+ return *v;
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ rowWidth.sanitize (c) &&
+ leftClassTable.sanitize (c, this) &&
+ rightClassTable.sanitize (c, this) &&
+ array.sanitize (c, this));
+ }
+
+ protected:
+ HBUINT32 rowWidth; /* The width, in bytes, of a row in the table. */
+ LOffsetTo<KerxClassTable>
+ leftClassTable; /* Offset from beginning of this subtable to
+ * left-hand class table. */
+ LOffsetTo<KerxClassTable>
+ rightClassTable;/* Offset from beginning of this subtable to
+ * right-hand class table. */
+ LOffsetTo<FWORD>
+ array; /* Offset from beginning of this subtable to
+ * the start of the kerning array. */
+ public:
+ DEFINE_SIZE_STATIC (16);
+};
+
+struct KerxSubTableFormat4
+{
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ rowWidth.sanitize (c) &&
+ leftClassTable.sanitize (c, this) &&
+ rightClassTable.sanitize (c, this) &&
+ array.sanitize (c, this));
+ }
+
+ protected:
+ HBUINT32 rowWidth; /* The width, in bytes, of a row in the table. */
+ LOffsetTo<KerxClassTable>
+ leftClassTable; /* Offset from beginning of this subtable to
+ * left-hand class table. */
+ LOffsetTo<KerxClassTable>
+ rightClassTable;/* Offset from beginning of this subtable to
+ * right-hand class table. */
+ LOffsetTo<FWORD>
+ array; /* Offset from beginning of this subtable to
+ * the start of the kerning array. */
+ public:
+ DEFINE_SIZE_STATIC (16);
+};
+
+struct KerxSubTableFormat6
+{
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ rowIndexTable.sanitize (c, this) &&
+ columnIndexTable.sanitize (c, this) &&
+ kerningArray.sanitize (c, this) &&
+ kerningVector.sanitize (c, this));
+ }
+
+ protected:
+ HBUINT32 flags;
+ HBUINT16 rowCount;
+ HBUINT16 columnCount;
+ LOffsetTo<Lookup<HBUINT16> > rowIndexTable;
+ LOffsetTo<Lookup<HBUINT16> > columnIndexTable;
+ LOffsetTo<Lookup<HBUINT16> > kerningArray;
+ LOffsetTo<Lookup<HBUINT16> > kerningVector;
+ public:
+ DEFINE_SIZE_STATIC (24);
+};
+
+enum coverage_flags_t
+{
+ COVERAGE_VERTICAL_FLAG = 0x80u,
+ COVERAGE_CROSSSTREAM_FLAG = 0x40u,
+ COVERAGE_VARIATION_FLAG = 0x20u,
+ COVERAGE_PROCESS_DIRECTION = 0x10u,
+};
+
+struct KerxTable
+{
+ inline bool apply (hb_aat_apply_context_t *c, const AAT::ankr *ankr) const
+ {
+ TRACE_APPLY (this);
+ /* TODO */
+ return_trace (false);
+ }
+
+ inline unsigned int get_size (void) const { return length; }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ if (!c->check_struct (this))
+ return_trace (false);
+
+ switch (format) {
+ case 0: return u.format0.sanitize (c);
+ case 1: return u.format1.sanitize (c);
+ case 2: return u.format2.sanitize (c);
+ case 4: return u.format4.sanitize (c);
+ case 6: return u.format6.sanitize (c);
+ default:return_trace (false);
+ }
+ }
+
+protected:
+ HBUINT32 length;
+ HBUINT8 coverage;
+ HBUINT16 unused;
+ HBUINT8 format;
+ HBUINT32 tupleIndex;
+ union {
+ KerxSubTableFormat0 format0;
+ KerxSubTableFormat1 format1;
+ KerxSubTableFormat2 format2;
+ KerxSubTableFormat4 format4;
+ KerxSubTableFormat6 format6;
+ } u;
+public:
+ DEFINE_SIZE_MIN (12);
+};
+
+struct SubtableGlyphCoverageArray
+{
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ protected:
+ HBUINT32 length;
+ HBUINT32 coverage;
+ HBUINT32 tupleCount;
+ public:
+ DEFINE_SIZE_STATIC (12);
+};
+
+struct kerx
+{
+ static const hb_tag_t tableTag = HB_AAT_TAG_KERX;
+
+ inline bool apply (hb_aat_apply_context_t *c, const AAT::ankr *ankr) const
+ {
+ TRACE_APPLY (this);
+ const KerxTable &table = StructAfter<KerxTable> (*this);
+ return_trace (table.apply (c, ankr));
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ if (!(c->check_struct (this)))
+ return_trace (false);
+
+ /* TODO: Something like `morx`s ChainSubtable should be done here instead */
+ const KerxTable *table = &StructAfter<KerxTable> (*this);
+ if (!(table->sanitize (c)))
+ return_trace (false);
+
+ for (unsigned int i = 0; i < nTables - 1; ++i)
+ {
+ table = &StructAfter<KerxTable> (*table);
+ if (!(table->sanitize (c)))
+ return_trace (false);
+ }
+
+ // If version is less than 3, we are done here; otherwise better to check footer also
+ if (version < 3)
+ return_trace (true);
+
+ // TODO: Investigate why this just work on some fonts no matter of version
+ // const SubtableGlyphCoverageArray &footer =
+ // StructAfter<SubtableGlyphCoverageArray> (*table);
+ // return_trace (footer.sanitize (c));
+
+ return_trace (true);
+ }
+
+ protected:
+ HBUINT16 version;
+ HBUINT16 padding;
+ HBUINT32 nTables;
+/*KerxTable tables[VAR];*/
+/*SubtableGlyphCoverageArray coverage_array;*/
+ public:
+ DEFINE_SIZE_STATIC (8);
+};
+
+} /* namespace AAT */
+
+
+#endif /* HB_AAT_LAYOUT_KERX_TABLE_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-morx-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-morx-table.hh
index c64dca06670..4cc2824214e 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-morx-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-morx-table.hh
@@ -40,6 +40,8 @@ using namespace OT;
struct RearrangementSubtable
{
+ typedef void EntryData;
+
struct driver_context_t
{
static const bool in_place = true;
@@ -58,20 +60,21 @@ struct RearrangementSubtable
inline driver_context_t (const RearrangementSubtable *table) :
ret (false),
- start (0), end (0),
- last_zero_before_start (0) {}
+ start (0), end (0) {}
- inline bool transition (StateTableDriver<void> *driver,
- const Entry<void> *entry)
+ inline bool is_actionable (StateTableDriver<EntryData> *driver,
+ const Entry<EntryData> *entry)
+ {
+ return (entry->flags & Verb) && start < end;
+ }
+ inline bool transition (StateTableDriver<EntryData> *driver,
+ const Entry<EntryData> *entry)
{
hb_buffer_t *buffer = driver->buffer;
unsigned int flags = entry->flags;
if (flags & MarkFirst)
- {
start = buffer->idx;
- last_zero_before_start = driver->last_zero;
- }
if (flags & MarkLast)
end = MIN (buffer->idx + 1, buffer->len);
@@ -110,7 +113,7 @@ struct RearrangementSubtable
if (end - start >= l + r)
{
- buffer->unsafe_to_break (last_zero_before_start, MIN (buffer->idx + 1, buffer->len));
+ buffer->merge_clusters (start, MIN (buffer->idx + 1, buffer->len));
buffer->merge_clusters (start, end);
hb_glyph_info_t *info = buffer->info;
@@ -147,7 +150,6 @@ struct RearrangementSubtable
private:
unsigned int start;
unsigned int end;
- unsigned int last_zero_before_start;
};
inline bool apply (hb_aat_apply_context_t *c) const
@@ -169,7 +171,7 @@ struct RearrangementSubtable
}
protected:
- StateTable<void> machine;
+ StateTable<EntryData> machine;
public:
DEFINE_SIZE_STATIC (16);
};
@@ -198,20 +200,29 @@ struct ContextualSubtable
inline driver_context_t (const ContextualSubtable *table) :
ret (false),
+ mark_set (false),
mark (0),
- last_zero_before_mark (0),
subs (table+table->substitutionTables) {}
+ inline bool is_actionable (StateTableDriver<EntryData> *driver,
+ const Entry<EntryData> *entry)
+ {
+ hb_buffer_t *buffer = driver->buffer;
+
+ if (buffer->idx == buffer->len && !mark_set)
+ return false;
+
+ return entry->data.markIndex != 0xFFFF || entry->data.currentIndex != 0xFFFF;
+ }
inline bool transition (StateTableDriver<EntryData> *driver,
const Entry<EntryData> *entry)
{
hb_buffer_t *buffer = driver->buffer;
- if (entry->flags & SetMark)
- {
- mark = buffer->idx;
- last_zero_before_mark = driver->last_zero;
- }
+ /* Looks like CoreText applies neither mark nor current substitution for
+ * end-of-text if mark was not explicitly set. */
+ if (buffer->idx == buffer->len && !mark_set)
+ return true;
if (entry->data.markIndex != 0xFFFF)
{
@@ -220,32 +231,38 @@ struct ContextualSubtable
const GlyphID *replacement = lookup.get_value (info[mark].codepoint, driver->num_glyphs);
if (replacement)
{
- buffer->unsafe_to_break (last_zero_before_mark, MIN (buffer->idx + 1, buffer->len));
+ buffer->unsafe_to_break (mark, MIN (buffer->idx + 1, buffer->len));
info[mark].codepoint = *replacement;
ret = true;
}
}
if (entry->data.currentIndex != 0xFFFF)
{
+ unsigned int idx = MIN (buffer->idx, buffer->len - 1);
const Lookup<GlyphID> &lookup = subs[entry->data.currentIndex];
hb_glyph_info_t *info = buffer->info;
- const GlyphID *replacement = lookup.get_value (info[buffer->idx].codepoint, driver->num_glyphs);
+ const GlyphID *replacement = lookup.get_value (info[idx].codepoint, driver->num_glyphs);
if (replacement)
{
- buffer->unsafe_to_break (driver->last_zero, MIN (buffer->idx + 1, buffer->len));
- info[buffer->idx].codepoint = *replacement;
+ info[idx].codepoint = *replacement;
ret = true;
}
}
+ if (entry->flags & SetMark)
+ {
+ mark_set = true;
+ mark = buffer->idx;
+ }
+
return true;
}
public:
bool ret;
private:
+ bool mark_set;
unsigned int mark;
- unsigned int last_zero_before_mark;
const UnsizedOffsetListOf<Lookup<GlyphID>, HBUINT32> &subs;
};
@@ -265,8 +282,8 @@ struct ContextualSubtable
{
TRACE_SANITIZE (this);
- unsigned int num_entries;
- if (unlikely (!machine.sanitize (c, &num_entries))) return false;
+ unsigned int num_entries = 0;
+ if (unlikely (!machine.sanitize (c, &num_entries))) return_trace (false);
unsigned int num_lookups = 0;
@@ -275,8 +292,10 @@ struct ContextualSubtable
{
const EntryData &data = entries[i].data;
- num_lookups = MAX<unsigned int> (num_lookups, 1 + data.markIndex);
- num_lookups = MAX<unsigned int> (num_lookups, 1 + data.currentIndex);
+ if (data.markIndex != 0xFFFF)
+ num_lookups = MAX<unsigned int> (num_lookups, 1 + data.markIndex);
+ if (data.currentIndex != 0xFFFF)
+ num_lookups = MAX<unsigned int> (num_lookups, 1 + data.currentIndex);
}
return_trace (substitutionTables.sanitize (c, this, num_lookups));
@@ -333,6 +352,11 @@ struct LigatureSubtable
ligature (table+table->ligature),
match_length (0) {}
+ inline bool is_actionable (StateTableDriver<EntryData> *driver,
+ const Entry<EntryData> *entry)
+ {
+ return !!(entry->flags & PerformAction);
+ }
inline bool transition (StateTableDriver<EntryData> *driver,
const Entry<EntryData> *entry)
{
@@ -432,9 +456,8 @@ struct LigatureSubtable
{
TRACE_SANITIZE (this);
/* The rest of array sanitizations are done at run-time. */
- return c->check_struct (this) && machine.sanitize (c) &&
- ligAction && component && ligature;
- return_trace (true);
+ return_trace (c->check_struct (this) && machine.sanitize (c) &&
+ ligAction && component && ligature);
}
protected:
@@ -593,8 +616,18 @@ struct Chain
unsigned int count = subtableCount;
for (unsigned int i = 0; i < count; i++)
{
+ if (!c->buffer->message (c->font, "start chain subtable %d", c->lookup_index))
+ {
+ c->set_lookup_index (c->lookup_index + 1);
+ continue;
+ }
+
subtable->apply (c);
subtable = &StructAfter<ChainSubtable> (*subtable);
+
+ (void) c->buffer->message (c->font, "end chain subtable %d", c->lookup_index);
+
+ c->set_lookup_index (c->lookup_index + 1);
}
}
@@ -648,6 +681,7 @@ struct morx
inline void apply (hb_aat_apply_context_t *c) const
{
+ c->set_lookup_index (0);
const Chain *chain = chains;
unsigned int count = chainCount;
for (unsigned int i = 0; i < count; i++)
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-private.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-private.hh
index c1c607a2f7a..ce75c8e7192 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-private.hh
@@ -37,4 +37,7 @@
HB_INTERNAL void
hb_aat_layout_substitute (hb_font_t *font, hb_buffer_t *buffer);
+HB_INTERNAL void
+hb_aat_layout_position (hb_font_t *font, hb_buffer_t *buffer);
+
#endif /* HB_AAT_LAYOUT_PRIVATE_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-trak-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-trak-table.hh
new file mode 100644
index 00000000000..5767b116cbf
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout-trak-table.hh
@@ -0,0 +1,201 @@
+/*
+ * Copyright © 2018 Ebrahim Byagowi
+ * Copyright © 2018 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_AAT_LAYOUT_TRAK_TABLE_HH
+#define HB_AAT_LAYOUT_TRAK_TABLE_HH
+
+#include "hb-aat-layout-common-private.hh"
+#include "hb-open-type-private.hh"
+
+#define HB_AAT_TAG_trak HB_TAG('t','r','a','k')
+
+
+namespace AAT {
+
+
+struct TrackTableEntry
+{
+ inline bool sanitize (hb_sanitize_context_t *c, const void *base, unsigned int size) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) && (values.sanitize (c, base, size)));
+ }
+
+ inline float get_track_value () const
+ {
+ return track.to_float ();
+ }
+
+ inline int get_value (const void *base, unsigned int index) const
+ {
+ return (base+values)[index];
+ }
+
+ protected:
+ Fixed track; /* Track value for this record. */
+ HBUINT16 trackNameID; /* The 'name' table index for this track */
+ OffsetTo<UnsizedArrayOf<FWORD> >
+ values; /* Offset from start of tracking table to
+ * per-size tracking values for this track. */
+
+ public:
+ DEFINE_SIZE_STATIC (8);
+};
+
+struct TrackData
+{
+ inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ sizeTable.sanitize (c, base, nSizes) &&
+ trackTable.sanitize (c, nTracks, base, nSizes));
+ }
+
+ inline float get_tracking (const void *base, float ptem) const
+ {
+ /* 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
+ */
+ float csspx = ptem * 96.f / 72.f;
+ Fixed fixed_size;
+ fixed_size.set_float (csspx);
+
+ /* XXX Clean this up. Make it work with nSizes==1 and 0. */
+
+ unsigned int sizes = nSizes;
+
+ const TrackTableEntry *trackTableEntry = nullptr;
+ for (unsigned int i = 0; i < sizes; ++i)
+ // For now we only seek for track entries with zero tracking value
+ if (trackTable[i].get_track_value () == 0.)
+ trackTableEntry = &trackTable[0];
+
+ // We couldn't match any, exit
+ if (!trackTableEntry) return 0.;
+
+ /* TODO bfind() */
+ unsigned int size_index;
+ UnsizedArrayOf<Fixed> size_table = base+sizeTable;
+ for (size_index = 0; size_index < sizes; ++size_index)
+ if (size_table[size_index] >= fixed_size)
+ break;
+
+ // TODO(ebraminio): We don't attempt to extrapolate to larger or
+ // smaller values for now but we should do, per spec
+ if (size_index == sizes)
+ return trackTableEntry->get_value (base, sizes - 1);
+ if (size_index == 0 || size_table[size_index] == fixed_size)
+ return trackTableEntry->get_value (base, size_index);
+
+ float s0 = size_table[size_index - 1].to_float ();
+ float s1 = size_table[size_index].to_float ();
+ float t = (csspx - s0) / (s1 - s0);
+ return t * trackTableEntry->get_value (base, size_index) +
+ (1.0 - t) * trackTableEntry->get_value (base, size_index - 1);
+ }
+
+ protected:
+ HBUINT16 nTracks; /* Number of separate tracks included in this table. */
+ HBUINT16 nSizes; /* Number of point sizes included in this table. */
+ LOffsetTo<UnsizedArrayOf<Fixed> > /* Offset to array[nSizes] of size values. */
+ sizeTable;
+ UnsizedArrayOf<TrackTableEntry>
+ trackTable; /* Array[nTracks] of TrackTableEntry records. */
+
+ public:
+ DEFINE_SIZE_ARRAY (8, trackTable);
+};
+
+struct trak
+{
+ static const hb_tag_t tableTag = HB_AAT_TAG_trak;
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+
+ return_trace (c->check_struct (this) &&
+ horizData.sanitize (c, this, this) &&
+ vertData.sanitize (c, this, this));
+ }
+
+ inline bool apply (hb_aat_apply_context_t *c) const
+ {
+ TRACE_APPLY (this);
+
+ const float ptem = c->font->ptem;
+ if (ptem <= 0.f)
+ return_trace (false);
+
+ hb_buffer_t *buffer = c->buffer;
+ if (HB_DIRECTION_IS_HORIZONTAL (buffer->props.direction))
+ {
+ const TrackData &trackData = this+horizData;
+ float tracking = trackData.get_tracking (this, ptem);
+ 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_advance += advance_to_add;
+ buffer->pos[end].x_advance += advance_to_add;
+ }
+ }
+ else
+ {
+ const TrackData &trackData = this+vertData;
+ float tracking = trackData.get_tracking (this, ptem);
+ 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_advance += advance_to_add;
+ buffer->pos[end].y_advance += advance_to_add;
+ }
+ }
+
+ return_trace (true);
+ }
+
+ protected:
+ FixedVersion<> version; /* Version of the tracking table--currently
+ * 0x00010000u for version 1.0. */
+ HBUINT16 format; /* Format of the tracking table */
+ OffsetTo<TrackData> horizData; /* TrackData for horizontal text */
+ OffsetTo<TrackData> vertData; /* TrackData for vertical text */
+ HBUINT16 reserved; /* Reserved. Set to 0. */
+
+ public:
+ DEFINE_SIZE_MIN (12);
+};
+
+} /* namespace AAT */
+
+
+#endif /* HB_AAT_LAYOUT_TRAK_TABLE_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout.cc
index d882fa16681..45268e3e7ab 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-aat-layout.cc
@@ -30,12 +30,48 @@
#include "hb-ot-layout-gsubgpos-private.hh"
#include "hb-aat-layout-private.hh"
+#include "hb-aat-layout-ankr-table.hh"
+#include "hb-aat-layout-kerx-table.hh"
#include "hb-aat-layout-morx-table.hh"
+#include "hb-aat-layout-trak-table.hh"
/*
- * mort/morx
+ * morx/kerx/trak
*/
+static inline const AAT::ankr&
+_get_ankr (hb_face_t *face, hb_blob_t **blob = nullptr)
+{
+ if (unlikely (!hb_ot_shaper_face_data_ensure (face)))
+ {
+ if (blob)
+ *blob = hb_blob_get_empty ();
+ return OT::Null(AAT::ankr);
+ }
+ hb_ot_layout_t * layout = hb_ot_layout_from_face (face);
+ const AAT::ankr& ankr = *(layout->ankr.get ());
+ if (blob)
+ *blob = layout->ankr.blob;
+ return ankr;
+}
+
+static inline const AAT::kerx&
+_get_kerx (hb_face_t *face, hb_blob_t **blob = nullptr)
+{
+ if (unlikely (!hb_ot_shaper_face_data_ensure (face)))
+ {
+ if (blob)
+ *blob = hb_blob_get_empty ();
+ return OT::Null(AAT::kerx);
+ }
+ hb_ot_layout_t * layout = hb_ot_layout_from_face (face);
+ /* XXX this doesn't call set_num_glyphs on sanitizer. */
+ const AAT::kerx& kerx = *(layout->kerx.get ());
+ if (blob)
+ *blob = layout->kerx.blob;
+ return kerx;
+}
+
static inline const AAT::morx&
_get_morx (hb_face_t *face, hb_blob_t **blob = nullptr)
{
@@ -53,20 +89,36 @@ _get_morx (hb_face_t *face, hb_blob_t **blob = nullptr)
return morx;
}
-static inline void
-_hb_aat_layout_create (hb_face_t *face)
+static inline const AAT::trak&
+_get_trak (hb_face_t *face, hb_blob_t **blob = nullptr)
{
- OT::Sanitizer<AAT::morx> sanitizer;
- sanitizer.set_num_glyphs (face->get_num_glyphs ());
- hb_blob_t *morx_blob = sanitizer.sanitize (face->reference_table (HB_AAT_TAG_MORX));
- OT::Sanitizer<AAT::morx>::lock_instance (morx_blob);
-
- if (0)
+ if (unlikely (!hb_ot_shaper_face_data_ensure (face)))
{
- OT::Sanitizer<AAT::Lookup<OT::GlyphID> >::lock_instance (morx_blob)->get_value (1, face->get_num_glyphs ());
+ if (blob)
+ *blob = hb_blob_get_empty ();
+ return OT::Null(AAT::trak);
}
+ hb_ot_layout_t * layout = hb_ot_layout_from_face (face);
+ const AAT::trak& trak = *(layout->trak.get ());
+ if (blob)
+ *blob = layout->trak.blob;
+ return trak;
}
+// static inline void
+// _hb_aat_layout_create (hb_face_t *face)
+// {
+// OT::Sanitizer<AAT::morx> sanitizer;
+// sanitizer.set_num_glyphs (face->get_num_glyphs ());
+// hb_blob_t *morx_blob = sanitizer.sanitize (face->reference_table (HB_AAT_TAG_MORX));
+// OT::Sanitizer<AAT::morx>::lock_instance (morx_blob);
+
+// if (0)
+// {
+// OT::Sanitizer<AAT::Lookup<OT::GlyphID> >::lock_instance (morx_blob)->get_value (1, face->get_num_glyphs ());
+// }
+// }
+
void
hb_aat_layout_substitute (hb_font_t *font, hb_buffer_t *buffer)
{
@@ -76,3 +128,16 @@ hb_aat_layout_substitute (hb_font_t *font, hb_buffer_t *buffer)
AAT::hb_aat_apply_context_t c (font, buffer, blob);
morx.apply (&c);
}
+
+void
+hb_aat_layout_position (hb_font_t *font, hb_buffer_t *buffer)
+{
+ hb_blob_t *blob;
+ const AAT::ankr& ankr = _get_ankr (font->face, &blob);
+ const AAT::kerx& kerx = _get_kerx (font->face, &blob);
+ const AAT::trak& trak = _get_trak (font->face, &blob);
+
+ AAT::hb_aat_apply_context_t c (font, buffer, blob);
+ kerx.apply (&c, &ankr);
+ trak.apply (&c);
+}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.cc
index 4cf6d1e5451..b5291f650cc 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.cc
@@ -171,6 +171,31 @@ hb_blob_create_sub_blob (hb_blob_t *parent,
}
/**
+ * hb_blob_copy_writable_or_fail:
+ * @blob: A blob.
+ *
+ * Makes a writable copy of @blob.
+ *
+ * Return value: New blob, or nullptr if allocation failed.
+ *
+ * Since: 1.8.0
+ **/
+hb_blob_t *
+hb_blob_copy_writable_or_fail (hb_blob_t *blob)
+{
+ blob = hb_blob_create (blob->data,
+ blob->length,
+ HB_MEMORY_MODE_DUPLICATE,
+ nullptr,
+ nullptr);
+
+ if (unlikely (blob == hb_blob_get_empty ()))
+ blob = nullptr;
+
+ return blob;
+}
+
+/**
* hb_blob_get_empty:
*
* Returns the singleton empty blob.
@@ -222,7 +247,7 @@ hb_blob_reference (hb_blob_t *blob)
* hb_blob_destroy: (skip)
* @blob: a blob.
*
- * Descreases the reference count on @blob, and if it reaches zero, destroys
+ * Decreases the reference count on @blob, and if it reaches zero, destroys
* @blob, freeing all memory, possibly calling the destroy-callback the blob
* was created for if it has not been called already.
*
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.h b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.h
index 53682d3eb1c..fd561f73869 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-blob.h
@@ -83,6 +83,9 @@ hb_blob_create_sub_blob (hb_blob_t *parent,
unsigned int length);
HB_EXTERN hb_blob_t *
+hb_blob_copy_writable_or_fail (hb_blob_t *blob);
+
+HB_EXTERN hb_blob_t *
hb_blob_get_empty (void);
HB_EXTERN hb_blob_t *
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-deserialize-json.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-deserialize-json.hh
index 125a4192911..be374c77a5b 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-deserialize-json.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-deserialize-json.hh
@@ -34,397 +34,397 @@
#line 36 "hb-buffer-deserialize-json.hh"
static const unsigned char _deserialize_json_trans_keys[] = {
- 0u, 0u, 9u, 123u, 9u, 34u, 97u, 103u, 120u, 121u, 34u, 34u, 9u, 58u, 9u, 57u,
- 48u, 57u, 9u, 125u, 9u, 125u, 9u, 125u, 34u, 34u, 9u, 58u, 9u, 57u, 48u, 57u,
- 9u, 125u, 9u, 125u, 108u, 108u, 34u, 34u, 9u, 58u, 9u, 57u, 9u, 125u, 9u, 125u,
- 120u, 121u, 34u, 34u, 9u, 58u, 9u, 57u, 48u, 57u, 9u, 125u, 9u, 125u, 34u, 34u,
- 9u, 58u, 9u, 57u, 48u, 57u, 9u, 125u, 9u, 125u, 34u, 34u, 9u, 58u, 9u, 57u,
+ 0u, 0u, 9u, 123u, 9u, 34u, 97u, 103u, 120u, 121u, 34u, 34u, 9u, 58u, 9u, 57u,
+ 48u, 57u, 9u, 125u, 9u, 125u, 9u, 125u, 34u, 34u, 9u, 58u, 9u, 57u, 48u, 57u,
+ 9u, 125u, 9u, 125u, 108u, 108u, 34u, 34u, 9u, 58u, 9u, 57u, 9u, 125u, 9u, 125u,
+ 120u, 121u, 34u, 34u, 9u, 58u, 9u, 57u, 48u, 57u, 9u, 125u, 9u, 125u, 34u, 34u,
+ 9u, 58u, 9u, 57u, 48u, 57u, 9u, 125u, 9u, 125u, 34u, 34u, 9u, 58u, 9u, 57u,
65u, 122u, 34u, 122u, 9u, 125u, 9u, 125u, 9u, 93u, 9u, 123u, 0u, 0u, 0
};
static const char _deserialize_json_key_spans[] = {
- 0, 115, 26, 7, 2, 1, 50, 49,
- 10, 117, 117, 117, 1, 50, 49, 10,
- 117, 117, 1, 1, 50, 49, 117, 117,
- 2, 1, 50, 49, 10, 117, 117, 1,
- 50, 49, 10, 117, 117, 1, 50, 49,
+ 0, 115, 26, 7, 2, 1, 50, 49,
+ 10, 117, 117, 117, 1, 50, 49, 10,
+ 117, 117, 1, 1, 50, 49, 117, 117,
+ 2, 1, 50, 49, 10, 117, 117, 1,
+ 50, 49, 10, 117, 117, 1, 50, 49,
58, 89, 117, 117, 85, 115, 0
};
static const short _deserialize_json_index_offsets[] = {
- 0, 0, 116, 143, 151, 154, 156, 207,
- 257, 268, 386, 504, 622, 624, 675, 725,
- 736, 854, 972, 974, 976, 1027, 1077, 1195,
- 1313, 1316, 1318, 1369, 1419, 1430, 1548, 1666,
- 1668, 1719, 1769, 1780, 1898, 2016, 2018, 2069,
+ 0, 0, 116, 143, 151, 154, 156, 207,
+ 257, 268, 386, 504, 622, 624, 675, 725,
+ 736, 854, 972, 974, 976, 1027, 1077, 1195,
+ 1313, 1316, 1318, 1369, 1419, 1430, 1548, 1666,
+ 1668, 1719, 1769, 1780, 1898, 2016, 2018, 2069,
2119, 2178, 2268, 2386, 2504, 2590, 2706
};
static const char _deserialize_json_indicies[] = {
- 0, 0, 0, 0, 0, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 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, 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, 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, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 2, 1, 3, 3, 3,
- 3, 3, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 3, 1, 4, 1,
- 5, 1, 6, 7, 1, 1, 8, 1,
- 9, 10, 1, 11, 1, 11, 11, 11,
- 11, 11, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 11, 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, 12, 1,
- 12, 12, 12, 12, 12, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 12,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 13, 1, 1, 14,
- 15, 15, 15, 15, 15, 15, 15, 15,
- 15, 1, 16, 17, 17, 17, 17, 17,
- 17, 17, 17, 17, 1, 18, 18, 18,
- 18, 18, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 18, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 19, 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, 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, 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, 1, 1, 1, 1,
- 1, 20, 1, 21, 21, 21, 21, 21,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 21, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 3, 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,
- 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, 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, 1, 1, 1, 1, 1, 22,
- 1, 18, 18, 18, 18, 18, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 18, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 19, 1, 1, 1,
- 17, 17, 17, 17, 17, 17, 17, 17,
- 17, 17, 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, 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, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 20, 1, 23,
- 1, 23, 23, 23, 23, 23, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 23, 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, 24, 1, 24, 24, 24, 24,
- 24, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 24, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 25, 1, 1, 26, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 1, 28, 29,
- 29, 29, 29, 29, 29, 29, 29, 29,
- 1, 30, 30, 30, 30, 30, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 30, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 31, 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, 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, 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,
- 1, 1, 1, 1, 1, 32, 1, 30,
- 30, 30, 30, 30, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 30, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 31, 1, 1, 1, 29, 29,
- 29, 29, 29, 29, 29, 29, 29, 29,
- 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, 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, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 32, 1, 33, 1, 34,
- 1, 34, 34, 34, 34, 34, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 34, 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, 35, 1, 35, 35, 35, 35,
- 35, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 35, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 36, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 1, 38, 38,
- 38, 38, 38, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 38, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 39, 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, 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, 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, 1, 1, 1,
- 1, 1, 40, 1, 38, 38, 38, 38,
- 38, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 38, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 39,
- 1, 1, 1, 41, 41, 41, 41, 41,
- 41, 41, 41, 41, 41, 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, 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, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 40, 1, 42, 43, 1, 44, 1, 44,
- 44, 44, 44, 44, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 44, 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,
- 45, 1, 45, 45, 45, 45, 45, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 45, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 46, 1,
- 1, 47, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 1, 49, 50, 50, 50,
- 50, 50, 50, 50, 50, 50, 1, 51,
- 51, 51, 51, 51, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 51, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 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, 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, 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, 1, 1,
- 1, 1, 1, 53, 1, 51, 51, 51,
- 51, 51, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 51, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 52, 1, 1, 1, 50, 50, 50, 50,
- 50, 50, 50, 50, 50, 50, 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, 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,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 53, 1, 54, 1, 54, 54, 54,
- 54, 54, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 54, 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, 55, 1,
- 55, 55, 55, 55, 55, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 55,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 56, 1, 1, 57,
- 58, 58, 58, 58, 58, 58, 58, 58,
- 58, 1, 59, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 1, 61, 61, 61,
- 61, 61, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 61, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 62, 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, 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, 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, 1, 1, 1, 1,
- 1, 63, 1, 61, 61, 61, 61, 61,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 61, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 62, 1,
- 1, 1, 60, 60, 60, 60, 60, 60,
- 60, 60, 60, 60, 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, 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, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 63,
- 1, 64, 1, 64, 64, 64, 64, 64,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 64, 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, 65, 1, 65, 65,
- 65, 65, 65, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 65, 1, 66,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 67, 68, 68,
- 68, 68, 68, 68, 68, 68, 68, 1,
- 69, 69, 69, 69, 69, 69, 69, 69,
- 69, 69, 69, 69, 69, 69, 69, 69,
- 69, 69, 69, 69, 69, 69, 69, 69,
- 69, 69, 1, 1, 1, 1, 1, 1,
- 69, 69, 69, 69, 69, 69, 69, 69,
- 69, 69, 69, 69, 69, 69, 69, 69,
- 69, 69, 69, 69, 69, 69, 69, 69,
- 69, 69, 1, 70, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 71, 71,
- 1, 71, 71, 71, 71, 71, 71, 71,
- 71, 71, 71, 1, 1, 1, 1, 1,
- 1, 1, 71, 71, 71, 71, 71, 71,
- 71, 71, 71, 71, 71, 71, 71, 71,
- 71, 71, 71, 71, 71, 71, 71, 71,
- 71, 71, 71, 71, 1, 1, 1, 1,
- 71, 1, 71, 71, 71, 71, 71, 71,
- 71, 71, 71, 71, 71, 71, 71, 71,
- 71, 71, 71, 71, 71, 71, 71, 71,
- 71, 71, 71, 71, 1, 72, 72, 72,
- 72, 72, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 72, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 73, 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, 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, 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, 1, 1, 1, 1,
- 1, 74, 1, 72, 72, 72, 72, 72,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 72, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 73, 1,
- 1, 1, 75, 75, 75, 75, 75, 75,
- 75, 75, 75, 75, 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, 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, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 74,
- 1, 76, 76, 76, 76, 76, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 76, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 77, 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, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 78, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 0, 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,
- 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, 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, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 0, 0, 0, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 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, 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, 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, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 2, 1, 3, 3, 3,
+ 3, 3, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 3, 1, 4, 1,
+ 5, 1, 6, 7, 1, 1, 8, 1,
+ 9, 10, 1, 11, 1, 11, 11, 11,
+ 11, 11, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 11, 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, 12, 1,
+ 12, 12, 12, 12, 12, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 12,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 13, 1, 1, 14,
+ 15, 15, 15, 15, 15, 15, 15, 15,
+ 15, 1, 16, 17, 17, 17, 17, 17,
+ 17, 17, 17, 17, 1, 18, 18, 18,
+ 18, 18, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 18, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 19, 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, 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, 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, 1, 1, 1, 1,
+ 1, 20, 1, 21, 21, 21, 21, 21,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 21, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 3, 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,
+ 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, 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, 1, 1, 1, 1, 1, 22,
+ 1, 18, 18, 18, 18, 18, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 18, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 19, 1, 1, 1,
+ 17, 17, 17, 17, 17, 17, 17, 17,
+ 17, 17, 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, 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, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 20, 1, 23,
+ 1, 23, 23, 23, 23, 23, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 23, 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, 24, 1, 24, 24, 24, 24,
+ 24, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 24, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 25, 1, 1, 26, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 1, 28, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 1, 30, 30, 30, 30, 30, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 30, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 31, 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, 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, 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,
+ 1, 1, 1, 1, 1, 32, 1, 30,
+ 30, 30, 30, 30, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 30, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 31, 1, 1, 1, 29, 29,
+ 29, 29, 29, 29, 29, 29, 29, 29,
+ 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, 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, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 32, 1, 33, 1, 34,
+ 1, 34, 34, 34, 34, 34, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 34, 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, 35, 1, 35, 35, 35, 35,
+ 35, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 35, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 36, 37, 37, 37, 37,
+ 37, 37, 37, 37, 37, 1, 38, 38,
+ 38, 38, 38, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 38, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 39, 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, 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, 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, 1, 1, 1,
+ 1, 1, 40, 1, 38, 38, 38, 38,
+ 38, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 38, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 39,
+ 1, 1, 1, 41, 41, 41, 41, 41,
+ 41, 41, 41, 41, 41, 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, 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, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 40, 1, 42, 43, 1, 44, 1, 44,
+ 44, 44, 44, 44, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 44, 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,
+ 45, 1, 45, 45, 45, 45, 45, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 45, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 46, 1,
+ 1, 47, 48, 48, 48, 48, 48, 48,
+ 48, 48, 48, 1, 49, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 1, 51,
+ 51, 51, 51, 51, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 51, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 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, 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, 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, 1, 1,
+ 1, 1, 1, 53, 1, 51, 51, 51,
+ 51, 51, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 51, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 52, 1, 1, 1, 50, 50, 50, 50,
+ 50, 50, 50, 50, 50, 50, 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, 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,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 53, 1, 54, 1, 54, 54, 54,
+ 54, 54, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 54, 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, 55, 1,
+ 55, 55, 55, 55, 55, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 55,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 56, 1, 1, 57,
+ 58, 58, 58, 58, 58, 58, 58, 58,
+ 58, 1, 59, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 1, 61, 61, 61,
+ 61, 61, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 61, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 62, 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, 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, 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, 1, 1, 1, 1,
+ 1, 63, 1, 61, 61, 61, 61, 61,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 61, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 62, 1,
+ 1, 1, 60, 60, 60, 60, 60, 60,
+ 60, 60, 60, 60, 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, 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, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 63,
+ 1, 64, 1, 64, 64, 64, 64, 64,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 64, 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, 65, 1, 65, 65,
+ 65, 65, 65, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 65, 1, 66,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 67, 68, 68,
+ 68, 68, 68, 68, 68, 68, 68, 1,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 1, 1, 1, 1, 1, 1,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 69, 69, 69, 69, 69, 69,
+ 69, 69, 1, 70, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 71, 71,
+ 1, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 1, 1, 1, 1, 1,
+ 1, 1, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 1, 1, 1, 1,
+ 71, 1, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 71, 71, 71, 71,
+ 71, 71, 71, 71, 1, 72, 72, 72,
+ 72, 72, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 72, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 73, 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, 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, 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, 1, 1, 1, 1,
+ 1, 74, 1, 72, 72, 72, 72, 72,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 72, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 73, 1,
+ 1, 1, 75, 75, 75, 75, 75, 75,
+ 75, 75, 75, 75, 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, 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, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 74,
+ 1, 76, 76, 76, 76, 76, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 76, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 77, 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, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 78, 1, 0,
+ 0, 0, 0, 0, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 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,
+ 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, 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, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
1, 2, 1, 1, 0
};
static const char _deserialize_json_trans_targs[] = {
- 1, 0, 2, 2, 3, 4, 18, 24,
- 37, 5, 12, 6, 7, 8, 9, 11,
- 9, 11, 10, 2, 44, 10, 44, 13,
- 14, 15, 16, 17, 16, 17, 10, 2,
- 44, 19, 20, 21, 22, 23, 10, 2,
- 44, 23, 25, 31, 26, 27, 28, 29,
- 30, 29, 30, 10, 2, 44, 32, 33,
- 34, 35, 36, 35, 36, 10, 2, 44,
- 38, 39, 40, 42, 43, 41, 10, 41,
+ 1, 0, 2, 2, 3, 4, 18, 24,
+ 37, 5, 12, 6, 7, 8, 9, 11,
+ 9, 11, 10, 2, 44, 10, 44, 13,
+ 14, 15, 16, 17, 16, 17, 10, 2,
+ 44, 19, 20, 21, 22, 23, 10, 2,
+ 44, 23, 25, 31, 26, 27, 28, 29,
+ 30, 29, 30, 10, 2, 44, 32, 33,
+ 34, 35, 36, 35, 36, 10, 2, 44,
+ 38, 39, 40, 42, 43, 41, 10, 41,
10, 2, 44, 43, 44, 45, 46
};
static const char _deserialize_json_trans_actions[] = {
- 0, 0, 1, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 2, 2, 2,
- 0, 0, 3, 3, 4, 0, 5, 0,
- 0, 2, 2, 2, 0, 0, 6, 6,
- 7, 0, 0, 0, 2, 2, 8, 8,
- 9, 0, 0, 0, 0, 0, 2, 2,
- 2, 0, 0, 10, 10, 11, 0, 0,
- 2, 2, 2, 0, 0, 12, 12, 13,
- 0, 0, 0, 2, 2, 2, 14, 0,
+ 0, 0, 1, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 2, 2, 2,
+ 0, 0, 3, 3, 4, 0, 5, 0,
+ 0, 2, 2, 2, 0, 0, 6, 6,
+ 7, 0, 0, 0, 2, 2, 8, 8,
+ 9, 0, 0, 0, 0, 0, 2, 2,
+ 2, 0, 0, 10, 10, 11, 0, 0,
+ 2, 2, 2, 0, 0, 12, 12, 13,
+ 0, 0, 0, 2, 2, 2, 14, 0,
15, 15, 16, 0, 0, 0, 0
};
@@ -461,7 +461,7 @@ _hb_buffer_deserialize_glyphs_json (hb_buffer_t *buffer,
int cs;
hb_glyph_info_t info = {0};
hb_glyph_position_t pos = {0};
-
+
#line 466 "hb-buffer-deserialize-json.hh"
{
cs = deserialize_json_start;
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-deserialize-json.rl b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-deserialize-json.rl
index 91b350f5ac0..0f7d48ee298 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-deserialize-json.rl
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-deserialize-json.rl
@@ -106,7 +106,7 @@ _hb_buffer_deserialize_glyphs_json (hb_buffer_t *buffer,
const char *p = buf, *pe = buf + buf_len;
/* Ensure we have positions. */
- (void) hb_buffer_get_glyph_positions (buffer, NULL);
+ (void) hb_buffer_get_glyph_positions (buffer, nullptr);
while (p < pe && ISSPACE (*p))
p++;
@@ -115,7 +115,7 @@ _hb_buffer_deserialize_glyphs_json (hb_buffer_t *buffer,
*end_ptr = ++p;
}
- const char *tok = NULL;
+ const char *tok = nullptr;
int cs;
hb_glyph_info_t info = {0};
hb_glyph_position_t pos = {0};
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-deserialize-text.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-deserialize-text.hh
index 426b1375876..a6ab0bbde67 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-deserialize-text.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-deserialize-text.hh
@@ -34,274 +34,274 @@
#line 36 "hb-buffer-deserialize-text.hh"
static const unsigned char _deserialize_text_trans_keys[] = {
- 0u, 0u, 9u, 122u, 45u, 57u, 48u, 57u, 45u, 57u, 48u, 57u, 48u, 57u, 45u, 57u,
- 48u, 57u, 44u, 44u, 45u, 57u, 48u, 57u, 44u, 57u, 9u, 124u, 9u, 124u, 0u, 0u,
- 9u, 122u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u,
+ 0u, 0u, 9u, 122u, 45u, 57u, 48u, 57u, 45u, 57u, 48u, 57u, 48u, 57u, 45u, 57u,
+ 48u, 57u, 44u, 44u, 45u, 57u, 48u, 57u, 44u, 57u, 9u, 124u, 9u, 124u, 0u, 0u,
+ 9u, 122u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u, 9u, 124u,
9u, 124u, 9u, 124u, 9u, 124u, 0
};
static const char _deserialize_text_key_spans[] = {
- 0, 114, 13, 10, 13, 10, 10, 13,
- 10, 1, 13, 10, 14, 116, 116, 0,
- 114, 116, 116, 116, 116, 116, 116, 116,
+ 0, 114, 13, 10, 13, 10, 10, 13,
+ 10, 1, 13, 10, 14, 116, 116, 0,
+ 114, 116, 116, 116, 116, 116, 116, 116,
116, 116, 116
};
static const short _deserialize_text_index_offsets[] = {
- 0, 0, 115, 129, 140, 154, 165, 176,
- 190, 201, 203, 217, 228, 243, 360, 477,
- 478, 593, 710, 827, 944, 1061, 1178, 1295,
+ 0, 0, 115, 129, 140, 154, 165, 176,
+ 190, 201, 203, 217, 228, 243, 360, 477,
+ 478, 593, 710, 827, 944, 1061, 1178, 1295,
1412, 1529, 1646
};
static const char _deserialize_text_indicies[] = {
- 0, 0, 0, 0, 0, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 0, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 2, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 1, 1, 1, 1, 1, 1,
- 1, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 1, 1, 1, 1, 1,
- 1, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 1, 5, 1, 1, 6,
- 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 1, 8, 9, 9, 9, 9, 9,
- 9, 9, 9, 9, 1, 10, 1, 1,
- 11, 12, 12, 12, 12, 12, 12, 12,
- 12, 12, 1, 13, 14, 14, 14, 14,
- 14, 14, 14, 14, 14, 1, 15, 16,
- 16, 16, 16, 16, 16, 16, 16, 16,
- 1, 17, 1, 1, 18, 19, 19, 19,
- 19, 19, 19, 19, 19, 19, 1, 20,
- 21, 21, 21, 21, 21, 21, 21, 21,
- 21, 1, 22, 1, 23, 1, 1, 24,
- 25, 25, 25, 25, 25, 25, 25, 25,
- 25, 1, 26, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 1, 22, 1, 1,
- 1, 21, 21, 21, 21, 21, 21, 21,
- 21, 21, 21, 1, 28, 28, 28, 28,
- 28, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 28, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 29, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 30, 1, 1, 31, 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, 1, 1, 1,
- 32, 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, 1, 1, 1, 1, 1, 33,
- 1, 34, 34, 34, 34, 34, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 34, 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, 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, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 35, 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, 1,
- 1, 1, 1, 1, 36, 1, 1, 0,
- 0, 0, 0, 0, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 0, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 2, 3,
- 3, 3, 3, 3, 3, 3, 3, 3,
- 1, 1, 1, 1, 1, 1, 1, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 1, 1, 1, 1, 1, 1, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 4, 4, 4, 4, 4, 4, 4,
- 4, 1, 28, 28, 28, 28, 28, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 28, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 29, 1, 1, 1,
- 1, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 1, 1, 1, 30, 1,
- 1, 31, 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, 1, 1, 1, 32, 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,
- 1, 1, 1, 1, 1, 33, 1, 38,
- 38, 38, 38, 38, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 38, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 39, 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, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 40, 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, 1, 1, 1,
- 1, 1, 41, 1, 42, 42, 42, 42,
- 42, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 42, 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, 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, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 43, 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, 1, 1, 1, 1, 1, 44,
- 1, 42, 42, 42, 42, 42, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 42, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 14, 14, 14, 14, 14, 14, 14, 14,
- 14, 14, 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, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 43, 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, 1,
- 1, 1, 1, 1, 44, 1, 38, 38,
- 38, 38, 38, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 38, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 39, 1, 1, 1, 9, 9, 9,
- 9, 9, 9, 9, 9, 9, 9, 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,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 40, 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, 1, 1, 1, 1,
- 1, 41, 1, 45, 45, 45, 45, 45,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 45, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 46, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 47, 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, 1, 1, 1, 48,
- 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, 1, 1, 1, 1, 1, 49, 1,
- 50, 50, 50, 50, 50, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 50,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 51, 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, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 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, 1, 1,
- 1, 1, 1, 53, 1, 50, 50, 50,
- 50, 50, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 50, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 51,
- 1, 1, 1, 1, 27, 27, 27, 27,
- 27, 27, 27, 27, 27, 27, 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, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 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, 1, 1, 1, 1, 1,
- 53, 1, 45, 45, 45, 45, 45, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 45, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 46, 1, 1, 1,
- 1, 54, 54, 54, 54, 54, 54, 54,
- 54, 54, 54, 1, 1, 1, 1, 1,
- 1, 47, 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, 1, 1, 1, 48, 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,
- 1, 1, 1, 1, 1, 49, 1, 28,
- 28, 28, 28, 28, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 28, 1,
- 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 29, 1, 55, 55, 1, 55, 55,
- 55, 55, 55, 55, 55, 55, 55, 55,
- 1, 1, 1, 30, 1, 1, 31, 55,
- 55, 55, 55, 55, 55, 55, 55, 55,
- 55, 55, 55, 55, 55, 55, 55, 55,
- 55, 55, 55, 55, 55, 55, 55, 55,
- 55, 1, 1, 32, 1, 55, 1, 55,
- 55, 55, 55, 55, 55, 55, 55, 55,
- 55, 55, 55, 55, 55, 55, 55, 55,
- 55, 55, 55, 55, 55, 55, 55, 55,
+ 0, 0, 0, 0, 0, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 2, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 1, 1, 1, 1, 1, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 1, 1, 1, 1, 1,
+ 1, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 1, 5, 1, 1, 6,
+ 7, 7, 7, 7, 7, 7, 7, 7,
+ 7, 1, 8, 9, 9, 9, 9, 9,
+ 9, 9, 9, 9, 1, 10, 1, 1,
+ 11, 12, 12, 12, 12, 12, 12, 12,
+ 12, 12, 1, 13, 14, 14, 14, 14,
+ 14, 14, 14, 14, 14, 1, 15, 16,
+ 16, 16, 16, 16, 16, 16, 16, 16,
+ 1, 17, 1, 1, 18, 19, 19, 19,
+ 19, 19, 19, 19, 19, 19, 1, 20,
+ 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 1, 22, 1, 23, 1, 1, 24,
+ 25, 25, 25, 25, 25, 25, 25, 25,
+ 25, 1, 26, 27, 27, 27, 27, 27,
+ 27, 27, 27, 27, 1, 22, 1, 1,
+ 1, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 1, 28, 28, 28, 28,
+ 28, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 28, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 29, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 30, 1, 1, 31, 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, 1, 1, 1,
+ 32, 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, 1, 1, 1, 1, 1, 33,
+ 1, 34, 34, 34, 34, 34, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 34, 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, 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, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 35, 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, 1,
+ 1, 1, 1, 1, 36, 1, 1, 0,
+ 0, 0, 0, 0, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 0, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 2, 3,
+ 3, 3, 3, 3, 3, 3, 3, 3,
+ 1, 1, 1, 1, 1, 1, 1, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 1, 1, 1, 1, 1, 1, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 1, 28, 28, 28, 28, 28, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 28, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 29, 1, 1, 1,
+ 1, 37, 37, 37, 37, 37, 37, 37,
+ 37, 37, 37, 1, 1, 1, 30, 1,
+ 1, 31, 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, 1, 1, 1, 32, 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,
+ 1, 1, 1, 1, 1, 33, 1, 38,
+ 38, 38, 38, 38, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 38, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 39, 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, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 40, 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, 1, 1, 1,
+ 1, 1, 41, 1, 42, 42, 42, 42,
+ 42, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 42, 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, 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, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 43, 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, 1, 1, 1, 1, 1, 44,
+ 1, 42, 42, 42, 42, 42, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 42, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 14, 14, 14, 14, 14, 14, 14, 14,
+ 14, 14, 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, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 43, 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, 1,
+ 1, 1, 1, 1, 44, 1, 38, 38,
+ 38, 38, 38, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 38, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 39, 1, 1, 1, 9, 9, 9,
+ 9, 9, 9, 9, 9, 9, 9, 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,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 40, 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, 1, 1, 1, 1,
+ 1, 41, 1, 45, 45, 45, 45, 45,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 45, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 46, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 47, 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, 1, 1, 1, 48,
+ 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, 1, 1, 1, 1, 1, 49, 1,
+ 50, 50, 50, 50, 50, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 50,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 51, 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, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 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, 1, 1,
+ 1, 1, 1, 53, 1, 50, 50, 50,
+ 50, 50, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 50, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 51,
+ 1, 1, 1, 1, 27, 27, 27, 27,
+ 27, 27, 27, 27, 27, 27, 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, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 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, 1, 1, 1, 1, 1,
+ 53, 1, 45, 45, 45, 45, 45, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 45, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 46, 1, 1, 1,
+ 1, 54, 54, 54, 54, 54, 54, 54,
+ 54, 54, 54, 1, 1, 1, 1, 1,
+ 1, 47, 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, 1, 1, 1, 48, 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,
+ 1, 1, 1, 1, 1, 49, 1, 28,
+ 28, 28, 28, 28, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 28, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 29, 1, 55, 55, 1, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55,
+ 1, 1, 1, 30, 1, 1, 31, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 1, 1, 32, 1, 55, 1, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55,
+ 55, 55, 55, 55, 55, 55, 55, 55,
55, 1, 33, 1, 0
};
static const char _deserialize_text_trans_targs[] = {
- 1, 0, 13, 17, 26, 3, 18, 21,
- 18, 21, 5, 19, 20, 19, 20, 22,
- 25, 8, 9, 12, 9, 12, 10, 11,
- 23, 24, 23, 24, 14, 2, 6, 7,
- 15, 16, 14, 15, 16, 17, 14, 4,
- 15, 16, 14, 15, 16, 14, 2, 7,
+ 1, 0, 13, 17, 26, 3, 18, 21,
+ 18, 21, 5, 19, 20, 19, 20, 22,
+ 25, 8, 9, 12, 9, 12, 10, 11,
+ 23, 24, 23, 24, 14, 2, 6, 7,
+ 15, 16, 14, 15, 16, 17, 14, 4,
+ 15, 16, 14, 15, 16, 14, 2, 7,
15, 16, 14, 2, 15, 16, 25, 26
};
static const char _deserialize_text_trans_actions[] = {
- 0, 0, 1, 1, 1, 2, 2, 2,
- 0, 0, 2, 2, 2, 0, 0, 2,
- 2, 2, 2, 2, 0, 0, 3, 2,
- 2, 2, 0, 0, 4, 5, 5, 5,
- 4, 4, 0, 0, 0, 0, 6, 7,
- 6, 6, 8, 8, 8, 9, 10, 10,
+ 0, 0, 1, 1, 1, 2, 2, 2,
+ 0, 0, 2, 2, 2, 0, 0, 2,
+ 2, 2, 2, 2, 0, 0, 3, 2,
+ 2, 2, 0, 0, 4, 5, 5, 5,
+ 4, 4, 0, 0, 0, 0, 6, 7,
+ 6, 6, 8, 8, 8, 9, 10, 10,
9, 9, 11, 12, 11, 11, 0, 0
};
static const char _deserialize_text_eof_actions[] = {
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 4, 0, 0,
- 0, 4, 6, 8, 8, 6, 9, 11,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 4, 0, 0,
+ 0, 4, 6, 8, 8, 6, 9, 11,
11, 9, 4
};
@@ -338,7 +338,7 @@ _hb_buffer_deserialize_glyphs_text (hb_buffer_t *buffer,
int cs;
hb_glyph_info_t info = {0};
hb_glyph_position_t pos = {0};
-
+
#line 343 "hb-buffer-deserialize-text.hh"
{
cs = deserialize_text_start;
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-deserialize-text.rl b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-deserialize-text.rl
index 8a682f7378a..fd9be42df14 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-deserialize-text.rl
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-deserialize-text.rl
@@ -100,7 +100,7 @@ _hb_buffer_deserialize_glyphs_text (hb_buffer_t *buffer,
const char *p = buf, *pe = buf + buf_len;
/* Ensure we have positions. */
- (void) hb_buffer_get_glyph_positions (buffer, NULL);
+ (void) hb_buffer_get_glyph_positions (buffer, nullptr);
while (p < pe && ISSPACE (*p))
p++;
@@ -109,7 +109,7 @@ _hb_buffer_deserialize_glyphs_text (hb_buffer_t *buffer,
*end_ptr = ++p;
}
- const char *eof = pe, *tok = NULL;
+ const char *eof = pe, *tok = nullptr;
int cs;
hb_glyph_info_t info = {0};
hb_glyph_position_t pos = {0};
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-private.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-private.hh
index 9148ef31b65..af4767f5114 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer-private.hh
@@ -93,7 +93,7 @@ struct hb_buffer_t {
hb_buffer_flags_t flags; /* BOT / EOT / etc. */
hb_buffer_cluster_level_t cluster_level;
hb_codepoint_t replacement; /* U+FFFD or something else. */
- hb_buffer_scratch_flags_t scratch_flags; /* Have space-flallback, etc. */
+ hb_buffer_scratch_flags_t scratch_flags; /* Have space-fallback, etc. */
unsigned int max_len; /* Maximum allowed len. */
int max_ops; /* Maximum allowed operations. */
@@ -344,8 +344,7 @@ struct hb_buffer_t {
inline void
unsafe_to_break_all (void)
{
- for (unsigned int i = 0; i < len; i++)
- info[i].mask |= HB_GLYPH_FLAG_UNSAFE_TO_BREAK;
+ unsafe_to_break_impl (0, len);
}
inline void
safe_to_break_all (void)
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.cc
index 7ead43b0184..dc0639f4f29 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.cc
@@ -1933,7 +1933,7 @@ hb_buffer_diff (hb_buffer_t *buffer,
result |= HB_BUFFER_DIFF_FLAG_CODEPOINT_MISMATCH;
if (buf_info->cluster != ref_info->cluster)
result |= HB_BUFFER_DIFF_FLAG_CLUSTER_MISMATCH;
- if ((buf_info->mask & HB_GLYPH_FLAG_DEFINED) != (ref_info->mask & HB_GLYPH_FLAG_DEFINED))
+ if ((buf_info->mask & ~ref_info->mask & HB_GLYPH_FLAG_DEFINED))
result |= HB_BUFFER_DIFF_FLAG_GLYPH_FLAGS_MISMATCH;
if (contains && ref_info->codepoint == dottedcircle_glyph)
result |= HB_BUFFER_DIFF_FLAG_DOTTED_CIRCLE_PRESENT;
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.h b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.h
index b2801ddf546..8a2d3e8690f 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-buffer.h
@@ -71,6 +71,24 @@ typedef struct hb_glyph_info_t {
hb_var_int_t var2;
} hb_glyph_info_t;
+/**
+ * hb_glyph_flags_t:
+ * @HB_GLYPH_FLAG_UNSAFE_TO_BREAK: Indicates that if input text is broken at the
+ * beginning of the cluster this glyph is part of,
+ * then both sides need to be re-shaped, as the
+ * result might be different. On the flip side,
+ * it means that when this flag is not present,
+ * then it's safe to break the glyph-run at the
+ * beginning of this cluster, and the two sides
+ * represent the exact same result one would get
+ * if breaking input text at the beginning of
+ * this cluster and shaping the two sides
+ * separately. This can be used to optimize
+ * paragraph layout, by avoiding re-shaping
+ * of each line after line-breaking, or limiting
+ * the reshaping to a small piece around the
+ * breaking point only.
+ */
typedef enum { /*< flags >*/
HB_GLYPH_FLAG_UNSAFE_TO_BREAK = 0x00000001,
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.cc
index 1d0e7264234..d1fcf799aac 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-common.cc
@@ -879,7 +879,7 @@ parse_feature_value_postfix (const char **pp, const char *end, hb_feature_t *fea
parse_bool (pp, end, &feature->value);
/* CSS doesn't use equal-sign between tag and value.
* If there was an equal-sign, then there *must* be a value.
- * A value without an eqaul-sign is ok, but not required. */
+ * A value without an equal-sign is ok, but not required. */
return !had_equal || had_value;
}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.cc
index 44020176939..aba7cf44d3f 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-coretext.cc
@@ -74,7 +74,10 @@ reference_table (hb_face_t *face HB_UNUSED, hb_tag_t tag, void *user_data)
const char *data = reinterpret_cast<const char*> (CFDataGetBytePtr (cf_data));
const size_t length = CFDataGetLength (cf_data);
if (!data || !length)
+ {
+ CFRelease (cf_data);
return nullptr;
+ }
return hb_blob_create (data, length, HB_MEMORY_MODE_READONLY,
reinterpret_cast<void *> (const_cast<__CFData *> (cf_data)),
@@ -311,7 +314,7 @@ _hb_coretext_shaper_font_data_destroy (hb_coretext_shaper_font_data_t *data)
hb_font_t *
hb_coretext_font_create (CTFontRef ct_font)
{
- CGFontRef cg_font = CTFontCopyGraphicsFont (ct_font, 0);
+ CGFontRef cg_font = CTFontCopyGraphicsFont (ct_font, nullptr);
hb_face_t *face = hb_coretext_face_create (cg_font);
CFRelease (cg_font);
hb_font_t *font = hb_font_create (face);
@@ -877,7 +880,10 @@ resize_and_retry:
kCFStringEncodingUTF8,
kCFAllocatorNull);
if (unlikely (!lang))
+ {
+ CFRelease (attr_string);
FAIL ("CFStringCreateWithCStringNoCopy failed");
+ }
CFAttributedStringSetAttribute (attr_string, CFRangeMake (0, chars_len),
kCTLanguageAttributeName, lang);
CFRelease (lang);
@@ -946,7 +952,10 @@ resize_and_retry:
&kCFTypeDictionaryValueCallBacks);
CFRelease (level_number);
if (unlikely (!options))
+ {
+ CFRelease (attr_string);
FAIL ("CFDictionaryCreate failed");
+ }
CTTypesetterRef typesetter = CTTypesetterCreateWithAttributedStringAndOptions (attr_string, options);
CFRelease (options);
@@ -1036,7 +1045,7 @@ resize_and_retry:
}
if (!matched)
{
- CGFontRef run_cg_font = CTFontCopyGraphicsFont (run_ct_font, 0);
+ CGFontRef run_cg_font = CTFontCopyGraphicsFont (run_ct_font, nullptr);
if (run_cg_font)
{
matched = CFEqual (run_cg_font, cg_font);
@@ -1209,7 +1218,7 @@ resize_and_retry:
}
/* Mac OS 10.6 doesn't have kCTTypesetterOptionForcedEmbeddingLevel,
- * or if it does, it doesn't resepct it. So we get runs with wrong
+ * or if it does, it doesn't respect it. So we get runs with wrong
* directions. As such, disable the assert... It wouldn't crash, but
* cursoring will be off...
*
@@ -1235,8 +1244,6 @@ resize_and_retry:
pos->x_offset = info->var1.i32;
pos->y_offset = info->var2.i32;
- info->mask = HB_GLYPH_FLAG_UNSAFE_TO_BREAK;
-
info++, pos++;
}
else
@@ -1246,8 +1253,6 @@ resize_and_retry:
pos->x_offset = info->var1.i32;
pos->y_offset = info->var2.i32;
- info->mask = HB_GLYPH_FLAG_UNSAFE_TO_BREAK;
-
info++, pos++;
}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-debug.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-debug.hh
index 6c425f7b9dd..c244347b348 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-debug.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-debug.hh
@@ -396,6 +396,18 @@ struct hb_no_trace_t {
#define TRACE_SERIALIZE(this) hb_no_trace_t<bool> trace
#endif
+#ifndef HB_DEBUG_SUBSET
+#define HB_DEBUG_SUBSET (HB_DEBUG+0)
+#endif
+#if HB_DEBUG_SUBSET
+#define TRACE_SUBSET(this) \
+ hb_auto_trace_t<HB_DEBUG_SUBSET, bool> trace \
+ (&c->debug_depth, c->get_name (), this, HB_FUNC, \
+ " ");
+#else
+#define TRACE_SUBSET(this) hb_no_trace_t<bool> trace
+#endif
+
#ifndef HB_DEBUG_WOULD_APPLY
#define HB_DEBUG_WOULD_APPLY (HB_DEBUG+0)
#endif
@@ -415,6 +427,7 @@ struct hb_no_trace_t {
HB_DEBUG_COLLECT_GLYPHS + \
HB_DEBUG_SANITIZE + \
HB_DEBUG_SERIALIZE + \
+ HB_DEBUG_SUBSET + \
HB_DEBUG_WOULD_APPLY + \
0)
#endif
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-directwrite.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-directwrite.cc
index 0674ef9bcfc..69a8aa2081b 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-directwrite.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-directwrite.cc
@@ -370,7 +370,7 @@ public:
{
if (textPosition == 0 || textPosition > mTextLength) {
// Either there is no text before here (== 0), or this
- // is an invalid position. The query is considered valid thouh.
+ // is an invalid position. The query is considered valid though.
*textString = nullptr;
*textLength = 0;
}
@@ -878,8 +878,6 @@ retry_getglyphs:
pos->x_offset =
x_mult * (isRightToLeft ? -info->var1.i32 : info->var1.i32);
pos->y_offset = y_mult * info->var2.i32;
-
- info->mask = HB_GLYPH_FLAG_UNSAFE_TO_BREAK;
}
if (isRightToLeft)
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.h b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.h
index 9842d52b650..0ce8d0462d5 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-face.h
@@ -71,7 +71,6 @@ hb_face_set_user_data (hb_face_t *face,
hb_destroy_func_t destroy,
hb_bool_t replace);
-
HB_EXTERN void *
hb_face_get_user_data (hb_face_t *face,
hb_user_data_key_t *key);
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.cc
index 1c526cf37dc..fc4b11220a9 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ft.cc
@@ -58,7 +58,7 @@
*
* - In the future, we should add constructors to create fonts in font space?
*
- * - FT_Load_Glyph() is exteremely costly. Do something about it?
+ * - FT_Load_Glyph() is extremely costly. Do something about it?
*/
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-gobject-enums.h.tmpl b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-gobject-enums.h.tmpl
index e28510c2284..606727cd32d 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-gobject-enums.h.tmpl
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-gobject-enums.h.tmpl
@@ -42,7 +42,8 @@ HB_BEGIN_DECLS
/*** END file-header ***/
/*** BEGIN value-header ***/
-HB_EXTERN GType @enum_name@_get_type (void) G_GNUC_CONST;
+HB_EXTERN GType
+@enum_name@_get_type (void) G_GNUC_CONST;
#define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type ())
/*** END value-header ***/
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-gobject-structs.h b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-gobject-structs.h
index 1c303219b7c..302dc9584e9 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-gobject-structs.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-gobject-structs.h
@@ -45,7 +45,8 @@ HB_BEGIN_DECLS
*
* Since: 0.9.2
**/
-HB_EXTERN GType hb_gobject_blob_get_type (void);
+HB_EXTERN GType
+hb_gobject_blob_get_type (void);
#define HB_GOBJECT_TYPE_BLOB (hb_gobject_blob_get_type ())
/**
@@ -53,7 +54,8 @@ HB_EXTERN GType hb_gobject_blob_get_type (void);
*
* Since: 0.9.2
**/
-HB_EXTERN GType hb_gobject_buffer_get_type (void);
+HB_EXTERN GType
+hb_gobject_buffer_get_type (void);
#define HB_GOBJECT_TYPE_BUFFER (hb_gobject_buffer_get_type ())
/**
@@ -61,7 +63,8 @@ HB_EXTERN GType hb_gobject_buffer_get_type (void);
*
* Since: 0.9.2
**/
-HB_EXTERN GType hb_gobject_face_get_type (void);
+HB_EXTERN GType
+hb_gobject_face_get_type (void);
#define HB_GOBJECT_TYPE_FACE (hb_gobject_face_get_type ())
/**
@@ -69,7 +72,8 @@ HB_EXTERN GType hb_gobject_face_get_type (void);
*
* Since: 0.9.2
**/
-HB_EXTERN GType hb_gobject_font_get_type (void);
+HB_EXTERN GType
+hb_gobject_font_get_type (void);
#define HB_GOBJECT_TYPE_FONT (hb_gobject_font_get_type ())
/**
@@ -77,13 +81,16 @@ HB_EXTERN GType hb_gobject_font_get_type (void);
*
* Since: 0.9.2
**/
-HB_EXTERN GType hb_gobject_font_funcs_get_type (void);
+HB_EXTERN GType
+hb_gobject_font_funcs_get_type (void);
#define HB_GOBJECT_TYPE_FONT_FUNCS (hb_gobject_font_funcs_get_type ())
-HB_EXTERN GType hb_gobject_set_get_type (void);
+HB_EXTERN GType
+hb_gobject_set_get_type (void);
#define HB_GOBJECT_TYPE_SET (hb_gobject_set_get_type ())
-HB_EXTERN GType hb_gobject_shape_plan_get_type (void);
+HB_EXTERN GType
+hb_gobject_shape_plan_get_type (void);
#define HB_GOBJECT_TYPE_SHAPE_PLAN (hb_gobject_shape_plan_get_type ())
/**
@@ -91,26 +98,40 @@ HB_EXTERN GType hb_gobject_shape_plan_get_type (void);
*
* Since: 0.9.2
**/
-HB_EXTERN GType hb_gobject_unicode_funcs_get_type (void);
+HB_EXTERN GType
+hb_gobject_unicode_funcs_get_type (void);
#define HB_GOBJECT_TYPE_UNICODE_FUNCS (hb_gobject_unicode_funcs_get_type ())
/* Value types */
-HB_EXTERN GType hb_gobject_feature_get_type (void);
+HB_EXTERN GType
+hb_gobject_feature_get_type (void);
#define HB_GOBJECT_TYPE_FEATURE (hb_gobject_feature_get_type ())
-HB_EXTERN GType hb_gobject_glyph_info_get_type (void);
+HB_EXTERN GType
+hb_gobject_glyph_info_get_type (void);
#define HB_GOBJECT_TYPE_GLYPH_INFO (hb_gobject_glyph_info_get_type ())
-HB_EXTERN GType hb_gobject_glyph_position_get_type (void);
+HB_EXTERN GType
+hb_gobject_glyph_position_get_type (void);
#define HB_GOBJECT_TYPE_GLYPH_POSITION (hb_gobject_glyph_position_get_type ())
-HB_EXTERN GType hb_gobject_segment_properties_get_type (void);
+HB_EXTERN GType
+hb_gobject_segment_properties_get_type (void);
#define HB_GOBJECT_TYPE_SEGMENT_PROPERTIES (hb_gobject_segment_properties_get_type ())
-HB_EXTERN GType hb_gobject_user_data_key_get_type (void);
+HB_EXTERN GType
+hb_gobject_user_data_key_get_type (void);
#define HB_GOBJECT_TYPE_USER_DATA_KEY (hb_gobject_user_data_key_get_type ())
+HB_EXTERN GType
+hb_gobject_ot_math_glyph_variant_get_type (void);
+#define HB_GOBJECT_TYPE_OT_MATH_GLYPH_VARIANT (hb_gobject_ot_math_glyph_variant_get_type ())
+
+HB_EXTERN GType
+hb_gobject_ot_math_glyph_part_get_type (void);
+#define HB_GOBJECT_TYPE_OT_MATH_GLYPH_PART (hb_gobject_ot_math_glyph_part_get_type ())
+
HB_END_DECLS
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-graphite2.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-graphite2.cc
index 62aaae9e87c..46fe1399913 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-graphite2.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-graphite2.cc
@@ -80,7 +80,7 @@ static const void *hb_graphite2_get_table (const void *data, unsigned int tag, s
p->tag = tag;
/* TODO Not thread-safe, but fairly harmless.
- * We can do the double-chcked pointer cmpexch thing here. */
+ * We can do the double-checked pointer cmpexch thing here. */
p->next = face_data->tlist;
face_data->tlist = p;
}
@@ -360,7 +360,6 @@ _hb_graphite2_shape (hb_shape_plan_t *shape_plan,
hb_glyph_info_t *info = &buffer->info[clusters[i].base_glyph + j];
info->codepoint = gids[clusters[i].base_glyph + j];
info->cluster = clusters[i].cluster;
- info->mask = HB_GLYPH_FLAG_UNSAFE_TO_BREAK;
info->var1.i32 = clusters[i].advance; // all glyphs in the cluster get the same advance
}
}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file-private.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file-private.hh
index 1e5676e8262..e2644eaf91e 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-file-private.hh
@@ -30,6 +30,7 @@
#define HB_OPEN_FILE_PRIVATE_HH
#include "hb-open-type-private.hh"
+#include "hb-ot-head-table.hh"
namespace OT {
@@ -54,7 +55,14 @@ struct TTCHeader;
typedef struct TableRecord
{
int cmp (Tag t) const
- { return t.cmp (tag); }
+ { return -t.cmp (tag); }
+
+ static int cmp (const void *pa, const void *pb)
+ {
+ const TableRecord *a = (const TableRecord *) pa;
+ const TableRecord *b = (const TableRecord *) pb;
+ return b->cmp (a->tag);
+ }
inline bool sanitize (hb_sanitize_context_t *c) const
{
@@ -64,9 +72,9 @@ typedef struct TableRecord
Tag tag; /* 4-byte identifier. */
CheckSum checkSum; /* CheckSum for this table. */
- HBUINT32 offset; /* Offset from beginning of TrueType font
+ Offset32 offset; /* Offset from beginning of TrueType font
* file. */
- HBUINT32 length; /* Length of this table. */
+ HBUINT32 length; /* Length of this table. */
public:
DEFINE_SIZE_STATIC (16);
} OpenTypeTable;
@@ -81,7 +89,7 @@ typedef struct OffsetTable
{
return tables[i];
}
- inline unsigned int get_table_tags (unsigned int start_offset,
+ inline unsigned int get_table_tags (unsigned int start_offset,
unsigned int *table_count, /* IN/OUT */
hb_tag_t *table_tags /* OUT */) const
{
@@ -118,6 +126,78 @@ typedef struct OffsetTable
}
public:
+
+ inline bool serialize (hb_serialize_context_t *c,
+ hb_tag_t sfnt_tag,
+ Supplier<hb_tag_t> &tags,
+ Supplier<hb_blob_t *> &blobs,
+ unsigned int table_count)
+ {
+ TRACE_SERIALIZE (this);
+ /* Alloc 12 for the OTHeader. */
+ if (unlikely (!c->extend_min (*this))) return_trace (false);
+ /* Write sfntVersion (bytes 0..3). */
+ sfnt_version.set (sfnt_tag);
+ /* Take space for numTables, searchRange, entrySelector, RangeShift
+ * and the TableRecords themselves. */
+ if (unlikely (!tables.serialize (c, table_count))) return_trace (false);
+
+ const char *dir_end = (const char *) c->head;
+ HBUINT32 *checksum_adjustment = nullptr;
+
+ /* Write OffsetTables, alloc for and write actual table blobs. */
+ for (unsigned int i = 0; i < table_count; i++)
+ {
+ TableRecord &rec = tables.array[i];
+ hb_blob_t *blob = blobs[i];
+ rec.tag.set (tags[i]);
+ rec.length.set (hb_blob_get_length (blob));
+ rec.offset.serialize (c, this);
+
+ /* Allocate room for the table and copy it. */
+ char *start = (char *) c->allocate_size<void> (rec.length);
+ if (unlikely (!start)) {return false;}
+
+ memcpy (start, hb_blob_get_data (blob, nullptr), rec.length);
+
+ /* 4-byte allignment. */
+ if (rec.length % 4)
+ c->allocate_size<void> (4 - rec.length % 4);
+ const char *end = (const char *) c->head;
+
+ if (tags[i] == HB_OT_TAG_head && end - start >= head::static_size)
+ {
+ head *h = (head *) start;
+ checksum_adjustment = &h->checkSumAdjustment;
+ checksum_adjustment->set (0);
+ }
+
+ rec.checkSum.set_for_data (start, end - start);
+ }
+ tags += table_count;
+ blobs += table_count;
+
+ tables.qsort ();
+
+ if (checksum_adjustment)
+ {
+ CheckSum checksum;
+
+ /* The following line is a slower version of the following block. */
+ //checksum.set_for_data (this, (const char *) c->head - (const char *) this);
+ checksum.set_for_data (this, dir_end - (const char *) this);
+ for (unsigned int i = 0; i < table_count; i++)
+ {
+ TableRecord &rec = tables.array[i];
+ checksum.set (checksum + rec.checkSum);
+ }
+
+ checksum_adjustment->set (0xB1B0AFBAu - checksum);
+ }
+
+ return_trace (true);
+ }
+
inline bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
@@ -249,6 +329,18 @@ struct OpenTypeFontFile
}
}
+ inline bool serialize_single (hb_serialize_context_t *c,
+ hb_tag_t sfnt_tag,
+ Supplier<hb_tag_t> &tags,
+ Supplier<hb_blob_t *> &blobs,
+ unsigned int table_count)
+ {
+ TRACE_SERIALIZE (this);
+ assert (sfnt_tag != TTCTag);
+ if (unlikely (!c->extend_min (*this))) return_trace (false);
+ return_trace (u.fontFace.serialize (c, sfnt_tag, tags, blobs, table_count));
+ }
+
inline bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-type-private.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-type-private.hh
index 04e4a4e1ba9..5d33199e128 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-type-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-open-type-private.hh
@@ -134,7 +134,17 @@ static inline Type& StructAfter(TObject &X)
#define HB_NULL_POOL_SIZE 264
static_assert (HB_NULL_POOL_SIZE % sizeof (void *) == 0, "Align HB_NULL_POOL_SIZE.");
-extern HB_INTERNAL const void * const _hb_NullPool[HB_NULL_POOL_SIZE / sizeof (void *)];
+
+#ifdef HB_NO_VISIBILITY
+static
+#else
+extern HB_INTERNAL
+#endif
+const void * const _hb_NullPool[HB_NULL_POOL_SIZE / sizeof (void *)]
+#ifdef HB_NO_VISIBILITY
+= {}
+#endif
+;
/* Generic nul-content Null objects. */
template <typename Type>
@@ -179,6 +189,12 @@ struct hb_dispatch_context_t
#ifndef HB_SANITIZE_MAX_EDITS
#define HB_SANITIZE_MAX_EDITS 32
#endif
+#ifndef HB_SANITIZE_MAX_OPS_FACTOR
+#define HB_SANITIZE_MAX_OPS_FACTOR 8
+#endif
+#ifndef HB_SANITIZE_MAX_OPS_MIN
+#define HB_SANITIZE_MAX_OPS_MIN 16384
+#endif
struct hb_sanitize_context_t :
hb_dispatch_context_t<hb_sanitize_context_t, bool, HB_DEBUG_SANITIZE>
@@ -186,7 +202,7 @@ struct hb_sanitize_context_t :
inline hb_sanitize_context_t (void) :
debug_depth (0),
start (nullptr), end (nullptr),
- writable (false), edit_count (0),
+ writable (false), edit_count (0), max_ops (0),
blob (nullptr),
num_glyphs (0) {}
@@ -211,6 +227,8 @@ struct hb_sanitize_context_t :
this->start = hb_blob_get_data (this->blob, nullptr);
this->end = this->start + hb_blob_get_length (this->blob);
assert (this->start <= this->end); /* Must not overflow. */
+ this->max_ops = MAX ((unsigned int) (this->end - this->start) * HB_SANITIZE_MAX_OPS_FACTOR,
+ (unsigned) HB_SANITIZE_MAX_OPS_MIN);
this->edit_count = 0;
this->debug_depth = 0;
@@ -234,7 +252,10 @@ struct hb_sanitize_context_t :
inline bool check_range (const void *base, unsigned int len) const
{
const char *p = (const char *) base;
- bool ok = this->start <= p && p <= this->end && (unsigned int) (this->end - p) >= len;
+ bool ok = this->max_ops-- > 0 &&
+ this->start <= p &&
+ p <= this->end &&
+ (unsigned int) (this->end - p) >= len;
DEBUG_MSG_LEVEL (SANITIZE, p, this->debug_depth+1, 0,
"check_range [%p..%p] (%d bytes) in [%p..%p] -> %s",
@@ -298,6 +319,7 @@ struct hb_sanitize_context_t :
const char *start, *end;
bool writable;
unsigned int edit_count;
+ mutable int max_ops;
hb_blob_t *blob;
unsigned int num_glyphs;
};
@@ -499,23 +521,25 @@ struct hb_serialize_context_t
template <typename Type>
struct Supplier
{
- inline Supplier (const Type *array, unsigned int len_)
+ inline Supplier (const Type *array, unsigned int len_, unsigned int stride_=sizeof(Type))
{
head = array;
len = len_;
+ stride = stride_;
}
inline const Type operator [] (unsigned int i) const
{
if (unlikely (i >= len)) return Type ();
- return head[i];
+ return * (const Type *) (const void *) ((const char *) head + stride * i);
}
- inline void advance (unsigned int count)
+ inline Supplier<Type> & operator += (unsigned int count)
{
if (unlikely (count > len))
count = len;
len -= count;
- head += count;
+ head = (const Type *) (const void *) ((const char *) head + stride * count);
+ return *this;
}
private:
@@ -523,6 +547,7 @@ struct Supplier
inline Supplier<Type>& operator= (const Supplier<Type> &); /* Disallow copy */
unsigned int len;
+ unsigned int stride;
const Type *head;
};
@@ -667,8 +692,8 @@ struct F2DOT14 : HBINT16
/* 32-bit signed fixed-point number (16.16). */
struct Fixed: HBINT32
{
- //inline float to_float (void) const { return ???; }
- //inline void set_float (float f) { v.set (f * ???); }
+ inline float to_float (void) const { return ((int32_t) v) / 65536.0; }
+ inline void set_float (float f) { v.set (round (f * 65536.0)); }
public:
DEFINE_SIZE_STATIC (4);
};
@@ -715,6 +740,14 @@ template <typename Type>
struct Offset : Type
{
inline bool is_null (void) const { return 0 == *this; }
+
+ inline void *serialize (hb_serialize_context_t *c, const void *base)
+ {
+ void *t = c->start_embed<void> ();
+ this->set ((char *) t - (char *) base); /* TODO(serialize) Overflow? */
+ return t;
+ }
+
public:
DEFINE_SIZE_STATIC (sizeof(Type));
};
@@ -730,7 +763,8 @@ struct CheckSum : HBUINT32
static inline uint32_t CalcTableChecksum (const HBUINT32 *Table, uint32_t Length)
{
uint32_t Sum = 0L;
- const HBUINT32 *EndPtr = Table+((Length+3) & ~3) / HBUINT32::static_size;
+ assert (0 == (Length & 3));
+ const HBUINT32 *EndPtr = Table + Length / HBUINT32::static_size;
while (Table < EndPtr)
Sum += *Table++;
@@ -786,9 +820,7 @@ struct OffsetTo : Offset<OffsetType>
inline Type& serialize (hb_serialize_context_t *c, const void *base)
{
- Type *t = c->start_embed<Type> ();
- this->set ((char *) t - (char *) base); /* TODO(serialize) Overflow? */
- return *t;
+ return * (Type *) Offset<OffsetType>::serialize (c, base);
}
inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
@@ -876,7 +908,7 @@ struct ArrayOf
if (unlikely (!serialize (c, items_len))) return_trace (false);
for (unsigned int i = 0; i < items_len; i++)
array[i] = items[i];
- items.advance (items_len);
+ items += items_len;
return_trace (true);
}
@@ -928,6 +960,11 @@ struct ArrayOf
return -1;
}
+ inline void qsort (void)
+ {
+ ::qsort (array, len, sizeof (Type), Type::cmp);
+ }
+
private:
inline bool sanitize_shallow (hb_sanitize_context_t *c) const
{
@@ -994,7 +1031,7 @@ struct HeadlessArrayOf
if (unlikely (!c->extend (*this))) return_trace (false);
for (unsigned int i = 0; i < items_len - 1; i++)
array[i] = items[i];
- items.advance (items_len - 1);
+ items += items_len - 1;
return_trace (true);
}
@@ -1072,6 +1109,17 @@ struct BinSearchHeader
return_trace (c->check_struct (this));
}
+ inline void set (unsigned int v)
+ {
+ len.set (v);
+ assert (len == v);
+ entrySelectorZ.set (MAX (1u, _hb_bit_storage (v)) - 1);
+ searchRangeZ.set (16 * (1u << entrySelectorZ));
+ rangeShiftZ.set (v * 16 > searchRangeZ
+ ? 16 * v - searchRangeZ
+ : 0);
+ }
+
protected:
HBUINT16 len;
HBUINT16 searchRangeZ;
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cmap-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cmap-table.hh
index b9d6e248ae9..02079898683 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cmap-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cmap-table.hh
@@ -28,7 +28,7 @@
#define HB_OT_CMAP_TABLE_HH
#include "hb-open-type-private.hh"
-
+#include "hb-subset-plan.hh"
namespace OT {
@@ -61,7 +61,7 @@ struct CmapSubtableFormat0
HBUINT16 format; /* Format number is set to 0. */
HBUINT16 lengthZ; /* Byte length of this subtable. */
HBUINT16 languageZ; /* Ignore. */
- HBUINT8 glyphIdArray[256];/* An array that maps character
+ HBUINT8 glyphIdArray[256];/* An array that maps character
* code to glyph index values. */
public:
DEFINE_SIZE_STATIC (6 + 256);
@@ -193,6 +193,7 @@ struct CmapSubtableLongGroup
{
friend struct CmapSubtableFormat12;
friend struct CmapSubtableFormat13;
+ friend struct cmap;
int cmp (hb_codepoint_t codepoint) const
{
@@ -253,6 +254,8 @@ struct CmapSubtableFormat10 : CmapSubtableTrimmed<HBUINT32 > {};
template <typename T>
struct CmapSubtableLongSegmented
{
+ friend struct cmap;
+
inline bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
{
int i = groups.bsearch (codepoint);
@@ -268,6 +271,16 @@ struct CmapSubtableLongSegmented
return_trace (c->check_struct (this) && groups.sanitize (c));
}
+ inline bool serialize (hb_serialize_context_t *c,
+ hb_prealloced_array_t<CmapSubtableLongGroup> &group_data)
+ {
+ TRACE_SERIALIZE (this);
+ if (unlikely (!c->extend_min (*this))) return_trace (false);
+ Supplier<CmapSubtableLongGroup> supplier (group_data.array, group_data.len);
+ if (unlikely (!groups.serialize (c, supplier, group_data.len))) return_trace (false);
+ return true;
+ }
+
protected:
HBUINT16 format; /* Subtable format; set to 12. */
HBUINT16 reservedZ; /* Reserved; set to 0. */
@@ -422,12 +435,12 @@ struct CmapSubtable
hb_codepoint_t *glyph) const
{
switch (u.format) {
- case 0: return u.format0 .get_glyph(codepoint, glyph);
- case 4: return u.format4 .get_glyph(codepoint, glyph);
- case 6: return u.format6 .get_glyph(codepoint, glyph);
- case 10: return u.format10.get_glyph(codepoint, glyph);
- case 12: return u.format12.get_glyph(codepoint, glyph);
- case 13: return u.format13.get_glyph(codepoint, glyph);
+ case 0: return u.format0 .get_glyph (codepoint, glyph);
+ case 4: return u.format4 .get_glyph (codepoint, glyph);
+ case 6: return u.format6 .get_glyph (codepoint, glyph);
+ case 10: return u.format10.get_glyph (codepoint, glyph);
+ case 12: return u.format12.get_glyph (codepoint, glyph);
+ case 13: return u.format13.get_glyph (codepoint, glyph);
case 14:
default: return false;
}
@@ -504,6 +517,114 @@ struct cmap
encodingRecord.sanitize (c, this));
}
+ inline bool populate_groups (hb_subset_plan_t *plan,
+ hb_prealloced_array_t<CmapSubtableLongGroup> *groups) const
+ {
+ CmapSubtableLongGroup *group = nullptr;
+ for (unsigned int i = 0; i < plan->codepoints.len; i++) {
+
+ hb_codepoint_t cp = plan->codepoints[i];
+ if (!group || cp - 1 != group->endCharCode)
+ {
+ group = groups->push ();
+ group->startCharCode.set (cp);
+ group->endCharCode.set (cp);
+ hb_codepoint_t new_gid;
+ if (unlikely (!hb_subset_plan_new_gid_for_codepoint (plan, cp, &new_gid)))
+ {
+ DEBUG_MSG(SUBSET, nullptr, "Unable to find new gid for %04x", cp);
+ return false;
+ }
+ group->glyphID.set (new_gid);
+ } else
+ {
+ group->endCharCode.set (cp);
+ }
+ }
+
+ DEBUG_MSG(SUBSET, nullptr, "cmap");
+ for (unsigned int i = 0; i < groups->len; i++) {
+ CmapSubtableLongGroup& group = (*groups)[i];
+ DEBUG_MSG(SUBSET, nullptr, " %d: U+%04X-U+%04X, gid %d-%d", i, (uint32_t) group.startCharCode, (uint32_t) group.endCharCode, (uint32_t) group.glyphID, (uint32_t) group.glyphID + ((uint32_t) group.endCharCode - (uint32_t) group.startCharCode));
+ }
+
+ return true;
+ }
+
+ inline bool _subset (hb_prealloced_array_t<CmapSubtableLongGroup> &groups,
+ size_t dest_sz,
+ void *dest) const
+ {
+ hb_serialize_context_t c (dest, dest_sz);
+
+ OT::cmap *cmap = c.start_serialize<OT::cmap> ();
+ if (unlikely (!c.extend_min (*cmap)))
+ {
+ return false;
+ }
+
+ cmap->version.set (0);
+
+ if (unlikely (!cmap->encodingRecord.serialize (&c, /* numTables */ 1))) return false;
+
+ EncodingRecord &rec = cmap->encodingRecord[0];
+ rec.platformID.set (3); // Windows
+ rec.encodingID.set (10); // Unicode UCS-4
+
+ /* capture offset to subtable */
+ CmapSubtable &subtable = rec.subtable.serialize (&c, cmap);
+
+ subtable.u.format.set (12);
+
+ CmapSubtableFormat12 &format12 = subtable.u.format12;
+ if (unlikely (!c.extend_min (format12))) return false;
+
+ format12.format.set (12);
+ format12.reservedZ.set (0);
+ format12.lengthZ.set (16 + 12 * groups.len);
+
+ if (unlikely (!format12.serialize (&c, groups))) return false;
+
+ c.end_serialize ();
+
+ return true;
+ }
+
+ inline bool subset (hb_subset_plan_t *plan) const
+ {
+ hb_auto_array_t<CmapSubtableLongGroup> groups;
+
+ if (unlikely (!populate_groups (plan, &groups))) return false;
+
+ // We now know how big our blob needs to be
+ // TODO use APIs from the structs to get size?
+ size_t dest_sz = 4 // header
+ + 8 // 1 EncodingRecord
+ + 16 // Format 12 header
+ + 12 * groups.len; // SequentialMapGroup records
+ void *dest = malloc (dest_sz);
+ if (unlikely (!dest)) {
+ DEBUG_MSG(SUBSET, nullptr, "Unable to alloc %lu for cmap subset output", (unsigned long) dest_sz);
+ return false;
+ }
+
+ if (unlikely (!_subset (groups, dest_sz, dest)))
+ {
+ free (dest);
+ return false;
+ }
+
+ // all done, write the blob into dest
+ hb_blob_t *cmap_prime = hb_blob_create ((const char *)dest,
+ dest_sz,
+ HB_MEMORY_MODE_READONLY,
+ dest,
+ free);
+ bool result = hb_subset_plan_add_table (plan, HB_OT_TAG_cmap, cmap_prime);
+ hb_blob_destroy (cmap_prime);
+ return result;
+ }
+
struct accelerator_t
{
inline void init (hb_face_t *face)
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cbdt-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-cbdt-table.hh
index 6c2b9a88ee1..e7ab917e06e 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-cbdt-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-cbdt-table.hh
@@ -24,8 +24,8 @@
* Google Author(s): Seigo Nonaka
*/
-#ifndef HB_OT_CBDT_TABLE_HH
-#define HB_OT_CBDT_TABLE_HH
+#ifndef HB_OT_COLOR_CBDT_TABLE_HH
+#define HB_OT_COLOR_CBDT_TABLE_HH
#include "hb-open-type-private.hh"
@@ -377,7 +377,7 @@ struct CBDT
{
inline void init (hb_face_t *face)
{
- upem = face->get_upem();
+ upem = hb_face_get_upem (face);
cblc_blob = Sanitizer<CBLC>().sanitize (face->reference_table (HB_OT_TAG_CBLC));
cbdt_blob = Sanitizer<CBDT>().sanitize (face->reference_table (HB_OT_TAG_CBDT));
@@ -468,4 +468,4 @@ struct CBDT
} /* namespace OT */
-#endif /* HB_OT_CBDT_TABLE_HH */
+#endif /* HB_OT_COLOR_CBDT_TABLE_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-colr-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-colr-table.hh
new file mode 100644
index 00000000000..2c3b1cccae9
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-colr-table.hh
@@ -0,0 +1,142 @@
+/*
+ * Copyright © 2018 Ebrahim Byagowi
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ */
+
+#ifndef HB_OT_COLOR_COLR_TABLE_HH
+#define HB_OT_COLOR_COLR_TABLE_HH
+
+#include "hb-open-type-private.hh"
+
+/*
+ * Color Palette
+ * http://www.microsoft.com/typography/otspec/colr.htm
+ */
+
+#define HB_OT_TAG_COLR HB_TAG('C','O','L','R')
+
+namespace OT {
+
+
+struct LayerRecord
+{
+ friend struct COLR;
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ protected:
+ GlyphID gID; /* Glyph ID of layer glyph */
+ HBUINT16 paletteIndex; /* Index value to use with a selected color palette */
+ public:
+ DEFINE_SIZE_STATIC (4);
+};
+
+struct BaseGlyphRecord
+{
+ friend struct COLR;
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ protected:
+ GlyphID gID; /* Glyph ID of reference glyph */
+ HBUINT16 firstLayerIndex; /* Index to the layer record */
+ HBUINT16 numLayers; /* Number of color layers associated with this glyph */
+ public:
+ DEFINE_SIZE_STATIC (6);
+};
+
+struct COLR
+{
+ static const hb_tag_t tableTag = HB_OT_TAG_COLR;
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ if (!(c->check_struct (this) &&
+ c->check_array ((const void*) &layerRecordsOffsetZ, sizeof (LayerRecord), numLayerRecords) &&
+ c->check_array ((const void*) &baseGlyphRecordsZ, sizeof (BaseGlyphRecord), numBaseGlyphRecords)))
+ return_trace (false);
+
+ const BaseGlyphRecord* base_glyph_records = &baseGlyphRecordsZ (this);
+ for (unsigned int i = 0; i < numBaseGlyphRecords; ++i)
+ if (base_glyph_records[i].firstLayerIndex +
+ base_glyph_records[i].numLayers > numLayerRecords)
+ return_trace (false);
+
+ return_trace (true);
+ }
+
+ inline bool get_base_glyph_record (
+ hb_codepoint_t glyph_id, unsigned int &first_layer, unsigned int &num_layers) const
+ {
+ const BaseGlyphRecord* base_glyph_records = &baseGlyphRecordsZ (this);
+ unsigned int min = 0, max = numBaseGlyphRecords - 1;
+ while (min <= max)
+ {
+ unsigned int mid = (min + max) / 2;
+ hb_codepoint_t gID = base_glyph_records[mid].gID;
+ if (gID > glyph_id)
+ max = mid - 1;
+ else if (gID < glyph_id)
+ min = mid + 1;
+ else
+ {
+ first_layer = base_glyph_records[mid].firstLayerIndex;
+ num_layers = base_glyph_records[mid].numLayers;
+ return true;
+ }
+ }
+ return false;
+ }
+
+ inline void get_layer_record (int layer,
+ hb_codepoint_t &glyph_id, unsigned int &palette_index) const
+ {
+ const LayerRecord* records = &layerRecordsOffsetZ (this);
+ glyph_id = records[layer].gID;
+ palette_index = records[layer].paletteIndex;
+ }
+
+ protected:
+ HBUINT16 version; /* Table version number */
+ HBUINT16 numBaseGlyphRecords; /* Number of Base Glyph Records */
+ LOffsetTo<BaseGlyphRecord>
+ baseGlyphRecordsZ; /* Offset to Base Glyph records. */
+ LOffsetTo<LayerRecord>
+ layerRecordsOffsetZ; /* Offset to Layer Records */
+ HBUINT16 numLayerRecords; /* Number of Layer Records */
+ public:
+ DEFINE_SIZE_STATIC (14);
+};
+
+} /* namespace OT */
+
+
+#endif /* HB_OT_COLOR_COLR_TABLE_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-cpal-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-cpal-table.hh
new file mode 100644
index 00000000000..e364c8a44d3
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color-cpal-table.hh
@@ -0,0 +1,208 @@
+/*
+ * Copyright © 2016 Google, Inc.
+ * Copyright © 2018 Ebrahim Byagowi
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Sascha Brawer
+ */
+
+#ifndef HB_OT_COLOR_CPAL_TABLE_HH
+#define HB_OT_COLOR_CPAL_TABLE_HH
+
+#include "hb-open-type-private.hh"
+
+
+/*
+ * Following parts to be moved to a public header.
+ */
+
+/**
+ * hb_ot_color_t:
+ * ARGB data type for holding color values.
+ *
+ * Since: REPLACEME
+ */
+typedef uint32_t hb_ot_color_t;
+
+
+/**
+ * hb_ot_color_palette_flags_t:
+ * @HB_OT_COLOR_PALETTE_FLAG_DEFAULT: default indicating that there is nothing special to note about a color palette.
+ * @HB_OT_COLOR_PALETTE_FLAG_FOR_LIGHT_BACKGROUND: flag indicating that the color palette is suitable for rendering text on light background.
+ * @HB_OT_COLOR_PALETTE_FLAG_FOR_DARK_BACKGROUND: flag indicating that the color palette is suitable for rendering text on dark background.
+ *
+ * Since: REPLACEME
+ */
+typedef enum { /*< flags >*/
+ HB_OT_COLOR_PALETTE_FLAG_DEFAULT = 0x00000000u,
+ HB_OT_COLOR_PALETTE_FLAG_FOR_LIGHT_BACKGROUND = 0x00000001u,
+ HB_OT_COLOR_PALETTE_FLAG_FOR_DARK_BACKGROUND = 0x00000002u,
+} hb_ot_color_palette_flags_t;
+
+// HB_EXTERN unsigned int
+// hb_ot_color_get_palette_count (hb_face_t *face);
+
+// HB_EXTERN unsigned int
+// hb_ot_color_get_palette_name_id (hb_face_t *face, unsigned int palette);
+
+// HB_EXTERN hb_ot_color_palette_flags_t
+// hb_ot_color_get_palette_flags (hb_face_t *face, unsigned int palette);
+
+// HB_EXTERN unsigned int
+// hb_ot_color_get_palette_colors (hb_face_t *face,
+// unsigned int palette, /* default=0 */
+// unsigned int start_offset,
+// unsigned int *color_count /* IN/OUT */,
+// hb_ot_color_t *colors /* OUT */);
+
+
+
+
+
+/*
+ * Color Palette
+ * http://www.microsoft.com/typography/otspec/cpal.htm
+ */
+
+#define HB_OT_TAG_CPAL HB_TAG('C','P','A','L')
+
+namespace OT {
+
+
+struct CPALV1Tail
+{
+ friend struct CPAL;
+
+ inline bool sanitize (hb_sanitize_context_t *c, unsigned int palettes) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (
+ c->check_struct (this) &&
+ c->check_array ((const void*) &paletteFlags, sizeof (HBUINT32), palettes) &&
+ c->check_array ((const void*) &paletteLabel, sizeof (HBUINT16), palettes) &&
+ c->check_array ((const void*) &paletteEntryLabel, sizeof (HBUINT16), palettes));
+ }
+
+ private:
+ inline hb_ot_color_palette_flags_t
+ get_palette_flags (const void *base, unsigned int palette) const
+ {
+ const HBUINT32* flags = &paletteFlags (base);
+ return (hb_ot_color_palette_flags_t) (uint32_t) flags[palette];
+ }
+
+ inline unsigned int
+ get_palette_name_id (const void *base, unsigned int palette) const
+ {
+ const HBUINT16* name_ids = &paletteLabel (base);
+ return name_ids[palette];
+ }
+
+ protected:
+ LOffsetTo<HBUINT32> paletteFlags;
+ LOffsetTo<HBUINT16> paletteLabel;
+ LOffsetTo<HBUINT16> paletteEntryLabel;
+ public:
+ DEFINE_SIZE_STATIC (12);
+};
+
+typedef HBUINT32 BGRAColor;
+
+struct CPAL
+{
+ static const hb_tag_t tableTag = HB_OT_TAG_CPAL;
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ if (!(c->check_struct (this) && // This checks colorRecordIndicesX sanity also, see #get_size
+ c->check_array ((const void*) &colorRecordsZ, sizeof (BGRAColor), numColorRecords)))
+ return_trace (false);
+
+ // Check for indices sanity so no need for doing it runtime
+ for (unsigned int i = 0; i < numPalettes; ++i)
+ if (colorRecordIndicesX[i] + numPaletteEntries > numColorRecords)
+ return_trace (false);
+
+ // If version is zero, we are done here; otherwise we need to check tail also
+ if (version == 0)
+ return_trace (true);
+
+ const CPALV1Tail &v1 = StructAfter<CPALV1Tail> (*this);
+ return_trace (v1.sanitize (c, numPalettes));
+ }
+
+ inline unsigned int get_size (void) const
+ {
+ return min_size + numPalettes * sizeof (HBUINT16);
+ }
+
+ inline hb_ot_color_palette_flags_t get_palette_flags (unsigned int palette) const
+ {
+ if (version == 0 || palette >= numPalettes)
+ return HB_OT_COLOR_PALETTE_FLAG_DEFAULT;
+
+ const CPALV1Tail& cpal1 = StructAfter<CPALV1Tail> (*this);
+ return cpal1.get_palette_flags (this, palette);
+ }
+
+ inline unsigned int get_palette_name_id (unsigned int palette) const
+ {
+ if (version == 0 || palette >= numPalettes)
+ return 0xFFFF;
+
+ const CPALV1Tail& cpal1 = StructAfter<CPALV1Tail> (*this);
+ return cpal1.get_palette_name_id (this, palette);
+ }
+
+ inline unsigned int get_palette_count () const
+ {
+ return numPalettes;
+ }
+
+ inline hb_ot_color_t get_color_record_argb (unsigned int color_index, unsigned int palette) const
+ {
+ if (color_index >= numPaletteEntries || palette >= numPalettes)
+ return 0;
+
+ const BGRAColor* records = &colorRecordsZ(this);
+ // No need for more range check as it is already done on #sanitize
+ return records[colorRecordIndicesX[palette] + color_index];
+ }
+
+ protected:
+ HBUINT16 version;
+ /* Version 0 */
+ HBUINT16 numPaletteEntries;
+ HBUINT16 numPalettes;
+ HBUINT16 numColorRecords;
+ LOffsetTo<HBUINT32> colorRecordsZ;
+ HBUINT16 colorRecordIndicesX[VAR]; // VAR=numPalettes
+/*CPALV1Tail v1[VAR];*/
+ public:
+ DEFINE_SIZE_ARRAY (12, colorRecordIndicesX);
+};
+
+} /* namespace OT */
+
+
+#endif /* HB_OT_COLOR_CPAL_TABLE_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color.cc
new file mode 100644
index 00000000000..ceebe0b7a02
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-color.cc
@@ -0,0 +1,183 @@
+/*
+ * Copyright © 2016 Google, Inc.
+ * Copyright © 2018 Ebrahim Byagowi
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Sascha Brawer
+ */
+
+#include "hb-open-type-private.hh"
+#include "hb-ot-color-colr-table.hh"
+#include "hb-ot-color-cpal-table.hh"
+#include "hb-ot.h"
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "hb-ot-layout-private.hh"
+#include "hb-shaper-private.hh"
+
+#if 0
+HB_MARK_AS_FLAG_T (hb_ot_color_palette_flags_t)
+//HB_SHAPER_DATA_ENSURE_DECLARE(ot, face) Hmm?
+
+
+static inline const OT::COLR&
+_get_colr (hb_face_t *face)
+{
+ if (unlikely (!hb_ot_shaper_face_data_ensure (face))) return OT::Null(OT::COLR);
+ hb_ot_layout_t * layout = hb_ot_layout_from_face (face);
+ return *(layout->colr.get ());
+}
+
+static inline const OT::CPAL&
+_get_cpal (hb_face_t *face)
+{
+ if (unlikely (!hb_ot_shaper_face_data_ensure (face))) return OT::Null(OT::CPAL);
+ hb_ot_layout_t * layout = hb_ot_layout_from_face (face);
+ return *(layout->cpal.get ());
+}
+
+
+/**
+ * hb_ot_color_get_palette_count:
+ * @face: a font face.
+ *
+ * Returns: the number of color palettes in @face, or zero if @face has
+ * no colors.
+ *
+ * Since: REPLACEME
+ */
+unsigned int
+hb_ot_color_get_palette_count (hb_face_t *face)
+{
+ const OT::CPAL& cpal = _get_cpal (face);
+ return cpal.get_palette_count ();
+}
+
+
+/**
+ * hb_ot_color_get_palette_name_id:
+ * @face: a font face.
+ * @palette: the index of the color palette whose name is being requested.
+ *
+ * Retrieves the name id of a color palette. For example, a color font can
+ * have themed palettes like "Spring", "Summer", "Fall", and "Winter".
+ *
+ * Returns: an identifier within @face's `name` table.
+ * If the requested palette has no name, or if @face has no colors,
+ * or if @palette is not between 0 and hb_ot_color_get_palette_count(),
+ * the result is 0xFFFF. The implementation does not check whether
+ * the returned palette name id is actually in @face's `name` table.
+ *
+ * Since: REPLACEME
+ */
+unsigned int
+hb_ot_color_get_palette_name_id (hb_face_t *face, unsigned int palette)
+{
+ const OT::CPAL& cpal = _get_cpal (face);
+ return cpal.get_palette_name_id (palette);
+}
+
+
+/**
+ * hb_ot_color_get_palette_flags:
+ * @face: a font face
+ * @palette: the index of the color palette whose flags are being requested
+ *
+ * Returns: the flags for the requested color palette. If @face has no colors,
+ * or if @palette is not between 0 and hb_ot_color_get_palette_count(),
+ * the result is #HB_OT_COLOR_PALETTE_FLAG_DEFAULT.
+ *
+ * Since: REPLACEME
+ */
+hb_ot_color_palette_flags_t
+hb_ot_color_get_palette_flags (hb_face_t *face, unsigned int palette)
+{
+ const OT::CPAL& cpal = _get_cpal(face);
+ return cpal.get_palette_flags (palette);
+}
+
+
+/**
+ * hb_ot_color_get_palette_colors:
+ * @face: a font face.
+ * @palette: the index of the color palette whose colors
+ * are being requested.
+ * @start_offset: the index of the first color being requested.
+ * @color_count: (inout) (optional): on input, how many colors
+ * can be maximally stored into the @colors array;
+ * on output, how many colors were actually stored.
+ * @colors: (array length=color_count) (optional):
+ * an array of #hb_ot_color_t records. After calling
+ * this function, @colors will be filled with
+ * the palette colors. If @colors is NULL, the function
+ * will just return the number of total colors
+ * without storing any actual colors; this can be used
+ * for allocating a buffer of suitable size before calling
+ * hb_ot_color_get_palette_colors() a second time.
+ *
+ * Retrieves the colors in a color palette.
+ *
+ * Returns: the total number of colors in the palette. All palettes in
+ * a font have the same number of colors. If @face has no colors, or if
+ * @palette is not between 0 and hb_ot_color_get_palette_count(),
+ * the result is zero.
+ *
+ * Since: REPLACEME
+ */
+unsigned int
+hb_ot_color_get_palette_colors (hb_face_t *face,
+ unsigned int palette, /* default=0 */
+ unsigned int start_offset,
+ unsigned int *color_count /* IN/OUT */,
+ hb_ot_color_t *colors /* OUT */)
+{
+ const OT::CPAL& cpal = _get_cpal(face);
+ if (unlikely (palette >= cpal.numPalettes))
+ {
+ if (color_count) *color_count = 0;
+ return 0;
+ }
+
+ const OT::ColorRecord* crec = &cpal.offsetFirstColorRecord (&cpal);
+ crec += cpal.colorRecordIndices[palette];
+
+ unsigned int num_results = 0;
+ if (likely (color_count && colors))
+ {
+ for (unsigned int i = start_offset;
+ i < cpal.numPaletteEntries && num_results < *color_count; ++i)
+ {
+ hb_ot_color_t* result = &colors[num_results];
+ result->red = crec[i].red;
+ result->green = crec[i].green;
+ result->blue = crec[i].blue;
+ result->alpha = crec[i].alpha;
+ ++num_results;
+ }
+ }
+
+ if (likely (color_count)) *color_count = num_results;
+ return cpal.numPaletteEntries;
+}
+#endif
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-font.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-font.cc
index 9864064b112..0e373d30f92 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-font.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-font.cc
@@ -31,12 +31,13 @@
#include "hb-font-private.hh"
#include "hb-ot-cmap-table.hh"
-#include "hb-ot-cbdt-table.hh"
#include "hb-ot-glyf-table.hh"
#include "hb-ot-hmtx-table.hh"
#include "hb-ot-kern-table.hh"
#include "hb-ot-post-table.hh"
+#include "hb-ot-color-cbdt-table.hh"
+
struct hb_ot_font_t
{
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-glyf-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-glyf-table.hh
index 67143c6393a..d62f24bd916 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-glyf-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-glyf-table.hh
@@ -29,7 +29,9 @@
#include "hb-open-type-private.hh"
#include "hb-ot-head-table.hh"
-
+#include "hb-subset-glyf.hh"
+#include "hb-subset-plan.hh"
+#include "hb-subset-private.hh"
namespace OT {
@@ -78,12 +80,50 @@ struct glyf
return_trace (true);
}
+ inline bool subset (hb_subset_plan_t *plan) const
+ {
+ hb_blob_t *glyf_prime = nullptr;
+ hb_blob_t *loca_prime = nullptr;
+
+ bool success = true;
+ bool use_short_loca = false;
+ if (hb_subset_glyf_and_loca (plan, &use_short_loca, &glyf_prime, &loca_prime)) {
+ success = success && hb_subset_plan_add_table (plan, HB_OT_TAG_glyf, glyf_prime);
+ success = success && hb_subset_plan_add_table (plan, HB_OT_TAG_loca, loca_prime);
+ success = success && _add_head_and_set_loca_version (plan->source, use_short_loca, plan->dest);
+ } else {
+ success = false;
+ }
+ hb_blob_destroy (loca_prime);
+ hb_blob_destroy (glyf_prime);
+
+ return success;
+ }
+
+ static bool
+ _add_head_and_set_loca_version (hb_face_t *source, bool use_short_loca, hb_face_t *dest)
+ {
+ hb_blob_t *head_blob = OT::Sanitizer<OT::head>().sanitize (hb_face_reference_table (source, HB_OT_TAG_head));
+ hb_blob_t *head_prime_blob = hb_blob_copy_writable_or_fail (head_blob);
+ hb_blob_destroy (head_blob);
+
+ if (unlikely (!head_prime_blob))
+ return false;
+
+ OT::head *head_prime = (OT::head *) hb_blob_get_data_writable (head_prime_blob, nullptr);
+ head_prime->indexToLocFormat.set (use_short_loca ? 0 : 1);
+ bool success = hb_subset_face_add_table (dest, HB_OT_TAG_head, head_prime_blob);
+
+ hb_blob_destroy (head_prime_blob);
+ return success;
+ }
+
struct GlyphHeader
{
HBINT16 numberOfContours; /* If the number of contours is
- * greater than or equal to zero,
- * this is a simple glyph; if negative,
- * this is a composite glyph. */
+ * greater than or equal to zero,
+ * this is a simple glyph; if negative,
+ * this is a composite glyph. */
FWORD xMin; /* Minimum x for coordinate data. */
FWORD yMin; /* Minimum y for coordinate data. */
FWORD xMax; /* Maximum x for coordinate data. */
@@ -92,6 +132,102 @@ struct glyf
DEFINE_SIZE_STATIC (10);
};
+ struct CompositeGlyphHeader
+ {
+ static const uint16_t ARG_1_AND_2_ARE_WORDS = 0x0001;
+ static const uint16_t ARGS_ARE_XY_VALUES = 0x0002;
+ static const uint16_t ROUND_XY_TO_GRID = 0x0004;
+ static const uint16_t WE_HAVE_A_SCALE = 0x0008;
+ static const uint16_t MORE_COMPONENTS = 0x0020;
+ static const uint16_t WE_HAVE_AN_X_AND_Y_SCALE = 0x0040;
+ static const uint16_t WE_HAVE_A_TWO_BY_TWO = 0x0080;
+ static const uint16_t WE_HAVE_INSTRUCTIONS = 0x0100;
+ static const uint16_t USE_MY_METRICS = 0x0200;
+ static const uint16_t OVERLAP_COMPOUND = 0x0400;
+ static const uint16_t SCALED_COMPONENT_OFFSET = 0x0800;
+ static const uint16_t UNSCALED_COMPONENT_OFFSET = 0x1000;
+
+ HBUINT16 flags;
+ HBUINT16 glyphIndex;
+
+ inline unsigned int get_size (void) const
+ {
+ unsigned int size = min_size;
+ if (flags & ARG_1_AND_2_ARE_WORDS) {
+ // arg1 and 2 are int16
+ size += 4;
+ } else {
+ // arg1 and 2 are int8
+ size += 2;
+ }
+ if (flags & WE_HAVE_A_SCALE) {
+ // One x 16 bit (scale)
+ size += 2;
+ } else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {
+ // Two x 16 bit (xscale, yscale)
+ size += 4;
+ } else if (flags & WE_HAVE_A_TWO_BY_TWO) {
+ // Four x 16 bit (xscale, scale01, scale10, yscale)
+ size += 8;
+ }
+ return size;
+ }
+
+ struct Iterator
+ {
+ const char *glyph_start;
+ const char *glyph_end;
+ const CompositeGlyphHeader *current;
+
+ inline bool move_to_next ()
+ {
+ if (current->flags & CompositeGlyphHeader::MORE_COMPONENTS)
+ {
+ const CompositeGlyphHeader *possible =
+ &StructAfter<CompositeGlyphHeader, CompositeGlyphHeader> (*current);
+ if (!in_range (possible))
+ return false;
+ current = possible;
+ return true;
+ }
+ return false;
+ }
+
+ inline bool in_range (const CompositeGlyphHeader *composite) const
+ {
+ return (const char *) composite >= glyph_start
+ && ((const char *) composite + CompositeGlyphHeader::min_size) <= glyph_end
+ && ((const char *) composite + composite->get_size()) <= glyph_end;
+ }
+ };
+
+ static inline bool get_iterator (const char * glyph_data,
+ unsigned int length,
+ CompositeGlyphHeader::Iterator *iterator /* OUT */)
+ {
+ if (length < GlyphHeader::static_size)
+ return false; /* Empty glyph; zero extents. */
+
+ const GlyphHeader &glyph_header = StructAtOffset<GlyphHeader> (glyph_data, 0);
+ if (glyph_header.numberOfContours < 0)
+ {
+ const CompositeGlyphHeader *possible =
+ &StructAfter<CompositeGlyphHeader, GlyphHeader> (glyph_header);
+
+ iterator->glyph_start = glyph_data;
+ iterator->glyph_end = (const char *) glyph_data + length;
+ if (!iterator->in_range (possible))
+ return false;
+ iterator->current = possible;
+ return true;
+ }
+
+ return false;
+ }
+
+ DEFINE_SIZE_MIN (4);
+ };
+
struct accelerator_t
{
inline void init (hb_face_t *face)
@@ -122,29 +258,186 @@ struct glyf
hb_blob_destroy (glyf_blob);
}
- inline bool get_extents (hb_codepoint_t glyph,
- hb_glyph_extents_t *extents) const
+ /*
+ * Returns true if the referenced glyph is a valid glyph and a composite glyph.
+ * If true is returned a pointer to the composite glyph will be written into
+ * composite.
+ */
+ inline bool get_composite (hb_codepoint_t glyph,
+ CompositeGlyphHeader::Iterator *composite /* OUT */) const
+ {
+ unsigned int start_offset, end_offset;
+ if (!get_offsets (glyph, &start_offset, &end_offset))
+ return false; /* glyph not found */
+
+ return CompositeGlyphHeader::get_iterator ((const char*) this->glyf_table + start_offset,
+ end_offset - start_offset,
+ composite);
+ }
+
+ /* based on FontTools _g_l_y_f.py::trim */
+ inline bool remove_padding(unsigned int start_offset,
+ unsigned int *end_offset) const
+ {
+ static const int FLAG_X_SHORT = 0x02;
+ static const int FLAG_Y_SHORT = 0x04;
+ static const int FLAG_REPEAT = 0x08;
+ static const int FLAG_X_SAME = 0x10;
+ static const int FLAG_Y_SAME = 0x20;
+
+ if (*end_offset - start_offset < GlyphHeader::static_size)
+ return true;
+
+ const char *glyph = ((const char *) glyf_table) + start_offset;
+ const char * const glyph_end = glyph + (*end_offset - start_offset);
+ const GlyphHeader &glyph_header = StructAtOffset<GlyphHeader> (glyph, 0);
+ int16_t num_contours = (int16_t) glyph_header.numberOfContours;
+
+ if (num_contours < 0)
+ /* Trimming for composites not implemented.
+ * If removing hints it falls out of that. */
+ return true;
+ else if (num_contours > 0)
+ {
+ /* simple glyph w/contours, possibly trimmable */
+ glyph += GlyphHeader::static_size + 2 * num_contours;
+
+ if (unlikely (glyph + 2 >= glyph_end)) return false;
+ uint16_t nCoordinates = (uint16_t) StructAtOffset<HBUINT16>(glyph - 2, 0) + 1;
+ uint16_t nInstructions = (uint16_t) StructAtOffset<HBUINT16>(glyph, 0);
+
+ glyph += 2 + nInstructions;
+ if (unlikely (glyph + 2 >= glyph_end)) return false;
+
+ unsigned int coordBytes = 0;
+ unsigned int coordsWithFlags = 0;
+ while (glyph < glyph_end)
+ {
+ uint8_t flag = (uint8_t) *glyph;
+ glyph++;
+
+ unsigned int repeat = 1;
+ if (flag & FLAG_REPEAT)
+ {
+ if (glyph >= glyph_end)
+ {
+ DEBUG_MSG(SUBSET, nullptr, "Bad flag");
+ return false;
+ }
+ repeat = ((uint8_t) *glyph) + 1;
+ glyph++;
+ }
+
+ unsigned int xBytes, yBytes;
+ xBytes = yBytes = 0;
+ if (flag & FLAG_X_SHORT)
+ xBytes = 1;
+ else if ((flag & FLAG_X_SAME) == 0)
+ xBytes = 2;
+
+ if (flag & FLAG_Y_SHORT)
+ yBytes = 1;
+ else if ((flag & FLAG_Y_SAME) == 0)
+ yBytes = 2;
+
+ coordBytes += (xBytes + yBytes) * repeat;
+ coordsWithFlags += repeat;
+ if (coordsWithFlags >= nCoordinates)
+ break;
+ }
+
+ if (coordsWithFlags != nCoordinates)
+ {
+ DEBUG_MSG(SUBSET, nullptr, "Expect %d coords to have flags, got flags for %d", nCoordinates, coordsWithFlags);
+ return false;
+ }
+ glyph += coordBytes;
+
+ if (glyph < glyph_end)
+ *end_offset -= glyph_end - glyph;
+ }
+ return true;
+ }
+
+ inline bool get_offsets (hb_codepoint_t glyph,
+ unsigned int *start_offset /* OUT */,
+ unsigned int *end_offset /* OUT */) const
{
if (unlikely (glyph >= num_glyphs))
return false;
- unsigned int start_offset, end_offset;
if (short_offset)
{
const HBUINT16 *offsets = (const HBUINT16 *) loca_table->dataX;
- start_offset = 2 * offsets[glyph];
- end_offset = 2 * offsets[glyph + 1];
+ *start_offset = 2 * offsets[glyph];
+ *end_offset = 2 * offsets[glyph + 1];
}
else
{
const HBUINT32 *offsets = (const HBUINT32 *) loca_table->dataX;
- start_offset = offsets[glyph];
- end_offset = offsets[glyph + 1];
+
+ *start_offset = offsets[glyph];
+ *end_offset = offsets[glyph + 1];
}
- if (start_offset > end_offset || end_offset > glyf_len)
+ if (*start_offset > *end_offset || *end_offset > glyf_len)
return false;
+ return true;
+ }
+
+ inline bool get_instruction_offsets(unsigned int start_offset,
+ unsigned int end_offset,
+ unsigned int *instruction_start /* OUT */,
+ unsigned int *instruction_end /* OUT */) const
+ {
+ if (end_offset - start_offset < GlyphHeader::static_size)
+ {
+ *instruction_start = 0;
+ *instruction_end = 0;
+ return true; /* Empty glyph; no instructions. */
+ }
+ const GlyphHeader &glyph_header = StructAtOffset<GlyphHeader> (glyf_table, start_offset);
+ int16_t num_contours = (int16_t) glyph_header.numberOfContours;
+ if (num_contours < 0)
+ {
+ CompositeGlyphHeader::Iterator composite_it;
+ if (unlikely (!CompositeGlyphHeader::get_iterator (
+ (const char*) this->glyf_table + start_offset,
+ end_offset - start_offset, &composite_it))) return false;
+ const CompositeGlyphHeader *last;
+ do {
+ last = composite_it.current;
+ } while (composite_it.move_to_next());
+
+ if ( (uint16_t) last->flags & CompositeGlyphHeader::WE_HAVE_INSTRUCTIONS)
+ *instruction_start = ((char *) last - (char *) glyf_table->dataX) + last->get_size();
+ else
+ *instruction_start = end_offset;
+ *instruction_end = end_offset;
+ if (unlikely (*instruction_start > *instruction_end))
+ {
+ DEBUG_MSG(SUBSET, nullptr, "Invalid instruction offset, %d is outside [%d, %d]", *instruction_start, start_offset, end_offset);
+ return false;
+ }
+ }
+ else
+ {
+ unsigned int instruction_length_offset = start_offset + GlyphHeader::static_size + 2 * num_contours;
+ const HBUINT16 &instruction_length = StructAtOffset<HBUINT16> (glyf_table, instruction_length_offset);
+ *instruction_start = instruction_length_offset + 2;
+ *instruction_end = *instruction_start + (uint16_t) instruction_length;
+ }
+ return true;
+ }
+
+ inline bool get_extents (hb_codepoint_t glyph,
+ hb_glyph_extents_t *extents) const
+ {
+ unsigned int start_offset, end_offset;
+ if (!get_offsets (glyph, &start_offset, &end_offset))
+ return false;
+
if (end_offset - start_offset < GlyphHeader::static_size)
return true; /* Empty glyph; zero extents. */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-hdmx-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-hdmx-table.hh
new file mode 100644
index 00000000000..f08fe39d8be
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-hdmx-table.hh
@@ -0,0 +1,198 @@
+/*
+ * Copyright © 2018 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Garret Rieger
+ */
+
+#ifndef HB_OT_HDMX_TABLE_HH
+#define HB_OT_HDMX_TABLE_HH
+
+#include "hb-open-type-private.hh"
+
+namespace OT {
+
+
+/*
+ * hdmx - Horizontal Device Metric
+ */
+
+#define HB_OT_TAG_hdmx HB_TAG('h','d','m','x')
+
+struct DeviceRecord
+{
+ struct SubsetView
+ {
+ const DeviceRecord *source_device_record;
+ hb_subset_plan_t *subset_plan;
+
+ inline void init(const DeviceRecord *source_device_record,
+ hb_subset_plan_t *subset_plan)
+ {
+ this->source_device_record = source_device_record;
+ this->subset_plan = subset_plan;
+ }
+
+ inline unsigned int len () const
+ {
+ return this->subset_plan->gids_to_retain_sorted.len;
+ }
+
+ inline const HBUINT8& operator [] (unsigned int i) const
+ {
+ if (unlikely (i >= len())) return Null(HBUINT8);
+ hb_codepoint_t gid = this->subset_plan->gids_to_retain_sorted [i];
+ return this->source_device_record->widths[gid];
+ }
+ };
+
+ static inline unsigned int get_size (unsigned int count)
+ {
+ unsigned int raw_size = min_size + count * HBUINT8::static_size;
+ if (raw_size % 4)
+ /* Align to 32 bits */
+ return raw_size + (4 - (raw_size % 4));
+ return raw_size;
+ }
+
+ inline bool serialize (hb_serialize_context_t *c, const SubsetView &subset_view)
+ {
+ TRACE_SERIALIZE (this);
+
+ if (unlikely (!c->allocate_size<DeviceRecord> (get_size (subset_view.len()))))
+ return_trace (false);
+
+ this->pixel_size.set (subset_view.source_device_record->pixel_size);
+ this->max_width.set (subset_view.source_device_record->max_width);
+
+ for (unsigned int i = 0; i < subset_view.len(); i++)
+ widths[i].set (subset_view[i]);
+
+ return_trace (true);
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c, unsigned int size_device_record) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (likely (c->check_struct (this) &&
+ c->check_range (this, size_device_record)));
+ }
+
+ HBUINT8 pixel_size; /* Pixel size for following widths (as ppem). */
+ HBUINT8 max_width; /* Maximum width. */
+ HBUINT8 widths[VAR]; /* Array of widths (numGlyphs is from the 'maxp' table). */
+ public:
+ DEFINE_SIZE_ARRAY (2, widths);
+};
+
+
+struct hdmx
+{
+ static const hb_tag_t tableTag = HB_OT_TAG_hdmx;
+
+ inline unsigned int get_size (void) const
+ {
+ return min_size + num_records * size_device_record;
+ }
+
+ inline const DeviceRecord& operator [] (unsigned int i) const
+ {
+ if (unlikely (i >= num_records)) return Null(DeviceRecord);
+ return StructAtOffset<DeviceRecord> (this, min_size + i * size_device_record);
+ }
+
+ inline bool serialize (hb_serialize_context_t *c, const hdmx *source_hdmx, hb_subset_plan_t *plan)
+ {
+ TRACE_SERIALIZE (this);
+
+ if (unlikely (!c->extend_min ((*this)))) return_trace (false);
+
+ this->version.set (source_hdmx->version);
+ this->num_records.set (source_hdmx->num_records);
+ this->size_device_record.set (DeviceRecord::get_size (plan->gids_to_retain_sorted.len));
+
+ for (unsigned int i = 0; i < source_hdmx->num_records; i++)
+ {
+ DeviceRecord::SubsetView subset_view;
+ subset_view.init (&(*source_hdmx)[i], plan);
+
+ c->start_embed<DeviceRecord> ()->serialize (c, subset_view);
+ }
+
+ return_trace (true);
+ }
+
+ static inline size_t get_subsetted_size (hb_subset_plan_t *plan)
+ {
+ return min_size + DeviceRecord::get_size (plan->gids_to_retain_sorted.len);
+ }
+
+ inline bool subset (hb_subset_plan_t *plan) const
+ {
+ size_t dest_size = get_subsetted_size (plan);
+ hdmx *dest = (hdmx *) malloc (dest_size);
+ if (unlikely (!dest))
+ {
+ DEBUG_MSG(SUBSET, nullptr, "Unable to alloc %lu for hdmx subset output.", (unsigned long) dest_size);
+ return false;
+ }
+
+ hb_serialize_context_t c (dest, dest_size);
+ hdmx *hdmx_prime = c.start_serialize<hdmx> ();
+ if (!hdmx_prime || !hdmx_prime->serialize (&c, this, plan)) {
+ free (dest);
+ return false;
+ }
+ c.end_serialize ();
+
+ hb_blob_t *hdmx_prime_blob = hb_blob_create ((const char *) dest,
+ dest_size,
+ HB_MEMORY_MODE_READONLY,
+ dest,
+ free);
+ bool result = hb_subset_plan_add_table (plan, HB_OT_TAG_hdmx, hdmx_prime_blob);
+ hb_blob_destroy (hdmx_prime_blob);
+
+ return result;
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) && version == 0 &&
+ !_hb_unsigned_int_mul_overflows (num_records, size_device_record) &&
+ c->check_range (this, get_size()));
+ }
+
+ protected:
+ HBUINT16 version; /* Table version number (0) */
+ HBUINT16 num_records; /* Number of device records. */
+ HBUINT32 size_device_record; /* Size of a device record, 32-bit aligned. */
+ HBUINT8 data[VAR]; /* Array of device records. */
+ public:
+ DEFINE_SIZE_ARRAY (8, data);
+};
+
+} /* namespace OT */
+
+
+#endif /* HB_OT_HDMX_TABLE_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-head-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-head-table.hh
index 2024cea7e78..1d458404517 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-head-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-head-table.hh
@@ -43,6 +43,8 @@ namespace OT {
struct head
{
+ friend struct OffsetTable;
+
static const hb_tag_t tableTag = HB_OT_TAG_head;
inline unsigned int get_upem (void) const
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-hhea-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-hhea-table.hh
index 54eb5eb7732..97952b4ebbb 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-hhea-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-hhea-table.hh
@@ -41,7 +41,7 @@ namespace OT {
#define HB_OT_TAG_hhea HB_TAG('h','h','e','a')
#define HB_OT_TAG_vhea HB_TAG('v','h','e','a')
-
+template <typename T>
struct _hea
{
inline bool sanitize (hb_sanitize_context_t *c) const
@@ -84,10 +84,10 @@ struct _hea
DEFINE_SIZE_STATIC (36);
};
-struct hhea : _hea {
+struct hhea : _hea<hhea> {
static const hb_tag_t tableTag = HB_OT_TAG_hhea;
};
-struct vhea : _hea {
+struct vhea : _hea<vhea> {
static const hb_tag_t tableTag = HB_OT_TAG_vhea;
};
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-hmtx-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-hmtx-table.hh
index 934acde7792..3cd48a62e93 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-hmtx-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-hmtx-table.hh
@@ -21,7 +21,7 @@
* ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
* PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
*
- * Google Author(s): Behdad Esfahbod
+ * Google Author(s): Behdad Esfahbod, Roderick Sheeter
*/
#ifndef HB_OT_HMTX_TABLE_HH
@@ -53,7 +53,7 @@ struct LongMetric
DEFINE_SIZE_STATIC (4);
};
-template <typename T>
+template <typename T, typename H>
struct hmtxvmtx
{
inline bool sanitize (hb_sanitize_context_t *c) const
@@ -64,17 +64,128 @@ struct hmtxvmtx
return_trace (true);
}
+
+ inline bool subset_update_header (hb_subset_plan_t *plan,
+ unsigned int num_hmetrics) const
+ {
+ hb_blob_t *src_blob = OT::Sanitizer<H> ().sanitize (plan->source->reference_table (H::tableTag));
+ hb_blob_t *dest_blob = hb_blob_copy_writable_or_fail(src_blob);
+ hb_blob_destroy (src_blob);
+
+ if (unlikely (!dest_blob)) {
+ return false;
+ }
+
+ unsigned int length;
+ H *table = (H *) hb_blob_get_data (dest_blob, &length);
+ table->numberOfLongMetrics.set (num_hmetrics);
+
+ bool result = hb_subset_plan_add_table (plan, H::tableTag, dest_blob);
+ hb_blob_destroy (dest_blob);
+
+ return result;
+ }
+
+ inline bool subset (hb_subset_plan_t *plan) const
+ {
+ typename T::accelerator_t _mtx;
+ _mtx.init (plan->source);
+
+ /* All the trailing glyphs with the same advance can use one LongMetric
+ * and just keep LSB */
+ hb_prealloced_array_t<hb_codepoint_t> &gids = plan->gids_to_retain_sorted;
+ unsigned int num_advances = gids.len;
+ unsigned int last_advance = _mtx.get_advance (gids[num_advances - 1]);
+ while (num_advances > 1
+ && last_advance == _mtx.get_advance (gids[num_advances - 2]))
+ {
+ num_advances--;
+ }
+
+ /* alloc the new table */
+ size_t dest_sz = num_advances * 4
+ + (gids.len - num_advances) * 2;
+ void *dest = (void *) malloc (dest_sz);
+ if (unlikely (!dest))
+ {
+ return false;
+ }
+ DEBUG_MSG(SUBSET, nullptr, "%c%c%c%c in src has %d advances, %d lsbs", HB_UNTAG(T::tableTag), _mtx.num_advances, _mtx.num_metrics - _mtx.num_advances);
+ DEBUG_MSG(SUBSET, nullptr, "%c%c%c%c in dest has %d advances, %d lsbs, %u bytes", HB_UNTAG(T::tableTag), num_advances, gids.len - num_advances, (unsigned int) dest_sz);
+
+ const char *source_table = hb_blob_get_data (_mtx.blob, nullptr);
+ // Copy everything over
+ LongMetric * old_metrics = (LongMetric *) source_table;
+ FWORD *lsbs = (FWORD *) (old_metrics + _mtx.num_advances);
+ char * dest_pos = (char *) dest;
+ for (unsigned int i = 0; i < gids.len; i++)
+ {
+ /* the last metric or the one for gids[i] */
+ LongMetric *src_metric = old_metrics + MIN ((hb_codepoint_t) _mtx.num_advances - 1, gids[i]);
+ if (gids[i] < _mtx.num_advances)
+ {
+ /* src is a LongMetric */
+ if (i < num_advances)
+ {
+ /* dest is a LongMetric, copy it */
+ *((LongMetric *) dest_pos) = *src_metric;
+ }
+ else
+ {
+ /* dest just lsb */
+ *((FWORD *) dest_pos) = src_metric->lsb;
+ }
+ }
+ else
+ {
+ FWORD src_lsb = *(lsbs + gids[i] - _mtx.num_advances);
+ if (i < num_advances)
+ {
+ /* dest needs a full LongMetric */
+ LongMetric *metric = (LongMetric *)dest_pos;
+ metric->advance = src_metric->advance;
+ metric->lsb = src_lsb;
+ }
+ else
+ {
+ /* dest just needs an lsb */
+ *((FWORD *) dest_pos) = src_lsb;
+ }
+ }
+ dest_pos += (i < num_advances ? 4 : 2);
+ }
+ _mtx.fini ();
+
+ // Amend header num hmetrics
+ if (unlikely (!subset_update_header (plan, num_advances)))
+ {
+ free (dest);
+ return false;
+ }
+
+ hb_blob_t *result = hb_blob_create ((const char *)dest,
+ dest_sz,
+ HB_MEMORY_MODE_READONLY,
+ dest,
+ free);
+ bool success = hb_subset_plan_add_table (plan, T::tableTag, result);
+ hb_blob_destroy (result);
+ return success;
+ }
+
struct accelerator_t
{
+ friend struct hmtxvmtx;
+
inline void init (hb_face_t *face,
unsigned int default_advance_ = 0)
{
- default_advance = default_advance_ ? default_advance_ : face->get_upem ();
+ default_advance = default_advance_ ? default_advance_ : hb_face_get_upem (face);
bool got_font_extents = false;
if (T::os2Tag)
{
- hb_blob_t *os2_blob = Sanitizer<os2>().sanitize (face->reference_table (T::os2Tag));
+ hb_blob_t *os2_blob = Sanitizer<os2> ().sanitize (face->reference_table (T::os2Tag));
const os2 *os2_table = Sanitizer<os2>::lock_instance (os2_blob);
#define USE_TYPO_METRICS (1u<<7)
if (0 != (os2_table->fsSelection & USE_TYPO_METRICS))
@@ -87,8 +198,8 @@ struct hmtxvmtx
hb_blob_destroy (os2_blob);
}
- hb_blob_t *_hea_blob = Sanitizer<_hea>().sanitize (face->reference_table (T::headerTag));
- const _hea *_hea_table = Sanitizer<_hea>::lock_instance (_hea_blob);
+ hb_blob_t *_hea_blob = Sanitizer<H> ().sanitize (face->reference_table (H::tableTag));
+ const H *_hea_table = Sanitizer<H>::lock_instance (_hea_blob);
num_advances = _hea_table->numberOfLongMetrics;
if (!got_font_extents)
{
@@ -101,7 +212,7 @@ struct hmtxvmtx
has_font_extents = got_font_extents;
- blob = Sanitizer<hmtxvmtx>().sanitize (face->reference_table (T::tableTag));
+ blob = Sanitizer<hmtxvmtx> ().sanitize (face->reference_table (T::tableTag));
/* Cap num_metrics() and num_advances() based on table length. */
unsigned int len = hb_blob_get_length (blob);
@@ -119,7 +230,7 @@ struct hmtxvmtx
}
table = Sanitizer<hmtxvmtx>::lock_instance (blob);
- var_blob = Sanitizer<HVARVVAR>().sanitize (face->reference_table (T::variationsTag));
+ var_blob = Sanitizer<HVARVVAR> ().sanitize (face->reference_table (T::variationsTag));
var_table = Sanitizer<HVARVVAR>::lock_instance (var_blob);
}
@@ -129,22 +240,31 @@ struct hmtxvmtx
hb_blob_destroy (var_blob);
}
- inline unsigned int get_advance (hb_codepoint_t glyph,
- hb_font_t *font) const
+ inline unsigned int get_advance (hb_codepoint_t glyph) const
{
if (unlikely (glyph >= num_metrics))
{
- /* If num_metrics is zero, it means we don't have the metrics table
- * for this direction: return default advance. Otherwise, it means that the
- * glyph index is out of bound: return zero. */
- if (num_metrics)
- return 0;
- else
- return default_advance;
+ /* If num_metrics is zero, it means we don't have the metrics table
+ * for this direction: return default advance. Otherwise, it means that the
+ * glyph index is out of bound: return zero. */
+ if (num_metrics)
+ return 0;
+ else
+ return default_advance;
}
- return table->longMetric[MIN (glyph, (uint32_t) num_advances - 1)].advance
- + (font->num_coords ? var_table->get_advance_var (glyph, font->coords, font->num_coords) : 0); // TODO Optimize?!
+ return table->longMetric[MIN (glyph, (uint32_t) num_advances - 1)].advance;
+ }
+
+ inline unsigned int get_advance (hb_codepoint_t glyph,
+ hb_font_t *font) const
+ {
+ unsigned int advance = get_advance (glyph);
+ if (likely(glyph < num_metrics))
+ {
+ advance += (font->num_coords ? var_table->get_advance_var (glyph, font->coords, font->num_coords) : 0); // TODO Optimize?!
+ }
+ return advance;
}
public:
@@ -153,11 +273,12 @@ struct hmtxvmtx
unsigned short descender;
unsigned short line_gap;
- private:
+ protected:
unsigned int num_metrics;
unsigned int num_advances;
unsigned int default_advance;
+ private:
const hmtxvmtx *table;
hb_blob_t *blob;
const HVARVVAR *var_table;
@@ -173,7 +294,7 @@ struct hmtxvmtx
* be in the array, but that entry is
* required. The last entry applies to
* all subsequent glyphs. */
- FWORD leadingBearingX[VAR]; /* Here the advance is assumed
+/*FWORD leadingBearingX[VAR];*/ /* Here the advance is assumed
* to be the same as the advance
* for the last entry above. The
* number of entries in this array is
@@ -187,18 +308,16 @@ struct hmtxvmtx
* font to vary the side bearing
* values for each glyph. */
public:
- DEFINE_SIZE_ARRAY2 (0, longMetric, leadingBearingX);
+ DEFINE_SIZE_ARRAY (0, longMetric);
};
-struct hmtx : hmtxvmtx<hmtx> {
+struct hmtx : hmtxvmtx<hmtx, hhea> {
static const hb_tag_t tableTag = HB_OT_TAG_hmtx;
- static const hb_tag_t headerTag = HB_OT_TAG_hhea;
static const hb_tag_t variationsTag = HB_OT_TAG_HVAR;
static const hb_tag_t os2Tag = HB_OT_TAG_os2;
};
-struct vmtx : hmtxvmtx<vmtx> {
+struct vmtx : hmtxvmtx<vmtx, vhea> {
static const hb_tag_t tableTag = HB_OT_TAG_vmtx;
- static const hb_tag_t headerTag = HB_OT_TAG_vhea;
static const hb_tag_t variationsTag = HB_OT_TAG_VVAR;
static const hb_tag_t os2Tag = HB_TAG_NONE;
};
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-base-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-base-table.hh
new file mode 100644
index 00000000000..20b8bd76223
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-base-table.hh
@@ -0,0 +1,655 @@
+/*
+ * Copyright © 2016 Elie Roux <elie.roux@telecom-bretagne.eu>
+ * Copyright © 2018 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_LAYOUT_BASE_TABLE_HH
+#define HB_OT_LAYOUT_BASE_TABLE_HH
+
+#include "hb-open-type-private.hh"
+#include "hb-ot-layout-common-private.hh"
+
+namespace OT {
+
+#define NOT_INDEXED ((unsigned int) -1)
+
+/*
+ * BASE -- The BASE Table
+ */
+
+struct BaseCoordFormat1
+{
+ inline int get_coord (void) const { return coordinate; }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ protected:
+ HBUINT16 format; /* Format identifier--format = 1 */
+ HBINT16 coordinate; /* X or Y value, in design units */
+ public:
+ DEFINE_SIZE_STATIC (4);
+};
+
+struct BaseCoordFormat2
+{
+ inline int get_coord (void) const
+ {
+ /* TODO */
+ return coordinate;
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ protected:
+ HBUINT16 format; /* Format identifier--format = 2 */
+ HBINT16 coordinate; /* X or Y value, in design units */
+ GlyphID referenceGlyph; /* Glyph ID of control glyph */
+ HBUINT16 coordPoint; /* Index of contour point on the
+ * reference glyph */
+ public:
+ DEFINE_SIZE_STATIC (8);
+};
+
+struct BaseCoordFormat3
+{
+ inline int get_coord (void) const
+ {
+ /* TODO */
+ return coordinate;
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) && deviceTable.sanitize (c, this));
+ }
+
+ protected:
+ HBUINT16 format; /* Format identifier--format = 3 */
+ HBINT16 coordinate; /* X or Y value, in design units */
+ OffsetTo<Device> deviceTable; /* Offset to Device table for X or
+ * Y value, from beginning of
+ * BaseCoord table (may be NULL). */
+ public:
+ DEFINE_SIZE_STATIC (6);
+};
+
+struct BaseCoord
+{
+ inline int get_coord (void) const
+ {
+ switch (u.format) {
+ case 1: return u.format1.get_coord ();
+ case 2: return u.format2.get_coord ();
+ case 3: return u.format3.get_coord ();
+ default:return 0;
+ }
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ if (!u.format.sanitize (c)) return_trace (false);
+ switch (u.format) {
+ case 1: return_trace (u.format1.sanitize (c));
+ case 2: return_trace (u.format2.sanitize (c));
+ case 3: return_trace (u.format3.sanitize (c));
+ default:return_trace (false);
+ }
+ }
+
+ protected:
+ union {
+ HBUINT16 format;
+ BaseCoordFormat1 format1;
+ BaseCoordFormat2 format2;
+ BaseCoordFormat3 format3;
+ } u;
+ public:
+ DEFINE_SIZE_UNION (2, format);
+};
+
+struct FeatMinMaxRecord
+{
+ inline int get_min_value (void) const
+ { return (this+minCoord).get_coord(); }
+
+ inline int get_max_value (void) const
+ { return (this+maxCoord).get_coord(); }
+
+ inline const Tag &get_tag () const
+ { return tag; }
+
+ inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ minCoord.sanitize (c, base) &&
+ maxCoord.sanitize (c, base));
+ }
+
+ protected:
+ Tag tag; /* 4-byte feature identification tag--must
+ * match feature tag in FeatureList */
+ OffsetTo<BaseCoord> minCoord; /* Offset to BaseCoord table that defines
+ * the minimum extent value, from beginning
+ * of MinMax table (may be NULL) */
+ OffsetTo<BaseCoord> maxCoord; /* Offset to BaseCoord table that defines
+ * the maximum extent value, from beginning
+ * of MinMax table (may be NULL) */
+ public:
+ DEFINE_SIZE_STATIC (8);
+
+};
+
+struct MinMax
+{
+ inline unsigned int get_feature_tag_index (Tag featureTableTag) const
+ {
+ /* TODO bsearch */
+ unsigned int count = featMinMaxRecords.len;
+ for (unsigned int i = 0; i < count; i++)
+ {
+ Tag tag = featMinMaxRecords[i].get_tag();
+ int cmp = tag.cmp(featureTableTag);
+ if (cmp == 0) return i;
+ if (cmp > 0) return NOT_INDEXED;
+ }
+ return NOT_INDEXED;
+ }
+
+ inline int get_min_value (unsigned int featureTableTagIndex) const
+ {
+ if (featureTableTagIndex == NOT_INDEXED)
+ return (this+minCoord).get_coord();
+ return featMinMaxRecords[featureTableTagIndex].get_min_value();
+ }
+
+ inline int get_max_value (unsigned int featureTableTagIndex) const
+ {
+ if (featureTableTagIndex == NOT_INDEXED)
+ return (this+maxCoord).get_coord();
+ return featMinMaxRecords[featureTableTagIndex].get_max_value();
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ minCoord.sanitize (c, this) &&
+ maxCoord.sanitize (c, this) &&
+ featMinMaxRecords.sanitize (c, this));
+ }
+
+ protected:
+ OffsetTo<BaseCoord> minCoord; /* Offset to BaseCoord table that defines
+ * minimum extent value, from the beginning
+ * of MinMax table (may be NULL) */
+ OffsetTo<BaseCoord> maxCoord; /* Offset to BaseCoord table that defines
+ * maximum extent value, from the beginning
+ * of MinMax table (may be NULL) */
+ ArrayOf<FeatMinMaxRecord>
+ featMinMaxRecords; /* Array of FeatMinMaxRecords, in alphabetical
+ * order by featureTableTag */
+ public:
+ DEFINE_SIZE_ARRAY (6, featMinMaxRecords);
+};
+
+/* TODO... */
+struct BaseLangSysRecord
+{
+ inline const Tag& get_tag(void) const
+ { return baseLangSysTag; }
+
+ inline unsigned int get_feature_tag_index (Tag featureTableTag) const
+ { return (this+minMax).get_feature_tag_index(featureTableTag); }
+
+ inline int get_min_value (unsigned int featureTableTagIndex) const
+ { return (this+minMax).get_min_value(featureTableTagIndex); }
+
+ inline int get_max_value (unsigned int featureTableTagIndex) const
+ { return (this+minMax).get_max_value(featureTableTagIndex); }
+
+ inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ minMax.sanitize (c, base));
+ }
+
+ protected:
+ Tag baseLangSysTag;
+ OffsetTo<MinMax> minMax;
+ public:
+ DEFINE_SIZE_STATIC (6);
+
+};
+
+struct BaseValues
+{
+ inline unsigned int get_default_base_tag_index (void) const
+ { return defaultIndex; }
+
+ inline int get_base_coord (unsigned int baselineTagIndex) const
+ {
+ return (this+baseCoords[baselineTagIndex]).get_coord();
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ defaultIndex <= baseCoordCount &&
+ baseCoords.sanitize (c, this));
+ }
+
+ protected:
+ Index defaultIndex;
+ HBUINT16 baseCoordCount;
+ OffsetArrayOf<BaseCoord> baseCoords;
+ public:
+ DEFINE_SIZE_ARRAY (6, baseCoords);
+
+};
+
+struct BaseScript {
+
+ inline unsigned int get_lang_tag_index (Tag baseLangSysTag) const
+ {
+ Tag tag;
+ int cmp;
+ for (unsigned int i = 0; i < baseLangSysCount; i++) {
+ tag = baseLangSysRecords[i].get_tag();
+ // taking advantage of alphabetical order
+ cmp = tag.cmp(baseLangSysTag);
+ if (cmp == 0) return i;
+ if (cmp > 0) return NOT_INDEXED;
+ }
+ return NOT_INDEXED;
+ }
+
+ inline unsigned int get_feature_tag_index (unsigned int baseLangSysIndex, Tag featureTableTag) const
+ {
+ if (baseLangSysIndex == NOT_INDEXED) {
+ if (unlikely(defaultMinMax)) return NOT_INDEXED;
+ return (this+defaultMinMax).get_feature_tag_index(featureTableTag);
+ }
+ if (unlikely(baseLangSysIndex >= baseLangSysCount)) return NOT_INDEXED;
+ return baseLangSysRecords[baseLangSysIndex].get_feature_tag_index(featureTableTag);
+ }
+
+ inline int get_min_value (unsigned int baseLangSysIndex, unsigned int featureTableTagIndex) const
+ {
+ if (baseLangSysIndex == NOT_INDEXED)
+ return (this+defaultMinMax).get_min_value(featureTableTagIndex);
+ return baseLangSysRecords[baseLangSysIndex].get_max_value(featureTableTagIndex);
+ }
+
+ inline int get_max_value (unsigned int baseLangSysIndex, unsigned int featureTableTagIndex) const
+ {
+ if (baseLangSysIndex == NOT_INDEXED)
+ return (this+defaultMinMax).get_min_value(featureTableTagIndex);
+ return baseLangSysRecords[baseLangSysIndex].get_max_value(featureTableTagIndex);
+ }
+
+ inline unsigned int get_default_base_tag_index (void) const
+ { return (this+baseValues).get_default_base_tag_index(); }
+
+ inline int get_base_coord (unsigned int baselineTagIndex) const
+ { return (this+baseValues).get_base_coord(baselineTagIndex); }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ baseValues.sanitize (c, this) &&
+ defaultMinMax.sanitize (c, this) &&
+ baseLangSysRecords.sanitize (c, this));
+ }
+
+ protected:
+ OffsetTo<BaseValues> baseValues;
+ OffsetTo<MinMax> defaultMinMax;
+ HBUINT16 baseLangSysCount;
+ ArrayOf<BaseLangSysRecord> baseLangSysRecords;
+
+ public:
+ DEFINE_SIZE_ARRAY (8, baseLangSysRecords);
+};
+
+
+struct BaseScriptRecord {
+
+ inline const Tag& get_tag (void) const
+ { return baseScriptTag; }
+
+ inline unsigned int get_default_base_tag_index(void) const
+ { return (this+baseScript).get_default_base_tag_index(); }
+
+ inline int get_base_coord(unsigned int baselineTagIndex) const
+ { return (this+baseScript).get_base_coord(baselineTagIndex); }
+
+ inline unsigned int get_lang_tag_index (Tag baseLangSysTag) const
+ { return (this+baseScript).get_lang_tag_index(baseLangSysTag); }
+
+ inline unsigned int get_feature_tag_index (unsigned int baseLangSysIndex, Tag featureTableTag) const
+ { return (this+baseScript).get_feature_tag_index(baseLangSysIndex, featureTableTag); }
+
+ inline int get_max_value (unsigned int baseLangSysIndex, unsigned int featureTableTagIndex) const
+ { return (this+baseScript).get_max_value(baseLangSysIndex, featureTableTagIndex); }
+
+ inline int get_min_value (unsigned int baseLangSysIndex, unsigned int featureTableTagIndex) const
+ { return (this+baseScript).get_min_value(baseLangSysIndex, featureTableTagIndex); }
+
+ inline bool sanitize (hb_sanitize_context_t *c, const void *base) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ baseScript != Null(OffsetTo<BaseScript>) &&
+ baseScript.sanitize (c, base));
+ }
+
+ protected:
+ Tag baseScriptTag;
+ OffsetTo<BaseScript> baseScript;
+
+ public:
+ DEFINE_SIZE_STATIC (6);
+};
+
+struct BaseScriptList {
+
+ inline unsigned int get_base_script_index (Tag baseScriptTag) const
+ {
+ for (unsigned int i = 0; i < baseScriptCount; i++)
+ if (baseScriptRecords[i].get_tag() == baseScriptTag)
+ return i;
+ return NOT_INDEXED;
+ }
+
+ inline unsigned int get_default_base_tag_index (unsigned int baseScriptIndex) const
+ {
+ if (unlikely(baseScriptIndex >= baseScriptCount)) return NOT_INDEXED;
+ return baseScriptRecords[baseScriptIndex].get_default_base_tag_index();
+ }
+
+ inline int get_base_coord(unsigned int baseScriptIndex, unsigned int baselineTagIndex) const
+ {
+ return baseScriptRecords[baseScriptIndex].get_base_coord(baselineTagIndex);
+ }
+
+ inline unsigned int get_lang_tag_index (unsigned int baseScriptIndex, Tag baseLangSysTag) const
+ {
+ if (unlikely(baseScriptIndex >= baseScriptCount)) return NOT_INDEXED;
+ return baseScriptRecords[baseScriptIndex].get_lang_tag_index(baseLangSysTag);
+ }
+
+ inline unsigned int get_feature_tag_index (unsigned int baseScriptIndex, unsigned int baseLangSysIndex, Tag featureTableTag) const
+ {
+ if (unlikely(baseScriptIndex >= baseScriptCount)) return NOT_INDEXED;
+ return baseScriptRecords[baseScriptIndex].get_feature_tag_index(baseLangSysIndex, featureTableTag);
+ }
+
+ inline int get_max_value (unsigned int baseScriptIndex, unsigned int baseLangSysIndex, unsigned int featureTableTagIndex) const
+ {
+ return baseScriptRecords[baseScriptIndex].get_max_value(baseLangSysIndex, featureTableTagIndex);
+ }
+
+ inline int get_min_value (unsigned int baseScriptIndex, unsigned int baseLangSysIndex, unsigned int featureTableTagIndex) const
+ {
+ return baseScriptRecords[baseScriptIndex].get_min_value(baseLangSysIndex, featureTableTagIndex);
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ baseScriptRecords.sanitize (c, this));
+ }
+
+ protected:
+ HBUINT16 baseScriptCount;
+ ArrayOf<BaseScriptRecord> baseScriptRecords;
+
+ public:
+ DEFINE_SIZE_ARRAY (4, baseScriptRecords);
+
+};
+
+struct BaseTagList
+{
+
+ inline unsigned int get_tag_index(Tag baselineTag) const
+ {
+ for (unsigned int i = 0; i < baseTagCount; i++)
+ if (baselineTags[i] == baselineTag)
+ return i;
+ return NOT_INDEXED;
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ protected:
+ HBUINT16 baseTagCount;
+ SortedArrayOf<Tag> baselineTags;
+
+ public:
+ DEFINE_SIZE_ARRAY (4, baselineTags);
+};
+
+struct Axis
+{
+
+ inline unsigned int get_base_tag_index(Tag baselineTag) const
+ {
+ if (unlikely(baseTagList == Null(OffsetTo<BaseTagList>))) return NOT_INDEXED;
+ return (this+baseTagList).get_tag_index(baselineTag);
+ }
+
+ inline unsigned int get_default_base_tag_index_for_script_index (unsigned int baseScriptIndex) const
+ {
+ if (unlikely(baseScriptList == Null(OffsetTo<BaseScriptList>))) return NOT_INDEXED;
+ return (this+baseScriptList).get_default_base_tag_index(baseScriptIndex);
+ }
+
+ inline int get_base_coord(unsigned int baseScriptIndex, unsigned int baselineTagIndex) const
+ {
+ return (this+baseScriptList).get_base_coord(baseScriptIndex, baselineTagIndex);
+ }
+
+ inline unsigned int get_lang_tag_index (unsigned int baseScriptIndex, Tag baseLangSysTag) const
+ {
+ if (unlikely(baseScriptList == Null(OffsetTo<BaseScriptList>))) return NOT_INDEXED;
+ return (this+baseScriptList).get_lang_tag_index(baseScriptIndex, baseLangSysTag);
+ }
+
+ inline unsigned int get_feature_tag_index (unsigned int baseScriptIndex, unsigned int baseLangSysIndex, Tag featureTableTag) const
+ {
+ if (unlikely(baseScriptList == Null(OffsetTo<BaseScriptList>))) return NOT_INDEXED;
+ return (this+baseScriptList).get_feature_tag_index(baseScriptIndex, baseLangSysIndex, featureTableTag);
+ }
+
+ inline int get_max_value (unsigned int baseScriptIndex, unsigned int baseLangSysIndex, unsigned int featureTableTagIndex) const
+ {
+ return (this+baseScriptList).get_max_value(baseScriptIndex, baseLangSysIndex, featureTableTagIndex);
+ }
+
+ inline int get_min_value (unsigned int baseScriptIndex, unsigned int baseLangSysIndex, unsigned int featureTableTagIndex) const
+ {
+ return (this+baseScriptList).get_min_value(baseScriptIndex, baseLangSysIndex, featureTableTagIndex);
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ baseTagList.sanitize (c, this) &&
+ baseScriptList.sanitize (c, this));
+ }
+
+ protected:
+ OffsetTo<BaseTagList> baseTagList;
+ OffsetTo<BaseScriptList> baseScriptList;
+
+ public:
+ DEFINE_SIZE_STATIC (4);
+};
+
+struct BASE
+{
+ static const hb_tag_t tableTag = HB_OT_TAG_BASE;
+
+ inline bool has_vert_axis(void)
+ { return vertAxis != Null(OffsetTo<Axis>); }
+
+ inline bool has_horiz_axis(void)
+ { return horizAxis != Null(OffsetTo<Axis>); }
+
+ // horizontal axis base coords:
+
+ inline unsigned int get_horiz_base_tag_index(Tag baselineTag) const
+ {
+ if (unlikely(horizAxis == Null(OffsetTo<Axis>))) return NOT_INDEXED;
+ return (this+horizAxis).get_base_tag_index(baselineTag);
+ }
+
+ inline unsigned int get_horiz_default_base_tag_index_for_script_index (unsigned int baseScriptIndex) const
+ {
+ if (unlikely(horizAxis == Null(OffsetTo<Axis>))) return NOT_INDEXED;
+ return (this+horizAxis).get_default_base_tag_index_for_script_index(baseScriptIndex);
+ }
+
+ inline int get_horiz_base_coord(unsigned int baseScriptIndex, unsigned int baselineTagIndex) const
+ {
+ return (this+horizAxis).get_base_coord(baseScriptIndex, baselineTagIndex);
+ }
+
+ // vertical axis base coords:
+
+ inline unsigned int get_vert_base_tag_index(Tag baselineTag) const
+ {
+ if (unlikely(vertAxis == Null(OffsetTo<Axis>))) return NOT_INDEXED;
+ return (this+vertAxis).get_base_tag_index(baselineTag);
+ }
+
+ inline unsigned int get_vert_default_base_tag_index_for_script_index (unsigned int baseScriptIndex) const
+ {
+ if (unlikely(vertAxis == Null(OffsetTo<Axis>))) return NOT_INDEXED;
+ return (this+vertAxis).get_default_base_tag_index_for_script_index(baseScriptIndex);
+ }
+
+ inline int get_vert_base_coord(unsigned int baseScriptIndex, unsigned int baselineTagIndex) const
+ {
+ return (this+vertAxis).get_base_coord(baseScriptIndex, baselineTagIndex);
+ }
+
+ // horizontal axis min/max coords:
+
+ inline unsigned int get_horiz_lang_tag_index (unsigned int baseScriptIndex, Tag baseLangSysTag) const
+ {
+ if (unlikely(horizAxis == Null(OffsetTo<Axis>))) return NOT_INDEXED;
+ return (this+horizAxis).get_lang_tag_index (baseScriptIndex, baseLangSysTag);
+ }
+
+ inline unsigned int get_horiz_feature_tag_index (unsigned int baseScriptIndex, unsigned int baseLangSysIndex, Tag featureTableTag) const
+ {
+ if (unlikely(horizAxis == Null(OffsetTo<Axis>))) return NOT_INDEXED;
+ return (this+horizAxis).get_feature_tag_index (baseScriptIndex, baseLangSysIndex, featureTableTag);
+ }
+
+ inline int get_horiz_max_value (unsigned int baseScriptIndex, unsigned int baseLangSysIndex, unsigned int featureTableTagIndex) const
+ {
+ return (this+horizAxis).get_max_value (baseScriptIndex, baseLangSysIndex, featureTableTagIndex);
+ }
+
+ inline int get_horiz_min_value (unsigned int baseScriptIndex, unsigned int baseLangSysIndex, unsigned int featureTableTagIndex) const
+ {
+ return (this+horizAxis).get_min_value (baseScriptIndex, baseLangSysIndex, featureTableTagIndex);
+ }
+
+ // vertical axis min/max coords:
+
+ inline unsigned int get_vert_lang_tag_index (unsigned int baseScriptIndex, Tag baseLangSysTag) const
+ {
+ if (unlikely(vertAxis == Null(OffsetTo<Axis>))) return NOT_INDEXED;
+ return (this+vertAxis).get_lang_tag_index (baseScriptIndex, baseLangSysTag);
+ }
+
+ inline unsigned int get_vert_feature_tag_index (unsigned int baseScriptIndex, unsigned int baseLangSysIndex, Tag featureTableTag) const
+ {
+ if (unlikely(vertAxis == Null(OffsetTo<Axis>))) return NOT_INDEXED;
+ return (this+vertAxis).get_feature_tag_index (baseScriptIndex, baseLangSysIndex, featureTableTag);
+ }
+
+ inline int get_vert_max_value (unsigned int baseScriptIndex, unsigned int baseLangSysIndex, unsigned int featureTableTagIndex) const
+ {
+ return (this+vertAxis).get_max_value (baseScriptIndex, baseLangSysIndex, featureTableTagIndex);
+ }
+
+ inline int get_vert_min_value (unsigned int baseScriptIndex, unsigned int baseLangSysIndex, unsigned int featureTableTagIndex) const
+ {
+ return (this+vertAxis).get_min_value (baseScriptIndex, baseLangSysIndex, featureTableTagIndex);
+ }
+
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this) &&
+ likely (version.major == 1) &&
+ horizAxis.sanitize (c, this) &&
+ vertAxis.sanitize (c, this) &&
+ (version.to_int () < 0x00010001u || varStore.sanitize (c, this)));
+ }
+
+ protected:
+ FixedVersion<> version;
+ OffsetTo<Axis> horizAxis;
+ OffsetTo<Axis> vertAxis;
+ LOffsetTo<VariationStore>
+ varStore; /* Offset to the table of Item Variation
+ * Store--from beginning of BASE
+ * header (may be NULL). Introduced
+ * in version 0x00010001. */
+ public:
+ DEFINE_SIZE_MIN (8);
+};
+
+
+} /* namespace OT */
+
+
+#endif /* HB_OT_LAYOUT_BASE_TABLE_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-common-private.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-common-private.hh
index 31c436a09dd..c5e7f5217c9 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-common-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-common-private.hh
@@ -299,7 +299,7 @@ struct FeatureParamsSize
* better.
*
* Assume that the offset to the size feature is according to specification,
- * and make the following value checks. If it fails, assume the the size
+ * and make the following value checks. If it fails, assume the size
* feature is calculated as versions of MakeOTF before the AFDKO 2.0 built it.
* If this fails, reject the 'size' feature. The older makeOTF's calculated the
* offset from the beginning of the FeatureList table, rather than from the
@@ -700,7 +700,7 @@ struct CoverageFormat1
if (unlikely (!c->extend (glyphArray))) return_trace (false);
for (unsigned int i = 0; i < num_glyphs; i++)
glyphArray[i] = glyphs[i];
- glyphs.advance (num_glyphs);
+ glyphs += num_glyphs;
return_trace (true);
}
@@ -789,7 +789,7 @@ struct CoverageFormat2
} else {
rangeRecord[range].end = glyphs[i];
}
- glyphs.advance (num_glyphs);
+ glyphs += num_glyphs;
return_trace (true);
}
@@ -1057,7 +1057,7 @@ struct ClassDefFormat1
if (klass == 0)
{
/* Match if there's any glyph that is not listed! */
- hb_codepoint_t g = -1;
+ hb_codepoint_t g = HB_SET_VALUE_INVALID;
if (!hb_set_next (glyphs, &g))
return false;
if (g < startGlyph)
@@ -1128,7 +1128,7 @@ struct ClassDefFormat2
if (klass == 0)
{
/* Match if there's any glyph that is not listed! */
- hb_codepoint_t g = (hb_codepoint_t) -1;
+ hb_codepoint_t g = HB_SET_VALUE_INVALID;
for (unsigned int i = 0; i < count; i++)
{
if (!hb_set_next (glyphs, &g))
@@ -1137,7 +1137,7 @@ struct ClassDefFormat2
return true;
g = rangeRecord[i].end;
}
- if (g != (hb_codepoint_t) -1 && hb_set_next (glyphs, &g))
+ if (g != HB_SET_VALUE_INVALID && hb_set_next (glyphs, &g))
return true;
/* Fall through. */
}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gdef-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gdef-table.hh
index aad7d60290d..2d6c66e6c99 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gdef-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gdef-table.hh
@@ -110,7 +110,7 @@ struct CaretValueFormat1
protected:
HBUINT16 caretValueFormat; /* Format identifier--format = 1 */
- HBINT16 coordinate; /* X or Y value, in design units */
+ FWORD coordinate; /* X or Y value, in design units */
public:
DEFINE_SIZE_STATIC (4);
};
@@ -161,7 +161,7 @@ struct CaretValueFormat3
protected:
HBUINT16 caretValueFormat; /* Format identifier--format = 3 */
- HBINT16 coordinate; /* X or Y value, in design units */
+ FWORD coordinate; /* X or Y value, in design units */
OffsetTo<Device>
deviceTable; /* Offset to Device table for X or Y
* value--from beginning of CaretValue
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gpos-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gpos-table.hh
index 3ef3d30b084..46ffcc66883 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gpos-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gpos-table.hh
@@ -99,7 +99,7 @@ struct ValueFormat : HBUINT16
#endif
inline unsigned int get_len (void) const
- { return _hb_popcount32 ((unsigned int) *this); }
+ { return _hb_popcount ((unsigned int) *this); }
inline unsigned int get_size (void) const
{ return get_len () * Value::static_size; }
@@ -248,8 +248,8 @@ struct AnchorFormat1
protected:
HBUINT16 format; /* Format identifier--format = 1 */
- HBINT16 xCoordinate; /* Horizontal value--in design units */
- HBINT16 yCoordinate; /* Vertical value--in design units */
+ FWORD xCoordinate; /* Horizontal value--in design units */
+ FWORD yCoordinate; /* Vertical value--in design units */
public:
DEFINE_SIZE_STATIC (6);
};
@@ -279,8 +279,8 @@ struct AnchorFormat2
protected:
HBUINT16 format; /* Format identifier--format = 2 */
- HBINT16 xCoordinate; /* Horizontal value--in design units */
- HBINT16 yCoordinate; /* Vertical value--in design units */
+ FWORD xCoordinate; /* Horizontal value--in design units */
+ FWORD yCoordinate; /* Vertical value--in design units */
HBUINT16 anchorPoint; /* Index to glyph contour point */
public:
DEFINE_SIZE_STATIC (8);
@@ -309,8 +309,8 @@ struct AnchorFormat3
protected:
HBUINT16 format; /* Format identifier--format = 3 */
- HBINT16 xCoordinate; /* Horizontal value--in design units */
- HBINT16 yCoordinate; /* Vertical value--in design units */
+ FWORD xCoordinate; /* Horizontal value--in design units */
+ FWORD yCoordinate; /* Vertical value--in design units */
OffsetTo<Device>
xDeviceTable; /* Offset to Device table for X
* coordinate-- from beginning of
@@ -1072,9 +1072,17 @@ struct MarkBasePosFormat1
skippy_iter.set_lookup_props (LookupFlag::IgnoreMarks);
do {
if (!skippy_iter.prev ()) return_trace (false);
- /* We only want to attach to the first of a MultipleSubst sequence. Reject others. */
+ /* We only want to attach to the first of a MultipleSubst sequence.
+ * https://github.com/harfbuzz/harfbuzz/issues/740
+ * Reject others. */
if (!_hb_glyph_info_multiplied (&buffer->info[skippy_iter.idx]) ||
- 0 == _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx]))
+ 0 == _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx]) ||
+ (skippy_iter.idx == 0 ||
+ _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]) !=
+ _hb_glyph_info_get_lig_comp (&buffer->info[skippy_iter.idx - 1]) + 1
+ ))
break;
skippy_iter.reject ();
} while (1);
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsub-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsub-table.hh
index 263e0a6e102..5f67aed21ed 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsub-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsub-table.hh
@@ -114,7 +114,7 @@ struct SingleSubstFormat1
OffsetTo<Coverage>
coverage; /* Offset to Coverage table--from
* beginning of Substitution table */
- HBINT16 deltaGlyphID; /* Add to original GlyphID to get
+ HBINT16 deltaGlyphID; /* Add to original GlyphID to get
* substitute GlyphID */
public:
DEFINE_SIZE_STATIC (6);
@@ -386,7 +386,7 @@ struct MultipleSubstFormat1
if (unlikely (!sequence[i].serialize (c, this).serialize (c,
substitute_glyphs_list,
substitute_len_list[i]))) return_trace (false);
- substitute_len_list.advance (num_glyphs);
+ substitute_len_list += num_glyphs;
if (unlikely (!coverage.serialize (c, this).serialize (c, glyphs, num_glyphs))) return_trace (false);
return_trace (true);
}
@@ -536,7 +536,7 @@ struct AlternateSubstFormat1
if (unlikely (!alternateSet[i].serialize (c, this).serialize (c,
alternate_glyphs_list,
alternate_len_list[i]))) return_trace (false);
- alternate_len_list.advance (num_glyphs);
+ alternate_len_list += num_glyphs;
if (unlikely (!coverage.serialize (c, this).serialize (c, glyphs, num_glyphs))) return_trace (false);
return_trace (true);
}
@@ -757,8 +757,8 @@ struct LigatureSet
ligatures[i],
component_list,
component_count_list[i]))) return_trace (false);
- ligatures.advance (num_ligatures);
- component_count_list.advance (num_ligatures);
+ ligatures += num_ligatures;
+ component_count_list += num_ligatures;
return_trace (true);
}
@@ -850,7 +850,7 @@ struct LigatureSubstFormat1
component_count_list,
ligature_per_first_glyph_count_list[i],
component_list))) return_trace (false);
- ligature_per_first_glyph_count_list.advance (num_first_glyphs);
+ ligature_per_first_glyph_count_list += num_first_glyphs;
if (unlikely (!coverage.serialize (c, this).serialize (c, first_glyphs, num_first_glyphs))) return_trace (false);
return_trace (true);
}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos-private.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos-private.hh
index 8a005f5a27a..90546344d69 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-gsubgpos-private.hh
@@ -1212,7 +1212,7 @@ struct Rule
lookupCount.sanitize (c) &&
c->check_range (inputZ,
inputZ[0].static_size * inputCount +
- lookupRecordX[0].static_size * lookupCount));
+ LookupRecord::static_size * lookupCount));
}
protected:
@@ -1222,10 +1222,10 @@ struct Rule
HBUINT16 lookupCount; /* Number of LookupRecords */
HBUINT16 inputZ[VAR]; /* Array of match inputs--start with
* second glyph */
- LookupRecord lookupRecordX[VAR]; /* Array of LookupRecords--in
+/*LookupRecord lookupRecordX[VAR];*/ /* Array of LookupRecords--in
* design order */
public:
- DEFINE_SIZE_ARRAY2 (4, inputZ, lookupRecordX);
+ DEFINE_SIZE_ARRAY (4, inputZ);
};
struct RuleSet
@@ -1556,10 +1556,10 @@ struct ContextFormat3
OffsetTo<Coverage>
coverageZ[VAR]; /* Array of offsets to Coverage
* table in glyph sequence order */
- LookupRecord lookupRecordX[VAR]; /* Array of LookupRecords--in
+/*LookupRecord lookupRecordX[VAR];*/ /* Array of LookupRecords--in
* design order */
public:
- DEFINE_SIZE_ARRAY2 (6, coverageZ, lookupRecordX);
+ DEFINE_SIZE_ARRAY (6, coverageZ);
};
struct Context
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-private.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-private.hh
index 60119629cf5..870ba73fa88 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout-private.hh
@@ -122,6 +122,9 @@ hb_ot_layout_position_finish_offsets (hb_font_t *font,
*/
namespace OT {
+ struct BASE;
+ struct COLR;
+ struct CPAL;
struct GDEF;
struct GSUB;
struct GPOS;
@@ -131,7 +134,10 @@ namespace OT {
}
namespace AAT {
+ struct ankr;
+ struct kerx;
struct morx;
+ struct trak;
}
struct hb_ot_layout_lookup_accelerator_t
@@ -166,10 +172,16 @@ struct hb_ot_layout_t
const struct OT::GPOS *gpos;
/* TODO Move the following out of this struct. */
+ OT::hb_lazy_table_loader_t<struct OT::BASE> base;
+ OT::hb_lazy_table_loader_t<struct OT::COLR> colr;
+ OT::hb_lazy_table_loader_t<struct OT::CPAL> cpal;
OT::hb_lazy_table_loader_t<struct OT::MATH> math;
OT::hb_lazy_table_loader_t<struct OT::fvar> fvar;
OT::hb_lazy_table_loader_t<struct OT::avar> avar;
+ OT::hb_lazy_table_loader_t<struct AAT::ankr> ankr;
+ OT::hb_lazy_table_loader_t<struct AAT::kerx> kerx;
OT::hb_lazy_table_loader_t<struct AAT::morx> morx;
+ OT::hb_lazy_table_loader_t<struct AAT::trak> trak;
unsigned int gsub_lookup_count;
unsigned int gpos_lookup_count;
@@ -359,6 +371,28 @@ _hb_glyph_info_get_modified_combining_class (const hb_glyph_info_t *info)
return _hb_glyph_info_is_unicode_mark (info) ? info->unicode_props()>>8 : 0;
}
+
+/* Loop over grapheme. Based on foreach_cluster(). */
+#define foreach_grapheme(buffer, start, end) \
+ for (unsigned int \
+ _count = buffer->len, \
+ start = 0, end = _count ? _next_grapheme (buffer, 0) : 0; \
+ start < _count; \
+ start = end, end = _next_grapheme (buffer, start))
+
+static inline unsigned int
+_next_grapheme (hb_buffer_t *buffer, unsigned int start)
+{
+ hb_glyph_info_t *info = buffer->info;
+ unsigned int count = buffer->len;
+
+ while (++start < count && _hb_glyph_info_is_unicode_mark (&info[start]))
+ ;
+
+ return start;
+}
+
+
#define info_cc(info) (_hb_glyph_info_get_modified_combining_class (&(info)))
static inline bool
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.cc
index 919ecbb4b57..1c9e950b29a 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.cc
@@ -31,16 +31,21 @@
#include "hb-open-type-private.hh"
#include "hb-ot-layout-private.hh"
+#include "hb-ot-layout-base-table.hh"
#include "hb-ot-layout-gdef-table.hh"
#include "hb-ot-layout-gsub-table.hh"
#include "hb-ot-layout-gpos-table.hh"
#include "hb-ot-layout-jstf-table.hh" // Just so we compile it; unused otherwise.
#include "hb-ot-name-table.hh" // Just so we compile it; unused otherwise.
+#include "hb-ot-color-colr-table.hh"
+#include "hb-ot-color-cpal-table.hh"
#include "hb-ot-map-private.hh"
+#ifndef HB_NO_VISIBILITY
const void * const OT::_hb_NullPool[HB_NULL_POOL_SIZE / sizeof (void *)] = {};
+#endif
hb_ot_layout_t *
@@ -59,10 +64,16 @@ _hb_ot_layout_create (hb_face_t *face)
layout->gpos_blob = OT::Sanitizer<OT::GPOS>().sanitize (face->reference_table (HB_OT_TAG_GPOS));
layout->gpos = OT::Sanitizer<OT::GPOS>::lock_instance (layout->gpos_blob);
+ layout->base.init (face);
+ layout->colr.init (face);
+ layout->cpal.init (face);
layout->math.init (face);
layout->fvar.init (face);
layout->avar.init (face);
+ layout->ankr.init (face);
+ layout->kerx.init (face);
layout->morx.init (face);
+ layout->trak.init (face);
{
/*
@@ -195,10 +206,12 @@ _hb_ot_layout_create (hb_face_t *face)
void
_hb_ot_layout_destroy (hb_ot_layout_t *layout)
{
- for (unsigned int i = 0; i < layout->gsub_lookup_count; i++)
- layout->gsub_accels[i].fini ();
- for (unsigned int i = 0; i < layout->gpos_lookup_count; i++)
- layout->gpos_accels[i].fini ();
+ if (layout->gsub_accels)
+ for (unsigned int i = 0; i < layout->gsub_lookup_count; i++)
+ layout->gsub_accels[i].fini ();
+ if (layout->gpos_accels)
+ for (unsigned int i = 0; i < layout->gpos_lookup_count; i++)
+ layout->gpos_accels[i].fini ();
free (layout->gsub_accels);
free (layout->gpos_accels);
@@ -207,14 +220,28 @@ _hb_ot_layout_destroy (hb_ot_layout_t *layout)
hb_blob_destroy (layout->gsub_blob);
hb_blob_destroy (layout->gpos_blob);
+ layout->base.fini ();
+ layout->colr.fini ();
+ layout->cpal.fini ();
layout->math.fini ();
layout->fvar.fini ();
layout->avar.fini ();
+ layout->ankr.fini ();
+ layout->kerx.fini ();
layout->morx.fini ();
+ layout->trak.fini ();
free (layout);
}
+// static inline const OT::BASE&
+// _get_base (hb_face_t *face)
+// {
+// if (unlikely (!hb_ot_shaper_face_data_ensure (face))) return OT::Null(OT::BASE);
+// hb_ot_layout_t * layout = hb_ot_layout_from_face (face);
+// return *(layout->base.get ());
+// }
+
static inline const OT::GDEF&
_get_gdef (hb_face_t *face)
{
@@ -1253,10 +1280,34 @@ void hb_ot_map_t::position (const hb_ot_shape_plan_t *plan, hb_font_t *font, hb_
apply (proxy, plan, font, buffer);
}
-HB_INTERNAL void
+void
hb_ot_layout_substitute_lookup (OT::hb_ot_apply_context_t *c,
const OT::SubstLookup &lookup,
const hb_ot_layout_lookup_accelerator_t &accel)
{
apply_string<GSUBProxy> (c, lookup, accel);
}
+
+
+
+
+/*
+ * OT::BASE
+ */
+
+// /**
+// * hb_ot_base_has_data:
+// * @face: #hb_face_t to test
+// *
+// * This function allows to verify the presence of an OpenType BASE table on the
+// * face.
+// *
+// * Return value: true if face has a BASE table, false otherwise
+// *
+// * Since: XXX
+// **/
+// hb_bool_t
+// hb_ot_base_has_data (hb_face_t *face)
+// {
+// return &_get_base (face) != &OT::Null(OT::BASE);
+// }
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.h b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.h
index 9861f0fc7bb..85938ba123e 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-layout.h
@@ -38,6 +38,7 @@
HB_BEGIN_DECLS
+#define HB_OT_TAG_BASE HB_TAG('B','A','S','E')
#define HB_OT_TAG_GDEF HB_TAG('G','D','E','F')
#define HB_OT_TAG_GSUB HB_TAG('G','S','U','B')
#define HB_OT_TAG_GPOS HB_TAG('G','P','O','S')
@@ -316,6 +317,22 @@ hb_ot_layout_get_size_params (hb_face_t *face,
unsigned int *range_end /* OUT. May be NULL */);
+/*
+ * BASE
+ */
+#if 0
+
+#define HB_OT_TAG_BASE_HANG HB_TAG('h','a','n','g')
+#define HB_OT_TAG_BASE_ICFB HB_TAG('i','c','f','b')
+#define HB_OT_TAG_BASE_ICFT HB_TAG('i','c','f','t')
+#define HB_OT_TAG_BASE_IDEO HB_TAG('i','d','e','o')
+#define HB_OT_TAG_BASE_IDTB HB_TAG('i','d','t','b')
+#define HB_OT_TAG_BASE_MATH HB_TAG('m','a','t','h')
+#define HB_OT_TAG_BASE_ROMN HB_TAG('r','o','m','n')
+
+#endif
+
+
HB_END_DECLS
#endif /* HB_OT_LAYOUT_H */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-map-private.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-map-private.hh
index a80ac720fe1..e6bd8ea5ef3 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-map-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-map-private.hh
@@ -84,28 +84,28 @@ struct hb_ot_map_t
inline hb_mask_t get_global_mask (void) const { return global_mask; }
inline hb_mask_t get_mask (hb_tag_t feature_tag, unsigned int *shift = nullptr) const {
- const feature_map_t *map = features.bsearch (&feature_tag);
+ const feature_map_t *map = features.bsearch (feature_tag);
if (shift) *shift = map ? map->shift : 0;
return map ? map->mask : 0;
}
inline bool needs_fallback (hb_tag_t feature_tag) const {
- const feature_map_t *map = features.bsearch (&feature_tag);
+ const feature_map_t *map = features.bsearch (feature_tag);
return map ? map->needs_fallback : false;
}
inline hb_mask_t get_1_mask (hb_tag_t feature_tag) const {
- const feature_map_t *map = features.bsearch (&feature_tag);
+ const feature_map_t *map = features.bsearch (feature_tag);
return map ? map->_1_mask : 0;
}
inline unsigned int get_feature_index (unsigned int table_index, hb_tag_t feature_tag) const {
- const feature_map_t *map = features.bsearch (&feature_tag);
+ const feature_map_t *map = features.bsearch (feature_tag);
return map ? map->index[table_index] : HB_OT_LAYOUT_NO_FEATURE_INDEX;
}
inline unsigned int get_feature_stage (unsigned int table_index, hb_tag_t feature_tag) const {
- const feature_map_t *map = features.bsearch (&feature_tag);
+ const feature_map_t *map = features.bsearch (feature_tag);
return map ? map->stage[table_index] : (unsigned int) -1;
}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-map.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-map.cc
index 6f07a7e2281..54b0ce377d7 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-map.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-map.cc
@@ -139,7 +139,7 @@ hb_ot_map_builder_t::compile (hb_ot_map_t &m,
{
static_assert ((!(HB_GLYPH_FLAG_DEFINED & (HB_GLYPH_FLAG_DEFINED + 1))), "");
unsigned int global_bit_mask = HB_GLYPH_FLAG_DEFINED + 1;
- unsigned int global_bit_shift = _hb_popcount32 (HB_GLYPH_FLAG_DEFINED);
+ unsigned int global_bit_shift = _hb_popcount (HB_GLYPH_FLAG_DEFINED);
m.global_mask = global_bit_mask;
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-maxp-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-maxp-table.hh
index 54b4f11ce65..881dedad54c 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-maxp-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-maxp-table.hh
@@ -28,7 +28,7 @@
#define HB_OT_MAXP_TABLE_HH
#include "hb-open-type-private.hh"
-
+#include "hb-subset-plan.hh"
namespace OT {
@@ -39,28 +39,104 @@ namespace OT {
#define HB_OT_TAG_maxp HB_TAG('m','a','x','p')
+struct maxpV1Tail
+{
+ inline bool sanitize (hb_sanitize_context_t *c) const
+ {
+ TRACE_SANITIZE (this);
+ return_trace (c->check_struct (this));
+ }
+
+ HBUINT16 maxPoints; /* Maximum points in a non-composite glyph. */
+ HBUINT16 maxContours; /* Maximum contours in a non-composite glyph. */
+ HBUINT16 maxCompositePoints; /* Maximum points in a composite glyph. */
+ HBUINT16 maxCompositeContours; /* Maximum contours in a composite glyph. */
+ HBUINT16 maxZones; /* 1 if instructions do not use the twilight zone (Z0),
+ * or 2 if instructions do use Z0; should be set to 2 in
+ * most cases. */
+ HBUINT16 maxTwilightPoints; /* Maximum points used in Z0. */
+ HBUINT16 maxStorage; /* Number of Storage Area locations. */
+ HBUINT16 maxFunctionDefs; /* Number of FDEFs, equal to the highest function number + 1. */
+ HBUINT16 maxInstructionDefs; /* Number of IDEFs. */
+ HBUINT16 maxStackElements; /* Maximum stack depth. (This includes Font and CVT
+ * Programs, as well as the instructions for each glyph.) */
+ HBUINT16 maxSizeOfInstructions; /* Maximum byte count for glyph instructions. */
+ HBUINT16 maxComponentElements; /* Maximum number of components referenced at
+ * "top level" for any composite glyph. */
+ HBUINT16 maxComponentDepth; /* Maximum levels of recursion; 1 for simple components. */
+ public:
+ DEFINE_SIZE_STATIC (26);
+};
+
+
struct maxp
{
- static const hb_tag_t tableTag = HB_OT_TAG_maxp;
+ static const hb_tag_t tableTag = HB_OT_TAG_maxp;
inline unsigned int get_num_glyphs (void) const
{
return numGlyphs;
}
+ inline void set_num_glyphs (unsigned int count)
+ {
+ numGlyphs.set (count);
+ }
+
inline bool sanitize (hb_sanitize_context_t *c) const
{
TRACE_SANITIZE (this);
- return_trace (c->check_struct (this) &&
- likely (version.major == 1 ||
- (version.major == 0 && version.minor == 0x5000u)));
+ if (unlikely (!c->check_struct (this)))
+ return_trace (false);
+
+ if (version.major == 1)
+ {
+ const maxpV1Tail &v1 = StructAfter<maxpV1Tail> (*this);
+ return v1.sanitize (c);
+ }
+ return_trace (likely (version.major == 0 && version.minor == 0x5000u));
+ }
+
+ inline bool subset (hb_subset_plan_t *plan) const
+ {
+ hb_blob_t *maxp_blob = OT::Sanitizer<OT::maxp>().sanitize (hb_face_reference_table (plan->source, HB_OT_TAG_maxp));
+ hb_blob_t *maxp_prime_blob = hb_blob_copy_writable_or_fail (maxp_blob);
+ hb_blob_destroy (maxp_blob);
+
+ if (unlikely (!maxp_prime_blob)) {
+ return false;
+ }
+ OT::maxp *maxp_prime = (OT::maxp *) hb_blob_get_data (maxp_prime_blob, nullptr);
+
+ maxp_prime->set_num_glyphs (plan->gids_to_retain_sorted.len);
+ if (plan->drop_hints)
+ drop_hint_fields (plan, maxp_prime);
+
+ bool result = hb_subset_plan_add_table(plan, HB_OT_TAG_maxp, maxp_prime_blob);
+ hb_blob_destroy (maxp_prime_blob);
+ return result;
+ }
+
+ static inline void drop_hint_fields (hb_subset_plan_t *plan, OT::maxp *maxp_prime)
+ {
+ if (maxp_prime->version.major == 1)
+ {
+ maxpV1Tail &v1 = StructAfter<maxpV1Tail> (*maxp_prime);
+ v1.maxZones.set (1);
+ v1.maxTwilightPoints.set (0);
+ v1.maxStorage.set (0);
+ v1.maxFunctionDefs.set (0);
+ v1.maxInstructionDefs.set (0);
+ v1.maxStackElements.set (0);
+ v1.maxSizeOfInstructions.set (0);
+ }
}
- /* We only implement version 0.5 as none of the extra fields in version 1.0 are useful. */
protected:
FixedVersion<>version; /* Version of the maxp table (0.5 or 1.0),
* 0x00005000u or 0x00010000u. */
HBUINT16 numGlyphs; /* The number of glyphs in the font. */
+/*maxpV1Tail v1Tail[VAR]; */
public:
DEFINE_SIZE_STATIC (6);
};
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-os2-table.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-os2-table.hh
index 5bed47013ea..6cb8d494958 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-os2-table.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-os2-table.hh
@@ -28,7 +28,7 @@
#define HB_OT_OS2_TABLE_HH
#include "hb-open-type-private.hh"
-
+#include "hb-ot-os2-unicode-ranges.hh"
namespace OT {
@@ -49,51 +49,127 @@ struct os2
return_trace (c->check_struct (this));
}
+ inline bool subset (hb_subset_plan_t *plan) const
+ {
+ hb_blob_t *os2_blob = OT::Sanitizer<OT::os2>().sanitize (hb_face_reference_table (plan->source, HB_OT_TAG_os2));
+ hb_blob_t *os2_prime_blob = hb_blob_create_sub_blob (os2_blob, 0, -1);
+ // TODO(grieger): move to hb_blob_copy_writable_or_fail
+ hb_blob_destroy (os2_blob);
+
+ OT::os2 *os2_prime = (OT::os2 *) hb_blob_get_data_writable (os2_prime_blob, nullptr);
+ if (unlikely (!os2_prime)) {
+ hb_blob_destroy (os2_prime_blob);
+ return false;
+ }
+
+ uint16_t min_cp, max_cp;
+ find_min_and_max_codepoint (plan->codepoints, &min_cp, &max_cp);
+ os2_prime->usFirstCharIndex.set (min_cp);
+ os2_prime->usLastCharIndex.set (max_cp);
+
+ _update_unicode_ranges (plan->codepoints, os2_prime->ulUnicodeRange);
+ bool result = hb_subset_plan_add_table(plan, HB_OT_TAG_os2, os2_prime_blob);
+
+ hb_blob_destroy (os2_prime_blob);
+ return result;
+ }
+
+ inline void _update_unicode_ranges (const hb_prealloced_array_t<hb_codepoint_t> &codepoints,
+ HBUINT32 ulUnicodeRange[4]) const
+ {
+ for (unsigned int i = 0; i < 4; i++)
+ ulUnicodeRange[i].set (0);
+
+ for (unsigned int i = 0; i < codepoints.len; i++)
+ {
+ hb_codepoint_t cp = codepoints[i];
+ unsigned int bit = hb_get_unicode_range_bit (cp);
+ if (bit < 128)
+ {
+ unsigned int block = bit / 32;
+ unsigned int bit_in_block = bit % 32;
+ unsigned int mask = 1 << bit_in_block;
+ ulUnicodeRange[block].set (ulUnicodeRange[block] | mask);
+ }
+ if (cp >= 0x10000 && cp <= 0x110000)
+ {
+ /* the spec says that bit 57 ("Non Plane 0") implies that there's
+ at least one codepoint beyond the BMP; so I also include all
+ the non-BMP codepoints here */
+ ulUnicodeRange[1].set (ulUnicodeRange[1] | (1 << 25));
+ }
+ }
+ }
+
+ static inline void find_min_and_max_codepoint (const hb_prealloced_array_t<hb_codepoint_t> &codepoints,
+ uint16_t *min_cp, /* OUT */
+ uint16_t *max_cp /* OUT */)
+ {
+ hb_codepoint_t min = -1, max = 0;
+
+ for (unsigned int i = 0; i < codepoints.len; i++)
+ {
+ hb_codepoint_t cp = codepoints[i];
+ if (cp < min)
+ min = cp;
+ if (cp > max)
+ max = cp;
+ }
+
+ if (min > 0xFFFF)
+ min = 0xFFFF;
+ if (max > 0xFFFF)
+ max = 0xFFFF;
+
+ *min_cp = min;
+ *max_cp = max;
+ }
+
public:
HBUINT16 version;
/* Version 0 */
- HBINT16 xAvgCharWidth;
+ HBINT16 xAvgCharWidth;
HBUINT16 usWeightClass;
HBUINT16 usWidthClass;
HBUINT16 fsType;
- HBINT16 ySubscriptXSize;
- HBINT16 ySubscriptYSize;
- HBINT16 ySubscriptXOffset;
- HBINT16 ySubscriptYOffset;
- HBINT16 ySuperscriptXSize;
- HBINT16 ySuperscriptYSize;
- HBINT16 ySuperscriptXOffset;
- HBINT16 ySuperscriptYOffset;
- HBINT16 yStrikeoutSize;
- HBINT16 yStrikeoutPosition;
- HBINT16 sFamilyClass;
- HBUINT8 panose[10];
- HBUINT32 ulUnicodeRange[4];
+ HBINT16 ySubscriptXSize;
+ HBINT16 ySubscriptYSize;
+ HBINT16 ySubscriptXOffset;
+ HBINT16 ySubscriptYOffset;
+ HBINT16 ySuperscriptXSize;
+ HBINT16 ySuperscriptYSize;
+ HBINT16 ySuperscriptXOffset;
+ HBINT16 ySuperscriptYOffset;
+ HBINT16 yStrikeoutSize;
+ HBINT16 yStrikeoutPosition;
+ HBINT16 sFamilyClass;
+ HBUINT8 panose[10];
+ HBUINT32 ulUnicodeRange[4];
Tag achVendID;
HBUINT16 fsSelection;
HBUINT16 usFirstCharIndex;
HBUINT16 usLastCharIndex;
- HBINT16 sTypoAscender;
- HBINT16 sTypoDescender;
- HBINT16 sTypoLineGap;
+ HBINT16 sTypoAscender;
+ HBINT16 sTypoDescender;
+ HBINT16 sTypoLineGap;
HBUINT16 usWinAscent;
HBUINT16 usWinDescent;
/* Version 1 */
- //HBUINT32 ulCodePageRange1;
- //HBUINT32 ulCodePageRange2;
+ //HBUINT32 ulCodePageRange1;
+ //HBUINT32 ulCodePageRange2;
/* Version 2 */
- //HBINT16 sxHeight;
- //HBINT16 sCapHeight;
- //HBUINT16 usDefaultChar;
- //HBUINT16 usBreakChar;
- //HBUINT16 usMaxContext;
+ //HBINT16 sxHeight;
+ //HBINT16 sCapHeight;
+ //HBUINT16 usDefaultChar;
+ //HBUINT16 usBreakChar;
+ //HBUINT16 usMaxContext;
/* Version 5 */
- //HBUINT16 usLowerOpticalPointSize;
- //HBUINT16 usUpperOpticalPointSize;
+ //HBUINT16 usLowerOpticalPointSize;
+ //HBUINT16 usUpperOpticalPointSize;
public:
DEFINE_SIZE_STATIC (78);
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-os2-unicode-ranges.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-os2-unicode-ranges.hh
new file mode 100644
index 00000000000..2cf168f9c55
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-os2-unicode-ranges.hh
@@ -0,0 +1,247 @@
+/*
+ * Copyright © 2018 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Garret Rieger
+ */
+
+#ifndef HB_OT_OS2_UNICODE_RANGES_HH
+#define HB_OT_OS2_UNICODE_RANGES_HH
+
+#include "hb-private.hh"
+#include "hb-dsalgs.hh"
+
+namespace OT {
+
+struct Range {
+ hb_codepoint_t start;
+ hb_codepoint_t end;
+ unsigned int bit;
+};
+
+/* Note: The contents of this array was generated using src/gen-unicode-ranges.py. */
+static Range os2UnicodeRangesSorted[] =
+{
+ { 0x0, 0x7F, 0}, // Basic Latin
+ { 0x80, 0xFF, 1}, // Latin-1 Supplement
+ { 0x100, 0x17F, 2}, // Latin Extended-A
+ { 0x180, 0x24F, 3}, // Latin Extended-B
+ { 0x250, 0x2AF, 4}, // IPA Extensions
+ { 0x2B0, 0x2FF, 5}, // Spacing Modifier Letters
+ { 0x300, 0x36F, 6}, // Combining Diacritical Marks
+ { 0x370, 0x3FF, 7}, // Greek and Coptic
+ { 0x400, 0x4FF, 9}, // Cyrillic
+ { 0x500, 0x52F, 9}, // Cyrillic Supplement
+ { 0x530, 0x58F, 10}, // Armenian
+ { 0x590, 0x5FF, 11}, // Hebrew
+ { 0x600, 0x6FF, 13}, // Arabic
+ { 0x700, 0x74F, 71}, // Syriac
+ { 0x750, 0x77F, 13}, // Arabic Supplement
+ { 0x780, 0x7BF, 72}, // Thaana
+ { 0x7C0, 0x7FF, 14}, // NKo
+ { 0x900, 0x97F, 15}, // Devanagari
+ { 0x980, 0x9FF, 16}, // Bengali
+ { 0xA00, 0xA7F, 17}, // Gurmukhi
+ { 0xA80, 0xAFF, 18}, // Gujarati
+ { 0xB00, 0xB7F, 19}, // Oriya
+ { 0xB80, 0xBFF, 20}, // Tamil
+ { 0xC00, 0xC7F, 21}, // Telugu
+ { 0xC80, 0xCFF, 22}, // Kannada
+ { 0xD00, 0xD7F, 23}, // Malayalam
+ { 0xD80, 0xDFF, 73}, // Sinhala
+ { 0xE00, 0xE7F, 24}, // Thai
+ { 0xE80, 0xEFF, 25}, // Lao
+ { 0xF00, 0xFFF, 70}, // Tibetan
+ { 0x1000, 0x109F, 74}, // Myanmar
+ { 0x10A0, 0x10FF, 26}, // Georgian
+ { 0x1100, 0x11FF, 28}, // Hangul Jamo
+ { 0x1200, 0x137F, 75}, // Ethiopic
+ { 0x1380, 0x139F, 75}, // Ethiopic Supplement
+ { 0x13A0, 0x13FF, 76}, // Cherokee
+ { 0x1400, 0x167F, 77}, // Unified Canadian Aboriginal Syllabics
+ { 0x1680, 0x169F, 78}, // Ogham
+ { 0x16A0, 0x16FF, 79}, // Runic
+ { 0x1700, 0x171F, 84}, // Tagalog
+ { 0x1720, 0x173F, 84}, // Hanunoo
+ { 0x1740, 0x175F, 84}, // Buhid
+ { 0x1760, 0x177F, 84}, // Tagbanwa
+ { 0x1780, 0x17FF, 80}, // Khmer
+ { 0x1800, 0x18AF, 81}, // Mongolian
+ { 0x1900, 0x194F, 93}, // Limbu
+ { 0x1950, 0x197F, 94}, // Tai Le
+ { 0x1980, 0x19DF, 95}, // New Tai Lue
+ { 0x19E0, 0x19FF, 80}, // Khmer Symbols
+ { 0x1A00, 0x1A1F, 96}, // Buginese
+ { 0x1B00, 0x1B7F, 27}, // Balinese
+ { 0x1B80, 0x1BBF, 112}, // Sundanese
+ { 0x1C00, 0x1C4F, 113}, // Lepcha
+ { 0x1C50, 0x1C7F, 114}, // Ol Chiki
+ { 0x1D00, 0x1D7F, 4}, // Phonetic Extensions
+ { 0x1D80, 0x1DBF, 4}, // Phonetic Extensions Supplement
+ { 0x1DC0, 0x1DFF, 6}, // Combining Diacritical Marks Supplement
+ { 0x1E00, 0x1EFF, 29}, // Latin Extended Additional
+ { 0x1F00, 0x1FFF, 30}, // Greek Extended
+ { 0x2000, 0x206F, 31}, // General Punctuation
+ { 0x2070, 0x209F, 32}, // Superscripts And Subscripts
+ { 0x20A0, 0x20CF, 33}, // Currency Symbols
+ { 0x20D0, 0x20FF, 34}, // Combining Diacritical Marks For Symbols
+ { 0x2100, 0x214F, 35}, // Letterlike Symbols
+ { 0x2150, 0x218F, 36}, // Number Forms
+ { 0x2190, 0x21FF, 37}, // Arrows
+ { 0x2200, 0x22FF, 38}, // Mathematical Operators
+ { 0x2300, 0x23FF, 39}, // Miscellaneous Technical
+ { 0x2400, 0x243F, 40}, // Control Pictures
+ { 0x2440, 0x245F, 41}, // Optical Character Recognition
+ { 0x2460, 0x24FF, 42}, // Enclosed Alphanumerics
+ { 0x2500, 0x257F, 43}, // Box Drawing
+ { 0x2580, 0x259F, 44}, // Block Elements
+ { 0x25A0, 0x25FF, 45}, // Geometric Shapes
+ { 0x2600, 0x26FF, 46}, // Miscellaneous Symbols
+ { 0x2700, 0x27BF, 47}, // Dingbats
+ { 0x27C0, 0x27EF, 38}, // Miscellaneous Mathematical Symbols-A
+ { 0x27F0, 0x27FF, 37}, // Supplemental Arrows-A
+ { 0x2800, 0x28FF, 82}, // Braille Patterns
+ { 0x2900, 0x297F, 37}, // Supplemental Arrows-B
+ { 0x2980, 0x29FF, 38}, // Miscellaneous Mathematical Symbols-B
+ { 0x2A00, 0x2AFF, 38}, // Supplemental Mathematical Operators
+ { 0x2B00, 0x2BFF, 37}, // Miscellaneous Symbols and Arrows
+ { 0x2C00, 0x2C5F, 97}, // Glagolitic
+ { 0x2C60, 0x2C7F, 29}, // Latin Extended-C
+ { 0x2C80, 0x2CFF, 8}, // Coptic
+ { 0x2D00, 0x2D2F, 26}, // Georgian Supplement
+ { 0x2D30, 0x2D7F, 98}, // Tifinagh
+ { 0x2D80, 0x2DDF, 75}, // Ethiopic Extended
+ { 0x2DE0, 0x2DFF, 9}, // Cyrillic Extended-A
+ { 0x2E00, 0x2E7F, 31}, // Supplemental Punctuation
+ { 0x2E80, 0x2EFF, 59}, // CJK Radicals Supplement
+ { 0x2F00, 0x2FDF, 59}, // Kangxi Radicals
+ { 0x2FF0, 0x2FFF, 59}, // Ideographic Description Characters
+ { 0x3000, 0x303F, 48}, // CJK Symbols And Punctuation
+ { 0x3040, 0x309F, 49}, // Hiragana
+ { 0x30A0, 0x30FF, 50}, // Katakana
+ { 0x3100, 0x312F, 51}, // Bopomofo
+ { 0x3130, 0x318F, 52}, // Hangul Compatibility Jamo
+ { 0x3190, 0x319F, 59}, // Kanbun
+ { 0x31A0, 0x31BF, 51}, // Bopomofo Extended
+ { 0x31C0, 0x31EF, 61}, // CJK Strokes
+ { 0x31F0, 0x31FF, 50}, // Katakana Phonetic Extensions
+ { 0x3200, 0x32FF, 54}, // Enclosed CJK Letters And Months
+ { 0x3300, 0x33FF, 55}, // CJK Compatibility
+ { 0x3400, 0x4DBF, 59}, // CJK Unified Ideographs Extension A
+ { 0x4DC0, 0x4DFF, 99}, // Yijing Hexagram Symbols
+ { 0x4E00, 0x9FFF, 59}, // CJK Unified Ideographs
+ { 0xA000, 0xA48F, 83}, // Yi Syllables
+ { 0xA490, 0xA4CF, 83}, // Yi Radicals
+ { 0xA500, 0xA63F, 12}, // Vai
+ { 0xA640, 0xA69F, 9}, // Cyrillic Extended-B
+ { 0xA700, 0xA71F, 5}, // Modifier Tone Letters
+ { 0xA720, 0xA7FF, 29}, // Latin Extended-D
+ { 0xA800, 0xA82F, 100}, // Syloti Nagri
+ { 0xA840, 0xA87F, 53}, // Phags-pa
+ { 0xA880, 0xA8DF, 115}, // Saurashtra
+ { 0xA900, 0xA92F, 116}, // Kayah Li
+ { 0xA930, 0xA95F, 117}, // Rejang
+ { 0xAA00, 0xAA5F, 118}, // Cham
+ { 0xAC00, 0xD7AF, 56}, // Hangul Syllables
+ { 0xD800, 0xDFFF, 57}, // Non-Plane 0 *
+ { 0xE000, 0xF8FF, 60}, // Private Use Area (plane 0)
+ { 0xF900, 0xFAFF, 61}, // CJK Compatibility Ideographs
+ { 0xFB00, 0xFB4F, 62}, // Alphabetic Presentation Forms
+ { 0xFB50, 0xFDFF, 63}, // Arabic Presentation Forms-A
+ { 0xFE00, 0xFE0F, 91}, // Variation Selectors
+ { 0xFE10, 0xFE1F, 65}, // Vertical Forms
+ { 0xFE20, 0xFE2F, 64}, // Combining Half Marks
+ { 0xFE30, 0xFE4F, 65}, // CJK Compatibility Forms
+ { 0xFE50, 0xFE6F, 66}, // Small Form Variants
+ { 0xFE70, 0xFEFF, 67}, // Arabic Presentation Forms-B
+ { 0xFF00, 0xFFEF, 68}, // Halfwidth And Fullwidth Forms
+ { 0xFFF0, 0xFFFF, 69}, // Specials
+ { 0x10000, 0x1007F, 101}, // Linear B Syllabary
+ { 0x10080, 0x100FF, 101}, // Linear B Ideograms
+ { 0x10100, 0x1013F, 101}, // Aegean Numbers
+ { 0x10140, 0x1018F, 102}, // Ancient Greek Numbers
+ { 0x10190, 0x101CF, 119}, // Ancient Symbols
+ { 0x101D0, 0x101FF, 120}, // Phaistos Disc
+ { 0x10280, 0x1029F, 121}, // Lycian
+ { 0x102A0, 0x102DF, 121}, // Carian
+ { 0x10300, 0x1032F, 85}, // Old Italic
+ { 0x10330, 0x1034F, 86}, // Gothic
+ { 0x10380, 0x1039F, 103}, // Ugaritic
+ { 0x103A0, 0x103DF, 104}, // Old Persian
+ { 0x10400, 0x1044F, 87}, // Deseret
+ { 0x10450, 0x1047F, 105}, // Shavian
+ { 0x10480, 0x104AF, 106}, // Osmanya
+ { 0x10800, 0x1083F, 107}, // Cypriot Syllabary
+ { 0x10900, 0x1091F, 58}, // Phoenician
+ { 0x10920, 0x1093F, 121}, // Lydian
+ { 0x10A00, 0x10A5F, 108}, // Kharoshthi
+ { 0x12000, 0x123FF, 110}, // Cuneiform
+ { 0x12400, 0x1247F, 110}, // Cuneiform Numbers and Punctuation
+ { 0x1D000, 0x1D0FF, 88}, // Byzantine Musical Symbols
+ { 0x1D100, 0x1D1FF, 88}, // Musical Symbols
+ { 0x1D200, 0x1D24F, 88}, // Ancient Greek Musical Notation
+ { 0x1D300, 0x1D35F, 109}, // Tai Xuan Jing Symbols
+ { 0x1D360, 0x1D37F, 111}, // Counting Rod Numerals
+ { 0x1D400, 0x1D7FF, 89}, // Mathematical Alphanumeric Symbols
+ { 0x1F000, 0x1F02F, 122}, // Mahjong Tiles
+ { 0x1F030, 0x1F09F, 122}, // Domino Tiles
+ { 0x20000, 0x2A6DF, 59}, // CJK Unified Ideographs Extension B
+ { 0x2F800, 0x2FA1F, 61}, // CJK Compatibility Ideographs Supplement
+ { 0xE0000, 0xE007F, 92}, // Tags
+ { 0xE0100, 0xE01EF, 91}, // Variation Selectors Supplement
+ { 0xF0000, 0xFFFFD, 90}, // Private Use (plane 15)
+ {0x100000, 0x10FFFD, 90}, // Private Use (plane 16)
+};
+
+static int
+_compare_range (const void *_key, const void *_item, void *_arg)
+{
+ hb_codepoint_t cp = *((hb_codepoint_t *) _key);
+ const Range *range = (Range *) _item;
+
+ if (cp < range->start)
+ return -1;
+ else if (cp <= range->end)
+ return 0;
+ else
+ return 1;
+}
+
+/**
+ * hb_get_unicode_range_bit:
+ * Returns the bit to be set in os/2 ulUnicodeRange for a given codepoint.
+ **/
+static unsigned int
+hb_get_unicode_range_bit (hb_codepoint_t cp)
+{
+ Range *range = (Range*) hb_bsearch_r (&cp, os2UnicodeRangesSorted,
+ sizeof (os2UnicodeRangesSorted) / sizeof(Range),
+ sizeof(Range),
+ _compare_range, nullptr);
+ if (range != NULL)
+ return range->bit;
+ return -1;
+}
+
+} /* namespace OT */
+
+#endif /* HB_OT_OS2_UNICODE_RANGES_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-private.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-private.hh
index a64e9d03919..867b936278b 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic-private.hh
@@ -34,6 +34,11 @@
#include "hb-ot-shape-private.hh" /* XXX Remove */
+/* buffer var allocations */
+#define indic_category() complex_var_u8_0() /* indic_category_t */
+#define indic_position() complex_var_u8_1() /* indic_position_t */
+
+
#define INDIC_TABLE_ELEMENT_TYPE uint16_t
/* Cateories used in the OpenType spec:
@@ -77,29 +82,29 @@ enum indic_category_t {
/* Visual positions in a syllable from left to right. */
enum indic_position_t {
- POS_START,
+ POS_START = 0,
- POS_RA_TO_BECOME_REPH,
- POS_PRE_M,
- POS_PRE_C,
+ POS_RA_TO_BECOME_REPH = 1,
+ POS_PRE_M = 2,
+ POS_PRE_C = 3,
- POS_BASE_C,
- POS_AFTER_MAIN,
+ POS_BASE_C = 4,
+ POS_AFTER_MAIN = 5,
- POS_ABOVE_C,
+ POS_ABOVE_C = 6,
- POS_BEFORE_SUB,
- POS_BELOW_C,
- POS_AFTER_SUB,
+ POS_BEFORE_SUB = 7,
+ POS_BELOW_C = 8,
+ POS_AFTER_SUB = 9,
- POS_BEFORE_POST,
- POS_POST_C,
- POS_AFTER_POST,
+ POS_BEFORE_POST = 10,
+ POS_POST_C = 11,
+ POS_AFTER_POST = 12,
- POS_FINAL_C,
- POS_SMVD,
+ POS_FINAL_C = 13,
+ POS_SMVD = 14,
- POS_END
+ POS_END = 15
};
/* Categories used in IndicSyllabicCategory.txt from UCD. */
@@ -186,4 +191,211 @@ enum indic_matra_category_t {
HB_INTERNAL INDIC_TABLE_ELEMENT_TYPE
hb_indic_get_categories (hb_codepoint_t u);
+
+static inline bool
+is_one_of (const hb_glyph_info_t &info, unsigned int flags)
+{
+ /* If it ligated, all bets are off. */
+ if (_hb_glyph_info_ligated (&info)) return false;
+ return !!(FLAG_UNSAFE (info.indic_category()) & flags);
+}
+
+static inline bool
+is_joiner (const hb_glyph_info_t &info)
+{
+ return is_one_of (info, JOINER_FLAGS);
+}
+
+static inline bool
+is_consonant (const hb_glyph_info_t &info)
+{
+ return is_one_of (info, CONSONANT_FLAGS);
+}
+
+static inline bool
+is_halant (const hb_glyph_info_t &info)
+{
+ return is_one_of (info, FLAG (OT_H));
+}
+
+#define IN_HALF_BLOCK(u, Base) (((u) & ~0x7Fu) == (Base))
+
+#define IS_DEVA(u) (IN_HALF_BLOCK (u, 0x0900u))
+#define IS_BENG(u) (IN_HALF_BLOCK (u, 0x0980u))
+#define IS_GURU(u) (IN_HALF_BLOCK (u, 0x0A00u))
+#define IS_GUJR(u) (IN_HALF_BLOCK (u, 0x0A80u))
+#define IS_ORYA(u) (IN_HALF_BLOCK (u, 0x0B00u))
+#define IS_TAML(u) (IN_HALF_BLOCK (u, 0x0B80u))
+#define IS_TELU(u) (IN_HALF_BLOCK (u, 0x0C00u))
+#define IS_KNDA(u) (IN_HALF_BLOCK (u, 0x0C80u))
+#define IS_MLYM(u) (IN_HALF_BLOCK (u, 0x0D00u))
+#define IS_SINH(u) (IN_HALF_BLOCK (u, 0x0D80u))
+
+
+#define MATRA_POS_LEFT(u) POS_PRE_M
+#define MATRA_POS_RIGHT(u) ( \
+ IS_DEVA(u) ? POS_AFTER_SUB : \
+ IS_BENG(u) ? POS_AFTER_POST : \
+ IS_GURU(u) ? POS_AFTER_POST : \
+ IS_GUJR(u) ? POS_AFTER_POST : \
+ IS_ORYA(u) ? POS_AFTER_POST : \
+ IS_TAML(u) ? POS_AFTER_POST : \
+ IS_TELU(u) ? (u <= 0x0C42u ? POS_BEFORE_SUB : POS_AFTER_SUB) : \
+ IS_KNDA(u) ? (u < 0x0CC3u || u > 0xCD6u ? POS_BEFORE_SUB : POS_AFTER_SUB) : \
+ IS_MLYM(u) ? POS_AFTER_POST : \
+ IS_SINH(u) ? POS_AFTER_SUB : \
+ /*default*/ POS_AFTER_SUB \
+ )
+#define MATRA_POS_TOP(u) ( /* BENG and MLYM don't have top matras. */ \
+ IS_DEVA(u) ? POS_AFTER_SUB : \
+ IS_GURU(u) ? POS_AFTER_POST : /* Deviate from spec */ \
+ IS_GUJR(u) ? POS_AFTER_SUB : \
+ IS_ORYA(u) ? POS_AFTER_MAIN : \
+ IS_TAML(u) ? POS_AFTER_SUB : \
+ IS_TELU(u) ? POS_BEFORE_SUB : \
+ IS_KNDA(u) ? POS_BEFORE_SUB : \
+ IS_SINH(u) ? POS_AFTER_SUB : \
+ /*default*/ POS_AFTER_SUB \
+ )
+#define MATRA_POS_BOTTOM(u) ( \
+ IS_DEVA(u) ? POS_AFTER_SUB : \
+ IS_BENG(u) ? POS_AFTER_SUB : \
+ IS_GURU(u) ? POS_AFTER_POST : \
+ IS_GUJR(u) ? POS_AFTER_POST : \
+ IS_ORYA(u) ? POS_AFTER_SUB : \
+ IS_TAML(u) ? POS_AFTER_POST : \
+ IS_TELU(u) ? POS_BEFORE_SUB : \
+ IS_KNDA(u) ? POS_BEFORE_SUB : \
+ IS_MLYM(u) ? POS_AFTER_POST : \
+ IS_SINH(u) ? POS_AFTER_SUB : \
+ /*default*/ POS_AFTER_SUB \
+ )
+
+static inline indic_position_t
+matra_position_indic (hb_codepoint_t u, indic_position_t side)
+{
+ switch ((int) side)
+ {
+ case POS_PRE_C: return MATRA_POS_LEFT (u);
+ case POS_POST_C: return MATRA_POS_RIGHT (u);
+ case POS_ABOVE_C: return MATRA_POS_TOP (u);
+ case POS_BELOW_C: return MATRA_POS_BOTTOM (u);
+ };
+ return side;
+}
+
+/* XXX
+ * This is a hack for now. We should move this data into the main Indic table.
+ * Or completely remove it and just check in the tables.
+ */
+static const hb_codepoint_t ra_chars[] = {
+ 0x0930u, /* Devanagari */
+ 0x09B0u, /* Bengali */
+ 0x09F0u, /* Bengali */
+ 0x0A30u, /* Gurmukhi */ /* No Reph */
+ 0x0AB0u, /* Gujarati */
+ 0x0B30u, /* Oriya */
+ 0x0BB0u, /* Tamil */ /* No Reph */
+ 0x0C30u, /* Telugu */ /* Reph formed only with ZWJ */
+ 0x0CB0u, /* Kannada */
+ 0x0D30u, /* Malayalam */ /* No Reph, Logical Repha */
+
+ 0x0DBBu, /* Sinhala */ /* Reph formed only with ZWJ */
+};
+
+static inline bool
+is_ra (hb_codepoint_t u)
+{
+ for (unsigned int i = 0; i < ARRAY_LENGTH (ra_chars); i++)
+ if (u == ra_chars[i])
+ return true;
+ return false;
+}
+
+static inline void
+set_indic_properties (hb_glyph_info_t &info)
+{
+ hb_codepoint_t u = info.codepoint;
+ unsigned int type = hb_indic_get_categories (u);
+ indic_category_t cat = (indic_category_t) (type & 0x7Fu);
+ indic_position_t pos = (indic_position_t) (type >> 8);
+
+
+ /*
+ * Re-assign category
+ */
+
+ /* The following act more like the Bindus. */
+ if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x0953u, 0x0954u)))
+ cat = OT_SM;
+ /* The following act like consonants. */
+ else if (unlikely (hb_in_ranges<hb_codepoint_t> (u, 0x0A72u, 0x0A73u,
+ 0x1CF5u, 0x1CF6u)))
+ cat = OT_C;
+ /* TODO: The following should only be allowed after a Visarga.
+ * For now, just treat them like regular tone marks. */
+ else if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x1CE2u, 0x1CE8u)))
+ cat = OT_A;
+ /* TODO: The following should only be allowed after some of
+ * the nasalization marks, maybe only for U+1CE9..U+1CF1.
+ * For now, just treat them like tone marks. */
+ else if (unlikely (u == 0x1CEDu))
+ cat = OT_A;
+ /* The following take marks in standalone clusters, similar to Avagraha. */
+ else if (unlikely (hb_in_ranges<hb_codepoint_t> (u, 0xA8F2u, 0xA8F7u,
+ 0x1CE9u, 0x1CECu,
+ 0x1CEEu, 0x1CF1u)))
+ {
+ cat = OT_Symbol;
+ static_assert (((int) INDIC_SYLLABIC_CATEGORY_AVAGRAHA == OT_Symbol), "");
+ }
+ else if (unlikely (u == 0x0A51u))
+ {
+ /* https://github.com/harfbuzz/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 == 0x11301u || u == 0x11303u)) cat = OT_SM;
+ else if (unlikely (u == 0x1133cu)) cat = OT_N;
+
+ else if (unlikely (u == 0x0AFBu)) cat = OT_N; /* https://github.com/harfbuzz/harfbuzz/issues/552 */
+
+ else if (unlikely (u == 0x0980u)) cat = OT_PLACEHOLDER; /* https://github.com/harfbuzz/harfbuzz/issues/538 */
+ else if (unlikely (u == 0x0C80u)) cat = OT_PLACEHOLDER; /* https://github.com/harfbuzz/harfbuzz/pull/623 */
+ else if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x2010u, 0x2011u)))
+ cat = OT_PLACEHOLDER;
+ else if (unlikely (u == 0x25CCu)) cat = OT_DOTTEDCIRCLE;
+
+
+ /*
+ * Re-assign position.
+ */
+
+ if ((FLAG_UNSAFE (cat) & CONSONANT_FLAGS))
+ {
+ pos = POS_BASE_C;
+ if (is_ra (u))
+ cat = OT_Ra;
+ }
+ else if (cat == OT_M)
+ {
+ pos = matra_position_indic (u, pos);
+ }
+ else if ((FLAG_UNSAFE (cat) & (FLAG (OT_SM) /* | FLAG (OT_VD) */ | FLAG (OT_A) | FLAG (OT_Symbol))))
+ {
+ pos = POS_SMVD;
+ }
+
+ if (unlikely (u == 0x0B01u)) pos = POS_BEFORE_SUB; /* Oriya Bindu is BeforeSub in the spec. */
+
+
+
+ info.indic_category() = cat;
+ info.indic_position() = pos;
+}
+
+
#endif /* HB_OT_SHAPE_COMPLEX_INDIC_PRIVATE_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic.cc
index 9d150e0d3c1..32ad86a5f32 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-indic.cc
@@ -27,226 +27,12 @@
#include "hb-ot-shape-complex-indic-private.hh"
#include "hb-ot-layout-private.hh"
-/* buffer var allocations */
-#define indic_category() complex_var_u8_0() /* indic_category_t */
-#define indic_position() complex_var_u8_1() /* indic_position_t */
-
/*
* Indic shaper.
*/
-#define IN_HALF_BLOCK(u, Base) (((u) & ~0x7Fu) == (Base))
-
-#define IS_DEVA(u) (IN_HALF_BLOCK (u, 0x0900u))
-#define IS_BENG(u) (IN_HALF_BLOCK (u, 0x0980u))
-#define IS_GURU(u) (IN_HALF_BLOCK (u, 0x0A00u))
-#define IS_GUJR(u) (IN_HALF_BLOCK (u, 0x0A80u))
-#define IS_ORYA(u) (IN_HALF_BLOCK (u, 0x0B00u))
-#define IS_TAML(u) (IN_HALF_BLOCK (u, 0x0B80u))
-#define IS_TELU(u) (IN_HALF_BLOCK (u, 0x0C00u))
-#define IS_KNDA(u) (IN_HALF_BLOCK (u, 0x0C80u))
-#define IS_MLYM(u) (IN_HALF_BLOCK (u, 0x0D00u))
-#define IS_SINH(u) (IN_HALF_BLOCK (u, 0x0D80u))
-
-
-#define MATRA_POS_LEFT(u) POS_PRE_M
-#define MATRA_POS_RIGHT(u) ( \
- IS_DEVA(u) ? POS_AFTER_SUB : \
- IS_BENG(u) ? POS_AFTER_POST : \
- IS_GURU(u) ? POS_AFTER_POST : \
- IS_GUJR(u) ? POS_AFTER_POST : \
- IS_ORYA(u) ? POS_AFTER_POST : \
- IS_TAML(u) ? POS_AFTER_POST : \
- IS_TELU(u) ? (u <= 0x0C42u ? POS_BEFORE_SUB : POS_AFTER_SUB) : \
- IS_KNDA(u) ? (u < 0x0CC3u || u > 0xCD6u ? POS_BEFORE_SUB : POS_AFTER_SUB) : \
- IS_MLYM(u) ? POS_AFTER_POST : \
- IS_SINH(u) ? POS_AFTER_SUB : \
- /*default*/ POS_AFTER_SUB \
- )
-#define MATRA_POS_TOP(u) ( /* BENG and MLYM don't have top matras. */ \
- IS_DEVA(u) ? POS_AFTER_SUB : \
- IS_GURU(u) ? POS_AFTER_POST : /* Deviate from spec */ \
- IS_GUJR(u) ? POS_AFTER_SUB : \
- IS_ORYA(u) ? POS_AFTER_MAIN : \
- IS_TAML(u) ? POS_AFTER_SUB : \
- IS_TELU(u) ? POS_BEFORE_SUB : \
- IS_KNDA(u) ? POS_BEFORE_SUB : \
- IS_SINH(u) ? POS_AFTER_SUB : \
- /*default*/ POS_AFTER_SUB \
- )
-#define MATRA_POS_BOTTOM(u) ( \
- IS_DEVA(u) ? POS_AFTER_SUB : \
- IS_BENG(u) ? POS_AFTER_SUB : \
- IS_GURU(u) ? POS_AFTER_POST : \
- IS_GUJR(u) ? POS_AFTER_POST : \
- IS_ORYA(u) ? POS_AFTER_SUB : \
- IS_TAML(u) ? POS_AFTER_POST : \
- IS_TELU(u) ? POS_BEFORE_SUB : \
- IS_KNDA(u) ? POS_BEFORE_SUB : \
- IS_MLYM(u) ? POS_AFTER_POST : \
- IS_SINH(u) ? POS_AFTER_SUB : \
- /*default*/ POS_AFTER_SUB \
- )
-
-static inline indic_position_t
-matra_position (hb_codepoint_t u, indic_position_t side)
-{
- switch ((int) side)
- {
- case POS_PRE_C: return MATRA_POS_LEFT (u);
- case POS_POST_C: return MATRA_POS_RIGHT (u);
- case POS_ABOVE_C: return MATRA_POS_TOP (u);
- case POS_BELOW_C: return MATRA_POS_BOTTOM (u);
- };
- return side;
-}
-
-/* XXX
- * This is a hack for now. We should move this data into the main Indic table.
- * Or completely remove it and just check in the tables.
- */
-static const hb_codepoint_t ra_chars[] = {
- 0x0930u, /* Devanagari */
- 0x09B0u, /* Bengali */
- 0x09F0u, /* Bengali */
- 0x0A30u, /* Gurmukhi */ /* No Reph */
- 0x0AB0u, /* Gujarati */
- 0x0B30u, /* Oriya */
- 0x0BB0u, /* Tamil */ /* No Reph */
- 0x0C30u, /* Telugu */ /* Reph formed only with ZWJ */
- 0x0CB0u, /* Kannada */
- 0x0D30u, /* Malayalam */ /* No Reph, Logical Repha */
-
- 0x0DBBu, /* Sinhala */ /* Reph formed only with ZWJ */
-};
-
-static inline bool
-is_ra (hb_codepoint_t u)
-{
- for (unsigned int i = 0; i < ARRAY_LENGTH (ra_chars); i++)
- if (u == ra_chars[i])
- return true;
- return false;
-}
-
-static inline bool
-is_one_of (const hb_glyph_info_t &info, unsigned int flags)
-{
- /* If it ligated, all bets are off. */
- if (_hb_glyph_info_ligated (&info)) return false;
- return !!(FLAG_UNSAFE (info.indic_category()) & flags);
-}
-
-static inline bool
-is_joiner (const hb_glyph_info_t &info)
-{
- return is_one_of (info, JOINER_FLAGS);
-}
-
-static inline bool
-is_consonant (const hb_glyph_info_t &info)
-{
- return is_one_of (info, CONSONANT_FLAGS);
-}
-
-static inline bool
-is_halant (const hb_glyph_info_t &info)
-{
- return is_one_of (info, FLAG (OT_H));
-}
-
-static inline void
-set_indic_properties (hb_glyph_info_t &info)
-{
- hb_codepoint_t u = info.codepoint;
- unsigned int type = hb_indic_get_categories (u);
- indic_category_t cat = (indic_category_t) (type & 0x7Fu);
- indic_position_t pos = (indic_position_t) (type >> 8);
-
-
- /*
- * Re-assign category
- */
-
- /* The following act more like the Bindus. */
- if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x0953u, 0x0954u)))
- cat = OT_SM;
- /* The following act like consonants. */
- else if (unlikely (hb_in_ranges<hb_codepoint_t> (u, 0x0A72u, 0x0A73u,
- 0x1CF5u, 0x1CF6u)))
- cat = OT_C;
- /* TODO: The following should only be allowed after a Visarga.
- * For now, just treat them like regular tone marks. */
- else if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x1CE2u, 0x1CE8u)))
- cat = OT_A;
- /* TODO: The following should only be allowed after some of
- * the nasalization marks, maybe only for U+1CE9..U+1CF1.
- * For now, just treat them like tone marks. */
- else if (unlikely (u == 0x1CEDu))
- cat = OT_A;
- /* The following take marks in standalone clusters, similar to Avagraha. */
- else if (unlikely (hb_in_ranges<hb_codepoint_t> (u, 0xA8F2u, 0xA8F7u,
- 0x1CE9u, 0x1CECu,
- 0x1CEEu, 0x1CF1u)))
- {
- cat = OT_Symbol;
- static_assert (((int) INDIC_SYLLABIC_CATEGORY_AVAGRAHA == OT_Symbol), "");
- }
- else if (unlikely (u == 0x0A51u))
- {
- /* https://github.com/harfbuzz/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 == 0x11301u || u == 0x11303u)) cat = OT_SM;
- else if (unlikely (u == 0x1133cu)) cat = OT_N;
-
- else if (unlikely (u == 0x0AFBu)) cat = OT_N; /* https://github.com/harfbuzz/harfbuzz/issues/552 */
-
- else if (unlikely (u == 0x0980u)) cat = OT_PLACEHOLDER; /* https://github.com/harfbuzz/harfbuzz/issues/538 */
- else if (unlikely (u == 0x0C80u)) cat = OT_PLACEHOLDER; /* https://github.com/harfbuzz/harfbuzz/pull/623 */
- else if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x2010u, 0x2011u)))
- cat = OT_PLACEHOLDER;
- else if (unlikely (u == 0x25CCu)) cat = OT_DOTTEDCIRCLE;
-
-
- /*
- * Re-assign position.
- */
-
- if ((FLAG_UNSAFE (cat) & CONSONANT_FLAGS))
- {
- pos = POS_BASE_C;
- if (is_ra (u))
- cat = OT_Ra;
- }
- else if (cat == OT_M)
- {
- pos = matra_position (u, pos);
- }
- else if ((FLAG_UNSAFE (cat) & (FLAG (OT_SM) /* | FLAG (OT_VD) */ | FLAG (OT_A) | FLAG (OT_Symbol))))
- {
- pos = POS_SMVD;
- }
-
- if (unlikely (u == 0x0B01u)) pos = POS_BEFORE_SUB; /* Oriya Bindu is BeforeSub in the spec. */
-
-
-
- info.indic_category() = cat;
- info.indic_position() = pos;
-}
-
-/*
- * Things above this line should ideally be moved to the Indic table itself.
- */
-
-
/*
* Indic configurations. Note that we do not want to keep every single script-specific
* behavior in these tables necessarily. This should mainly be used for per-script
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-khmer-private.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-khmer-private.hh
new file mode 100644
index 00000000000..f90ef967440
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-khmer-private.hh
@@ -0,0 +1,124 @@
+/*
+ * Copyright © 2018 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_SHAPE_COMPLEX_KHMER_PRIVATE_HH
+#define HB_OT_SHAPE_COMPLEX_KHMER_PRIVATE_HH
+
+#include "hb-private.hh"
+
+#include "hb-ot-shape-complex-indic-private.hh"
+
+
+/* buffer var allocations */
+#define khmer_category() indic_category() /* khmer_category_t */
+#define khmer_position() indic_position() /* khmer_position_t */
+
+
+typedef indic_category_t khmer_category_t;
+typedef indic_position_t khmer_position_t;
+
+
+static inline khmer_position_t
+matra_position_khmer (khmer_position_t side)
+{
+ switch ((int) side)
+ {
+ case POS_PRE_C:
+ return POS_PRE_M;
+
+ case POS_POST_C:
+ case POS_ABOVE_C:
+ case POS_BELOW_C:
+ return POS_AFTER_POST;
+
+ default:
+ return side;
+ };
+}
+
+static inline bool
+is_consonant_or_vowel (const hb_glyph_info_t &info)
+{
+ return is_one_of (info, CONSONANT_FLAGS | FLAG (OT_V));
+}
+
+static inline bool
+is_coeng (const hb_glyph_info_t &info)
+{
+ return is_one_of (info, FLAG (OT_Coeng));
+}
+
+static inline void
+set_khmer_properties (hb_glyph_info_t &info)
+{
+ hb_codepoint_t u = info.codepoint;
+ unsigned int type = hb_indic_get_categories (u);
+ khmer_category_t cat = (khmer_category_t) (type & 0x7Fu);
+ khmer_position_t pos = (khmer_position_t) (type >> 8);
+
+
+ /*
+ * Re-assign category
+ */
+
+ 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, 0x17CDu, 0x17D1u) ||
+ u == 0x17CBu || u == 0x17D3u || u == 0x17DDu)) /* Khmer Various signs */
+ {
+ /* These can occur mid-syllable (eg. before matras), even though Unicode marks them as Syllable_Modifier.
+ * https://github.com/roozbehp/unicode-data/issues/5 */
+ cat = OT_M;
+ pos = POS_ABOVE_C;
+ }
+ else if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x2010u, 0x2011u))) cat = OT_PLACEHOLDER;
+ else if (unlikely (u == 0x25CCu)) cat = OT_DOTTEDCIRCLE;
+
+
+ /*
+ * Re-assign position.
+ */
+
+ if ((FLAG_UNSAFE (cat) & CONSONANT_FLAGS))
+ {
+ pos = POS_BASE_C;
+ if (u == 0x179Au)
+ cat = OT_Ra;
+ }
+ else if (cat == OT_M)
+ {
+ pos = matra_position_khmer (pos);
+ }
+ else if ((FLAG_UNSAFE (cat) & (FLAG (OT_SM) | FLAG (OT_A) | FLAG (OT_Symbol))))
+ {
+ pos = POS_SMVD;
+ }
+
+ info.khmer_category() = cat;
+ info.khmer_position() = pos;
+}
+
+
+#endif /* HB_OT_SHAPE_COMPLEX_KHMER_PRIVATE_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-khmer.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-khmer.cc
index 2db4f6097d8..304879d8fbb 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-khmer.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-khmer.cc
@@ -24,119 +24,9 @@
* Google Author(s): Behdad Esfahbod
*/
-#include "hb-ot-shape-complex-indic-private.hh"
+#include "hb-ot-shape-complex-khmer-private.hh"
#include "hb-ot-layout-private.hh"
-/* buffer var allocations */
-#define khmer_category() complex_var_u8_0() /* khmer_category_t */
-#define khmer_position() complex_var_u8_1() /* khmer_position_t */
-
-
-/*
- * Khmer shaper.
- */
-
-typedef indic_category_t khmer_category_t;
-typedef indic_position_t khmer_position_t;
-
-
-static inline khmer_position_t
-matra_position (khmer_position_t side)
-{
- switch ((int) side)
- {
- case POS_PRE_C:
- return POS_PRE_M;
-
- case POS_POST_C:
- case POS_ABOVE_C:
- case POS_BELOW_C:
- return POS_AFTER_POST;
-
- default:
- return side;
- };
-}
-
-static inline bool
-is_one_of (const hb_glyph_info_t &info, unsigned int flags)
-{
- /* If it ligated, all bets are off. */
- if (_hb_glyph_info_ligated (&info)) return false;
- return !!(FLAG_UNSAFE (info.khmer_category()) & flags);
-}
-
-static inline bool
-is_joiner (const hb_glyph_info_t &info)
-{
- return is_one_of (info, JOINER_FLAGS);
-}
-
-static inline bool
-is_consonant (const hb_glyph_info_t &info)
-{
- return is_one_of (info, CONSONANT_FLAGS | FLAG (OT_V));
-}
-
-static inline bool
-is_coeng (const hb_glyph_info_t &info)
-{
- return is_one_of (info, FLAG (OT_Coeng));
-}
-
-static inline void
-set_khmer_properties (hb_glyph_info_t &info)
-{
- hb_codepoint_t u = info.codepoint;
- unsigned int type = hb_indic_get_categories (u);
- khmer_category_t cat = (khmer_category_t) (type & 0x7Fu);
- khmer_position_t pos = (khmer_position_t) (type >> 8);
-
-
- /*
- * Re-assign category
- */
-
- 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, 0x17CDu, 0x17D1u) ||
- u == 0x17CBu || u == 0x17D3u || u == 0x17DDu)) /* Khmer Various signs */
- {
- /* These can occur mid-syllable (eg. before matras), even though Unicode marks them as Syllable_Modifier.
- * https://github.com/roozbehp/unicode-data/issues/5 */
- cat = OT_M;
- pos = POS_ABOVE_C;
- }
- else if (unlikely (hb_in_range<hb_codepoint_t> (u, 0x2010u, 0x2011u))) cat = OT_PLACEHOLDER;
- else if (unlikely (u == 0x25CCu)) cat = OT_DOTTEDCIRCLE;
-
-
- /*
- * Re-assign position.
- */
-
- if ((FLAG_UNSAFE (cat) & CONSONANT_FLAGS))
- {
- pos = POS_BASE_C;
- if (u == 0x179Au)
- cat = OT_Ra;
- }
- else if (cat == OT_M)
- {
- pos = matra_position (pos);
- }
- else if ((FLAG_UNSAFE (cat) & (FLAG (OT_SM) | FLAG (OT_A) | FLAG (OT_Symbol))))
- {
- pos = POS_SMVD;
- }
-
- info.khmer_category() = cat;
- info.khmer_position() = pos;
-}
-
-/*
- * Things above this line should ideally be moved to the Indic table itself.
- */
-
/*
* Khmer shaper.
@@ -404,7 +294,7 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
/* Mark all subsequent consonants as below. */
for (unsigned int i = base + 1; i < end; i++)
- if (is_consonant (info[i]))
+ if (is_consonant_or_vowel (info[i]))
info[i].khmer_position() = POS_BELOW_C;
/* Mark final consonants. A final consonant is one appearing after a matra,
@@ -412,7 +302,7 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
for (unsigned int i = base + 1; i < end; i++)
if (info[i].khmer_category() == OT_M) {
for (unsigned int j = i + 1; j < end; j++)
- if (is_consonant (info[j])) {
+ if (is_consonant_or_vowel (info[j])) {
info[j].khmer_position() = POS_FINAL_C;
break;
}
@@ -455,7 +345,7 @@ initial_reordering_consonant_syllable (const hb_ot_shape_plan_t *plan,
{
unsigned int last = base;
for (unsigned int i = base + 1; i < end; i++)
- if (is_consonant (info[i]))
+ if (is_consonant_or_vowel (info[i]))
{
for (unsigned int j = last + 1; j < i; j++)
if (info[j].khmer_position() < POS_SMVD)
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.hh
index ed87404305b..fb67dd42e64 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.hh
@@ -36,28 +36,29 @@
static const unsigned char _myanmar_syllable_machine_trans_keys[] = {
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, 32u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u,
- 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 1u, 32u, 8u, 8u, 0
+ 3u, 29u, 3u, 29u, 3u, 30u, 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, 32u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u,
+ 3u, 29u, 3u, 30u, 3u, 29u, 3u, 29u, 3u, 29u, 3u, 29u, 1u, 32u, 8u, 8u,
+ 0
};
static const char _myanmar_syllable_machine_key_spans[] = {
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, 32, 27, 27, 27, 27, 27,
- 27, 27, 27, 27, 32, 1
+ 27, 27, 28, 27, 27, 27, 27, 25,
+ 4, 25, 23, 21, 21, 27, 27, 27,
+ 27, 28, 27, 32, 27, 27, 27, 27,
+ 27, 28, 27, 27, 27, 27, 32, 1
};
static const short _myanmar_syllable_machine_index_offsets[] = {
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
+ 400, 428, 456, 485, 513, 541, 569, 597,
+ 623, 628, 654, 678, 700, 722, 750, 778,
+ 806, 834, 863, 891, 924, 952, 980, 1008,
+ 1036, 1064, 1093, 1121, 1149, 1177, 1205, 1238
};
static const char _myanmar_syllable_machine_indicies[] = {
@@ -105,7 +106,7 @@ static const char _myanmar_syllable_machine_indicies[] = {
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, 21, 43,
21, 21, 21, 21, 21, 21, 32, 33,
34, 35, 36, 21, 22, 21, 24, 24,
21, 25, 21, 26, 21, 21, 21, 21,
@@ -119,106 +120,114 @@ static const char _myanmar_syllable_machine_indicies[] = {
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,
+ 21, 21, 21, 21, 21, 21, 21, 21,
+ 21, 21, 21, 21, 21, 21, 32, 33,
+ 34, 35, 36, 43, 21, 22, 21, 24,
+ 24, 21, 25, 21, 26, 21, 21, 21,
+ 21, 21, 21, 21, 43, 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,
+ 43, 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, 49, 21, 21, 28,
- 29, 30, 31, 32, 33, 34, 35, 36,
- 37, 21, 22, 50, 24, 24, 21, 25,
+ 21, 21, 21, 21, 43, 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, 44,
+ 5, 44, 44, 44, 44, 44, 44, 44,
+ 44, 44, 45, 44, 44, 44, 44, 44,
+ 44, 14, 44, 44, 44, 18, 44, 3,
+ 3, 44, 5, 44, 3, 3, 44, 5,
+ 44, 44, 44, 44, 44, 44, 44, 44,
+ 44, 44, 44, 44, 44, 44, 44, 44,
+ 14, 44, 44, 44, 18, 44, 46, 44,
+ 3, 3, 44, 5, 44, 14, 44, 44,
+ 44, 44, 44, 44, 44, 47, 44, 44,
+ 44, 44, 44, 44, 14, 44, 3, 3,
+ 44, 5, 44, 44, 44, 44, 44, 44,
+ 44, 44, 44, 47, 44, 44, 44, 44,
+ 44, 44, 14, 44, 3, 3, 44, 5,
+ 44, 44, 44, 44, 44, 44, 44, 44,
+ 44, 44, 44, 44, 44, 44, 44, 44,
+ 14, 44, 2, 44, 3, 3, 44, 5,
+ 44, 6, 44, 44, 44, 44, 44, 44,
+ 44, 48, 44, 44, 48, 44, 44, 44,
+ 14, 49, 44, 44, 18, 44, 2, 44,
+ 3, 3, 44, 5, 44, 6, 44, 44,
+ 44, 44, 44, 44, 44, 44, 44, 44,
+ 44, 44, 44, 44, 14, 44, 44, 44,
+ 18, 44, 2, 44, 3, 3, 44, 5,
+ 44, 6, 44, 44, 44, 44, 44, 44,
+ 44, 48, 44, 44, 44, 44, 44, 44,
+ 14, 49, 44, 44, 18, 44, 2, 44,
+ 3, 3, 44, 5, 44, 6, 44, 44,
+ 44, 44, 44, 44, 44, 44, 44, 44,
+ 44, 44, 44, 44, 14, 49, 44, 44,
+ 18, 44, 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, 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
+ 21, 50, 21, 21, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 21, 22,
+ 51, 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, 44, 5, 44, 6, 1, 44, 44,
+ 44, 44, 1, 44, 8, 44, 44, 10,
+ 11, 12, 13, 14, 15, 16, 17, 18,
+ 19, 44, 1, 44, 2, 44, 3, 3,
+ 44, 5, 44, 6, 44, 44, 44, 44,
+ 44, 44, 44, 8, 44, 44, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 44,
+ 2, 44, 3, 3, 44, 5, 44, 6,
+ 44, 44, 44, 44, 44, 44, 44, 52,
+ 44, 44, 44, 44, 44, 44, 14, 15,
+ 16, 17, 18, 44, 2, 44, 3, 3,
+ 44, 5, 44, 6, 44, 44, 44, 44,
+ 44, 44, 44, 44, 44, 44, 44, 44,
+ 44, 44, 14, 15, 16, 17, 18, 44,
+ 2, 44, 3, 3, 44, 5, 44, 6,
+ 44, 44, 44, 44, 44, 44, 44, 44,
+ 44, 44, 44, 44, 44, 44, 14, 15,
+ 16, 44, 18, 44, 2, 44, 3, 3,
+ 44, 5, 44, 6, 44, 44, 44, 44,
+ 44, 44, 44, 44, 44, 44, 44, 44,
+ 44, 44, 14, 44, 16, 44, 18, 44,
+ 2, 44, 3, 3, 44, 5, 44, 6,
+ 44, 44, 44, 44, 44, 44, 44, 44,
+ 44, 44, 44, 44, 44, 44, 14, 15,
+ 16, 17, 18, 52, 44, 2, 44, 3,
+ 3, 44, 5, 44, 6, 44, 44, 44,
+ 44, 44, 44, 44, 52, 44, 44, 10,
+ 44, 12, 44, 14, 15, 16, 17, 18,
+ 44, 2, 44, 3, 3, 44, 5, 44,
+ 6, 44, 44, 44, 44, 44, 44, 44,
+ 52, 44, 44, 10, 44, 44, 44, 14,
+ 15, 16, 17, 18, 44, 2, 44, 3,
+ 3, 44, 5, 44, 6, 44, 44, 44,
+ 44, 44, 44, 44, 52, 44, 44, 10,
+ 11, 12, 44, 14, 15, 16, 17, 18,
+ 44, 2, 3, 3, 3, 44, 5, 44,
+ 6, 44, 44, 44, 44, 44, 44, 44,
+ 8, 44, 44, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 44, 1, 1, 53,
+ 53, 53, 53, 53, 53, 53, 53, 1,
+ 53, 53, 53, 53, 1, 53, 53, 53,
+ 53, 53, 53, 53, 53, 53, 53, 53,
+ 53, 53, 53, 53, 1, 53, 54, 53,
+ 0
};
static const char _myanmar_syllable_machine_trans_targs[] = {
- 0, 1, 22, 0, 0, 23, 29, 32,
- 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
+ 0, 1, 23, 0, 0, 24, 30, 33,
+ 36, 46, 37, 42, 43, 44, 26, 39,
+ 40, 41, 29, 45, 47, 0, 2, 12,
+ 0, 3, 9, 13, 14, 19, 20, 21,
+ 5, 16, 17, 18, 8, 22, 4, 6,
+ 7, 10, 11, 15, 0, 25, 27, 28,
+ 31, 32, 34, 35, 38, 0, 0
};
static const char _myanmar_syllable_machine_trans_actions[] = {
@@ -227,8 +236,8 @@ static const char _myanmar_syllable_machine_trans_actions[] = {
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, 8, 0, 0, 0, 0,
- 0, 0, 0, 9, 10
+ 0, 0, 0, 0, 8, 0, 0, 0,
+ 0, 0, 0, 0, 0, 9, 10
};
static const char _myanmar_syllable_machine_to_state_actions[] = {
@@ -237,7 +246,7 @@ static const char _myanmar_syllable_machine_to_state_actions[] = {
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, 0, 0, 0
};
static const char _myanmar_syllable_machine_from_state_actions[] = {
@@ -246,16 +255,16 @@ static const char _myanmar_syllable_machine_from_state_actions[] = {
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, 0, 0, 0
};
static const short _myanmar_syllable_machine_eof_trans[] = {
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
+ 22, 22, 22, 22, 22, 22, 22, 45,
+ 45, 45, 45, 45, 45, 45, 45, 45,
+ 45, 22, 22, 45, 45, 45, 45, 45,
+ 45, 45, 45, 45, 45, 45, 54, 54
};
static const int myanmar_syllable_machine_start = 0;
@@ -289,7 +298,7 @@ find_syllables (hb_buffer_t *buffer)
int cs;
hb_glyph_info_t *info = buffer->info;
-#line 293 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 302 "hb-ot-shape-complex-myanmar-machine.hh"
{
cs = myanmar_syllable_machine_start;
ts = 0;
@@ -306,7 +315,7 @@ find_syllables (hb_buffer_t *buffer)
unsigned int last = 0;
unsigned int syllable_serial = 1;
-#line 310 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 319 "hb-ot-shape-complex-myanmar-machine.hh"
{
int _slen;
int _trans;
@@ -320,7 +329,7 @@ _resume:
#line 1 "NONE"
{ts = p;}
break;
-#line 324 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 333 "hb-ot-shape-complex-myanmar-machine.hh"
}
_keys = _myanmar_syllable_machine_trans_keys + (cs<<1);
@@ -370,7 +379,7 @@ _eof_trans:
#line 90 "hb-ot-shape-complex-myanmar-machine.rl"
{te = p;p--;{ found_syllable (non_myanmar_cluster); }}
break;
-#line 374 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 383 "hb-ot-shape-complex-myanmar-machine.hh"
}
_again:
@@ -379,7 +388,7 @@ _again:
#line 1 "NONE"
{ts = 0;}
break;
-#line 383 "hb-ot-shape-complex-myanmar-machine.hh"
+#line 392 "hb-ot-shape-complex-myanmar-machine.hh"
}
if ( ++p != pe )
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.rl b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.rl
index 45733ac733e..0cd84fa1b88 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.rl
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-machine.rl
@@ -70,7 +70,7 @@ k = (Ra As H); # Kinzi
c = C|Ra; # is_consonant
medial_group = MY? MR? MW? MH? As?;
-main_vowel_group = VPre* VAbv* VBlw* A* (DB As?)?;
+main_vowel_group = (VPre.VS?)* VAbv* VBlw* A* (DB As?)?;
post_vowel_group = VPst MH? As* VAbv* A* (DB As?)?;
pwo_tone_group = PT A* DB? As?;
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-private.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-private.hh
new file mode 100644
index 00000000000..04f81bd1227
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar-private.hh
@@ -0,0 +1,171 @@
+/*
+ * Copyright © 2018 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#ifndef HB_OT_SHAPE_COMPLEX_MYANMAR_PRIVATE_HH
+#define HB_OT_SHAPE_COMPLEX_MYANMAR_PRIVATE_HH
+
+#include "hb-private.hh"
+
+#include "hb-ot-shape-complex-indic-private.hh"
+
+
+/* buffer var allocations */
+#define myanmar_category() indic_category() /* myanmar_category_t */
+#define myanmar_position() indic_position() /* myanmar_position_t */
+
+
+/* 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_D0 = 20, /* Digit zero */
+ OT_DB = OT_N, /* Dot below */
+ OT_GB = OT_PLACEHOLDER,
+ OT_MH = 21, /* Various consonant medial types */
+ OT_MR = 22, /* Various consonant medial types */
+ OT_MW = 23, /* Various consonant medial types */
+ OT_MY = 24, /* Various consonant medial types */
+ OT_PT = 25, /* Pwo and other tones */
+ OT_VAbv = 26,
+ OT_VBlw = 27,
+ OT_VPre = 28,
+ OT_VPst = 29,
+ OT_VS = 30, /* Variation selectors */
+ OT_P = 31, /* Punctuation */
+ OT_D = 32, /* Digits except zero */
+};
+
+
+static inline void
+set_myanmar_properties (hb_glyph_info_t &info)
+{
+ hb_codepoint_t u = info.codepoint;
+ unsigned int type = hb_indic_get_categories (u);
+ indic_category_t cat = (indic_category_t) (type & 0x7Fu);
+ indic_position_t pos = (indic_position_t) (type >> 8);
+
+ /* Myanmar
+ * http://www.microsoft.com/typography/OpenTypeDev/myanmar/intro.htm#analyze
+ */
+ if (unlikely (hb_in_range<hb_codepoint_t> (u, 0xFE00u, 0xFE0Fu)))
+ cat = (indic_category_t) OT_VS;
+
+ switch (u)
+ {
+ case 0x104Eu:
+ cat = (indic_category_t) OT_C; /* The spec says C, IndicSyllableCategory doesn't have. */
+ break;
+
+ case 0x002Du: case 0x00A0u: case 0x00D7u: case 0x2012u:
+ case 0x2013u: case 0x2014u: case 0x2015u: case 0x2022u:
+ case 0x25CCu: case 0x25FBu: case 0x25FCu: case 0x25FDu:
+ case 0x25FEu:
+ cat = (indic_category_t) OT_GB;
+ break;
+
+ case 0x1004u: case 0x101Bu: case 0x105Au:
+ cat = (indic_category_t) OT_Ra;
+ break;
+
+ case 0x1032u: case 0x1036u:
+ cat = (indic_category_t) OT_A;
+ break;
+
+ case 0x1039u:
+ cat = (indic_category_t) OT_H;
+ break;
+
+ case 0x103Au:
+ cat = (indic_category_t) OT_As;
+ break;
+
+ case 0x1041u: case 0x1042u: case 0x1043u: case 0x1044u:
+ case 0x1045u: case 0x1046u: case 0x1047u: case 0x1048u:
+ case 0x1049u: case 0x1090u: case 0x1091u: case 0x1092u:
+ case 0x1093u: case 0x1094u: case 0x1095u: case 0x1096u:
+ case 0x1097u: case 0x1098u: case 0x1099u:
+ cat = (indic_category_t) OT_D;
+ break;
+
+ case 0x1040u:
+ cat = (indic_category_t) OT_D; /* XXX The spec says D0, but Uniscribe doesn't seem to do. */
+ break;
+
+ case 0x103Eu: case 0x1060u:
+ cat = (indic_category_t) OT_MH;
+ break;
+
+ case 0x103Cu:
+ cat = (indic_category_t) OT_MR;
+ break;
+
+ case 0x103Du: case 0x1082u:
+ cat = (indic_category_t) OT_MW;
+ break;
+
+ case 0x103Bu: case 0x105Eu: case 0x105Fu:
+ cat = (indic_category_t) OT_MY;
+ break;
+
+ case 0x1063u: case 0x1064u: case 0x1069u: case 0x106Au:
+ case 0x106Bu: case 0x106Cu: case 0x106Du: case 0xAA7Bu:
+ cat = (indic_category_t) OT_PT;
+ break;
+
+ case 0x1038u: case 0x1087u: case 0x1088u: case 0x1089u:
+ case 0x108Au: case 0x108Bu: case 0x108Cu: case 0x108Du:
+ case 0x108Fu: case 0x109Au: case 0x109Bu: case 0x109Cu:
+ cat = (indic_category_t) OT_SM;
+ break;
+
+ case 0x104Au: case 0x104Bu:
+ cat = (indic_category_t) OT_P;
+ break;
+
+ case 0xAA74u: case 0xAA75u: case 0xAA76u:
+ /* https://github.com/roozbehp/unicode-data/issues/3 */
+ cat = (indic_category_t) OT_C;
+ break;
+ }
+
+ if (cat == OT_M)
+ {
+ switch ((int) pos)
+ {
+ case POS_PRE_C: cat = (indic_category_t) OT_VPre;
+ pos = POS_PRE_M; break;
+ case POS_ABOVE_C: cat = (indic_category_t) OT_VAbv; break;
+ case POS_BELOW_C: cat = (indic_category_t) OT_VBlw; break;
+ case POS_POST_C: cat = (indic_category_t) OT_VPst; break;
+ }
+ }
+
+ info.myanmar_category() = (myanmar_category_t) cat;
+ info.myanmar_position() = pos;
+}
+
+
+#endif /* HB_OT_SHAPE_COMPLEX_MYANMAR_PRIVATE_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar.cc
index 5ea1dbff27a..3c57bc1ff66 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-myanmar.cc
@@ -24,11 +24,7 @@
* Google Author(s): Behdad Esfahbod
*/
-#include "hb-ot-shape-complex-indic-private.hh"
-
-/* buffer var allocations */
-#define myanmar_category() complex_var_u8_0() /* myanmar_category_t */
-#define myanmar_position() complex_var_u8_1() /* myanmar_position_t */
+#include "hb-ot-shape-complex-myanmar-private.hh"
/*
@@ -127,153 +123,6 @@ enum syllable_type_t {
#include "hb-ot-shape-complex-myanmar-machine.hh"
-/* 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_D0 = 20, /* Digit zero */
- OT_DB = OT_N, /* Dot below */
- OT_GB = OT_PLACEHOLDER,
- OT_MH = 21, /* Various consonant medial types */
- OT_MR = 22, /* Various consonant medial types */
- OT_MW = 23, /* Various consonant medial types */
- OT_MY = 24, /* Various consonant medial types */
- OT_PT = 25, /* Pwo and other tones */
- OT_VAbv = 26,
- OT_VBlw = 27,
- OT_VPre = 28,
- OT_VPst = 29,
- OT_VS = 30, /* Variation selectors */
- OT_P = 31, /* Punctuation */
- OT_D = 32, /* Digits except zero */
-};
-
-
-static inline bool
-is_one_of (const hb_glyph_info_t &info, unsigned int flags)
-{
- /* If it ligated, all bets are off. */
- if (_hb_glyph_info_ligated (&info)) return false;
- return !!(FLAG_UNSAFE (info.myanmar_category()) & flags);
-}
-
-static inline bool
-is_consonant (const hb_glyph_info_t &info)
-{
- return is_one_of (info, CONSONANT_FLAGS);
-}
-
-
-static inline void
-set_myanmar_properties (hb_glyph_info_t &info)
-{
- hb_codepoint_t u = info.codepoint;
- unsigned int type = hb_indic_get_categories (u);
- indic_category_t cat = (indic_category_t) (type & 0x7Fu);
- indic_position_t pos = (indic_position_t) (type >> 8);
-
- /* Myanmar
- * http://www.microsoft.com/typography/OpenTypeDev/myanmar/intro.htm#analyze
- */
- if (unlikely (hb_in_range<hb_codepoint_t> (u, 0xFE00u, 0xFE0Fu)))
- cat = (indic_category_t) OT_VS;
-
- switch (u)
- {
- case 0x104Eu:
- cat = (indic_category_t) OT_C; /* The spec says C, IndicSyllableCategory doesn't have. */
- break;
-
- case 0x002Du: case 0x00A0u: case 0x00D7u: case 0x2012u:
- case 0x2013u: case 0x2014u: case 0x2015u: case 0x2022u:
- case 0x25CCu: case 0x25FBu: case 0x25FCu: case 0x25FDu:
- case 0x25FEu:
- cat = (indic_category_t) OT_GB;
- break;
-
- case 0x1004u: case 0x101Bu: case 0x105Au:
- cat = (indic_category_t) OT_Ra;
- break;
-
- case 0x1032u: case 0x1036u:
- cat = (indic_category_t) OT_A;
- break;
-
- case 0x1039u:
- cat = (indic_category_t) OT_H;
- break;
-
- case 0x103Au:
- cat = (indic_category_t) OT_As;
- break;
-
- case 0x1041u: case 0x1042u: case 0x1043u: case 0x1044u:
- case 0x1045u: case 0x1046u: case 0x1047u: case 0x1048u:
- case 0x1049u: case 0x1090u: case 0x1091u: case 0x1092u:
- case 0x1093u: case 0x1094u: case 0x1095u: case 0x1096u:
- case 0x1097u: case 0x1098u: case 0x1099u:
- cat = (indic_category_t) OT_D;
- break;
-
- case 0x1040u:
- cat = (indic_category_t) OT_D; /* XXX The spec says D0, but Uniscribe doesn't seem to do. */
- break;
-
- case 0x103Eu: case 0x1060u:
- cat = (indic_category_t) OT_MH;
- break;
-
- case 0x103Cu:
- cat = (indic_category_t) OT_MR;
- break;
-
- case 0x103Du: case 0x1082u:
- cat = (indic_category_t) OT_MW;
- break;
-
- case 0x103Bu: case 0x105Eu: case 0x105Fu:
- cat = (indic_category_t) OT_MY;
- break;
-
- case 0x1063u: case 0x1064u: case 0x1069u: case 0x106Au:
- case 0x106Bu: case 0x106Cu: case 0x106Du: case 0xAA7Bu:
- cat = (indic_category_t) OT_PT;
- break;
-
- case 0x1038u: case 0x1087u: case 0x1088u: case 0x1089u:
- case 0x108Au: case 0x108Bu: case 0x108Cu: case 0x108Du:
- case 0x108Fu: case 0x109Au: case 0x109Bu: case 0x109Cu:
- cat = (indic_category_t) OT_SM;
- break;
-
- case 0x104Au: case 0x104Bu:
- cat = (indic_category_t) OT_P;
- break;
-
- case 0xAA74u: case 0xAA75u: case 0xAA76u:
- /* https://github.com/roozbehp/unicode-data/issues/3 */
- cat = (indic_category_t) OT_C;
- break;
- }
-
- if (cat == OT_M)
- {
- switch ((int) pos)
- {
- case POS_PRE_C: cat = (indic_category_t) OT_VPre;
- pos = POS_PRE_M; break;
- case POS_ABOVE_C: cat = (indic_category_t) OT_VAbv; break;
- case POS_BELOW_C: cat = (indic_category_t) OT_VBlw; break;
- case POS_POST_C: cat = (indic_category_t) OT_VPst; break;
- }
- }
-
- info.myanmar_category() = (myanmar_category_t) cat;
- info.myanmar_position() = pos;
-}
-
-
-
static void
setup_masks_myanmar (const hb_ot_shape_plan_t *plan HB_UNUSED,
hb_buffer_t *buffer,
@@ -374,6 +223,11 @@ initial_reordering_consonant_syllable (hb_buffer_t *buffer,
{
continue;
}
+ if (info[i].myanmar_category() == OT_VS)
+ {
+ info[i].myanmar_position() = info[i - 1].myanmar_position();
+ continue;
+ }
if (pos == POS_AFTER_MAIN && info[i].myanmar_category() == OT_VBlw)
{
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.hh
index e767865bc4b..0bf3ad3024a 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.hh
@@ -36,281 +36,279 @@
#line 38 "hb-ot-shape-complex-use-machine.hh"
static const unsigned char _use_syllable_machine_trans_keys[] = {
- 1u, 1u, 12u, 12u, 1u, 15u, 1u, 15u, 1u, 1u, 12u, 12u, 0u, 43u, 21u, 21u,
- 8u, 39u, 8u, 39u, 1u, 15u, 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,
+ 12u, 12u, 1u, 15u, 1u, 1u, 12u, 12u, 0u, 43u, 21u, 21u, 8u, 39u, 8u, 39u,
+ 1u, 15u, 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, 1u, 15u, 12u, 12u, 1u, 39u, 8u, 39u, 21u, 42u, 41u, 42u,
- 42u, 42u, 1u, 5u, 0
+ 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, 15u, 12u, 12u, 1u, 39u, 8u, 39u, 21u, 42u, 41u, 42u, 42u, 42u,
+ 1u, 5u, 0
};
static const char _use_syllable_machine_key_spans[] = {
- 1, 1, 15, 15, 1, 1, 44, 1,
- 32, 32, 15, 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,
+ 1, 15, 1, 1, 44, 1, 32, 32,
+ 15, 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, 32, 15, 1, 39, 32, 22, 2,
- 1, 5
+ 32, 15, 1, 39, 32, 22, 2, 1,
+ 5
};
static const short _use_syllable_machine_index_offsets[] = {
- 0, 2, 4, 20, 36, 38, 40, 85,
- 87, 120, 153, 169, 202, 235, 268, 288,
- 308, 328, 361, 394, 427, 460, 493, 526,
- 559, 592, 625, 658, 691, 724, 734, 736,
- 738, 771, 804, 837, 870, 890, 910, 930,
- 963, 996, 1029, 1062, 1095, 1128, 1161, 1194,
- 1227, 1260, 1293, 1309, 1311, 1351, 1384, 1407,
- 1410, 1412
+ 0, 2, 18, 20, 22, 67, 69, 102,
+ 135, 151, 153, 186, 219, 252, 272, 292,
+ 312, 345, 378, 411, 444, 477, 510, 543,
+ 576, 609, 642, 675, 708, 718, 720, 722,
+ 755, 788, 821, 854, 874, 894, 914, 947,
+ 980, 1013, 1046, 1079, 1112, 1145, 1178, 1211,
+ 1244, 1277, 1293, 1295, 1335, 1368, 1391, 1394,
+ 1396
};
static const char _use_syllable_machine_indicies[] = {
- 1, 0, 3, 2, 1, 2, 2, 2,
+ 1, 0, 3, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2,
- 2, 2, 4, 2, 5, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 6, 0, 5, 0, 8, 7,
- 9, 10, 11, 9, 12, 10, 11, 11,
- 13, 11, 11, 5, 14, 11, 11, 15,
- 9, 9, 16, 17, 11, 11, 18, 19,
- 20, 21, 22, 23, 24, 18, 25, 26,
- 27, 28, 29, 30, 11, 31, 32, 33,
- 11, 11, 11, 34, 11, 36, 35, 38,
- 37, 37, 1, 39, 37, 37, 40, 37,
- 37, 37, 37, 37, 41, 42, 43, 44,
- 45, 46, 47, 48, 42, 49, 41, 50,
- 51, 52, 53, 37, 54, 55, 56, 37,
- 38, 37, 37, 1, 39, 37, 37, 40,
- 37, 37, 37, 37, 37, 57, 42, 43,
- 44, 45, 46, 47, 48, 42, 49, 50,
- 50, 51, 52, 53, 37, 54, 55, 56,
- 37, 1, 58, 58, 58, 58, 58, 58,
- 58, 58, 58, 58, 58, 58, 58, 4,
- 58, 38, 37, 37, 1, 39, 37, 37,
- 40, 37, 37, 37, 37, 37, 37, 42,
- 43, 44, 45, 46, 47, 48, 42, 49,
- 50, 50, 51, 52, 53, 37, 54, 55,
- 56, 37, 38, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 37, 37,
- 42, 43, 44, 45, 46, 37, 37, 37,
- 37, 37, 37, 51, 52, 53, 37, 54,
- 55, 56, 37, 38, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 43, 44, 45, 46, 37, 37,
- 37, 37, 37, 37, 37, 37, 37, 37,
- 54, 55, 56, 37, 38, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 44, 45, 46, 37,
- 38, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 45, 46, 37, 38, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 46, 37,
- 38, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 37, 37,
- 44, 45, 46, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 54, 55, 56,
- 37, 38, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 44, 45, 46, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 37, 55,
- 56, 37, 38, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 44, 45, 46, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 56, 37, 38, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 43, 44, 45, 46, 37, 37,
- 37, 37, 37, 37, 51, 52, 53, 37,
- 54, 55, 56, 37, 38, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 43, 44, 45, 46, 37,
- 37, 37, 37, 37, 37, 37, 52, 53,
- 37, 54, 55, 56, 37, 38, 37, 37,
- 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 43, 44, 45, 46,
- 37, 37, 37, 37, 37, 37, 37, 37,
- 53, 37, 54, 55, 56, 37, 38, 37,
- 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 42, 43, 44, 45,
- 46, 37, 48, 42, 37, 37, 37, 51,
- 52, 53, 37, 54, 55, 56, 37, 38,
- 37, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 42, 43, 44,
- 45, 46, 37, 59, 42, 37, 37, 37,
- 51, 52, 53, 37, 54, 55, 56, 37,
- 38, 37, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 42, 43,
- 44, 45, 46, 37, 37, 42, 37, 37,
- 37, 51, 52, 53, 37, 54, 55, 56,
- 37, 38, 37, 37, 37, 37, 37, 37,
- 37, 37, 37, 37, 37, 37, 37, 42,
- 43, 44, 45, 46, 47, 48, 42, 37,
- 37, 37, 51, 52, 53, 37, 54, 55,
- 56, 37, 38, 37, 37, 1, 39, 37,
- 37, 40, 37, 37, 37, 37, 37, 37,
- 42, 43, 44, 45, 46, 47, 48, 42,
- 49, 37, 50, 51, 52, 53, 37, 54,
- 55, 56, 37, 38, 37, 37, 1, 39,
- 37, 37, 40, 37, 37, 37, 37, 37,
- 37, 42, 43, 44, 45, 46, 47, 48,
- 42, 49, 41, 50, 51, 52, 53, 37,
- 54, 55, 56, 37, 61, 60, 60, 60,
- 60, 60, 60, 60, 62, 60, 12, 63,
- 61, 60, 13, 64, 64, 5, 8, 64,
- 64, 65, 64, 64, 64, 64, 64, 66,
- 18, 19, 20, 21, 22, 23, 24, 18,
- 25, 27, 27, 28, 29, 30, 64, 31,
- 32, 33, 64, 13, 64, 64, 5, 8,
- 64, 64, 65, 64, 64, 64, 64, 64,
- 64, 18, 19, 20, 21, 22, 23, 24,
- 18, 25, 27, 27, 28, 29, 30, 64,
- 31, 32, 33, 64, 13, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 18, 19, 20, 21, 22, 64,
- 64, 64, 64, 64, 64, 28, 29, 30,
- 64, 31, 32, 33, 64, 13, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 19, 20, 21, 22,
- 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 31, 32, 33, 64, 13, 64,
- 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 20, 21,
- 22, 64, 13, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 21, 22, 64, 13, 64,
- 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64,
- 22, 64, 13, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 20, 21, 22, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 31,
- 32, 33, 64, 13, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 20, 21, 22, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 32, 33, 64, 13, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 20, 21, 22, 64,
- 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 33, 64, 13, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 19, 20, 21, 22,
- 64, 64, 64, 64, 64, 64, 28, 29,
- 30, 64, 31, 32, 33, 64, 13, 64,
- 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 19, 20, 21,
- 22, 64, 64, 64, 64, 64, 64, 64,
- 29, 30, 64, 31, 32, 33, 64, 13,
- 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 19, 20,
- 21, 22, 64, 64, 64, 64, 64, 64,
- 64, 64, 30, 64, 31, 32, 33, 64,
- 13, 64, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 18, 19,
- 20, 21, 22, 64, 24, 18, 64, 64,
- 64, 28, 29, 30, 64, 31, 32, 33,
- 64, 13, 64, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 18,
- 19, 20, 21, 22, 64, 67, 18, 64,
- 64, 64, 28, 29, 30, 64, 31, 32,
- 33, 64, 13, 64, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64,
- 18, 19, 20, 21, 22, 64, 64, 18,
- 64, 64, 64, 28, 29, 30, 64, 31,
- 32, 33, 64, 13, 64, 64, 64, 64,
- 64, 64, 64, 64, 64, 64, 64, 64,
- 64, 18, 19, 20, 21, 22, 23, 24,
- 18, 64, 64, 64, 28, 29, 30, 64,
- 31, 32, 33, 64, 13, 64, 64, 5,
- 8, 64, 64, 65, 64, 64, 64, 64,
- 64, 64, 18, 19, 20, 21, 22, 23,
- 24, 18, 25, 64, 27, 28, 29, 30,
- 64, 31, 32, 33, 64, 5, 68, 68,
+ 4, 2, 3, 2, 6, 5, 7, 8,
+ 9, 7, 10, 8, 9, 9, 11, 9,
+ 9, 3, 12, 9, 9, 13, 7, 7,
+ 14, 15, 9, 9, 16, 17, 18, 19,
+ 20, 21, 22, 16, 23, 24, 25, 26,
+ 27, 28, 9, 29, 30, 31, 9, 9,
+ 9, 32, 9, 34, 33, 36, 35, 35,
+ 37, 1, 35, 35, 38, 35, 35, 35,
+ 35, 35, 39, 40, 41, 42, 43, 44,
+ 45, 46, 40, 47, 39, 48, 49, 50,
+ 51, 35, 52, 53, 54, 35, 36, 35,
+ 35, 37, 1, 35, 35, 38, 35, 35,
+ 35, 35, 35, 55, 40, 41, 42, 43,
+ 44, 45, 46, 40, 47, 48, 48, 49,
+ 50, 51, 35, 52, 53, 54, 35, 37,
+ 56, 56, 56, 56, 56, 56, 56, 56,
+ 56, 56, 56, 56, 56, 57, 56, 37,
+ 56, 36, 35, 35, 37, 1, 35, 35,
+ 38, 35, 35, 35, 35, 35, 35, 40,
+ 41, 42, 43, 44, 45, 46, 40, 47,
+ 48, 48, 49, 50, 51, 35, 52, 53,
+ 54, 35, 36, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35,
+ 40, 41, 42, 43, 44, 35, 35, 35,
+ 35, 35, 35, 49, 50, 51, 35, 52,
+ 53, 54, 35, 36, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 41, 42, 43, 44, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35,
+ 52, 53, 54, 35, 36, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 42, 43, 44, 35,
+ 36, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 43, 44, 35, 36, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 44, 35,
+ 36, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35,
+ 42, 43, 44, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 52, 53, 54,
+ 35, 36, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 42, 43, 44, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 53,
+ 54, 35, 36, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 42, 43, 44, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 54, 35, 36, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 41, 42, 43, 44, 35, 35,
+ 35, 35, 35, 35, 49, 50, 51, 35,
+ 52, 53, 54, 35, 36, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 41, 42, 43, 44, 35,
+ 35, 35, 35, 35, 35, 35, 50, 51,
+ 35, 52, 53, 54, 35, 36, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 41, 42, 43, 44,
+ 35, 35, 35, 35, 35, 35, 35, 35,
+ 51, 35, 52, 53, 54, 35, 36, 35,
+ 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 40, 41, 42, 43,
+ 44, 35, 46, 40, 35, 35, 35, 49,
+ 50, 51, 35, 52, 53, 54, 35, 36,
+ 35, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 40, 41, 42,
+ 43, 44, 35, 58, 40, 35, 35, 35,
+ 49, 50, 51, 35, 52, 53, 54, 35,
+ 36, 35, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 40, 41,
+ 42, 43, 44, 35, 35, 40, 35, 35,
+ 35, 49, 50, 51, 35, 52, 53, 54,
+ 35, 36, 35, 35, 35, 35, 35, 35,
+ 35, 35, 35, 35, 35, 35, 35, 40,
+ 41, 42, 43, 44, 45, 46, 40, 35,
+ 35, 35, 49, 50, 51, 35, 52, 53,
+ 54, 35, 36, 35, 35, 37, 1, 35,
+ 35, 38, 35, 35, 35, 35, 35, 35,
+ 40, 41, 42, 43, 44, 45, 46, 40,
+ 47, 35, 48, 49, 50, 51, 35, 52,
+ 53, 54, 35, 36, 35, 35, 37, 1,
+ 35, 35, 38, 35, 35, 35, 35, 35,
+ 35, 40, 41, 42, 43, 44, 45, 46,
+ 40, 47, 39, 48, 49, 50, 51, 35,
+ 52, 53, 54, 35, 60, 59, 59, 59,
+ 59, 59, 59, 59, 61, 59, 10, 62,
+ 60, 59, 11, 63, 63, 3, 6, 63,
+ 63, 64, 63, 63, 63, 63, 63, 65,
+ 16, 17, 18, 19, 20, 21, 22, 16,
+ 23, 25, 25, 26, 27, 28, 63, 29,
+ 30, 31, 63, 11, 63, 63, 3, 6,
+ 63, 63, 64, 63, 63, 63, 63, 63,
+ 63, 16, 17, 18, 19, 20, 21, 22,
+ 16, 23, 25, 25, 26, 27, 28, 63,
+ 29, 30, 31, 63, 11, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 16, 17, 18, 19, 20, 63,
+ 63, 63, 63, 63, 63, 26, 27, 28,
+ 63, 29, 30, 31, 63, 11, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 17, 18, 19, 20,
+ 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 29, 30, 31, 63, 11, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 18, 19,
+ 20, 63, 11, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 19, 20, 63, 11, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63,
+ 20, 63, 11, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 18, 19, 20, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 29,
+ 30, 31, 63, 11, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 18, 19, 20, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 30, 31, 63, 11, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 18, 19, 20, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 31, 63, 11, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 17, 18, 19, 20,
+ 63, 63, 63, 63, 63, 63, 26, 27,
+ 28, 63, 29, 30, 31, 63, 11, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 17, 18, 19,
+ 20, 63, 63, 63, 63, 63, 63, 63,
+ 27, 28, 63, 29, 30, 31, 63, 11,
+ 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 17, 18,
+ 19, 20, 63, 63, 63, 63, 63, 63,
+ 63, 63, 28, 63, 29, 30, 31, 63,
+ 11, 63, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 16, 17,
+ 18, 19, 20, 63, 22, 16, 63, 63,
+ 63, 26, 27, 28, 63, 29, 30, 31,
+ 63, 11, 63, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 16,
+ 17, 18, 19, 20, 63, 66, 16, 63,
+ 63, 63, 26, 27, 28, 63, 29, 30,
+ 31, 63, 11, 63, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63,
+ 16, 17, 18, 19, 20, 63, 63, 16,
+ 63, 63, 63, 26, 27, 28, 63, 29,
+ 30, 31, 63, 11, 63, 63, 63, 63,
+ 63, 63, 63, 63, 63, 63, 63, 63,
+ 63, 16, 17, 18, 19, 20, 21, 22,
+ 16, 63, 63, 63, 26, 27, 28, 63,
+ 29, 30, 31, 63, 11, 63, 63, 3,
+ 6, 63, 63, 64, 63, 63, 63, 63,
+ 63, 63, 16, 17, 18, 19, 20, 21,
+ 22, 16, 23, 63, 25, 26, 27, 28,
+ 63, 29, 30, 31, 63, 3, 67, 67,
+ 67, 67, 67, 67, 67, 67, 67, 67,
+ 67, 67, 67, 4, 67, 6, 67, 8,
+ 63, 63, 63, 8, 63, 63, 11, 63,
+ 63, 3, 6, 63, 63, 64, 63, 63,
+ 63, 63, 63, 63, 16, 17, 18, 19,
+ 20, 21, 22, 16, 23, 24, 25, 26,
+ 27, 28, 63, 29, 30, 31, 63, 11,
+ 63, 63, 3, 6, 63, 63, 64, 63,
+ 63, 63, 63, 63, 63, 16, 17, 18,
+ 19, 20, 21, 22, 16, 23, 24, 25,
+ 26, 27, 28, 63, 29, 30, 31, 63,
+ 69, 68, 68, 68, 68, 68, 68, 68,
68, 68, 68, 68, 68, 68, 68, 68,
- 68, 68, 68, 6, 68, 8, 68, 10,
- 64, 64, 64, 10, 64, 64, 13, 64,
- 64, 5, 8, 64, 64, 65, 64, 64,
- 64, 64, 64, 64, 18, 19, 20, 21,
- 22, 23, 24, 18, 25, 26, 27, 28,
- 29, 30, 64, 31, 32, 33, 64, 13,
- 64, 64, 5, 8, 64, 64, 65, 64,
- 64, 64, 64, 64, 64, 18, 19, 20,
- 21, 22, 23, 24, 18, 25, 26, 27,
- 28, 29, 30, 64, 31, 32, 33, 64,
- 70, 69, 69, 69, 69, 69, 69, 69,
- 69, 69, 69, 69, 69, 69, 69, 69,
- 69, 69, 69, 69, 70, 71, 69, 70,
- 71, 69, 71, 69, 10, 68, 68, 68,
- 10, 68, 0
+ 68, 68, 68, 68, 69, 70, 68, 69,
+ 70, 68, 70, 68, 8, 67, 67, 67,
+ 8, 67, 0
};
static const char _use_syllable_machine_trans_targs[] = {
- 6, 9, 6, 2, 0, 32, 4, 6,
- 3, 7, 8, 6, 29, 6, 50, 51,
- 52, 54, 34, 35, 36, 37, 38, 45,
- 46, 48, 53, 49, 42, 43, 44, 39,
- 40, 41, 57, 6, 6, 6, 6, 10,
- 1, 28, 12, 13, 14, 15, 16, 23,
- 24, 26, 27, 20, 21, 22, 17, 18,
- 19, 11, 6, 25, 6, 30, 31, 6,
- 6, 5, 33, 47, 6, 6, 55, 56
+ 4, 8, 4, 31, 2, 4, 1, 5,
+ 6, 4, 28, 4, 49, 50, 51, 53,
+ 33, 34, 35, 36, 37, 44, 45, 47,
+ 52, 48, 41, 42, 43, 38, 39, 40,
+ 56, 4, 4, 4, 4, 7, 0, 27,
+ 11, 12, 13, 14, 15, 22, 23, 25,
+ 26, 19, 20, 21, 16, 17, 18, 10,
+ 4, 9, 24, 4, 29, 30, 4, 4,
+ 3, 32, 46, 4, 4, 54, 55
};
static const char _use_syllable_machine_trans_actions[] = {
- 1, 2, 3, 0, 0, 4, 0, 5,
- 0, 0, 2, 8, 0, 9, 10, 10,
- 4, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 4, 4, 0, 0, 0, 0,
- 0, 0, 0, 11, 12, 13, 14, 15,
- 0, 2, 0, 0, 0, 0, 0, 0,
- 0, 0, 2, 0, 0, 0, 0, 0,
- 0, 2, 16, 0, 17, 0, 0, 18,
- 19, 0, 4, 0, 20, 21, 0, 0
+ 1, 0, 2, 3, 0, 4, 0, 0,
+ 7, 8, 0, 9, 10, 10, 3, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 3, 3, 0, 0, 0, 0, 0, 0,
+ 0, 11, 12, 13, 14, 7, 0, 7,
+ 0, 0, 0, 0, 0, 0, 0, 0,
+ 7, 0, 0, 0, 0, 0, 0, 7,
+ 15, 0, 0, 16, 0, 0, 17, 18,
+ 0, 3, 0, 19, 20, 0, 0
};
static const char _use_syllable_machine_to_state_actions[] = {
- 0, 0, 0, 0, 0, 0, 6, 0,
+ 0, 0, 0, 0, 5, 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,
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[] = {
- 0, 0, 0, 0, 0, 0, 7, 0,
+ 0, 0, 0, 0, 6, 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,
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, 3, 3, 1, 1, 8, 0, 36,
- 38, 38, 59, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 38, 38, 38, 38,
- 38, 38, 38, 38, 38, 61, 64, 61,
- 65, 65, 65, 65, 65, 65, 65, 65,
- 65, 65, 65, 65, 65, 65, 65, 65,
- 65, 65, 69, 69, 65, 65, 70, 70,
- 70, 69
+ 1, 3, 3, 6, 0, 34, 36, 36,
+ 57, 57, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 36, 36, 36, 36,
+ 36, 36, 36, 36, 60, 63, 60, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 64, 64, 64, 64, 64, 64, 64,
+ 64, 68, 68, 64, 64, 69, 69, 69,
+ 68
};
-static const int use_syllable_machine_start = 6;
-static const int use_syllable_machine_first_final = 6;
+static const int use_syllable_machine_start = 4;
+static const int use_syllable_machine_first_final = 4;
static const int use_syllable_machine_error = -1;
-static const int use_syllable_machine_en_main = 6;
+static const int use_syllable_machine_en_main = 4;
#line 38 "hb-ot-shape-complex-use-machine.rl"
@@ -337,7 +335,7 @@ find_syllables (hb_buffer_t *buffer)
int cs;
hb_glyph_info_t *info = buffer->info;
-#line 341 "hb-ot-shape-complex-use-machine.hh"
+#line 339 "hb-ot-shape-complex-use-machine.hh"
{
cs = use_syllable_machine_start;
ts = 0;
@@ -354,7 +352,7 @@ find_syllables (hb_buffer_t *buffer)
unsigned int last = 0;
unsigned int syllable_serial = 1;
-#line 358 "hb-ot-shape-complex-use-machine.hh"
+#line 356 "hb-ot-shape-complex-use-machine.hh"
{
int _slen;
int _trans;
@@ -364,11 +362,11 @@ find_syllables (hb_buffer_t *buffer)
goto _test_eof;
_resume:
switch ( _use_syllable_machine_from_state_actions[cs] ) {
- case 7:
+ case 6:
#line 1 "NONE"
{ts = p;}
break;
-#line 372 "hb-ot-shape-complex-use-machine.hh"
+#line 370 "hb-ot-shape-complex-use-machine.hh"
}
_keys = _use_syllable_machine_trans_keys + (cs<<1);
@@ -386,6 +384,10 @@ _eof_trans:
goto _again;
switch ( _use_syllable_machine_trans_actions[_trans] ) {
+ case 7:
+#line 1 "NONE"
+ {te = p+1;}
+ break;
case 12:
#line 130 "hb-ot-shape-complex-use-machine.rl"
{te = p+1;{ found_syllable (independent_cluster); }}
@@ -406,7 +408,7 @@ _eof_trans:
#line 130 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (independent_cluster); }}
break;
- case 16:
+ case 15:
#line 131 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (virama_terminated_cluster); }}
break;
@@ -414,43 +416,37 @@ _eof_trans:
#line 132 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (standard_cluster); }}
break;
- case 18:
+ case 17:
#line 133 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (number_joiner_terminated_cluster); }}
break;
- case 17:
+ case 16:
#line 134 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (numeral_cluster); }}
break;
- case 21:
+ case 20:
#line 135 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (symbol_cluster); }}
break;
- case 19:
+ case 18:
#line 136 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (broken_cluster); }}
break;
- case 20:
+ case 19:
#line 137 "hb-ot-shape-complex-use-machine.rl"
{te = p;p--;{ found_syllable (non_cluster); }}
break;
- case 3:
+ case 1:
#line 132 "hb-ot-shape-complex-use-machine.rl"
{{p = ((te))-1;}{ found_syllable (standard_cluster); }}
break;
- case 5:
+ case 4:
#line 136 "hb-ot-shape-complex-use-machine.rl"
{{p = ((te))-1;}{ found_syllable (broken_cluster); }}
break;
- case 1:
+ case 2:
#line 1 "NONE"
{ switch( act ) {
- case 2:
- {{p = ((te))-1;} found_syllable (virama_terminated_cluster); }
- break;
- case 3:
- {{p = ((te))-1;} found_syllable (standard_cluster); }
- break;
case 7:
{{p = ((te))-1;} found_syllable (broken_cluster); }
break;
@@ -460,19 +456,7 @@ _eof_trans:
}
}
break;
- case 15:
-#line 1 "NONE"
- {te = p+1;}
-#line 131 "hb-ot-shape-complex-use-machine.rl"
- {act = 2;}
- break;
- case 2:
-#line 1 "NONE"
- {te = p+1;}
-#line 132 "hb-ot-shape-complex-use-machine.rl"
- {act = 3;}
- break;
- case 4:
+ case 3:
#line 1 "NONE"
{te = p+1;}
#line 136 "hb-ot-shape-complex-use-machine.rl"
@@ -484,16 +468,16 @@ _eof_trans:
#line 137 "hb-ot-shape-complex-use-machine.rl"
{act = 8;}
break;
-#line 488 "hb-ot-shape-complex-use-machine.hh"
+#line 472 "hb-ot-shape-complex-use-machine.hh"
}
_again:
switch ( _use_syllable_machine_to_state_actions[cs] ) {
- case 6:
+ case 5:
#line 1 "NONE"
{ts = 0;}
break;
-#line 497 "hb-ot-shape-complex-use-machine.hh"
+#line 481 "hb-ot-shape-complex-use-machine.hh"
}
if ( ++p != pe )
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.rl b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.rl
index 89b776390b7..11fb47020ac 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.rl
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-machine.rl
@@ -100,7 +100,7 @@ final_consonants = FAbv* FBlw* FPst* FM?;
virama_terminated_cluster =
(R|CS)? (B | GB) VS?
consonant_modifiers
- H
+ ZWJ?.H.ZWJ?
;
standard_cluster =
(R|CS)? (B | GB) VS?
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-private.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-private.hh
index 3e763ae3936..f7ded133d6b 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-private.hh
@@ -92,6 +92,6 @@ enum use_category_t {
};
HB_INTERNAL USE_TABLE_ELEMENT_TYPE
-hb_use_get_categories (hb_codepoint_t u);
+hb_use_get_category (hb_codepoint_t u);
#endif /* HB_OT_SHAPE_COMPLEX_USE_PRIVATE_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-table.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-table.cc
index a67ef061122..6823392f4b4 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-table.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use-table.cc
@@ -690,7 +690,7 @@ static const USE_TABLE_ELEMENT_TYPE use_table[] = {
}; /* Table items: 5424; occupancy: 73% */
USE_TABLE_ELEMENT_TYPE
-hb_use_get_categories (hb_codepoint_t u)
+hb_use_get_category (hb_codepoint_t u)
{
switch (u >> 12)
{
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use.cc
index 62acd697bdd..ee7653b51ce 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-complex-use.cc
@@ -262,7 +262,7 @@ setup_masks_use (const hb_ot_shape_plan_t *plan,
unsigned int count = buffer->len;
hb_glyph_info_t *info = buffer->info;
for (unsigned int i = 0; i < count; i++)
- info[i].use_category() = hb_use_get_categories (info[i].codepoint);
+ info[i].use_category() = hb_use_get_category (info[i].codepoint);
}
static void
@@ -505,7 +505,7 @@ insert_dotted_circles (const hb_ot_shape_plan_t *plan HB_UNUSED,
hb_glyph_info_t dottedcircle = {0};
if (!font->get_nominal_glyph (0x25CCu, &dottedcircle.codepoint))
return;
- dottedcircle.use_category() = hb_use_get_categories (0x25CC);
+ dottedcircle.use_category() = hb_use_get_category (0x25CC);
buffer->clear_output ();
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-fallback.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-fallback.cc
index 6b228790af8..c7b46053d8c 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-fallback.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape-fallback.cc
@@ -200,8 +200,7 @@ position_mark (const hb_ot_shape_plan_t *plan,
unsigned int combining_class)
{
hb_glyph_extents_t mark_extents;
- if (!font->get_glyph_extents (buffer->info[i].codepoint,
- &mark_extents))
+ if (!font->get_glyph_extents (buffer->info[i].codepoint, &mark_extents))
return;
hb_position_t y_gap = font->y_scale / 16;
@@ -322,7 +321,9 @@ position_around_base (const hb_ot_shape_plan_t *plan,
base_extents.y_bearing += buffer->pos[base].y_offset;
unsigned int lig_id = _hb_glyph_info_get_lig_id (&buffer->info[base]);
- unsigned int num_lig_components = _hb_glyph_info_get_lig_num_comps (&buffer->info[base]);
+ /* Use integer for num_lig_components such that it doesn't convert to unsigned
+ * when we divide or multiply by it. */
+ int num_lig_components = _hb_glyph_info_get_lig_num_comps (&buffer->info[base]);
hb_position_t x_offset = 0, y_offset = 0;
if (HB_DIRECTION_IS_FORWARD (buffer->props.direction)) {
@@ -331,7 +332,7 @@ position_around_base (const hb_ot_shape_plan_t *plan,
}
hb_glyph_extents_t component_extents = base_extents;
- unsigned int last_lig_component = (unsigned int) -1;
+ int last_lig_component = -1;
unsigned int last_combining_class = 255;
hb_glyph_extents_t cluster_extents = base_extents; /* Initialization is just to shut gcc up. */
hb_glyph_info_t *info = buffer->info;
@@ -340,7 +341,7 @@ position_around_base (const hb_ot_shape_plan_t *plan,
{
if (num_lig_components > 1) {
unsigned int this_lig_id = _hb_glyph_info_get_lig_id (&info[i]);
- unsigned int this_lig_component = _hb_glyph_info_get_lig_comp (&info[i]) - 1;
+ int this_lig_component = _hb_glyph_info_get_lig_comp (&info[i]) - 1;
/* Conditions for attaching to the last component. */
if (!lig_id || lig_id != this_lig_id || this_lig_component >= num_lig_components)
this_lig_component = num_lig_components - 1;
@@ -526,7 +527,7 @@ _hb_ot_shape_fallback_spaces (const hb_ot_shape_plan_t *plan,
break;
case t::SPACE_4_EM_18:
- pos[i].x_advance = font->x_scale * 4 / 18;
+ pos[i].x_advance = (int64_t) font->x_scale * 4 / 18;
break;
case t::SPACE_FIGURE:
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.cc
index fc5dd1084d2..263d65c0ccb 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-ot-shape.cc
@@ -41,7 +41,7 @@
#include "hb-set-private.hh"
#include "hb-ot-layout-gsubgpos-private.hh"
-#include "hb-aat-layout-private.hh"
+//#include "hb-aat-layout-private.hh"
static hb_tag_t common_features[] = {
HB_TAG('c','c','m','p'),
@@ -787,6 +787,8 @@ hb_ot_position (hb_ot_shape_context_t *c)
_hb_ot_shape_fallback_kern (c->plan, c->font, c->buffer);
_hb_buffer_deallocate_gsubgpos_vars (c->buffer);
+
+ //hb_aat_layout_position (c->font, c->buffer);
}
static inline void
@@ -957,7 +959,7 @@ hb_ot_shape_glyphs_closure (hb_font_t *font,
hb_set_t *copy = hb_set_create ();
do {
copy->set (glyphs);
- for (hb_codepoint_t lookup_index = -1; hb_set_next (lookups, &lookup_index);)
+ for (hb_codepoint_t lookup_index = HB_SET_VALUE_INVALID; hb_set_next (lookups, &lookup_index);)
hb_ot_layout_lookup_substitute_closure (font->face, lookup_index, glyphs);
} while (!copy->is_equal (glyphs));
hb_set_destroy (copy);
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-private.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-private.hh
index 62c9fb278fc..daa496e98cd 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-private.hh
@@ -51,6 +51,9 @@
#include <stdio.h>
#include <stdarg.h>
+#if defined(_MSC_VER) || defined(__MINGW32__)
+#include <intrin.h>
+#endif
#define HB_PASTE1(a,b) a##b
#define HB_PASTE(a,b) HB_PASTE1(a,b)
@@ -120,10 +123,11 @@ extern "C" void hb_free_impl(void *ptr);
#endif
#ifndef HB_INTERNAL
-# if !defined(__MINGW32__) && !defined(__CYGWIN__)
+# if !defined(HB_NO_VISIBILITY) && !defined(__MINGW32__) && !defined(__CYGWIN__) && !defined(_MSC_VER) && !defined(__SUNPRO_CC)
# define HB_INTERNAL __attribute__((__visibility__("hidden")))
# else
# define HB_INTERNAL
+# define HB_NO_VISIBILITY 1
# endif
#endif
@@ -135,6 +139,11 @@ extern "C" void hb_free_impl(void *ptr);
#define HB_FUNC __func__
#endif
+#ifdef __SUNPRO_CC
+/* https://github.com/harfbuzz/harfbuzz/issues/630 */
+#define __restrict
+#endif
+
/*
* Borrowed from https://bugzilla.mozilla.org/show_bug.cgi?id=1215411
* HB_FALLTHROUGH is an annotation to suppress compiler warnings about switch
@@ -154,6 +163,9 @@ extern "C" void hb_free_impl(void *ptr);
#if defined(__clang__) && __cplusplus >= 201103L
/* clang's fallthrough annotations are only available starting in C++11. */
# define HB_FALLTHROUGH [[clang::fallthrough]]
+#elif __GNUC__ >= 7
+ /* GNU fallthrough attribute is available from GCC7 */
+# define HB_FALLTHROUGH __attribute__((fallthrough))
#elif defined(_MSC_VER)
/*
* MSVC's __fallthrough annotations are checked by /analyze (Code Analysis):
@@ -221,6 +233,12 @@ static int errno = 0; /* Use something better? */
* https://developer.android.com/tools/sdk/ndk/index.html
*/
# define HB_USE_ATEXIT 1
+# elif defined(__APPLE__)
+/* For macOS and related platforms, the atexit man page indicates
+ * that it will be invoked when the library is unloaded, not only
+ * at application exit.
+ */
+# define HB_USE_ATEXIT 1
# endif
#endif
@@ -304,64 +322,189 @@ static_assert ((sizeof (hb_var_int_t) == 4), "");
typedef const struct _hb_void_t *hb_void_t;
#define HB_VOID ((const _hb_void_t *) nullptr)
-/* Return the number of 1 bits in mask. */
-static inline HB_CONST_FUNC unsigned int
-_hb_popcount32 (uint32_t mask)
-{
-#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
- return __builtin_popcount (mask);
-#else
- /* "HACKMEM 169" */
- uint32_t y;
- y = (mask >> 1) &033333333333;
- y = mask - y - ((y >>1) & 033333333333);
- return (((y + (y >> 3)) & 030707070707) % 077);
-#endif
-}
+/* Return the number of 1 bits in v. */
+template <typename T>
static inline HB_CONST_FUNC unsigned int
-_hb_popcount64 (uint64_t mask)
+_hb_popcount (T v)
{
-#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
- if (sizeof (long) >= sizeof (mask))
- return __builtin_popcountl (mask);
+#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)) && defined(__OPTIMIZE__)
+ if (sizeof (T) <= sizeof (unsigned int))
+ return __builtin_popcount (v);
+
+ if (sizeof (T) <= sizeof (unsigned long))
+ return __builtin_popcountl (v);
+
+ if (sizeof (T) <= sizeof (unsigned long long))
+ return __builtin_popcountll (v);
#endif
- return _hb_popcount32 (mask & 0xFFFFFFFF) + _hb_popcount32 (mask >> 32);
+
+ if (sizeof (T) <= 4)
+ {
+ /* "HACKMEM 169" */
+ uint32_t y;
+ y = (v >> 1) &033333333333;
+ y = v - y - ((y >>1) & 033333333333);
+ return (((y + (y >> 3)) & 030707070707) % 077);
+ }
+
+ if (sizeof (T) == 8)
+ {
+ unsigned int shift = 32;
+ return _hb_popcount<uint32_t> ((uint32_t) v) + _hb_popcount ((uint32_t) (v >> shift));
+ }
+
+ if (sizeof (T) == 16)
+ {
+ unsigned int shift = 64;
+ return _hb_popcount<uint64_t> ((uint64_t) v) + _hb_popcount ((uint64_t) (v >> shift));
+ }
+
+ assert (0);
}
-template <typename T> static inline unsigned int _hb_popcount (T mask);
-template <> inline unsigned int _hb_popcount<uint32_t> (uint32_t mask) { return _hb_popcount32 (mask); }
-template <> inline unsigned int _hb_popcount<uint64_t> (uint64_t mask) { return _hb_popcount64 (mask); }
/* Returns the number of bits needed to store number */
+template <typename T>
static inline HB_CONST_FUNC unsigned int
-_hb_bit_storage (unsigned int number)
+_hb_bit_storage (T v)
{
+ if (unlikely (!v)) return 0;
+
#if defined(__GNUC__) && (__GNUC__ >= 4) && defined(__OPTIMIZE__)
- return likely (number) ? (sizeof (unsigned int) * 8 - __builtin_clz (number)) : 0;
-#else
- unsigned int n_bits = 0;
- while (number) {
- n_bits++;
- number >>= 1;
+ if (sizeof (T) <= sizeof (unsigned int))
+ return sizeof (unsigned int) * 8 - __builtin_clz (v);
+
+ if (sizeof (T) <= sizeof (unsigned long))
+ return sizeof (unsigned long) * 8 - __builtin_clzl (v);
+
+ if (sizeof (T) <= sizeof (unsigned long long))
+ return sizeof (unsigned long long) * 8 - __builtin_clzll (v);
+#endif
+
+#if defined(_MSC_VER) || defined(__MINGW32__)
+ if (sizeof (T) <= sizeof (unsigned int))
+ {
+ unsigned long where;
+ _BitScanReverse (&where, v);
+ return 1 + where;
}
- return n_bits;
+# if _WIN64
+ if (sizeof (T) <= 8)
+ {
+ unsigned long where;
+ _BitScanReverse64 (&where, v);
+ return 1 + where;
+ }
+# endif
#endif
+
+ if (sizeof (T) <= 4)
+ {
+ /* "bithacks" */
+ const unsigned int b[] = {0x2, 0xC, 0xF0, 0xFF00, 0xFFFF0000};
+ const unsigned int S[] = {1, 2, 4, 8, 16};
+ unsigned int r = 0;
+ for (int i = 4; i >= 0; i--)
+ if (v & b[i])
+ {
+ v >>= S[i];
+ r |= S[i];
+ }
+ return r + 1;
+ }
+ if (sizeof (T) <= 8)
+ {
+ /* "bithacks" */
+ const uint64_t b[] = {0x2, 0xC, 0xF0, 0xFF00, 0xFFFF0000, 0xFFFFFFFF00000000};
+ const unsigned int S[] = {1, 2, 4, 8, 16, 32};
+ unsigned int r = 0;
+ for (int i = 5; i >= 0; i--)
+ if (v & b[i])
+ {
+ v >>= S[i];
+ r |= S[i];
+ }
+ return r + 1;
+ }
+ if (sizeof (T) == 16)
+ {
+ unsigned int shift = 64;
+ return (v >> shift) ? _hb_bit_storage<uint64_t> ((uint64_t) v >> shift) + shift :
+ _hb_bit_storage<uint64_t> ((uint64_t) v);
+ }
+
+ assert (0);
}
-/* Returns the number of zero bits in the least significant side of number */
+/* Returns the number of zero bits in the least significant side of v */
+template <typename T>
static inline HB_CONST_FUNC unsigned int
-_hb_ctz (unsigned int number)
+_hb_ctz (T v)
{
+ if (unlikely (!v)) return 0;
+
#if defined(__GNUC__) && (__GNUC__ >= 4) && defined(__OPTIMIZE__)
- return likely (number) ? __builtin_ctz (number) : 0;
-#else
- unsigned int n_bits = 0;
- if (unlikely (!number)) return 0;
- while (!(number & 1)) {
- n_bits++;
- number >>= 1;
+ if (sizeof (T) <= sizeof (unsigned int))
+ return __builtin_ctz (v);
+
+ if (sizeof (T) <= sizeof (unsigned long))
+ return __builtin_ctzl (v);
+
+ if (sizeof (T) <= sizeof (unsigned long long))
+ return __builtin_ctzll (v);
+#endif
+
+#if defined(_MSC_VER) || defined(__MINGW32__)
+ if (sizeof (T) <= sizeof (unsigned int))
+ {
+ unsigned long where;
+ _BitScanForward (&where, v);
+ return where;
}
- return n_bits;
+# if _WIN64
+ if (sizeof (T) <= 8)
+ {
+ unsigned long where;
+ _BitScanForward64 (&where, v);
+ return where;
+ }
+# endif
#endif
+
+ if (sizeof (T) <= 4)
+ {
+ /* "bithacks" */
+ unsigned int c = 32;
+ v &= - (int32_t) v;
+ if (v) c--;
+ if (v & 0x0000FFFF) c -= 16;
+ if (v & 0x00FF00FF) c -= 8;
+ if (v & 0x0F0F0F0F) c -= 4;
+ if (v & 0x33333333) c -= 2;
+ if (v & 0x55555555) c -= 1;
+ return c;
+ }
+ if (sizeof (T) <= 8)
+ {
+ /* "bithacks" */
+ unsigned int c = 64;
+ v &= - (int64_t) (v);
+ if (v) c--;
+ if (v & 0x00000000FFFFFFFF) c -= 32;
+ if (v & 0x0000FFFF0000FFFF) c -= 16;
+ if (v & 0x00FF00FF00FF00FF) c -= 8;
+ if (v & 0x0F0F0F0F0F0F0F0F) c -= 4;
+ if (v & 0x3333333333333333) c -= 2;
+ if (v & 0x5555555555555555) c -= 1;
+ return c;
+ }
+ if (sizeof (T) == 16)
+ {
+ unsigned int shift = 64;
+ return (uint64_t) v ? _hb_bit_storage<uint64_t> ((uint64_t) v) :
+ _hb_bit_storage<uint64_t> ((uint64_t) v >> shift) + shift;
+ }
+
+ assert (0);
}
static inline bool
@@ -370,6 +513,12 @@ _hb_unsigned_int_mul_overflows (unsigned int count, unsigned int size)
return (size > 0) && (count >= ((unsigned int) -1) / size);
}
+static inline unsigned int
+_hb_ceil_to_4 (unsigned int v)
+{
+ return ((v - 1) | 3) + 1;
+}
+
/* arrays and maps */
@@ -402,36 +551,45 @@ struct hb_prealloced_array_t
return &array[len - 1];
}
- inline bool resize (unsigned int size)
+ /* Allocate for size but don't adjust len. */
+ inline bool alloc(unsigned int size)
{
- if (unlikely (size > allocated))
- {
- /* Need to reallocate */
-
- unsigned int new_allocated = allocated;
- while (size >= new_allocated)
- new_allocated += (new_allocated >> 1) + 8;
-
- Type *new_array = nullptr;
-
- if (array == static_array) {
- new_array = (Type *) calloc (new_allocated, sizeof (Type));
- if (new_array)
- memcpy (new_array, array, len * sizeof (Type));
- } else {
- bool overflows = (new_allocated < allocated) || _hb_unsigned_int_mul_overflows (new_allocated, sizeof (Type));
- if (likely (!overflows)) {
- new_array = (Type *) realloc (array, new_allocated * sizeof (Type));
- }
- }
+ if (likely (size <= allocated))
+ return true;
+
+ /* Reallocate */
+
+ unsigned int new_allocated = allocated;
+ while (size >= new_allocated)
+ new_allocated += (new_allocated >> 1) + 8;
- if (unlikely (!new_array))
- return false;
+ Type *new_array = nullptr;
- array = new_array;
- allocated = new_allocated;
+ if (array == static_array) {
+ new_array = (Type *) calloc (new_allocated, sizeof (Type));
+ if (new_array)
+ memcpy (new_array, array, len * sizeof (Type));
+ } else {
+ bool overflows = (new_allocated < allocated) || _hb_unsigned_int_mul_overflows (new_allocated, sizeof (Type));
+ if (likely (!overflows)) {
+ new_array = (Type *) realloc (array, new_allocated * sizeof (Type));
+ }
}
+ if (unlikely (!new_array))
+ return false;
+
+ array = new_array;
+ allocated = new_allocated;
+
+ return true;
+ }
+
+ inline bool resize (unsigned int size)
+ {
+ if (!alloc (size))
+ return false;
+
len = size;
return true;
}
@@ -472,6 +630,11 @@ struct hb_prealloced_array_t
return nullptr;
}
+ inline void qsort (int (*cmp)(const void*, const void*))
+ {
+ ::qsort (array, len, sizeof (Type), cmp);
+ }
+
inline void qsort (void)
{
::qsort (array, len, sizeof (Type), Type::cmp);
@@ -483,25 +646,34 @@ struct hb_prealloced_array_t
}
template <typename T>
- inline Type *bsearch (T *x)
+ inline Type *lsearch (const T &x)
+ {
+ for (unsigned int i = 0; i < len; i++)
+ if (0 == this->array[i].cmp (&x))
+ return &array[i];
+ return nullptr;
+ }
+
+ template <typename T>
+ inline Type *bsearch (const T &x)
{
unsigned int i;
return bfind (x, &i) ? &array[i] : nullptr;
}
template <typename T>
- inline const Type *bsearch (T *x) const
+ inline const Type *bsearch (const T &x) const
{
unsigned int i;
return bfind (x, &i) ? &array[i] : nullptr;
}
template <typename T>
- inline bool bfind (T *x, unsigned int *i) const
+ inline bool bfind (const T &x, unsigned int *i) const
{
int min = 0, max = (int) this->len - 1;
while (min <= max)
{
int mid = (min + max) / 2;
- int c = this->array[mid].cmp (x);
+ int c = this->array[mid].cmp (&x);
if (c < 0)
max = mid - 1;
else if (c > 0)
@@ -512,7 +684,7 @@ struct hb_prealloced_array_t
return true;
}
}
- if (max < 0 || (max < (int) this->len && this->array[max].cmp (x) > 0))
+ if (max < 0 || (max < (int) this->len && this->array[max].cmp (&x) > 0))
max++;
*i = max;
return false;
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set-private.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set-private.hh
index 576c169e678..3615c50e9e2 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set-private.hh
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set-private.hh
@@ -109,51 +109,60 @@ struct hb_set_t
unsigned int i = m / ELT_BITS;
unsigned int j = m & ELT_MASK;
- for (; j < ELT_BITS; j++)
- if (v[i] & (elt_t (1) << j))
- goto found;
- for (i++; i < len (); i++)
- if (v[i])
- for (j = 0; j < ELT_BITS; j++)
- if (v[i] & (elt_t (1) << j))
- goto found;
+ const elt_t vv = v[i] & ~((elt_t (1) << j) - 1);
+ for (const elt_t *p = &vv; i < len (); p = &v[++i])
+ if (*p)
+ {
+ *codepoint = i * ELT_BITS + elt_get_min (*p);
+ return true;
+ }
*codepoint = INVALID;
return false;
+ }
+ inline bool previous (hb_codepoint_t *codepoint) const
+ {
+ unsigned int m = (*codepoint - 1) & MASK;
+ if (m == MASK)
+ {
+ *codepoint = INVALID;
+ return false;
+ }
+ unsigned int i = m / ELT_BITS;
+ unsigned int j = m & ELT_MASK;
- found:
- *codepoint = i * ELT_BITS + j;
- return true;
+ const elt_t vv = v[i] & ((elt_t (1) << (j + 1)) - 1);
+ for (const elt_t *p = &vv; (int) i >= 0; p = &v[--i])
+ if (*p)
+ {
+ *codepoint = i * ELT_BITS + elt_get_max (*p);
+ return true;
+ }
+
+ *codepoint = INVALID;
+ return false;
}
inline hb_codepoint_t get_min (void) const
{
for (unsigned int i = 0; i < len (); i++)
if (v[i])
- {
- elt_t e = v[i];
- for (unsigned int j = 0; j < ELT_BITS; j++)
- if (e & (elt_t (1) << j))
- return i * ELT_BITS + j;
- }
+ return i * ELT_BITS + elt_get_min (v[i]);
return INVALID;
}
inline hb_codepoint_t get_max (void) const
{
for (int i = len () - 1; i >= 0; i--)
if (v[i])
- {
- elt_t e = v[i];
- for (int j = ELT_BITS - 1; j >= 0; j--)
- if (e & (elt_t (1) << j))
- return i * ELT_BITS + j;
- }
+ return i * ELT_BITS + elt_get_max (v[i]);
return 0;
}
- static const unsigned int PAGE_BITS = 8192; /* Use to tune. */
+ typedef unsigned long long elt_t;
+ static const unsigned int PAGE_BITS = 1024;
static_assert ((PAGE_BITS & ((PAGE_BITS) - 1)) == 0, "");
- typedef uint64_t elt_t;
+ static inline unsigned int elt_get_min (const elt_t &elt) { return _hb_ctz (elt); }
+ static inline unsigned int elt_get_max (const elt_t &elt) { return _hb_bit_storage (elt) - 1; }
#if 0 && HAVE_VECTOR_SIZE
/* The vectorized version does not work with clang as non-const
@@ -273,7 +282,7 @@ struct hb_set_t
{
page->add (g);
- array++;
+ array = (const T *) ((const char *) array + stride);
count--;
}
while (count && (g = *array, start <= g && g < end));
@@ -302,7 +311,7 @@ struct hb_set_t
last_g = g;
page->add (g);
- array++;
+ array = (const T *) ((const char *) array + stride);
count--;
}
while (count && (g = *array, g < end));
@@ -380,6 +389,7 @@ struct hb_set_t
unsigned int na = pages.len;
unsigned int nb = other->pages.len;
+ unsigned int next_page = na;
unsigned int count = 0;
unsigned int a = 0, b = 0;
@@ -421,27 +431,47 @@ struct hb_set_t
{
a--;
b--;
- Op::process (page_at (--count).v, page_at (a).v, other->page_at (b).v);
+ count--;
+ page_map[count] = page_map[a];
+ Op::process (page_at (count).v, page_at (a).v, other->page_at (b).v);
}
else if (page_map[a - 1].major > other->page_map[b - 1].major)
{
- a--;
- if (Op::passthru_left)
- page_at (--count).v = page_at (a).v;
+ a--;
+ if (Op::passthru_left)
+ {
+ count--;
+ page_map[count] = page_map[a];
+ }
}
else
{
- b--;
- if (Op::passthru_right)
- page_at (--count).v = other->page_at (b).v;
+ b--;
+ if (Op::passthru_right)
+ {
+ count--;
+ page_map[count].major = other->page_map[b].major;
+ page_map[count].index = next_page++;
+ page_at (count).v = other->page_at (b).v;
+ }
}
}
if (Op::passthru_left)
while (a)
- page_at (--count).v = page_at (--a).v;
+ {
+ a--;
+ count--;
+ page_map[count] = page_map [a];
+ }
if (Op::passthru_right)
while (b)
- page_at (--count).v = other->page_at (--b).v;
+ {
+ b--;
+ count--;
+ page_map[count].major = other->page_map[b].major;
+ page_map[count].index = next_page++;
+ page_at (count).v = other->page_at (b).v;
+ }
assert (!count);
}
@@ -470,13 +500,13 @@ struct hb_set_t
page_map_t map = {get_major (*codepoint), 0};
unsigned int i;
- page_map.bfind (&map, &i);
- if (i < page_map.len)
+ page_map.bfind (map, &i);
+ if (i < page_map.len && page_map[i].major == map.major)
{
if (pages[page_map[i].index].next (codepoint))
{
*codepoint += page_map[i].major * page_t::PAGE_BITS;
- return true;
+ return true;
}
i++;
}
@@ -492,6 +522,37 @@ struct hb_set_t
*codepoint = INVALID;
return false;
}
+ inline bool previous (hb_codepoint_t *codepoint) const
+ {
+ if (unlikely (*codepoint == INVALID)) {
+ *codepoint = get_max ();
+ return *codepoint != INVALID;
+ }
+
+ page_map_t map = {get_major (*codepoint), 0};
+ unsigned int i;
+ page_map.bfind (map, &i);
+ if (i < page_map.len && page_map[i].major == map.major)
+ {
+ if (pages[page_map[i].index].previous (codepoint))
+ {
+ *codepoint += page_map[i].major * page_t::PAGE_BITS;
+ return true;
+ }
+ }
+ i--;
+ for (; (int) i >= 0; i--)
+ {
+ hb_codepoint_t m = pages[page_map[i].index].get_max ();
+ if (m != INVALID)
+ {
+ *codepoint = page_map[i].major * page_t::PAGE_BITS + m;
+ return true;
+ }
+ }
+ *codepoint = INVALID;
+ return false;
+ }
inline bool next_range (hb_codepoint_t *first, hb_codepoint_t *last) const
{
hb_codepoint_t i;
@@ -503,12 +564,31 @@ struct hb_set_t
return false;
}
+ /* TODO Speed up. */
*last = *first = i;
while (next (&i) && i == *last + 1)
(*last)++;
return true;
}
+ inline bool previous_range (hb_codepoint_t *first, hb_codepoint_t *last) const
+ {
+ hb_codepoint_t i;
+
+ i = *first;
+ if (!previous (&i))
+ {
+ *last = *first = INVALID;
+ return false;
+ }
+
+ /* TODO Speed up. */
+ *last = *first = i;
+ while (previous (&i) && i == *first - 1)
+ (*first)--;
+
+ return true;
+ }
inline unsigned int get_population (void) const
{
@@ -541,7 +621,7 @@ struct hb_set_t
{
page_map_t map = {get_major (g), pages.len};
unsigned int i;
- if (!page_map.bfind (&map, &i))
+ if (!page_map.bfind (map, &i))
{
if (!resize (pages.len + 1))
return nullptr;
@@ -555,7 +635,7 @@ struct hb_set_t
inline page_t *page_for (hb_codepoint_t g)
{
page_map_t key = {get_major (g)};
- const page_map_t *found = page_map.bsearch (&key);
+ const page_map_t *found = page_map.bsearch (key);
if (found)
return &pages[found->index];
return nullptr;
@@ -563,7 +643,7 @@ struct hb_set_t
inline const page_t *page_for (hb_codepoint_t g) const
{
page_map_t key = {get_major (g)};
- const page_map_t *found = page_map.bsearch (&key);
+ const page_map_t *found = page_map.bsearch (key);
if (found)
return &pages[found->index];
return nullptr;
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set.cc
index 0b4f871e852..07cf9d09b55 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set.cc
@@ -50,6 +50,13 @@ hb_set_create (void)
return set;
}
+static const hb_set_t _hb_set_nil = {
+ HB_OBJECT_HEADER_STATIC,
+ true, /* in_error */
+
+ {0} /* elts */
+};
+
/**
* hb_set_get_empty:
*
@@ -60,13 +67,6 @@ hb_set_create (void)
hb_set_t *
hb_set_get_empty (void)
{
- static const hb_set_t _hb_set_nil = {
- HB_OBJECT_HEADER_STATIC,
- true, /* in_error */
-
- {0} /* elts */
- };
-
return const_cast<hb_set_t *> (&_hb_set_nil);
}
@@ -437,7 +437,9 @@ hb_set_get_max (const hb_set_t *set)
* @set: a set.
* @codepoint: (inout):
*
- *
+ * Gets the next number in @set that is greater than current value of @codepoint.
+ *
+ * Set @codepoint to %HB_SET_VALUE_INVALID to get started.
*
* Return value: whether there was a next value.
*
@@ -451,6 +453,26 @@ hb_set_next (const hb_set_t *set,
}
/**
+ * hb_set_previous:
+ * @set: a set.
+ * @codepoint: (inout):
+ *
+ * Gets the previous number in @set that is slower than current value of @codepoint.
+ *
+ * Set @codepoint to %HB_SET_VALUE_INVALID to get started.
+ *
+ * Return value: whether there was a previous value.
+ *
+ * Since: 1.8.0
+ **/
+hb_bool_t
+hb_set_previous (const hb_set_t *set,
+ hb_codepoint_t *codepoint)
+{
+ return set->previous (codepoint);
+}
+
+/**
* hb_set_next_range:
* @set: a set.
* @first: (out): output first codepoint in the range.
@@ -459,6 +481,8 @@ hb_set_next (const hb_set_t *set,
* Gets the next consecutive range of numbers in @set that
* are greater than current value of @last.
*
+ * Set @last to %HB_SET_VALUE_INVALID to get started.
+ *
* Return value: whether there was a next range.
*
* Since: 0.9.7
@@ -470,3 +494,26 @@ hb_set_next_range (const hb_set_t *set,
{
return set->next_range (first, last);
}
+
+/**
+ * hb_set_previous_range:
+ * @set: a set.
+ * @first: (inout): input current first and output first codepoint in the range.
+ * @last: (out): output last codepoint in the range.
+ *
+ * Gets the previous consecutive range of numbers in @set that
+ * are greater than current value of @last.
+ *
+ * Set @first to %HB_SET_VALUE_INVALID to get started.
+ *
+ * Return value: whether there was a previous range.
+ *
+ * Since: 1.8.0
+ **/
+hb_bool_t
+hb_set_previous_range (const hb_set_t *set,
+ hb_codepoint_t *first,
+ hb_codepoint_t *last)
+{
+ return set->previous_range (first, last);
+}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set.h b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set.h
index 2ce406073ce..b0f82f82208 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set.h
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-set.h
@@ -129,25 +129,36 @@ hb_set_symmetric_difference (hb_set_t *set,
HB_EXTERN unsigned int
hb_set_get_population (const hb_set_t *set);
-/* Returns -1 if set empty. */
+/* Returns HB_SET_VALUE_INVALID if set empty. */
HB_EXTERN hb_codepoint_t
hb_set_get_min (const hb_set_t *set);
-/* Returns -1 if set empty. */
+/* Returns HB_SET_VALUE_INVALID if set empty. */
HB_EXTERN hb_codepoint_t
hb_set_get_max (const hb_set_t *set);
-/* Pass -1 in to get started. */
+/* Pass HB_SET_VALUE_INVALID in to get started. */
HB_EXTERN hb_bool_t
hb_set_next (const hb_set_t *set,
hb_codepoint_t *codepoint);
-/* Pass -1 for first and last to get started. */
+/* Pass HB_SET_VALUE_INVALID in to get started. */
+HB_EXTERN hb_bool_t
+hb_set_previous (const hb_set_t *set,
+ hb_codepoint_t *codepoint);
+
+/* Pass HB_SET_VALUE_INVALID for first and last to get started. */
HB_EXTERN hb_bool_t
hb_set_next_range (const hb_set_t *set,
hb_codepoint_t *first,
hb_codepoint_t *last);
+/* Pass HB_SET_VALUE_INVALID for first and last to get started. */
+HB_EXTERN hb_bool_t
+hb_set_previous_range (const hb_set_t *set,
+ hb_codepoint_t *first,
+ hb_codepoint_t *last);
+
HB_END_DECLS
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-glyf.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-glyf.cc
new file mode 100644
index 00000000000..0b84c856c2b
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-glyf.cc
@@ -0,0 +1,307 @@
+/*
+ * Copyright © 2018 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Garret Rieger, Roderick Sheeter
+ */
+
+#include "hb-open-type-private.hh"
+#include "hb-ot-glyf-table.hh"
+#include "hb-set.h"
+#include "hb-subset-glyf.hh"
+#include "hb-subset-plan.hh"
+
+static bool
+_calculate_glyf_and_loca_prime_size (const OT::glyf::accelerator_t &glyf,
+ hb_prealloced_array_t<hb_codepoint_t> &glyph_ids,
+ hb_bool_t drop_hints,
+ bool *use_short_loca /* OUT */,
+ unsigned int *glyf_size /* OUT */,
+ unsigned int *loca_size /* OUT */,
+ hb_prealloced_array_t<unsigned int> *instruction_ranges /* OUT */)
+{
+ unsigned int total = 0;
+ for (unsigned int i = 0; i < glyph_ids.len; i++)
+ {
+ hb_codepoint_t next_glyph = glyph_ids[i];
+ unsigned int *instruction_start = instruction_ranges->push();
+ unsigned int *instruction_end = instruction_ranges->push();
+ *instruction_start = 0;
+ *instruction_end = 0;
+
+ unsigned int start_offset, end_offset;
+ if (unlikely (!(glyf.get_offsets(next_glyph, &start_offset, &end_offset)
+ && glyf.remove_padding(start_offset, &end_offset))))
+ {
+ DEBUG_MSG(SUBSET, nullptr, "Invalid gid %d", next_glyph);
+ continue;
+ }
+ if (end_offset - start_offset < OT::glyf::GlyphHeader::static_size)
+ continue; /* 0-length glyph */
+
+ if (drop_hints)
+ {
+ if (unlikely (!glyf.get_instruction_offsets(start_offset, end_offset,
+ instruction_start, instruction_end)))
+ {
+ DEBUG_MSG(SUBSET, nullptr, "Unable to get instruction offsets for %d", next_glyph);
+ return false;
+ }
+ }
+
+ total += end_offset - start_offset - (*instruction_end - *instruction_start);
+ /* round2 so short loca will work */
+ total += total % 2;
+ }
+
+ *glyf_size = total;
+ *use_short_loca = (total <= 131070);
+ *loca_size = (glyph_ids.len + 1)
+ * (*use_short_loca ? sizeof(OT::HBUINT16) : sizeof(OT::HBUINT32));
+
+ DEBUG_MSG(SUBSET, nullptr, "preparing to subset glyf: final size %d, loca size %d, using %s loca",
+ total,
+ *loca_size,
+ *use_short_loca ? "short" : "long");
+ return true;
+}
+
+static bool
+_write_loca_entry (unsigned int id,
+ unsigned int offset,
+ bool is_short,
+ void *loca_prime,
+ unsigned int loca_size)
+{
+ unsigned int entry_size = is_short ? sizeof (OT::HBUINT16) : sizeof (OT::HBUINT32);
+ if ((id + 1) * entry_size <= loca_size)
+ {
+ if (is_short) {
+ ((OT::HBUINT16*) loca_prime) [id].set (offset / 2);
+ } else {
+ ((OT::HBUINT32*) loca_prime) [id].set (offset);
+ }
+ return true;
+ }
+
+ // Offset was not written because the write is out of bounds.
+ DEBUG_MSG (SUBSET,
+ nullptr,
+ "WARNING: Attempted to write an out of bounds loca entry at index %d. Loca size is %d.",
+ id,
+ loca_size);
+ return false;
+}
+
+static void
+_update_components (hb_subset_plan_t * plan,
+ char * glyph_start,
+ unsigned int length)
+
+{
+ OT::glyf::CompositeGlyphHeader::Iterator iterator;
+ if (OT::glyf::CompositeGlyphHeader::get_iterator (glyph_start,
+ length,
+ &iterator))
+ {
+ do
+ {
+ hb_codepoint_t new_gid;
+ if (!hb_subset_plan_new_gid_for_old_id (plan,
+ iterator.current->glyphIndex,
+ &new_gid))
+ continue;
+
+ ((OT::glyf::CompositeGlyphHeader *) iterator.current)->glyphIndex.set (new_gid);
+ } while (iterator.move_to_next());
+ }
+}
+
+static bool _remove_composite_instruction_flag(char *glyf_prime, unsigned int length)
+{
+ /* remove WE_HAVE_INSTRUCTIONS from flags in dest */
+ OT::glyf::CompositeGlyphHeader::Iterator composite_it;
+ if (unlikely (!OT::glyf::CompositeGlyphHeader::get_iterator (glyf_prime, length, &composite_it))) return false;
+ const OT::glyf::CompositeGlyphHeader *glyph;
+ do {
+ glyph = composite_it.current;
+ OT::HBUINT16 *flags = const_cast<OT::HBUINT16 *> (&glyph->flags);
+ flags->set ( (uint16_t) *flags & ~OT::glyf::CompositeGlyphHeader::WE_HAVE_INSTRUCTIONS);
+ } while (composite_it.move_to_next());
+ return true;
+}
+
+static bool
+_write_glyf_and_loca_prime (hb_subset_plan_t *plan,
+ const OT::glyf::accelerator_t &glyf,
+ const char *glyf_data,
+ bool use_short_loca,
+ hb_prealloced_array_t<unsigned int> &instruction_ranges,
+ unsigned int glyf_prime_size,
+ char *glyf_prime_data /* OUT */,
+ unsigned int loca_prime_size,
+ char *loca_prime_data /* OUT */)
+{
+ hb_prealloced_array_t<hb_codepoint_t> &glyph_ids = plan->gids_to_retain_sorted;
+ char *glyf_prime_data_next = glyf_prime_data;
+
+ bool success = true;
+ for (unsigned int i = 0; i < glyph_ids.len; i++)
+ {
+ unsigned int start_offset, end_offset;
+ if (unlikely (!(glyf.get_offsets (glyph_ids[i], &start_offset, &end_offset)
+ && glyf.remove_padding(start_offset, &end_offset))))
+ end_offset = start_offset = 0;
+ unsigned int instruction_start = instruction_ranges[i * 2];
+ unsigned int instruction_end = instruction_ranges[i * 2 + 1];
+
+ int length = end_offset - start_offset - (instruction_end - instruction_start);
+ length += length % 2;
+
+ if (glyf_prime_data_next + length > glyf_prime_data + glyf_prime_size)
+ {
+ DEBUG_MSG (SUBSET,
+ nullptr,
+ "WARNING: Attempted to write an out of bounds glyph entry for gid %d (length %d)",
+ i, length);
+ return false;
+ }
+
+ if (instruction_start == instruction_end)
+ memcpy (glyf_prime_data_next, glyf_data + start_offset, length);
+ else
+ {
+ memcpy (glyf_prime_data_next, glyf_data + start_offset, instruction_start - start_offset);
+ memcpy (glyf_prime_data_next + instruction_start - start_offset, glyf_data + instruction_end, end_offset - instruction_end);
+ /* if the instructions end at the end this was a composite glyph, else simple */
+ if (instruction_end == end_offset)
+ {
+ if (unlikely (!_remove_composite_instruction_flag (glyf_prime_data_next, length))) return false;
+ }
+ else
+ /* zero instruction length, which is just before instruction_start */
+ memset (glyf_prime_data_next + instruction_start - start_offset - 2, 0, 2);
+ }
+
+ success = success && _write_loca_entry (i,
+ glyf_prime_data_next - glyf_prime_data,
+ use_short_loca,
+ loca_prime_data,
+ loca_prime_size);
+ _update_components (plan, glyf_prime_data_next, length);
+
+ glyf_prime_data_next += length;
+ }
+
+ success = success && _write_loca_entry (glyph_ids.len,
+ glyf_prime_data_next - glyf_prime_data,
+ use_short_loca,
+ loca_prime_data,
+ loca_prime_size);
+ return success;
+}
+
+static bool
+_hb_subset_glyf_and_loca (const OT::glyf::accelerator_t &glyf,
+ const char *glyf_data,
+ hb_subset_plan_t *plan,
+ bool *use_short_loca,
+ hb_blob_t **glyf_prime /* OUT */,
+ hb_blob_t **loca_prime /* OUT */)
+{
+ // TODO(grieger): Sanity check allocation size for the new table.
+ hb_prealloced_array_t<hb_codepoint_t> &glyphs_to_retain = plan->gids_to_retain_sorted;
+
+ unsigned int glyf_prime_size;
+ unsigned int loca_prime_size;
+ hb_prealloced_array_t<unsigned int> instruction_ranges;
+ instruction_ranges.init();
+
+ if (unlikely (!_calculate_glyf_and_loca_prime_size (glyf,
+ glyphs_to_retain,
+ plan->drop_hints,
+ use_short_loca,
+ &glyf_prime_size,
+ &loca_prime_size,
+ &instruction_ranges))) {
+ instruction_ranges.finish();
+ return false;
+ }
+
+ char *glyf_prime_data = (char *) calloc (1, glyf_prime_size);
+ char *loca_prime_data = (char *) calloc (1, loca_prime_size);
+ if (unlikely (!_write_glyf_and_loca_prime (plan, glyf, glyf_data,
+ *use_short_loca,
+ instruction_ranges,
+ glyf_prime_size, glyf_prime_data,
+ loca_prime_size, loca_prime_data))) {
+ free (glyf_prime_data);
+ free (loca_prime_data);
+ instruction_ranges.finish();
+ return false;
+ }
+ instruction_ranges.finish();
+
+ *glyf_prime = hb_blob_create (glyf_prime_data,
+ glyf_prime_size,
+ HB_MEMORY_MODE_READONLY,
+ glyf_prime_data,
+ free);
+ *loca_prime = hb_blob_create (loca_prime_data,
+ loca_prime_size,
+ HB_MEMORY_MODE_READONLY,
+ loca_prime_data,
+ free);
+ return true;
+}
+
+/**
+ * hb_subset_glyf:
+ * Subsets the glyph table according to a provided plan.
+ *
+ * Return value: subsetted glyf table.
+ *
+ * Since: 1.7.5
+ **/
+bool
+hb_subset_glyf_and_loca (hb_subset_plan_t *plan,
+ bool *use_short_loca, /* OUT */
+ hb_blob_t **glyf_prime, /* OUT */
+ hb_blob_t **loca_prime /* OUT */)
+{
+ hb_blob_t *glyf_blob = OT::Sanitizer<OT::glyf>().sanitize (plan->source->reference_table (HB_OT_TAG_glyf));
+ const char *glyf_data = hb_blob_get_data(glyf_blob, nullptr);
+
+ OT::glyf::accelerator_t glyf;
+ glyf.init(plan->source);
+ bool result = _hb_subset_glyf_and_loca (glyf,
+ glyf_data,
+ plan,
+ use_short_loca,
+ glyf_prime,
+ loca_prime);
+
+ hb_blob_destroy (glyf_blob);
+ glyf.fini();
+
+ return result;
+}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-glyf.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-glyf.hh
new file mode 100644
index 00000000000..99b76db9bbe
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-glyf.hh
@@ -0,0 +1,40 @@
+/*
+ * Copyright © 2018 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Garret Rieger
+ */
+
+#ifndef HB_SUBSET_GLYF_HH
+#define HB_SUBSET_GLYF_HH
+
+#include "hb-private.hh"
+
+#include "hb-subset-plan.hh"
+
+HB_INTERNAL bool
+hb_subset_glyf_and_loca (hb_subset_plan_t *plan,
+ bool *use_short_loca, /* OUT */
+ hb_blob_t **glyf_prime /* OUT */,
+ hb_blob_t **loca_prime /* OUT */);
+
+#endif /* HB_SUBSET_GLYF_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-input.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-input.cc
new file mode 100644
index 00000000000..c4003dd3ad1
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-input.cc
@@ -0,0 +1,119 @@
+/*
+ * Copyright © 2018 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Garret Rieger, Rod Sheeter, Behdad Esfahbod
+ */
+
+#include "hb-object-private.hh"
+#include "hb-subset-private.hh"
+#include "hb-set-private.hh"
+
+/**
+ * hb_subset_input_create_or_fail:
+ *
+ * Return value: New subset input.
+ *
+ * Since: 1.8.0
+ **/
+hb_subset_input_t *
+hb_subset_input_create_or_fail (void)
+{
+ hb_subset_input_t *input = hb_object_create<hb_subset_input_t>();
+
+ if (unlikely (!input))
+ return nullptr;
+
+ input->unicodes = hb_set_create ();
+ input->glyphs = hb_set_create ();
+
+ return input;
+}
+
+/**
+ * hb_subset_input_reference: (skip)
+ * @subset_input: a subset_input.
+ *
+ *
+ *
+ * Return value:
+ *
+ * Since: 1.8.0
+ **/
+hb_subset_input_t *
+hb_subset_input_reference (hb_subset_input_t *subset_input)
+{
+ return hb_object_reference (subset_input);
+}
+
+/**
+ * hb_subset_input_destroy:
+ * @subset_input: a subset_input.
+ *
+ * Since: 1.8.0
+ **/
+void
+hb_subset_input_destroy(hb_subset_input_t *subset_input)
+{
+ if (!hb_object_destroy (subset_input)) return;
+
+ hb_set_destroy (subset_input->unicodes);
+ hb_set_destroy (subset_input->glyphs);
+
+ free (subset_input);
+}
+
+/**
+ * hb_subset_input_unicode_set:
+ * @subset_input: a subset_input.
+ *
+ * Since: 1.8.0
+ **/
+HB_EXTERN hb_set_t *
+hb_subset_input_unicode_set (hb_subset_input_t *subset_input)
+{
+ return subset_input->unicodes;
+}
+
+/**
+ * hb_subset_input_glyph_set:
+ * @subset_input: a subset_input.
+ *
+ * Since: 1.8.0
+ **/
+HB_EXTERN hb_set_t *
+hb_subset_input_glyph_set (hb_subset_input_t *subset_input)
+{
+ return subset_input->glyphs;
+}
+
+/**
+ * hb_subset_input_drop_hints:
+ * @subset_input: a subset_input.
+ *
+ * Since: 1.8.0
+ **/
+HB_EXTERN hb_bool_t *
+hb_subset_input_drop_hints (hb_subset_input_t *subset_input)
+{
+ return &subset_input->drop_hints;
+}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-plan.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-plan.cc
new file mode 100644
index 00000000000..f8a09efe4d1
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-plan.cc
@@ -0,0 +1,227 @@
+/*
+ * Copyright © 2018 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Garret Rieger, Roderick Sheeter
+ */
+
+#include "hb-subset-private.hh"
+
+#include "hb-subset-plan.hh"
+#include "hb-ot-cmap-table.hh"
+#include "hb-ot-glyf-table.hh"
+
+static int
+_hb_codepoint_t_cmp (const void *pa, const void *pb)
+{
+ hb_codepoint_t a = * (hb_codepoint_t *) pa;
+ hb_codepoint_t b = * (hb_codepoint_t *) pb;
+
+ return a < b ? -1 : a > b ? +1 : 0;
+}
+
+hb_bool_t
+hb_subset_plan_new_gid_for_codepoint (hb_subset_plan_t *plan,
+ hb_codepoint_t codepoint,
+ hb_codepoint_t *new_gid)
+{
+ // TODO actual map, delete this garbage.
+ for (unsigned int i = 0; i < plan->codepoints.len; i++)
+ {
+ if (plan->codepoints[i] != codepoint) continue;
+ if (!hb_subset_plan_new_gid_for_old_id(plan, plan->gids_to_retain[i], new_gid))
+ {
+ return false;
+ }
+ return true;
+ }
+ return false;
+}
+
+hb_bool_t
+hb_subset_plan_new_gid_for_old_id (hb_subset_plan_t *plan,
+ hb_codepoint_t old_gid,
+ hb_codepoint_t *new_gid)
+{
+ // the index in old_gids is the new gid; only up to codepoints.len are valid
+ for (unsigned int i = 0; i < plan->gids_to_retain_sorted.len; i++)
+ {
+ if (plan->gids_to_retain_sorted[i] == old_gid)
+ {
+ *new_gid = i;
+ return true;
+ }
+ }
+ return false;
+}
+
+hb_bool_t
+hb_subset_plan_add_table (hb_subset_plan_t *plan,
+ hb_tag_t tag,
+ hb_blob_t *contents)
+{
+ hb_blob_t *source_blob = plan->source->reference_table (tag);
+ DEBUG_MSG(SUBSET, nullptr, "add table %c%c%c%c, dest %d bytes, source %d bytes", HB_UNTAG(tag), hb_blob_get_length (contents), hb_blob_get_length (source_blob));
+ hb_blob_destroy (source_blob);
+ return hb_subset_face_add_table(plan->dest, tag, contents);
+}
+
+static void
+_populate_codepoints (hb_set_t *input_codepoints,
+ hb_prealloced_array_t<hb_codepoint_t>& plan_codepoints)
+{
+ plan_codepoints.alloc (hb_set_get_population (input_codepoints));
+ hb_codepoint_t cp = -1;
+ while (hb_set_next (input_codepoints, &cp)) {
+ hb_codepoint_t *wr = plan_codepoints.push();
+ *wr = cp;
+ }
+ plan_codepoints.qsort (_hb_codepoint_t_cmp);
+}
+
+static void
+_add_gid_and_children (const OT::glyf::accelerator_t &glyf,
+ hb_codepoint_t gid,
+ hb_set_t *gids_to_retain)
+{
+ if (hb_set_has (gids_to_retain, gid))
+ // Already visited this gid, ignore.
+ return;
+
+ hb_set_add (gids_to_retain, gid);
+
+ OT::glyf::CompositeGlyphHeader::Iterator composite;
+ if (glyf.get_composite (gid, &composite))
+ {
+ do
+ {
+ _add_gid_and_children (glyf, (hb_codepoint_t) composite.current->glyphIndex, gids_to_retain);
+ } while (composite.move_to_next());
+ }
+}
+
+static void
+_populate_gids_to_retain (hb_face_t *face,
+ hb_prealloced_array_t<hb_codepoint_t>& codepoints,
+ hb_prealloced_array_t<hb_codepoint_t>& old_gids,
+ hb_prealloced_array_t<hb_codepoint_t>& old_gids_sorted)
+{
+ OT::cmap::accelerator_t cmap;
+ OT::glyf::accelerator_t glyf;
+ cmap.init (face);
+ glyf.init (face);
+
+ hb_auto_array_t<unsigned int> bad_indices;
+
+ old_gids.alloc (codepoints.len);
+ for (unsigned int i = 0; i < codepoints.len; i++)
+ {
+ hb_codepoint_t gid;
+ if (!cmap.get_nominal_glyph (codepoints[i], &gid))
+ {
+ gid = -1;
+ *(bad_indices.push ()) = i;
+ }
+ *(old_gids.push ()) = gid;
+ }
+
+ /* Generally there shouldn't be any */
+ while (bad_indices.len > 0)
+ {
+ unsigned int i = bad_indices[bad_indices.len - 1];
+ bad_indices.pop ();
+ DEBUG_MSG(SUBSET, nullptr, "Drop U+%04X; no gid", codepoints[i]);
+ codepoints.remove (i);
+ old_gids.remove (i);
+ }
+
+ // Populate a full set of glyphs to retain by adding all referenced
+ // composite glyphs.
+ // TODO expand with glyphs reached by G*
+ hb_set_t * all_gids_to_retain = hb_set_create ();
+ _add_gid_and_children (glyf, 0, all_gids_to_retain);
+ for (unsigned int i = 0; i < old_gids.len; i++)
+ _add_gid_and_children (glyf, old_gids[i], all_gids_to_retain);
+
+ // Transfer to a sorted list.
+ old_gids_sorted.alloc (hb_set_get_population (all_gids_to_retain));
+ hb_codepoint_t gid = HB_SET_VALUE_INVALID;
+ while (hb_set_next (all_gids_to_retain, &gid))
+ *(old_gids_sorted.push ()) = gid;
+
+ hb_set_destroy (all_gids_to_retain);
+ glyf.fini ();
+ cmap.fini ();
+}
+
+/**
+ * hb_subset_plan_create:
+ * Computes a plan for subsetting the supplied face according
+ * to a provide profile and input. The plan describes
+ * which tables and glyphs should be retained.
+ *
+ * Return value: New subset plan.
+ *
+ * Since: 1.7.5
+ **/
+hb_subset_plan_t *
+hb_subset_plan_create (hb_face_t *face,
+ hb_subset_profile_t *profile,
+ hb_subset_input_t *input)
+{
+ hb_subset_plan_t *plan = hb_object_create<hb_subset_plan_t> ();
+
+ plan->codepoints.init();
+ plan->gids_to_retain.init();
+ plan->gids_to_retain_sorted.init();
+ plan->source = hb_face_reference (face);
+ plan->dest = hb_subset_face_create ();
+ plan->drop_hints = input->drop_hints;
+
+ _populate_codepoints (input->unicodes, plan->codepoints);
+ _populate_gids_to_retain (face,
+ plan->codepoints,
+ plan->gids_to_retain,
+ plan->gids_to_retain_sorted);
+
+ return plan;
+}
+
+/**
+ * hb_subset_plan_destroy:
+ *
+ * Since: 1.7.5
+ **/
+void
+hb_subset_plan_destroy (hb_subset_plan_t *plan)
+{
+ if (!hb_object_destroy (plan)) return;
+
+ plan->codepoints.finish ();
+ plan->gids_to_retain.finish ();
+ plan->gids_to_retain_sorted.finish ();
+
+ hb_face_destroy (plan->source);
+ hb_face_destroy (plan->dest);
+
+ free (plan);
+}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-plan.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-plan.hh
new file mode 100644
index 00000000000..d1b66b44d54
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-plan.hh
@@ -0,0 +1,85 @@
+/*
+ * Copyright © 2018 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Garret Rieger, Roderick Sheeter
+ */
+
+#ifndef HB_SUBSET_PLAN_HH
+#define HB_SUBSET_PLAN_HH
+
+#include "hb-private.hh"
+
+#include "hb-subset.h"
+
+#include "hb-object-private.hh"
+
+struct hb_subset_plan_t {
+ hb_object_header_t header;
+ ASSERT_POD ();
+
+ hb_bool_t drop_hints;
+
+ // TODO(Q1) actual map, drop this crap
+ // Look at me ma, I'm a poor mans map codepoint : new gid
+ // codepoints is sorted and aligned with gids_to_retain.
+
+ // These first two lists provide a mapping from cp -> gid
+ // As a result it does not list the full set of glyphs to retain.
+ hb_prealloced_array_t<hb_codepoint_t> codepoints;
+ hb_prealloced_array_t<hb_codepoint_t> gids_to_retain;
+
+ // This list contains the complete set of glyphs to retain and may contain
+ // more glyphs then the lists above.
+ hb_prealloced_array_t<hb_codepoint_t> gids_to_retain_sorted;
+
+ // Plan is only good for a specific source/dest so keep them with it
+ hb_face_t *source;
+ hb_face_t *dest;
+};
+
+typedef struct hb_subset_plan_t hb_subset_plan_t;
+
+HB_INTERNAL hb_subset_plan_t *
+hb_subset_plan_create (hb_face_t *face,
+ hb_subset_profile_t *profile,
+ hb_subset_input_t *input);
+
+HB_INTERNAL hb_bool_t
+hb_subset_plan_new_gid_for_old_id(hb_subset_plan_t *plan,
+ hb_codepoint_t old_gid,
+ hb_codepoint_t *new_gid /* OUT */);
+
+HB_INTERNAL hb_bool_t
+hb_subset_plan_new_gid_for_codepoint(hb_subset_plan_t *plan,
+ hb_codepoint_t codepont,
+ hb_codepoint_t *new_gid /* OUT */);
+
+HB_INTERNAL hb_bool_t
+hb_subset_plan_add_table(hb_subset_plan_t *plan,
+ hb_tag_t tag,
+ hb_blob_t *contents);
+
+HB_INTERNAL void
+hb_subset_plan_destroy (hb_subset_plan_t *plan);
+
+#endif /* HB_SUBSET_PLAN_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-private.hh b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-private.hh
new file mode 100644
index 00000000000..5fa72527671
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset-private.hh
@@ -0,0 +1,62 @@
+/*
+ * Copyright © 2018 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Garret Rieger, Roderick Sheeter
+ */
+
+#ifndef HB_SUBSET_PRIVATE_HH
+#define HB_SUBSET_PRIVATE_HH
+
+
+#include "hb-private.hh"
+
+#include "hb-subset.h"
+
+#include "hb-font-private.hh"
+
+typedef struct hb_subset_face_data_t hb_subset_face_data_t;
+
+struct hb_subset_input_t {
+ hb_object_header_t header;
+ ASSERT_POD ();
+
+ hb_set_t *unicodes;
+ hb_set_t *glyphs;
+
+ hb_bool_t drop_hints;
+ /* TODO
+ *
+ * features
+ * lookups
+ * nameIDs
+ * ...
+ */
+};
+
+HB_INTERNAL hb_face_t *
+hb_subset_face_create (void);
+
+HB_INTERNAL hb_bool_t
+hb_subset_face_add_table (hb_face_t *face, hb_tag_t tag, hb_blob_t *blob);
+
+#endif /* HB_SUBSET_PRIVATE_HH */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.cc
new file mode 100644
index 00000000000..9ebe5d31da2
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.cc
@@ -0,0 +1,339 @@
+/*
+ * Copyright © 2018 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Garret Rieger, Rod Sheeter, Behdad Esfahbod
+ */
+
+#include "hb-private.hh"
+#include "hb-object-private.hh"
+#include "hb-open-type-private.hh"
+
+#include "hb-subset-glyf.hh"
+#include "hb-subset-private.hh"
+#include "hb-subset-plan.hh"
+
+#include "hb-open-file-private.hh"
+#include "hb-ot-cmap-table.hh"
+#include "hb-ot-glyf-table.hh"
+#include "hb-ot-hdmx-table.hh"
+#include "hb-ot-head-table.hh"
+#include "hb-ot-hhea-table.hh"
+#include "hb-ot-hmtx-table.hh"
+#include "hb-ot-maxp-table.hh"
+#include "hb-ot-os2-table.hh"
+
+
+#ifndef HB_NO_VISIBILITY
+const void * const OT::_hb_NullPool[HB_NULL_POOL_SIZE / sizeof (void *)] = {};
+#endif
+
+
+struct hb_subset_profile_t {
+ hb_object_header_t header;
+ ASSERT_POD ();
+};
+
+/**
+ * hb_subset_profile_create:
+ *
+ * Return value: New profile with default settings.
+ *
+ * Since: 1.8.0
+ **/
+hb_subset_profile_t *
+hb_subset_profile_create ()
+{
+ return hb_object_create<hb_subset_profile_t>();
+}
+
+/**
+ * hb_subset_profile_destroy:
+ *
+ * Since: 1.8.0
+ **/
+void
+hb_subset_profile_destroy (hb_subset_profile_t *profile)
+{
+ if (!hb_object_destroy (profile)) return;
+
+ free (profile);
+}
+
+template<typename TableType>
+static bool
+_subset (hb_subset_plan_t *plan)
+{
+ OT::Sanitizer<TableType> sanitizer;
+
+ hb_blob_t *source_blob = sanitizer.sanitize (plan->source->reference_table (TableType::tableTag));
+ const TableType *table = OT::Sanitizer<TableType>::lock_instance (source_blob);
+
+ hb_bool_t result = false;
+ if (table != &OT::Null(TableType))
+ result = table->subset(plan);
+
+ hb_blob_destroy (source_blob);
+ hb_tag_t tag = TableType::tableTag;
+ DEBUG_MSG(SUBSET, nullptr, "OT::%c%c%c%c::subset %s", HB_UNTAG(tag), result ? "success" : "FAILED!");
+ return result;
+}
+
+
+/*
+ * A face that has add_table().
+ */
+
+struct hb_subset_face_data_t
+{
+ struct table_entry_t
+ {
+ inline int cmp (const hb_tag_t *t) const
+ {
+ if (*t < tag) return -1;
+ if (*t > tag) return -1;
+ return 0;
+ }
+
+ hb_tag_t tag;
+ hb_blob_t *blob;
+ };
+
+ hb_prealloced_array_t<table_entry_t, 32> tables;
+};
+
+static hb_subset_face_data_t *
+_hb_subset_face_data_create (void)
+{
+ hb_subset_face_data_t *data = (hb_subset_face_data_t *) calloc (1, sizeof (hb_subset_face_data_t));
+ if (unlikely (!data))
+ return nullptr;
+
+ return data;
+}
+
+static void
+_hb_subset_face_data_destroy (void *user_data)
+{
+ hb_subset_face_data_t *data = (hb_subset_face_data_t *) user_data;
+
+ for (unsigned int i = 0; i < data->tables.len; i++)
+ hb_blob_destroy (data->tables[i].blob);
+
+ data->tables.finish ();
+
+ free (data);
+}
+
+static hb_blob_t *
+_hb_subset_face_data_reference_blob (hb_subset_face_data_t *data)
+{
+
+ unsigned int table_count = data->tables.len;
+ unsigned int face_length = table_count * 16 + 12;
+
+ for (unsigned int i = 0; i < table_count; i++)
+ face_length += _hb_ceil_to_4 (hb_blob_get_length (data->tables.array[i].blob));
+
+ char *buf = (char *) malloc (face_length);
+ if (unlikely (!buf))
+ return nullptr;
+
+ OT::hb_serialize_context_t c (buf, face_length);
+ OT::OpenTypeFontFile *f = c.start_serialize<OT::OpenTypeFontFile> ();
+
+ bool is_cff = data->tables.lsearch (HB_TAG ('C','F','F',' ')) || data->tables.lsearch (HB_TAG ('C','F','F','2'));
+ hb_tag_t sfnt_tag = is_cff ? OT::OpenTypeFontFile::CFFTag : OT::OpenTypeFontFile::TrueTypeTag;
+
+ OT::Supplier<hb_tag_t> tags_supplier (&data->tables[0].tag, table_count, sizeof (data->tables[0]));
+ OT::Supplier<hb_blob_t *> blobs_supplier (&data->tables[0].blob, table_count, sizeof (data->tables[0]));
+ bool ret = f->serialize_single (&c,
+ sfnt_tag,
+ tags_supplier,
+ blobs_supplier,
+ table_count);
+
+ c.end_serialize ();
+
+ if (unlikely (!ret))
+ {
+ free (buf);
+ return nullptr;
+ }
+
+ return hb_blob_create (buf, face_length, HB_MEMORY_MODE_WRITABLE, buf, free);
+}
+
+static hb_blob_t *
+_hb_subset_face_reference_table (hb_face_t *face, hb_tag_t tag, void *user_data)
+{
+ hb_subset_face_data_t *data = (hb_subset_face_data_t *) user_data;
+
+ if (!tag)
+ return _hb_subset_face_data_reference_blob (data);
+
+ hb_subset_face_data_t::table_entry_t *entry = data->tables.lsearch (tag);
+ if (entry)
+ return hb_blob_reference (entry->blob);
+
+ return nullptr;
+}
+
+/* TODO: Move this to hb-face.h and rename to hb_face_builder_create()
+ * with hb_face_builder_add_table(). */
+hb_face_t *
+hb_subset_face_create (void)
+{
+ hb_subset_face_data_t *data = _hb_subset_face_data_create ();
+ if (unlikely (!data)) return hb_face_get_empty ();
+
+ return hb_face_create_for_tables (_hb_subset_face_reference_table,
+ data,
+ _hb_subset_face_data_destroy);
+}
+
+hb_bool_t
+hb_subset_face_add_table (hb_face_t *face, hb_tag_t tag, hb_blob_t *blob)
+{
+ if (unlikely (face->destroy != _hb_subset_face_data_destroy))
+ return false;
+
+ hb_subset_face_data_t *data = (hb_subset_face_data_t *) face->user_data;
+ hb_subset_face_data_t::table_entry_t *entry = data->tables.push ();
+ if (unlikely (!entry))
+ return false;
+
+ entry->tag = tag;
+ entry->blob = hb_blob_reference (blob);
+
+ return true;
+}
+
+static bool
+_subset_table (hb_subset_plan_t *plan,
+ hb_tag_t tag)
+{
+ DEBUG_MSG(SUBSET, nullptr, "begin subset %c%c%c%c", HB_UNTAG(tag));
+ bool result = true;
+ switch (tag) {
+ case HB_OT_TAG_glyf:
+ result = _subset<const OT::glyf> (plan);
+ break;
+ case HB_OT_TAG_hdmx:
+ result = _subset<const OT::hdmx> (plan);
+ break;
+ case HB_OT_TAG_head:
+ // TODO that won't work well if there is no glyf
+ DEBUG_MSG(SUBSET, nullptr, "skip head, handled by glyf");
+ result = true;
+ break;
+ case HB_OT_TAG_hhea:
+ DEBUG_MSG(SUBSET, nullptr, "skip hhea handled by hmtx");
+ return true;
+ case HB_OT_TAG_hmtx:
+ result = _subset<const OT::hmtx> (plan);
+ break;
+ case HB_OT_TAG_maxp:
+ result = _subset<const OT::maxp> (plan);
+ break;
+ case HB_OT_TAG_loca:
+ DEBUG_MSG(SUBSET, nullptr, "skip loca handled by glyf");
+ return true;
+ case HB_OT_TAG_cmap:
+ result = _subset<const OT::cmap> (plan);
+ break;
+ case HB_OT_TAG_os2:
+ result = _subset<const OT::os2> (plan);
+ break;
+ default:
+ hb_blob_t *source_table = hb_face_reference_table(plan->source, tag);
+ if (likely (source_table))
+ result = hb_subset_plan_add_table(plan, tag, source_table);
+ else
+ result = false;
+ hb_blob_destroy (source_table);
+ break;
+ }
+ DEBUG_MSG(SUBSET, nullptr, "subset %c%c%c%c %s", HB_UNTAG(tag), result ? "ok" : "FAILED");
+ return result;
+}
+
+static bool
+_should_drop_table(hb_subset_plan_t *plan, hb_tag_t tag)
+{
+ switch (tag) {
+ case HB_TAG ('c', 'v', 'a', 'r'): /* hint table, fallthrough */
+ case HB_TAG ('c', 'v', 't', ' '): /* hint table, fallthrough */
+ case HB_TAG ('f', 'p', 'g', 'm'): /* hint table, fallthrough */
+ case HB_TAG ('p', 'r', 'e', 'p'): /* hint table, fallthrough */
+ case HB_TAG ('h', 'd', 'm', 'x'): /* hint table, fallthrough */
+ case HB_TAG ('V', 'D', 'M', 'X'): /* hint table, fallthrough */
+ return plan->drop_hints;
+ case HB_TAG ('G', 'D', 'E', 'F'): /* temporary */
+ case HB_TAG ('G', 'P', 'O', 'S'): /* temporary */
+ case HB_TAG ('G', 'S', 'U', 'B'): /* temporary */
+ case HB_TAG ('D', 'S', 'I', 'G'):
+ return true;
+ default:
+ return false;
+ }
+}
+
+/**
+ * hb_subset:
+ * @source: font face data to be subset.
+ * @profile: profile to use for the subsetting.
+ * @input: input to use for the subsetting.
+ *
+ * Subsets a font according to provided profile and input.
+ **/
+hb_face_t *
+hb_subset (hb_face_t *source,
+ hb_subset_profile_t *profile,
+ hb_subset_input_t *input)
+{
+ if (unlikely (!profile || !input || !source)) return hb_face_get_empty();
+
+ hb_subset_plan_t *plan = hb_subset_plan_create (source, profile, input);
+
+ hb_tag_t table_tags[32];
+ unsigned int offset = 0, count;
+ bool success = true;
+ do {
+ count = ARRAY_LENGTH (table_tags);
+ hb_face_get_table_tags (source, offset, &count, table_tags);
+ for (unsigned int i = 0; i < count; i++)
+ {
+ hb_tag_t tag = table_tags[i];
+ if (_should_drop_table(plan, tag))
+ {
+ DEBUG_MSG(SUBSET, nullptr, "drop %c%c%c%c", HB_UNTAG(tag));
+ continue;
+ }
+ success = success && _subset_table (plan, tag);
+ }
+ } while (count == ARRAY_LENGTH (table_tags));
+
+ hb_face_t *result = success ? hb_face_reference(plan->dest) : hb_face_get_empty();
+ hb_subset_plan_destroy (plan);
+ return result;
+}
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.h b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.h
new file mode 100644
index 00000000000..55ce25b0a1a
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-subset.h
@@ -0,0 +1,83 @@
+/*
+ * Copyright © 2018 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Rod Sheeter
+ */
+
+#ifndef HB_SUBSET_H
+#define HB_SUBSET_H
+
+#include "hb.h"
+
+HB_BEGIN_DECLS
+
+/*
+ * hb_subset_profile_t
+ * Things that change based on target environment, e.g. OS.
+ * Threadsafe for multiple concurrent subset operations.
+ */
+
+typedef struct hb_subset_profile_t hb_subset_profile_t;
+
+HB_EXTERN hb_subset_profile_t *
+hb_subset_profile_create (void);
+
+HB_EXTERN void
+hb_subset_profile_destroy (hb_subset_profile_t *profile);
+
+/*
+ * hb_subset_input_t
+ *
+ * Things that change based on the input. Characters to keep, etc.
+ */
+
+typedef struct hb_subset_input_t hb_subset_input_t;
+
+HB_EXTERN hb_subset_input_t *
+hb_subset_input_create_or_fail (void);
+
+HB_EXTERN hb_subset_input_t *
+hb_subset_input_reference (hb_subset_input_t *subset_input);
+
+HB_EXTERN void
+hb_subset_input_destroy (hb_subset_input_t *subset_input);
+
+HB_EXTERN hb_set_t *
+hb_subset_input_unicode_set (hb_subset_input_t *subset_input);
+
+HB_EXTERN hb_set_t *
+hb_subset_input_glyph_set (hb_subset_input_t *subset_input);
+
+HB_EXTERN hb_bool_t *
+hb_subset_input_drop_hints (hb_subset_input_t *subset_input);
+
+/* hb_subset() */
+
+HB_EXTERN hb_face_t *
+hb_subset (hb_face_t *source,
+ hb_subset_profile_t *profile,
+ hb_subset_input_t *input);
+
+HB_END_DECLS
+
+#endif /* HB_SUBSET_H */
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-uniscribe.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-uniscribe.cc
index 5e05baa869b..cd25769db1a 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-uniscribe.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/hb-uniscribe.cc
@@ -1025,8 +1025,6 @@ retry:
pos->x_advance = x_mult * (int32_t) info->mask;
pos->x_offset = x_mult * (backward ? -info->var1.i32 : info->var1.i32);
pos->y_offset = y_mult * info->var2.i32;
-
- info->mask = HB_GLYPH_FLAG_UNSAFE_TO_BREAK;
}
if (backward)
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/main.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/main.cc
index 72de189d825..d221e9da221 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/main.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/main.cc
@@ -37,7 +37,9 @@
using namespace OT;
+#ifndef HB_NO_VISIBILITY
const void * const OT::_hb_NullPool[HB_NULL_POOL_SIZE / sizeof (void *)] = {};
+#endif
int
main (int argc, char **argv)
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/test-buffer-serialize.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/test-buffer-serialize.cc
index 4b429eab3c2..636b0037542 100644
--- a/Build/source/libs/harfbuzz/harfbuzz-src/src/test-buffer-serialize.cc
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/test-buffer-serialize.cc
@@ -101,7 +101,7 @@ main (int argc, char **argv)
bool ret = true;
char line[BUFSIZ], out[BUFSIZ];
- while (fgets (line, sizeof(line), stdin) != 0)
+ while (fgets (line, sizeof(line), stdin) != nullptr)
{
hb_buffer_clear_contents (buf);
diff --git a/Build/source/libs/harfbuzz/harfbuzz-src/src/test-unicode-ranges.cc b/Build/source/libs/harfbuzz/harfbuzz-src/src/test-unicode-ranges.cc
new file mode 100644
index 00000000000..dbc5fa426de
--- /dev/null
+++ b/Build/source/libs/harfbuzz/harfbuzz-src/src/test-unicode-ranges.cc
@@ -0,0 +1,67 @@
+/*
+ * Copyright © 2018 Google, Inc.
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Garret Rieger
+ */
+
+#include "hb-private.hh"
+
+#include "hb-ot-os2-unicode-ranges.hh"
+
+void
+test (hb_codepoint_t cp, unsigned int bit)
+{
+ if (OT::hb_get_unicode_range_bit (cp) != bit)
+ {
+ fprintf (stderr, "got incorrect bit (%d) for cp 0x%X. Should have been %d.",
+ OT::hb_get_unicode_range_bit (cp),
+ cp,
+ bit);
+ abort();
+ }
+}
+
+void
+test_get_unicode_range_bit (void)
+{
+ test (0x0000, 0);
+ test (0x0042, 0);
+ test (0x007F, 0);
+ test (0x0080, 1);
+
+ test (0x30A0, 50);
+ test (0x30B1, 50);
+ test (0x30FF, 50);
+
+ test (0x10FFFD, 90);
+
+ test (0x30000, -1);
+ test (0x110000, -1);
+}
+
+int
+main (void)
+{
+ test_get_unicode_range_bit ();
+ return 0;
+}
diff --git a/Build/source/libs/harfbuzz/include/Makefile.am b/Build/source/libs/harfbuzz/include/Makefile.am
index 4eeb971c669..0098cff3704 100644
--- a/Build/source/libs/harfbuzz/include/Makefile.am
+++ b/Build/source/libs/harfbuzz/include/Makefile.am
@@ -23,6 +23,7 @@ hdr_links = \
$(HARFBUZZ_SRC)/hb-set.h \
$(HARFBUZZ_SRC)/hb-shape.h \
$(HARFBUZZ_SRC)/hb-shape-plan.h \
+ $(HARFBUZZ_SRC)/hb-subset.h \
$(HARFBUZZ_SRC)/hb-unicode.h \
$(HARFBUZZ_BLD)/hb-version.h
diff --git a/Build/source/libs/harfbuzz/include/Makefile.in b/Build/source/libs/harfbuzz/include/Makefile.in
index f2bca224fe9..dd6ca411819 100644
--- a/Build/source/libs/harfbuzz/include/Makefile.in
+++ b/Build/source/libs/harfbuzz/include/Makefile.in
@@ -255,12 +255,12 @@ hdr_links = $(HARFBUZZ_SRC)/hb.h $(HARFBUZZ_SRC)/hb-blob.h \
$(HARFBUZZ_SRC)/hb-deprecated.h $(HARFBUZZ_SRC)/hb-face.h \
$(HARFBUZZ_SRC)/hb-font.h $(HARFBUZZ_SRC)/hb-set.h \
$(HARFBUZZ_SRC)/hb-shape.h $(HARFBUZZ_SRC)/hb-shape-plan.h \
- $(HARFBUZZ_SRC)/hb-unicode.h $(HARFBUZZ_BLD)/hb-version.h \
- $(HARFBUZZ_SRC)/hb-ot.h $(HARFBUZZ_SRC)/hb-ot-font.h \
- $(HARFBUZZ_SRC)/hb-ot-layout.h $(HARFBUZZ_SRC)/hb-ot-math.h \
- $(HARFBUZZ_SRC)/hb-ot-shape.h $(HARFBUZZ_SRC)/hb-ot-tag.h \
- $(HARFBUZZ_SRC)/hb-ot-var.h $(HARFBUZZ_SRC)/hb-icu.h \
- $(HARFBUZZ_SRC)/hb-graphite2.h
+ $(HARFBUZZ_SRC)/hb-subset.h $(HARFBUZZ_SRC)/hb-unicode.h \
+ $(HARFBUZZ_BLD)/hb-version.h $(HARFBUZZ_SRC)/hb-ot.h \
+ $(HARFBUZZ_SRC)/hb-ot-font.h $(HARFBUZZ_SRC)/hb-ot-layout.h \
+ $(HARFBUZZ_SRC)/hb-ot-math.h $(HARFBUZZ_SRC)/hb-ot-shape.h \
+ $(HARFBUZZ_SRC)/hb-ot-tag.h $(HARFBUZZ_SRC)/hb-ot-var.h \
+ $(HARFBUZZ_SRC)/hb-icu.h $(HARFBUZZ_SRC)/hb-graphite2.h
all: all-am
.SUFFIXES:
diff --git a/Build/source/libs/harfbuzz/version.ac b/Build/source/libs/harfbuzz/version.ac
index bbcfb6b50c5..e0d543f3a12 100644
--- a/Build/source/libs/harfbuzz/version.ac
+++ b/Build/source/libs/harfbuzz/version.ac
@@ -8,4 +8,4 @@ dnl
dnl --------------------------------------------------------
dnl
dnl m4-include this file to define the current harfbuzz version
-m4_define([harfbuzz_version], [1.7.5])
+m4_define([harfbuzz_version], [1.7.6])